grpc-flamingo 1.11.0 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +1150 -176
- data/etc/roots.pem +40 -196
- data/include/grpc/grpc.h +49 -8
- data/include/grpc/grpc_security.h +123 -2
- data/include/grpc/grpc_security_constants.h +6 -0
- data/include/grpc/impl/codegen/fork.h +4 -4
- data/include/grpc/impl/codegen/grpc_types.h +26 -5
- data/include/grpc/impl/codegen/log.h +112 -0
- data/include/grpc/impl/codegen/port_platform.h +55 -4
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/log.h +2 -80
- data/include/grpc/support/string_util.h +2 -0
- data/include/grpc/support/sync.h +0 -16
- data/src/boringssl/err_data.c +602 -588
- data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
- data/src/core/ext/filters/client_channel/client_channel.h +5 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
- data/src/core/ext/filters/client_channel/method_params.h +4 -0
- data/src/core/ext/filters/client_channel/resolver.h +10 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
- data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
- data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
- data/src/core/ext/filters/client_channel/subchannel.h +11 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
- data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
- data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
- data/src/core/lib/channel/channel_args.cc +28 -0
- data/src/core/lib/channel/channel_args.h +4 -0
- data/src/core/lib/channel/channel_stack.cc +22 -29
- data/src/core/lib/channel/channel_stack.h +2 -2
- data/src/core/lib/channel/channel_stack_builder.cc +0 -3
- data/src/core/lib/channel/channel_stack_builder.h +0 -2
- data/src/core/lib/channel/channel_trace.cc +28 -63
- data/src/core/lib/channel/channel_trace.h +13 -17
- data/src/core/lib/channel/channelz.cc +153 -0
- data/src/core/lib/channel/channelz.h +133 -0
- data/src/core/lib/channel/channelz_registry.cc +145 -0
- data/src/core/lib/channel/channelz_registry.h +120 -0
- data/src/core/lib/channel/connected_channel.cc +8 -1
- data/src/core/lib/channel/handshaker.cc +71 -0
- data/src/core/lib/channel/handshaker.h +4 -0
- data/src/core/lib/debug/stats.h +7 -0
- data/src/core/lib/debug/stats_data.cc +5 -0
- data/src/core/lib/debug/stats_data.h +120 -0
- data/src/core/lib/debug/trace.cc +2 -1
- data/src/core/lib/debug/trace.h +12 -1
- data/src/core/lib/gpr/alloc.h +28 -0
- data/src/core/lib/gpr/arena.cc +38 -45
- data/src/core/lib/gpr/log.cc +8 -2
- data/src/core/lib/gpr/log_android.cc +4 -0
- data/src/core/lib/gpr/log_linux.cc +4 -0
- data/src/core/lib/gpr/log_posix.cc +4 -0
- data/src/core/lib/gpr/log_windows.cc +5 -0
- data/src/core/lib/gpr/string.cc +28 -0
- data/src/core/lib/gpr/string.h +10 -0
- data/src/core/lib/gprpp/abstract.h +5 -2
- data/src/core/lib/gprpp/fork.cc +268 -0
- data/src/core/lib/gprpp/fork.h +88 -0
- data/src/core/lib/gprpp/inlined_vector.h +87 -37
- data/src/core/lib/gprpp/memory.h +12 -0
- data/src/core/lib/gprpp/mutex_lock.h +42 -0
- data/src/core/lib/gprpp/orphanable.h +10 -12
- data/src/core/lib/gprpp/ref_counted.h +10 -12
- data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
- data/src/core/lib/gprpp/thd.h +0 -3
- data/src/core/lib/gprpp/thd_posix.cc +5 -54
- data/src/core/lib/gprpp/thd_windows.cc +0 -7
- data/src/core/lib/http/httpcli_security_connector.cc +1 -3
- data/src/core/lib/iomgr/call_combiner.cc +13 -13
- data/src/core/lib/iomgr/call_combiner.h +84 -1
- data/src/core/lib/iomgr/closure.h +6 -5
- data/src/core/lib/iomgr/combiner.cc +30 -13
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +12 -0
- data/src/core/lib/iomgr/error.h +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
- data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
- data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
- data/src/core/lib/iomgr/ev_posix.cc +88 -24
- data/src/core/lib/iomgr/ev_posix.h +48 -12
- data/src/core/lib/iomgr/exec_ctx.cc +15 -9
- data/src/core/lib/iomgr/exec_ctx.h +48 -20
- data/src/core/lib/iomgr/executor.cc +274 -142
- data/src/core/lib/iomgr/executor.h +82 -16
- data/src/core/lib/iomgr/fork_posix.cc +42 -19
- data/src/core/lib/iomgr/iocp_windows.cc +9 -4
- data/src/core/lib/iomgr/iomgr.cc +2 -0
- data/src/core/lib/iomgr/iomgr.h +5 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +5 -1
- data/src/core/lib/iomgr/polling_entity.cc +11 -2
- data/src/core/lib/iomgr/pollset_custom.cc +2 -2
- data/src/core/lib/iomgr/port.h +51 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
- data/src/core/lib/iomgr/resource_quota.cc +89 -12
- data/src/core/lib/iomgr/resource_quota.h +16 -0
- data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -1
- data/src/core/lib/iomgr/socket_utils.h +9 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
- data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
- data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
- data/src/core/lib/iomgr/socket_windows.cc +33 -0
- data/src/core/lib/iomgr/socket_windows.h +6 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
- data/src/core/lib/iomgr/tcp_custom.cc +11 -11
- data/src/core/lib/iomgr/tcp_posix.cc +49 -36
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
- data/src/core/lib/iomgr/tcp_uv.cc +3 -0
- data/src/core/lib/iomgr/tcp_windows.cc +18 -2
- data/src/core/lib/iomgr/tcp_windows.h +2 -0
- data/src/core/lib/iomgr/timer.h +4 -3
- data/src/core/lib/iomgr/timer_generic.cc +133 -51
- data/src/core/lib/iomgr/timer_manager.cc +12 -14
- data/src/core/lib/iomgr/timer_uv.cc +3 -0
- data/src/core/lib/iomgr/udp_server.cc +106 -52
- data/src/core/lib/iomgr/udp_server.h +8 -4
- data/src/core/lib/json/json.cc +12 -1
- data/src/core/lib/json/json.h +5 -0
- data/src/core/lib/profiling/basic_timers.cc +1 -0
- data/src/core/lib/security/context/security_context.cc +8 -8
- data/src/core/lib/security/context/security_context.h +6 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
- data/src/core/lib/security/credentials/credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
- data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
- data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
- data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
- data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
- data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
- data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
- data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
- data/src/core/lib/security/security_connector/security_connector.cc +79 -32
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +7 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
- data/src/core/lib/security/util/json_util.cc +4 -0
- data/src/core/lib/slice/slice.cc +6 -2
- data/src/core/lib/slice/slice_buffer.cc +27 -7
- data/src/core/lib/slice/slice_hash_table.h +4 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
- data/src/core/lib/surface/call.cc +119 -58
- data/src/core/lib/surface/call.h +7 -0
- data/src/core/lib/surface/channel.cc +50 -18
- data/src/core/lib/surface/channel.h +4 -0
- data/src/core/lib/surface/completion_queue.cc +153 -18
- data/src/core/lib/surface/completion_queue.h +20 -2
- data/src/core/lib/surface/completion_queue_factory.cc +13 -4
- data/src/core/lib/surface/init.cc +7 -8
- data/src/core/lib/surface/init.h +0 -1
- data/src/core/lib/surface/server.cc +16 -0
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +1 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -7
- data/src/core/lib/transport/service_config.cc +2 -2
- data/src/core/lib/transport/service_config.h +3 -3
- data/src/core/lib/transport/transport.cc +22 -10
- data/src/core/lib/transport/transport.h +18 -18
- data/src/core/lib/transport/transport_op_string.cc +1 -8
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
- data/src/core/tsi/local_transport_security.cc +209 -0
- data/src/core/tsi/local_transport_security.h +51 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +245 -116
- data/src/core/tsi/ssl_types.h +2 -0
- data/src/core/tsi/transport_security.cc +14 -0
- data/src/core/tsi/transport_security.h +2 -0
- data/src/core/tsi/transport_security_interface.h +11 -1
- data/src/ruby/bin/math_client.rb +17 -9
- data/src/ruby/ext/grpc/extconf.rb +1 -26
- data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
- data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +7 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
- data/src/ruby/spec/call_credentials_spec.rb +1 -1
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +1 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -12
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/compression_options_spec.rb +1 -1
- data/src/ruby/spec/error_sanity_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
- data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/service_spec.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +1 -1
- data/src/ruby/spec/spec_helper.rb +1 -0
- data/src/ruby/spec/support/services.rb +1 -1
- data/src/ruby/spec/time_consts_spec.rb +1 -1
- data/third_party/address_sorting/address_sorting.c +17 -11
- data/third_party/address_sorting/address_sorting_windows.c +43 -3
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
- data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
- data/third_party/boringssl/crypto/bio/fd.c +1 -0
- data/third_party/boringssl/crypto/bio/file.c +2 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
- data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
- data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
- data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
- data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
- data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
- data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
- data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
- data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
- data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
- data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
- data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
- data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
- data/third_party/boringssl/crypto/internal.h +65 -2
- data/third_party/boringssl/crypto/mem.c +0 -2
- data/third_party/boringssl/crypto/obj/obj.c +6 -73
- data/third_party/boringssl/crypto/thread_pthread.c +35 -5
- data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
- data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
- data/third_party/boringssl/crypto/x509/x_name.c +13 -0
- data/third_party/boringssl/include/openssl/aead.h +10 -0
- data/third_party/boringssl/include/openssl/asn1.h +2 -3
- data/third_party/boringssl/include/openssl/base.h +5 -14
- data/third_party/boringssl/include/openssl/bio.h +1 -1
- data/third_party/boringssl/include/openssl/bn.h +62 -18
- data/third_party/boringssl/include/openssl/bytestring.h +53 -28
- data/third_party/boringssl/include/openssl/crypto.h +4 -0
- data/third_party/boringssl/include/openssl/ec.h +10 -4
- data/third_party/boringssl/include/openssl/ec_key.h +7 -6
- data/third_party/boringssl/include/openssl/err.h +9 -9
- data/third_party/boringssl/include/openssl/evp.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +35 -10
- data/third_party/boringssl/include/openssl/ssl.h +167 -19
- data/third_party/boringssl/include/openssl/ssl3.h +0 -1
- data/third_party/boringssl/include/openssl/stack.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +10 -2
- data/third_party/boringssl/include/openssl/x509.h +4 -0
- data/third_party/boringssl/include/openssl/x509v3.h +1 -0
- data/third_party/boringssl/ssl/d1_both.cc +16 -2
- data/third_party/boringssl/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl/ssl/handoff.cc +285 -0
- data/third_party/boringssl/ssl/handshake.cc +26 -12
- data/third_party/boringssl/ssl/handshake_client.cc +101 -95
- data/third_party/boringssl/ssl/handshake_server.cc +14 -2
- data/third_party/boringssl/ssl/internal.h +132 -79
- data/third_party/boringssl/ssl/s3_both.cc +2 -2
- data/third_party/boringssl/ssl/s3_lib.cc +3 -1
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
- data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
- data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
- data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
- data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
- data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
- data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
- data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
- data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
- data/third_party/boringssl/ssl/t1_enc.cc +73 -124
- data/third_party/boringssl/ssl/t1_lib.cc +367 -41
- data/third_party/boringssl/ssl/tls13_both.cc +8 -0
- data/third_party/boringssl/ssl/tls13_client.cc +98 -184
- data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
- data/third_party/boringssl/ssl/tls13_server.cc +91 -137
- data/third_party/boringssl/ssl/tls_method.cc +0 -17
- data/third_party/boringssl/ssl/tls_record.cc +1 -10
- data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
- data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
- data/third_party/boringssl/third_party/fiat/internal.h +32 -20
- data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
- metadata +86 -71
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
- data/src/core/lib/channel/channel_trace_registry.cc +0 -80
- data/src/core/lib/channel/channel_trace_registry.h +0 -43
- data/src/core/lib/gpr/fork.cc +0 -78
- data/src/core/tsi/transport_security_adapter.cc +0 -235
- data/src/core/tsi/transport_security_adapter.h +0 -41
- data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
- data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
- data/src/ruby/pb/test/client.rb +0 -764
- data/src/ruby/pb/test/server.rb +0 -252
- data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
- data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
- data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -21,6 +21,7 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
24
25
|
#include "src/core/ext/filters/client_channel/client_channel_factory.h"
|
25
26
|
#include "src/core/ext/filters/client_channel/resolver.h"
|
26
27
|
#include "src/core/lib/channel/channel_stack.h"
|
@@ -39,6 +40,10 @@ extern grpc_core::TraceFlag grpc_client_channel_trace;
|
|
39
40
|
|
40
41
|
extern const grpc_channel_filter grpc_client_channel_filter;
|
41
42
|
|
43
|
+
void grpc_client_channel_populate_child_refs(
|
44
|
+
grpc_channel_element* elem, grpc_core::ChildRefsList* child_subchannels,
|
45
|
+
grpc_core::ChildRefsList* child_channels);
|
46
|
+
|
42
47
|
grpc_connectivity_state grpc_client_channel_check_connectivity_state(
|
43
48
|
grpc_channel_element* elem, int try_to_connect);
|
44
49
|
|
@@ -0,0 +1,113 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2018 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/ext/filters/client_channel/client_channel.h"
|
22
|
+
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
23
|
+
#include "src/core/lib/gpr/useful.h"
|
24
|
+
#include "src/core/lib/surface/channel.h"
|
25
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
namespace channelz {
|
29
|
+
namespace {
|
30
|
+
|
31
|
+
void* client_channel_channelz_copy(void* p) { return p; }
|
32
|
+
|
33
|
+
void client_channel_channelz_destroy(void* p) {}
|
34
|
+
|
35
|
+
int client_channel_channelz_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
|
36
|
+
|
37
|
+
} // namespace
|
38
|
+
|
39
|
+
static const grpc_arg_pointer_vtable client_channel_channelz_vtable = {
|
40
|
+
client_channel_channelz_copy, client_channel_channelz_destroy,
|
41
|
+
client_channel_channelz_cmp};
|
42
|
+
|
43
|
+
ClientChannelNode::ClientChannelNode(grpc_channel* channel,
|
44
|
+
size_t channel_tracer_max_nodes,
|
45
|
+
bool is_top_level_channel)
|
46
|
+
: ChannelNode(channel, channel_tracer_max_nodes, is_top_level_channel) {
|
47
|
+
client_channel_ =
|
48
|
+
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
49
|
+
GPR_ASSERT(client_channel_->filter == &grpc_client_channel_filter);
|
50
|
+
}
|
51
|
+
|
52
|
+
void ClientChannelNode::PopulateConnectivityState(grpc_json* json) {
|
53
|
+
grpc_connectivity_state state;
|
54
|
+
if (ChannelIsDestroyed()) {
|
55
|
+
state = GRPC_CHANNEL_SHUTDOWN;
|
56
|
+
} else {
|
57
|
+
state =
|
58
|
+
grpc_client_channel_check_connectivity_state(client_channel_, false);
|
59
|
+
}
|
60
|
+
json = grpc_json_create_child(nullptr, json, "state", nullptr,
|
61
|
+
GRPC_JSON_OBJECT, false);
|
62
|
+
grpc_json_create_child(nullptr, json, "state",
|
63
|
+
grpc_connectivity_state_name(state), GRPC_JSON_STRING,
|
64
|
+
false);
|
65
|
+
}
|
66
|
+
|
67
|
+
void ClientChannelNode::PopulateChildRefs(grpc_json* json) {
|
68
|
+
ChildRefsList child_subchannels;
|
69
|
+
ChildRefsList child_channels;
|
70
|
+
grpc_json* json_iterator = nullptr;
|
71
|
+
grpc_client_channel_populate_child_refs(client_channel_, &child_subchannels,
|
72
|
+
&child_channels);
|
73
|
+
if (!child_subchannels.empty()) {
|
74
|
+
grpc_json* array_parent = grpc_json_create_child(
|
75
|
+
nullptr, json, "subchannelRef", nullptr, GRPC_JSON_ARRAY, false);
|
76
|
+
for (size_t i = 0; i < child_subchannels.size(); ++i) {
|
77
|
+
json_iterator =
|
78
|
+
grpc_json_create_child(json_iterator, array_parent, nullptr, nullptr,
|
79
|
+
GRPC_JSON_OBJECT, false);
|
80
|
+
grpc_json_add_number_string_child(json_iterator, nullptr, "subchannelId",
|
81
|
+
child_subchannels[i]);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
if (!child_channels.empty()) {
|
85
|
+
grpc_json* array_parent = grpc_json_create_child(
|
86
|
+
nullptr, json, "channelRef", nullptr, GRPC_JSON_ARRAY, false);
|
87
|
+
json_iterator = nullptr;
|
88
|
+
for (size_t i = 0; i < child_channels.size(); ++i) {
|
89
|
+
json_iterator =
|
90
|
+
grpc_json_create_child(json_iterator, array_parent, nullptr, nullptr,
|
91
|
+
GRPC_JSON_OBJECT, false);
|
92
|
+
grpc_json_add_number_string_child(json_iterator, nullptr, "channelId",
|
93
|
+
child_channels[i]);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
grpc_arg ClientChannelNode::CreateChannelArg() {
|
99
|
+
return grpc_channel_arg_pointer_create(
|
100
|
+
const_cast<char*>(GRPC_ARG_CHANNELZ_CHANNEL_NODE_CREATION_FUNC),
|
101
|
+
reinterpret_cast<void*>(MakeClientChannelNode),
|
102
|
+
&client_channel_channelz_vtable);
|
103
|
+
}
|
104
|
+
|
105
|
+
RefCountedPtr<ChannelNode> ClientChannelNode::MakeClientChannelNode(
|
106
|
+
grpc_channel* channel, size_t channel_tracer_max_nodes,
|
107
|
+
bool is_top_level_channel) {
|
108
|
+
return MakeRefCounted<ClientChannelNode>(channel, channel_tracer_max_nodes,
|
109
|
+
is_top_level_channel);
|
110
|
+
}
|
111
|
+
|
112
|
+
} // namespace channelz
|
113
|
+
} // namespace grpc_core
|
@@ -0,0 +1,71 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2018 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H
|
20
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/channel/channel_args.h"
|
25
|
+
#include "src/core/lib/channel/channel_stack.h"
|
26
|
+
#include "src/core/lib/channel/channelz.h"
|
27
|
+
#include "src/core/lib/gprpp/inlined_vector.h"
|
28
|
+
|
29
|
+
namespace grpc_core {
|
30
|
+
|
31
|
+
// TODO(ncteisen), this only contains the uuids of the children for now,
|
32
|
+
// since that is all that is strictly needed. In a future enhancement we will
|
33
|
+
// add human readable names as in the channelz.proto
|
34
|
+
typedef InlinedVector<intptr_t, 10> ChildRefsList;
|
35
|
+
|
36
|
+
namespace channelz {
|
37
|
+
|
38
|
+
// Subtype of ChannelNode that overrides and provides client_channel specific
|
39
|
+
// functionality like querying for connectivity_state and subchannel data.
|
40
|
+
class ClientChannelNode : public ChannelNode {
|
41
|
+
public:
|
42
|
+
static RefCountedPtr<ChannelNode> MakeClientChannelNode(
|
43
|
+
grpc_channel* channel, size_t channel_tracer_max_nodes,
|
44
|
+
bool is_top_level_channel);
|
45
|
+
|
46
|
+
// Override this functionality since client_channels have a notion of
|
47
|
+
// channel connectivity.
|
48
|
+
void PopulateConnectivityState(grpc_json* json) override;
|
49
|
+
|
50
|
+
// Override this functionality since client_channels have subchannels
|
51
|
+
void PopulateChildRefs(grpc_json* json) override;
|
52
|
+
|
53
|
+
// Helper to create a channel arg to ensure this type of ChannelNode is
|
54
|
+
// created.
|
55
|
+
static grpc_arg CreateChannelArg();
|
56
|
+
|
57
|
+
protected:
|
58
|
+
GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
59
|
+
GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
|
60
|
+
ClientChannelNode(grpc_channel* channel, size_t channel_tracer_max_nodes,
|
61
|
+
bool is_top_level_channel);
|
62
|
+
virtual ~ClientChannelNode() {}
|
63
|
+
|
64
|
+
private:
|
65
|
+
grpc_channel_element* client_channel_;
|
66
|
+
};
|
67
|
+
|
68
|
+
} // namespace channelz
|
69
|
+
} // namespace grpc_core
|
70
|
+
|
71
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H */
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <grpc/support/alloc.h>
|
26
26
|
|
27
27
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
28
|
+
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
28
29
|
#include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
|
29
30
|
#include "src/core/ext/filters/client_channel/http_proxy.h"
|
30
31
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
@@ -35,6 +36,14 @@
|
|
35
36
|
#include "src/core/lib/surface/channel_init.h"
|
36
37
|
|
37
38
|
static bool append_filter(grpc_channel_stack_builder* builder, void* arg) {
|
39
|
+
const grpc_channel_args* args =
|
40
|
+
grpc_channel_stack_builder_get_channel_arguments(builder);
|
41
|
+
grpc_arg args_to_add[] = {
|
42
|
+
grpc_core::channelz::ClientChannelNode::CreateChannelArg()};
|
43
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
44
|
+
args, args_to_add, GPR_ARRAY_SIZE(args_to_add));
|
45
|
+
grpc_channel_stack_builder_set_channel_arguments(builder, new_args);
|
46
|
+
grpc_channel_args_destroy(new_args);
|
38
47
|
return grpc_channel_stack_builder_append_filter(
|
39
48
|
builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr);
|
40
49
|
}
|
@@ -326,7 +326,7 @@ static void http_connect_handshaker_do_handshake(
|
|
326
326
|
|
327
327
|
static const grpc_handshaker_vtable http_connect_handshaker_vtable = {
|
328
328
|
http_connect_handshaker_destroy, http_connect_handshaker_shutdown,
|
329
|
-
http_connect_handshaker_do_handshake};
|
329
|
+
http_connect_handshaker_do_handshake, "http_connect"};
|
330
330
|
|
331
331
|
static grpc_handshaker* grpc_http_connect_handshaker_create() {
|
332
332
|
http_connect_handshaker* handshaker =
|
@@ -37,17 +37,21 @@
|
|
37
37
|
#include "src/core/lib/slice/b64.h"
|
38
38
|
|
39
39
|
/**
|
40
|
-
* Parses the '
|
41
|
-
* nullptr on error. Also sets 'user_cred' to user
|
42
|
-
* 'http_proxy' env var, otherwise leaves it
|
43
|
-
* responsibility to gpr_free user_cred.
|
40
|
+
* Parses the 'https_proxy' env var (fallback on 'http_proxy') and returns the
|
41
|
+
* proxy hostname to resolve or nullptr on error. Also sets 'user_cred' to user
|
42
|
+
* credentials if present in the 'http_proxy' env var, otherwise leaves it
|
43
|
+
* unchanged. It is caller's responsibility to gpr_free user_cred.
|
44
44
|
*/
|
45
45
|
static char* get_http_proxy_server(char** user_cred) {
|
46
46
|
GPR_ASSERT(user_cred != nullptr);
|
47
47
|
char* proxy_name = nullptr;
|
48
|
-
char* uri_str = gpr_getenv("http_proxy");
|
49
48
|
char** authority_strs = nullptr;
|
50
49
|
size_t authority_nstrs;
|
50
|
+
/* Prefer using 'https_proxy'. Fallback on 'http_proxy' if it is not set. The
|
51
|
+
* fallback behavior can be removed if there's a demand for it.
|
52
|
+
*/
|
53
|
+
char* uri_str = gpr_getenv("https_proxy");
|
54
|
+
if (uri_str == nullptr) uri_str = gpr_getenv("http_proxy");
|
51
55
|
if (uri_str == nullptr) return nullptr;
|
52
56
|
grpc_uri* uri = grpc_uri_parse(uri_str, false /* suppress_errors */);
|
53
57
|
if (uri == nullptr || uri->authority == nullptr) {
|
@@ -83,11 +87,24 @@ done:
|
|
83
87
|
return proxy_name;
|
84
88
|
}
|
85
89
|
|
90
|
+
/**
|
91
|
+
* Checks the value of GRPC_ARG_ENABLE_HTTP_PROXY to determine if http_proxy
|
92
|
+
* should be used.
|
93
|
+
*/
|
94
|
+
bool http_proxy_enabled(const grpc_channel_args* args) {
|
95
|
+
const grpc_arg* arg =
|
96
|
+
grpc_channel_args_find(args, GRPC_ARG_ENABLE_HTTP_PROXY);
|
97
|
+
return grpc_channel_arg_get_bool(arg, true);
|
98
|
+
}
|
99
|
+
|
86
100
|
static bool proxy_mapper_map_name(grpc_proxy_mapper* mapper,
|
87
101
|
const char* server_uri,
|
88
102
|
const grpc_channel_args* args,
|
89
103
|
char** name_to_resolve,
|
90
104
|
grpc_channel_args** new_args) {
|
105
|
+
if (!http_proxy_enabled(args)) {
|
106
|
+
return false;
|
107
|
+
}
|
91
108
|
char* user_cred = nullptr;
|
92
109
|
*name_to_resolve = get_http_proxy_server(&user_cred);
|
93
110
|
if (*name_to_resolve == nullptr) return false;
|
@@ -44,13 +44,13 @@ void LoadBalancingPolicy::TryReresolutionLocked(
|
|
44
44
|
GRPC_CLOSURE_SCHED(request_reresolution_, error);
|
45
45
|
request_reresolution_ = nullptr;
|
46
46
|
if (grpc_lb_trace->enabled()) {
|
47
|
-
gpr_log(
|
47
|
+
gpr_log(GPR_INFO,
|
48
48
|
"%s %p: scheduling re-resolution closure with error=%s.",
|
49
49
|
grpc_lb_trace->name(), this, grpc_error_string(error));
|
50
50
|
}
|
51
51
|
} else {
|
52
52
|
if (grpc_lb_trace->enabled()) {
|
53
|
-
gpr_log(
|
53
|
+
gpr_log(GPR_INFO, "%s %p: no available re-resolution closure.",
|
54
54
|
grpc_lb_trace->name(), this);
|
55
55
|
}
|
56
56
|
}
|
@@ -21,6 +21,7 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
24
25
|
#include "src/core/ext/filters/client_channel/client_channel_factory.h"
|
25
26
|
#include "src/core/ext/filters/client_channel/subchannel.h"
|
26
27
|
#include "src/core/lib/gprpp/abstract.h"
|
@@ -70,6 +71,7 @@ class LoadBalancingPolicy
|
|
70
71
|
/// Storage for LB token in \a initial_metadata, or nullptr if not used.
|
71
72
|
grpc_linked_mdelem lb_token_mdelem_storage;
|
72
73
|
/// Closure to run when pick is complete, if not completed synchronously.
|
74
|
+
/// If null, pick will fail if a result is not available synchronously.
|
73
75
|
grpc_closure* on_complete;
|
74
76
|
/// Will be set to the selected subchannel, or nullptr on failure or when
|
75
77
|
/// the LB policy decides to drop the call.
|
@@ -98,10 +100,15 @@ class LoadBalancingPolicy
|
|
98
100
|
/// Finds an appropriate subchannel for a call, based on data in \a pick.
|
99
101
|
/// \a pick must remain alive until the pick is complete.
|
100
102
|
///
|
101
|
-
/// If
|
102
|
-
/// Otherwise, \a pick->on_complete will be invoked once
|
103
|
-
/// complete with its error argument set to indicate success
|
104
|
-
|
103
|
+
/// If a result is known immediately, returns true, setting \a *error
|
104
|
+
/// upon failure. Otherwise, \a pick->on_complete will be invoked once
|
105
|
+
/// the pick is complete with its error argument set to indicate success
|
106
|
+
/// or failure.
|
107
|
+
///
|
108
|
+
/// If \a pick->on_complete is null and no result is known immediately,
|
109
|
+
/// a synchronous failure will be returned (i.e., \a *error will be
|
110
|
+
/// set and true will be returned).
|
111
|
+
virtual bool PickLocked(PickState* pick, grpc_error** error) GRPC_ABSTRACT;
|
105
112
|
|
106
113
|
/// Cancels \a pick.
|
107
114
|
/// The \a on_complete callback of the pending pick will be invoked with
|
@@ -132,17 +139,22 @@ class LoadBalancingPolicy
|
|
132
139
|
virtual void HandOffPendingPicksLocked(LoadBalancingPolicy* new_policy)
|
133
140
|
GRPC_ABSTRACT;
|
134
141
|
|
135
|
-
/// Performs a connected subchannel ping via \a ConnectedSubchannel::Ping()
|
136
|
-
/// against one of the connected subchannels managed by the policy.
|
137
|
-
/// Note: This is intended only for use in tests.
|
138
|
-
virtual void PingOneLocked(grpc_closure* on_initiate,
|
139
|
-
grpc_closure* on_ack) GRPC_ABSTRACT;
|
140
|
-
|
141
142
|
/// Tries to enter a READY connectivity state.
|
142
143
|
/// TODO(roth): As part of restructuring how we handle IDLE state,
|
143
144
|
/// consider whether this method is still needed.
|
144
145
|
virtual void ExitIdleLocked() GRPC_ABSTRACT;
|
145
146
|
|
147
|
+
/// Resets connection backoff.
|
148
|
+
virtual void ResetBackoffLocked() GRPC_ABSTRACT;
|
149
|
+
|
150
|
+
/// Populates child_subchannels and child_channels with the uuids of this
|
151
|
+
/// LB policy's referenced children. This is not invoked from the
|
152
|
+
/// client_channel's combiner. The implementation is responsible for
|
153
|
+
/// providing its own synchronization.
|
154
|
+
virtual void FillChildRefsForChannelz(ChildRefsList* child_subchannels,
|
155
|
+
ChildRefsList* child_channels)
|
156
|
+
GRPC_ABSTRACT;
|
157
|
+
|
146
158
|
void Orphan() override {
|
147
159
|
// Invoke ShutdownAndUnrefLocked() inside of the combiner.
|
148
160
|
GRPC_CLOSURE_SCHED(
|
@@ -162,6 +174,8 @@ class LoadBalancingPolicy
|
|
162
174
|
GRPC_ABSTRACT_BASE_CLASS
|
163
175
|
|
164
176
|
protected:
|
177
|
+
GPRC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
178
|
+
|
165
179
|
explicit LoadBalancingPolicy(const Args& args);
|
166
180
|
virtual ~LoadBalancingPolicy();
|
167
181
|
|
@@ -194,6 +208,12 @@ class LoadBalancingPolicy
|
|
194
208
|
grpc_pollset_set* interested_parties_;
|
195
209
|
/// Callback to force a re-resolution.
|
196
210
|
grpc_closure* request_reresolution_;
|
211
|
+
|
212
|
+
// Dummy classes needed for alignment issues.
|
213
|
+
// See https://github.com/grpc/grpc/issues/16032 for context.
|
214
|
+
// TODO(ncteisen): remove this as soon as the issue is resolved.
|
215
|
+
ChildRefsList dummy_list_foo;
|
216
|
+
ChildRefsList dummy_list_bar;
|
197
217
|
};
|
198
218
|
|
199
219
|
} // namespace grpc_core
|
@@ -35,9 +35,10 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
|
|
35
35
|
static void destroy_channel_elem(grpc_channel_element* elem) {}
|
36
36
|
|
37
37
|
namespace {
|
38
|
+
|
38
39
|
struct call_data {
|
39
40
|
// Stats object to update.
|
40
|
-
|
41
|
+
grpc_core::RefCountedPtr<grpc_core::GrpcLbClientStats> client_stats;
|
41
42
|
// State for intercepting send_initial_metadata.
|
42
43
|
grpc_closure on_complete_for_send;
|
43
44
|
grpc_closure* original_on_complete_for_send;
|
@@ -47,6 +48,7 @@ struct call_data {
|
|
47
48
|
grpc_closure* original_recv_initial_metadata_ready;
|
48
49
|
bool recv_initial_metadata_succeeded;
|
49
50
|
};
|
51
|
+
|
50
52
|
} // namespace
|
51
53
|
|
52
54
|
static void on_complete_for_send(void* arg, grpc_error* error) {
|
@@ -72,11 +74,11 @@ static grpc_error* init_call_elem(grpc_call_element* elem,
|
|
72
74
|
// Get stats object from context and take a ref.
|
73
75
|
GPR_ASSERT(args->context != nullptr);
|
74
76
|
if (args->context[GRPC_GRPCLB_CLIENT_STATS].value != nullptr) {
|
75
|
-
calld->client_stats =
|
76
|
-
|
77
|
-
|
77
|
+
calld->client_stats = static_cast<grpc_core::GrpcLbClientStats*>(
|
78
|
+
args->context[GRPC_GRPCLB_CLIENT_STATS].value)
|
79
|
+
->Ref();
|
78
80
|
// Record call started.
|
79
|
-
|
81
|
+
calld->client_stats->AddCallStarted();
|
80
82
|
}
|
81
83
|
return GRPC_ERROR_NONE;
|
82
84
|
}
|
@@ -88,12 +90,12 @@ static void destroy_call_elem(grpc_call_element* elem,
|
|
88
90
|
if (calld->client_stats != nullptr) {
|
89
91
|
// Record call finished, optionally setting client_failed_to_send and
|
90
92
|
// received.
|
91
|
-
|
93
|
+
calld->client_stats->AddCallFinished(
|
92
94
|
!calld->send_initial_metadata_succeeded /* client_failed_to_send */,
|
93
|
-
calld->recv_initial_metadata_succeeded /* known_received
|
94
|
-
calld->client_stats);
|
95
|
+
calld->recv_initial_metadata_succeeded /* known_received */);
|
95
96
|
// All done, so unref the stats object.
|
96
|
-
|
97
|
+
// TODO(roth): Eliminate this once filter stack is converted to C++.
|
98
|
+
calld->client_stats.reset();
|
97
99
|
}
|
98
100
|
}
|
99
101
|
|
@@ -76,6 +76,7 @@
|
|
76
76
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
77
77
|
#include "src/core/ext/filters/client_channel/client_channel_factory.h"
|
78
78
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
|
79
|
+
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
|
79
80
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
|
80
81
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
|
81
82
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
|
@@ -91,6 +92,7 @@
|
|
91
92
|
#include "src/core/lib/gpr/string.h"
|
92
93
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
93
94
|
#include "src/core/lib/gprpp/memory.h"
|
95
|
+
#include "src/core/lib/gprpp/mutex_lock.h"
|
94
96
|
#include "src/core/lib/gprpp/orphanable.h"
|
95
97
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
96
98
|
#include "src/core/lib/iomgr/combiner.h"
|
@@ -122,7 +124,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
122
124
|
GrpcLb(const grpc_lb_addresses* addresses, const Args& args);
|
123
125
|
|
124
126
|
void UpdateLocked(const grpc_channel_args& args) override;
|
125
|
-
bool PickLocked(PickState* pick) override;
|
127
|
+
bool PickLocked(PickState* pick, grpc_error** error) override;
|
126
128
|
void CancelPickLocked(PickState* pick, grpc_error* error) override;
|
127
129
|
void CancelMatchingPicksLocked(uint32_t initial_metadata_flags_mask,
|
128
130
|
uint32_t initial_metadata_flags_eq,
|
@@ -132,8 +134,10 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
132
134
|
grpc_connectivity_state CheckConnectivityLocked(
|
133
135
|
grpc_error** connectivity_error) override;
|
134
136
|
void HandOffPendingPicksLocked(LoadBalancingPolicy* new_policy) override;
|
135
|
-
void PingOneLocked(grpc_closure* on_initiate, grpc_closure* on_ack) override;
|
136
137
|
void ExitIdleLocked() override;
|
138
|
+
void ResetBackoffLocked() override;
|
139
|
+
void FillChildRefsForChannelz(ChildRefsList* child_subchannels,
|
140
|
+
ChildRefsList* child_channels) override;
|
137
141
|
|
138
142
|
private:
|
139
143
|
/// Linked list of pending pick requests. It stores all information needed to
|
@@ -158,20 +162,12 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
158
162
|
// The LB token associated with the pick. This is set via user_data in
|
159
163
|
// the pick.
|
160
164
|
grpc_mdelem lb_token;
|
161
|
-
// Stats for client-side load reporting.
|
162
|
-
|
163
|
-
grpc_grpclb_client_stats* client_stats = nullptr;
|
165
|
+
// Stats for client-side load reporting.
|
166
|
+
RefCountedPtr<GrpcLbClientStats> client_stats;
|
164
167
|
// Next pending pick.
|
165
168
|
PendingPick* next = nullptr;
|
166
169
|
};
|
167
170
|
|
168
|
-
/// A linked list of pending pings waiting for the RR policy to be created.
|
169
|
-
struct PendingPing {
|
170
|
-
grpc_closure* on_initiate;
|
171
|
-
grpc_closure* on_ack;
|
172
|
-
PendingPing* next = nullptr;
|
173
|
-
};
|
174
|
-
|
175
171
|
/// Contains a call to the LB server and all the data related to the call.
|
176
172
|
class BalancerCallState
|
177
173
|
: public InternallyRefCountedWithTracing<BalancerCallState> {
|
@@ -185,10 +181,15 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
185
181
|
|
186
182
|
void StartQuery();
|
187
183
|
|
188
|
-
|
184
|
+
GrpcLbClientStats* client_stats() const { return client_stats_.get(); }
|
185
|
+
|
189
186
|
bool seen_initial_response() const { return seen_initial_response_; }
|
190
187
|
|
191
188
|
private:
|
189
|
+
// So Delete() can access our private dtor.
|
190
|
+
template <typename T>
|
191
|
+
friend void grpc_core::Delete(T*);
|
192
|
+
|
192
193
|
~BalancerCallState();
|
193
194
|
|
194
195
|
GrpcLb* grpclb_policy() const {
|
@@ -232,7 +233,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
232
233
|
|
233
234
|
// The stats for client-side load reporting associated with this LB call.
|
234
235
|
// Created after the first serverlist is received.
|
235
|
-
|
236
|
+
RefCountedPtr<GrpcLbClientStats> client_stats_;
|
236
237
|
grpc_millis client_stats_report_interval_ = 0;
|
237
238
|
grpc_timer client_load_report_timer_;
|
238
239
|
bool client_load_report_timer_callback_pending_ = false;
|
@@ -265,14 +266,12 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
265
266
|
void AddPendingPick(PendingPick* pp);
|
266
267
|
static void OnPendingPickComplete(void* arg, grpc_error* error);
|
267
268
|
|
268
|
-
// Pending ping methods.
|
269
|
-
void AddPendingPing(grpc_closure* on_initiate, grpc_closure* on_ack);
|
270
|
-
|
271
269
|
// Methods for dealing with the RR policy.
|
272
270
|
void CreateOrUpdateRoundRobinPolicyLocked();
|
273
271
|
grpc_channel_args* CreateRoundRobinPolicyArgsLocked();
|
274
272
|
void CreateRoundRobinPolicyLocked(const Args& args);
|
275
|
-
bool PickFromRoundRobinPolicyLocked(bool force_async, PendingPick* pp
|
273
|
+
bool PickFromRoundRobinPolicyLocked(bool force_async, PendingPick* pp,
|
274
|
+
grpc_error** error);
|
276
275
|
void UpdateConnectivityStateFromRoundRobinPolicyLocked(
|
277
276
|
grpc_error* rr_state_error);
|
278
277
|
static void OnRoundRobinConnectivityChangedLocked(void* arg,
|
@@ -293,6 +292,9 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
293
292
|
|
294
293
|
// The channel for communicating with the LB server.
|
295
294
|
grpc_channel* lb_channel_ = nullptr;
|
295
|
+
// Mutex to protect the channel to the LB server. This is used when
|
296
|
+
// processing a channelz request.
|
297
|
+
gpr_mu lb_channel_mu_;
|
296
298
|
grpc_connectivity_state lb_channel_connectivity_;
|
297
299
|
grpc_closure lb_channel_on_connectivity_changed_;
|
298
300
|
// Are we already watching the LB channel's connectivity?
|
@@ -332,9 +334,8 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
332
334
|
grpc_timer lb_fallback_timer_;
|
333
335
|
grpc_closure lb_on_fallback_;
|
334
336
|
|
335
|
-
// Pending picks
|
337
|
+
// Pending picks that are waiting on the RR policy's connectivity.
|
336
338
|
PendingPick* pending_picks_ = nullptr;
|
337
|
-
PendingPing* pending_pings_ = nullptr;
|
338
339
|
|
339
340
|
// The RR policy to use for the backends.
|
340
341
|
OrphanablePtr<LoadBalancingPolicy> rr_policy_;
|
@@ -394,7 +395,7 @@ grpc_lb_addresses* ExtractBackendAddresses(const grpc_lb_addresses* addresses) {
|
|
394
395
|
bool IsServerValid(const grpc_grpclb_server* server, size_t idx, bool log) {
|
395
396
|
if (server->drop) return false;
|
396
397
|
const grpc_grpclb_ip_address* ip = &server->ip_address;
|
397
|
-
if (server->port >> 16 != 0) {
|
398
|
+
if (GPR_UNLIKELY(server->port >> 16 != 0)) {
|
398
399
|
if (log) {
|
399
400
|
gpr_log(GPR_ERROR,
|
400
401
|
"Invalid port '%d' at index %lu of serverlist. Ignoring.",
|
@@ -402,7 +403,7 @@ bool IsServerValid(const grpc_grpclb_server* server, size_t idx, bool log) {
|
|
402
403
|
}
|
403
404
|
return false;
|
404
405
|
}
|
405
|
-
if (ip->size != 4 && ip->size != 16) {
|
406
|
+
if (GPR_UNLIKELY(ip->size != 4 && ip->size != 16)) {
|
406
407
|
if (log) {
|
407
408
|
gpr_log(GPR_ERROR,
|
408
409
|
"Expected IP to be 4 or 16 bytes, got %d at index %lu of "
|
@@ -543,9 +544,6 @@ GrpcLb::BalancerCallState::~BalancerCallState() {
|
|
543
544
|
grpc_byte_buffer_destroy(send_message_payload_);
|
544
545
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
545
546
|
grpc_slice_unref_internal(lb_call_status_details_);
|
546
|
-
if (client_stats_ != nullptr) {
|
547
|
-
grpc_grpclb_client_stats_unref(client_stats_);
|
548
|
-
}
|
549
547
|
}
|
550
548
|
|
551
549
|
void GrpcLb::BalancerCallState::Orphan() {
|
@@ -668,22 +666,22 @@ void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
|
|
668
666
|
|
669
667
|
bool GrpcLb::BalancerCallState::LoadReportCountersAreZero(
|
670
668
|
grpc_grpclb_request* request) {
|
671
|
-
|
672
|
-
static_cast<
|
669
|
+
GrpcLbClientStats::DroppedCallCounts* drop_entries =
|
670
|
+
static_cast<GrpcLbClientStats::DroppedCallCounts*>(
|
673
671
|
request->client_stats.calls_finished_with_drop.arg);
|
674
672
|
return request->client_stats.num_calls_started == 0 &&
|
675
673
|
request->client_stats.num_calls_finished == 0 &&
|
676
674
|
request->client_stats.num_calls_finished_with_client_failed_to_send ==
|
677
675
|
0 &&
|
678
676
|
request->client_stats.num_calls_finished_known_received == 0 &&
|
679
|
-
(drop_entries == nullptr || drop_entries->
|
677
|
+
(drop_entries == nullptr || drop_entries->size() == 0);
|
680
678
|
}
|
681
679
|
|
682
680
|
void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
|
683
681
|
// Construct message payload.
|
684
682
|
GPR_ASSERT(send_message_payload_ == nullptr);
|
685
683
|
grpc_grpclb_request* request =
|
686
|
-
grpc_grpclb_load_report_request_create_locked(client_stats_);
|
684
|
+
grpc_grpclb_load_report_request_create_locked(client_stats_.get());
|
687
685
|
// Skip client load report if the counters were all zero in the last
|
688
686
|
// report and they are still zero in this one.
|
689
687
|
if (LoadReportCountersAreZero(request)) {
|
@@ -710,7 +708,7 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
|
|
710
708
|
this, grpc_combiner_scheduler(grpclb_policy()->combiner()));
|
711
709
|
grpc_call_error call_error = grpc_call_start_batch_and_execute(
|
712
710
|
lb_call_, &op, 1, &client_load_report_closure_);
|
713
|
-
if (call_error != GRPC_CALL_OK) {
|
711
|
+
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
714
712
|
gpr_log(GPR_ERROR, "[grpclb %p] call_error=%d", grpclb_policy_.get(),
|
715
713
|
call_error);
|
716
714
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
@@ -774,7 +772,7 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
|
|
774
772
|
if (grpc_lb_glb_trace.enabled()) {
|
775
773
|
gpr_log(GPR_INFO,
|
776
774
|
"[grpclb %p] Received initial LB response message; "
|
777
|
-
"client load reporting interval = %"
|
775
|
+
"client load reporting interval = %" PRId64 " milliseconds",
|
778
776
|
grpclb_policy, lb_calld->client_stats_report_interval_);
|
779
777
|
}
|
780
778
|
} else if (grpc_lb_glb_trace.enabled()) {
|
@@ -809,7 +807,7 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
|
|
809
807
|
// serverlist returned from the current LB call.
|
810
808
|
if (lb_calld->client_stats_report_interval_ > 0 &&
|
811
809
|
lb_calld->client_stats_ == nullptr) {
|
812
|
-
lb_calld->client_stats_
|
810
|
+
lb_calld->client_stats_.reset(New<GrpcLbClientStats>());
|
813
811
|
// TODO(roth): We currently track this ref manually. Once the
|
814
812
|
// ClosureRef API is ready, we should pass the RefCountedPtr<> along
|
815
813
|
// with the callback.
|
@@ -932,7 +930,7 @@ grpc_lb_addresses* ExtractBalancerAddresses(
|
|
932
930
|
size_t lb_addresses_idx = 0;
|
933
931
|
for (size_t i = 0; i < addresses->num_addresses; ++i) {
|
934
932
|
if (!addresses->addresses[i].is_balancer) continue;
|
935
|
-
if (addresses->addresses[i].user_data != nullptr) {
|
933
|
+
if (GPR_UNLIKELY(addresses->addresses[i].user_data != nullptr)) {
|
936
934
|
gpr_log(GPR_ERROR,
|
937
935
|
"This LB policy doesn't support user data. It will be ignored");
|
938
936
|
}
|
@@ -999,6 +997,13 @@ grpc_channel_args* BuildBalancerChannelArgs(
|
|
999
997
|
// address updates into the LB channel.
|
1000
998
|
grpc_core::FakeResolverResponseGenerator::MakeChannelArg(
|
1001
999
|
response_generator),
|
1000
|
+
// A channel arg indicating the target is a grpclb load balancer.
|
1001
|
+
grpc_channel_arg_integer_create(
|
1002
|
+
const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
|
1003
|
+
// A channel arg indicating this is an internal channels, aka it is
|
1004
|
+
// owned by components in Core, not by the user application.
|
1005
|
+
grpc_channel_arg_integer_create(
|
1006
|
+
const_cast<char*>(GRPC_ARG_CHANNELZ_CHANNEL_IS_INTERNAL_CHANNEL), 1),
|
1002
1007
|
};
|
1003
1008
|
// Construct channel args.
|
1004
1009
|
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
@@ -1028,6 +1033,7 @@ GrpcLb::GrpcLb(const grpc_lb_addresses* addresses,
|
|
1028
1033
|
.set_max_backoff(GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS *
|
1029
1034
|
1000)) {
|
1030
1035
|
// Initialization.
|
1036
|
+
gpr_mu_init(&lb_channel_mu_);
|
1031
1037
|
grpc_subchannel_index_ref();
|
1032
1038
|
GRPC_CLOSURE_INIT(&lb_channel_on_connectivity_changed_,
|
1033
1039
|
&GrpcLb::OnBalancerChannelConnectivityChangedLocked, this,
|
@@ -1065,7 +1071,7 @@ GrpcLb::GrpcLb(const grpc_lb_addresses* addresses,
|
|
1065
1071
|
|
1066
1072
|
GrpcLb::~GrpcLb() {
|
1067
1073
|
GPR_ASSERT(pending_picks_ == nullptr);
|
1068
|
-
|
1074
|
+
gpr_mu_destroy(&lb_channel_mu_);
|
1069
1075
|
gpr_free((void*)server_name_);
|
1070
1076
|
grpc_channel_args_destroy(args_);
|
1071
1077
|
grpc_connectivity_state_destroy(&state_tracker_);
|
@@ -1095,8 +1101,10 @@ void GrpcLb::ShutdownLocked() {
|
|
1095
1101
|
// OnBalancerChannelConnectivityChangedLocked(), and we need to be
|
1096
1102
|
// alive when that callback is invoked.
|
1097
1103
|
if (lb_channel_ != nullptr) {
|
1104
|
+
gpr_mu_lock(&lb_channel_mu_);
|
1098
1105
|
grpc_channel_destroy(lb_channel_);
|
1099
1106
|
lb_channel_ = nullptr;
|
1107
|
+
gpr_mu_unlock(&lb_channel_mu_);
|
1100
1108
|
}
|
1101
1109
|
grpc_connectivity_state_set(&state_tracker_, GRPC_CHANNEL_SHUTDOWN,
|
1102
1110
|
GRPC_ERROR_REF(error), "grpclb_shutdown");
|
@@ -1108,14 +1116,6 @@ void GrpcLb::ShutdownLocked() {
|
|
1108
1116
|
// Note: pp is deleted in this callback.
|
1109
1117
|
GRPC_CLOSURE_SCHED(&pp->on_complete, GRPC_ERROR_REF(error));
|
1110
1118
|
}
|
1111
|
-
// Clear pending pings.
|
1112
|
-
PendingPing* pping;
|
1113
|
-
while ((pping = pending_pings_) != nullptr) {
|
1114
|
-
pending_pings_ = pping->next;
|
1115
|
-
GRPC_CLOSURE_SCHED(pping->on_initiate, GRPC_ERROR_REF(error));
|
1116
|
-
GRPC_CLOSURE_SCHED(pping->on_ack, GRPC_ERROR_REF(error));
|
1117
|
-
Delete(pping);
|
1118
|
-
}
|
1119
1119
|
GRPC_ERROR_UNREF(error);
|
1120
1120
|
}
|
1121
1121
|
|
@@ -1129,9 +1129,10 @@ void GrpcLb::HandOffPendingPicksLocked(LoadBalancingPolicy* new_policy) {
|
|
1129
1129
|
pending_picks_ = pp->next;
|
1130
1130
|
pp->pick->on_complete = pp->original_on_complete;
|
1131
1131
|
pp->pick->user_data = nullptr;
|
1132
|
-
|
1132
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
1133
|
+
if (new_policy->PickLocked(pp->pick, &error)) {
|
1133
1134
|
// Synchronous return; schedule closure.
|
1134
|
-
GRPC_CLOSURE_SCHED(pp->pick->on_complete,
|
1135
|
+
GRPC_CLOSURE_SCHED(pp->pick->on_complete, error);
|
1135
1136
|
}
|
1136
1137
|
Delete(pp);
|
1137
1138
|
}
|
@@ -1215,54 +1216,56 @@ void GrpcLb::ExitIdleLocked() {
|
|
1215
1216
|
}
|
1216
1217
|
}
|
1217
1218
|
|
1218
|
-
|
1219
|
+
void GrpcLb::ResetBackoffLocked() {
|
1220
|
+
if (lb_channel_ != nullptr) {
|
1221
|
+
grpc_channel_reset_connect_backoff(lb_channel_);
|
1222
|
+
}
|
1223
|
+
if (rr_policy_ != nullptr) {
|
1224
|
+
rr_policy_->ResetBackoffLocked();
|
1225
|
+
}
|
1226
|
+
}
|
1227
|
+
|
1228
|
+
bool GrpcLb::PickLocked(PickState* pick, grpc_error** error) {
|
1219
1229
|
PendingPick* pp = PendingPickCreate(pick);
|
1220
1230
|
bool pick_done = false;
|
1221
1231
|
if (rr_policy_ != nullptr) {
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1232
|
+
if (grpc_lb_glb_trace.enabled()) {
|
1233
|
+
gpr_log(GPR_INFO, "[grpclb %p] about to PICK from RR %p", this,
|
1234
|
+
rr_policy_.get());
|
1235
|
+
}
|
1236
|
+
pick_done =
|
1237
|
+
PickFromRoundRobinPolicyLocked(false /* force_async */, pp, error);
|
1238
|
+
} else { // rr_policy_ == NULL
|
1239
|
+
if (pick->on_complete == nullptr) {
|
1240
|
+
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1241
|
+
"No pick result available but synchronous result required.");
|
1242
|
+
pick_done = true;
|
1243
|
+
} else {
|
1229
1244
|
if (grpc_lb_glb_trace.enabled()) {
|
1230
1245
|
gpr_log(GPR_INFO,
|
1231
|
-
"[grpclb %p]
|
1232
|
-
this
|
1233
|
-
grpc_connectivity_state_name(rr_connectivity_state));
|
1246
|
+
"[grpclb %p] No RR policy. Adding to grpclb's pending picks",
|
1247
|
+
this);
|
1234
1248
|
}
|
1235
1249
|
AddPendingPick(pp);
|
1236
|
-
|
1237
|
-
|
1238
|
-
if (grpc_lb_glb_trace.enabled()) {
|
1239
|
-
gpr_log(GPR_INFO, "[grpclb %p] about to PICK from RR %p", this,
|
1240
|
-
rr_policy_.get());
|
1250
|
+
if (!started_picking_) {
|
1251
|
+
StartPickingLocked();
|
1241
1252
|
}
|
1242
|
-
pick_done =
|
1243
|
-
}
|
1244
|
-
} else { // rr_policy_ == NULL
|
1245
|
-
if (grpc_lb_glb_trace.enabled()) {
|
1246
|
-
gpr_log(GPR_DEBUG,
|
1247
|
-
"[grpclb %p] No RR policy. Adding to grpclb's pending picks",
|
1248
|
-
this);
|
1249
|
-
}
|
1250
|
-
AddPendingPick(pp);
|
1251
|
-
if (!started_picking_) {
|
1252
|
-
StartPickingLocked();
|
1253
|
+
pick_done = false;
|
1253
1254
|
}
|
1254
|
-
pick_done = false;
|
1255
1255
|
}
|
1256
1256
|
return pick_done;
|
1257
1257
|
}
|
1258
1258
|
|
1259
|
-
void GrpcLb::
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1259
|
+
void GrpcLb::FillChildRefsForChannelz(ChildRefsList* child_subchannels,
|
1260
|
+
ChildRefsList* child_channels) {
|
1261
|
+
// delegate to the RoundRobin to fill the children subchannels.
|
1262
|
+
rr_policy_->FillChildRefsForChannelz(child_subchannels, child_channels);
|
1263
|
+
MutexLock lock(&lb_channel_mu_);
|
1264
|
+
if (lb_channel_ != nullptr) {
|
1265
|
+
grpc_core::channelz::ChannelNode* channel_node =
|
1266
|
+
grpc_channel_get_channelz_node(lb_channel_);
|
1267
|
+
if (channel_node != nullptr) {
|
1268
|
+
child_channels->push_back(channel_node->channel_uuid());
|
1266
1269
|
}
|
1267
1270
|
}
|
1268
1271
|
}
|
@@ -1280,7 +1283,7 @@ void GrpcLb::NotifyOnStateChangeLocked(grpc_connectivity_state* current,
|
|
1280
1283
|
|
1281
1284
|
void GrpcLb::ProcessChannelArgsLocked(const grpc_channel_args& args) {
|
1282
1285
|
const grpc_arg* arg = grpc_channel_args_find(&args, GRPC_ARG_LB_ADDRESSES);
|
1283
|
-
if (arg == nullptr || arg->type != GRPC_ARG_POINTER) {
|
1286
|
+
if (GPR_UNLIKELY(arg == nullptr || arg->type != GRPC_ARG_POINTER)) {
|
1284
1287
|
// Ignore this update.
|
1285
1288
|
gpr_log(
|
1286
1289
|
GPR_ERROR,
|
@@ -1310,9 +1313,11 @@ void GrpcLb::ProcessChannelArgsLocked(const grpc_channel_args& args) {
|
|
1310
1313
|
if (lb_channel_ == nullptr) {
|
1311
1314
|
char* uri_str;
|
1312
1315
|
gpr_asprintf(&uri_str, "fake:///%s", server_name_);
|
1316
|
+
gpr_mu_lock(&lb_channel_mu_);
|
1313
1317
|
lb_channel_ = grpc_client_channel_factory_create_channel(
|
1314
1318
|
client_channel_factory(), uri_str,
|
1315
1319
|
GRPC_CLIENT_CHANNEL_TYPE_LOAD_BALANCING, lb_channel_args);
|
1320
|
+
gpr_mu_unlock(&lb_channel_mu_);
|
1316
1321
|
GPR_ASSERT(lb_channel_ != nullptr);
|
1317
1322
|
gpr_free(uri_str);
|
1318
1323
|
}
|
@@ -1409,14 +1414,13 @@ void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
|
|
1409
1414
|
void GrpcLb::StartBalancerCallRetryTimerLocked() {
|
1410
1415
|
grpc_millis next_try = lb_call_backoff_.NextAttemptTime();
|
1411
1416
|
if (grpc_lb_glb_trace.enabled()) {
|
1412
|
-
gpr_log(
|
1417
|
+
gpr_log(GPR_INFO, "[grpclb %p] Connection to LB server lost...", this);
|
1413
1418
|
grpc_millis timeout = next_try - ExecCtx::Get()->Now();
|
1414
1419
|
if (timeout > 0) {
|
1415
|
-
gpr_log(
|
1416
|
-
|
1417
|
-
timeout);
|
1420
|
+
gpr_log(GPR_INFO, "[grpclb %p] ... retry_timer_active in %" PRId64 "ms.",
|
1421
|
+
this, timeout);
|
1418
1422
|
} else {
|
1419
|
-
gpr_log(
|
1423
|
+
gpr_log(GPR_INFO, "[grpclb %p] ... retry_timer_active immediately.",
|
1420
1424
|
this);
|
1421
1425
|
}
|
1422
1426
|
}
|
@@ -1509,7 +1513,7 @@ grpc_error* AddLbTokenToInitialMetadata(
|
|
1509
1513
|
|
1510
1514
|
// Destroy function used when embedding client stats in call context.
|
1511
1515
|
void DestroyClientStats(void* arg) {
|
1512
|
-
|
1516
|
+
static_cast<GrpcLbClientStats*>(arg)->Unref();
|
1513
1517
|
}
|
1514
1518
|
|
1515
1519
|
void GrpcLb::PendingPickSetMetadataAndContext(PendingPick* pp) {
|
@@ -1517,7 +1521,7 @@ void GrpcLb::PendingPickSetMetadataAndContext(PendingPick* pp) {
|
|
1517
1521
|
* policy (e.g., all addresses failed to connect). There won't be any
|
1518
1522
|
* user_data/token available */
|
1519
1523
|
if (pp->pick->connected_subchannel != nullptr) {
|
1520
|
-
if (!GRPC_MDISNULL(pp->lb_token)) {
|
1524
|
+
if (GPR_LIKELY(!GRPC_MDISNULL(pp->lb_token))) {
|
1521
1525
|
AddLbTokenToInitialMetadata(GRPC_MDELEM_REF(pp->lb_token),
|
1522
1526
|
&pp->pick->lb_token_mdelem_storage,
|
1523
1527
|
pp->pick->initial_metadata);
|
@@ -1530,14 +1534,12 @@ void GrpcLb::PendingPickSetMetadataAndContext(PendingPick* pp) {
|
|
1530
1534
|
// Pass on client stats via context. Passes ownership of the reference.
|
1531
1535
|
if (pp->client_stats != nullptr) {
|
1532
1536
|
pp->pick->subchannel_call_context[GRPC_GRPCLB_CLIENT_STATS].value =
|
1533
|
-
pp->client_stats;
|
1537
|
+
pp->client_stats.release();
|
1534
1538
|
pp->pick->subchannel_call_context[GRPC_GRPCLB_CLIENT_STATS].destroy =
|
1535
1539
|
DestroyClientStats;
|
1536
1540
|
}
|
1537
1541
|
} else {
|
1538
|
-
|
1539
|
-
grpc_grpclb_client_stats_unref(pp->client_stats);
|
1540
|
-
}
|
1542
|
+
pp->client_stats.reset();
|
1541
1543
|
}
|
1542
1544
|
}
|
1543
1545
|
|
@@ -1567,18 +1569,6 @@ void GrpcLb::AddPendingPick(PendingPick* pp) {
|
|
1567
1569
|
pending_picks_ = pp;
|
1568
1570
|
}
|
1569
1571
|
|
1570
|
-
//
|
1571
|
-
// PendingPing
|
1572
|
-
//
|
1573
|
-
|
1574
|
-
void GrpcLb::AddPendingPing(grpc_closure* on_initiate, grpc_closure* on_ack) {
|
1575
|
-
PendingPing* pping = New<PendingPing>();
|
1576
|
-
pping->on_initiate = on_initiate;
|
1577
|
-
pping->on_ack = on_ack;
|
1578
|
-
pping->next = pending_pings_;
|
1579
|
-
pending_pings_ = pping;
|
1580
|
-
}
|
1581
|
-
|
1582
1572
|
//
|
1583
1573
|
// code for interacting with the RR policy
|
1584
1574
|
//
|
@@ -1588,7 +1578,8 @@ void GrpcLb::AddPendingPing(grpc_closure* on_initiate, grpc_closure* on_ack) {
|
|
1588
1578
|
// cleanups this callback would otherwise be responsible for.
|
1589
1579
|
// If \a force_async is true, then we will manually schedule the
|
1590
1580
|
// completion callback even if the pick is available immediately.
|
1591
|
-
bool GrpcLb::PickFromRoundRobinPolicyLocked(bool force_async, PendingPick* pp
|
1581
|
+
bool GrpcLb::PickFromRoundRobinPolicyLocked(bool force_async, PendingPick* pp,
|
1582
|
+
grpc_error** error) {
|
1592
1583
|
// Check for drops if we are not using fallback backend addresses.
|
1593
1584
|
if (serverlist_ != nullptr) {
|
1594
1585
|
// Look at the index into the serverlist to see if we should drop this call.
|
@@ -1603,8 +1594,8 @@ bool GrpcLb::PickFromRoundRobinPolicyLocked(bool force_async, PendingPick* pp) {
|
|
1603
1594
|
// subchannel call (and therefore no client_load_reporting filter)
|
1604
1595
|
// for dropped calls.
|
1605
1596
|
if (lb_calld_ != nullptr && lb_calld_->client_stats() != nullptr) {
|
1606
|
-
|
1607
|
-
server->load_balance_token
|
1597
|
+
lb_calld_->client_stats()->AddCallDroppedLocked(
|
1598
|
+
server->load_balance_token);
|
1608
1599
|
}
|
1609
1600
|
if (force_async) {
|
1610
1601
|
GRPC_CLOSURE_SCHED(pp->original_on_complete, GRPC_ERROR_NONE);
|
@@ -1617,16 +1608,17 @@ bool GrpcLb::PickFromRoundRobinPolicyLocked(bool force_async, PendingPick* pp) {
|
|
1617
1608
|
}
|
1618
1609
|
// Set client_stats and user_data.
|
1619
1610
|
if (lb_calld_ != nullptr && lb_calld_->client_stats() != nullptr) {
|
1620
|
-
pp->client_stats =
|
1611
|
+
pp->client_stats = lb_calld_->client_stats()->Ref();
|
1621
1612
|
}
|
1622
1613
|
GPR_ASSERT(pp->pick->user_data == nullptr);
|
1623
1614
|
pp->pick->user_data = (void**)&pp->lb_token;
|
1624
1615
|
// Pick via the RR policy.
|
1625
|
-
bool pick_done = rr_policy_->PickLocked(pp->pick);
|
1616
|
+
bool pick_done = rr_policy_->PickLocked(pp->pick, error);
|
1626
1617
|
if (pick_done) {
|
1627
1618
|
PendingPickSetMetadataAndContext(pp);
|
1628
1619
|
if (force_async) {
|
1629
|
-
GRPC_CLOSURE_SCHED(pp->original_on_complete,
|
1620
|
+
GRPC_CLOSURE_SCHED(pp->original_on_complete, *error);
|
1621
|
+
*error = GRPC_ERROR_NONE;
|
1630
1622
|
pick_done = false;
|
1631
1623
|
}
|
1632
1624
|
Delete(pp);
|
@@ -1642,7 +1634,7 @@ void GrpcLb::CreateRoundRobinPolicyLocked(const Args& args) {
|
|
1642
1634
|
GPR_ASSERT(rr_policy_ == nullptr);
|
1643
1635
|
rr_policy_ = LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
|
1644
1636
|
"round_robin", args);
|
1645
|
-
if (rr_policy_ == nullptr) {
|
1637
|
+
if (GPR_UNLIKELY(rr_policy_ == nullptr)) {
|
1646
1638
|
gpr_log(GPR_ERROR, "[grpclb %p] Failure creating a RoundRobin policy",
|
1647
1639
|
this);
|
1648
1640
|
return;
|
@@ -1678,26 +1670,18 @@ void GrpcLb::CreateRoundRobinPolicyLocked(const Args& args) {
|
|
1678
1670
|
"[grpclb %p] Pending pick about to (async) PICK from RR %p", this,
|
1679
1671
|
rr_policy_.get());
|
1680
1672
|
}
|
1681
|
-
|
1682
|
-
|
1683
|
-
// Send pending pings to RR policy.
|
1684
|
-
PendingPing* pping;
|
1685
|
-
while ((pping = pending_pings_)) {
|
1686
|
-
pending_pings_ = pping->next;
|
1687
|
-
if (grpc_lb_glb_trace.enabled()) {
|
1688
|
-
gpr_log(GPR_INFO, "[grpclb %p] Pending ping about to PING from RR %p",
|
1689
|
-
this, rr_policy_.get());
|
1690
|
-
}
|
1691
|
-
rr_policy_->PingOneLocked(pping->on_initiate, pping->on_ack);
|
1692
|
-
Delete(pping);
|
1673
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
1674
|
+
PickFromRoundRobinPolicyLocked(true /* force_async */, pp, &error);
|
1693
1675
|
}
|
1694
1676
|
}
|
1695
1677
|
|
1696
1678
|
grpc_channel_args* GrpcLb::CreateRoundRobinPolicyArgsLocked() {
|
1697
1679
|
grpc_lb_addresses* addresses;
|
1680
|
+
bool is_backend_from_grpclb_load_balancer = false;
|
1698
1681
|
if (serverlist_ != nullptr) {
|
1699
1682
|
GPR_ASSERT(serverlist_->num_servers > 0);
|
1700
1683
|
addresses = ProcessServerlist(serverlist_);
|
1684
|
+
is_backend_from_grpclb_load_balancer = true;
|
1701
1685
|
} else {
|
1702
1686
|
// If CreateOrUpdateRoundRobinPolicyLocked() is invoked when we haven't
|
1703
1687
|
// received any serverlist from the balancer, we use the fallback backends
|
@@ -1711,9 +1695,18 @@ grpc_channel_args* GrpcLb::CreateRoundRobinPolicyArgsLocked() {
|
|
1711
1695
|
// Replace the LB addresses in the channel args that we pass down to
|
1712
1696
|
// the subchannel.
|
1713
1697
|
static const char* keys_to_remove[] = {GRPC_ARG_LB_ADDRESSES};
|
1714
|
-
const grpc_arg
|
1698
|
+
const grpc_arg args_to_add[] = {
|
1699
|
+
grpc_lb_addresses_create_channel_arg(addresses),
|
1700
|
+
// A channel arg indicating if the target is a backend inferred from a
|
1701
|
+
// grpclb load balancer.
|
1702
|
+
grpc_channel_arg_integer_create(
|
1703
|
+
const_cast<char*>(
|
1704
|
+
GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
|
1705
|
+
is_backend_from_grpclb_load_balancer),
|
1706
|
+
};
|
1715
1707
|
grpc_channel_args* args = grpc_channel_args_copy_and_add_and_remove(
|
1716
|
-
args_, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove),
|
1708
|
+
args_, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), args_to_add,
|
1709
|
+
GPR_ARRAY_SIZE(args_to_add));
|
1717
1710
|
grpc_lb_addresses_destroy(addresses);
|
1718
1711
|
return args;
|
1719
1712
|
}
|
@@ -1724,7 +1717,7 @@ void GrpcLb::CreateOrUpdateRoundRobinPolicyLocked() {
|
|
1724
1717
|
GPR_ASSERT(args != nullptr);
|
1725
1718
|
if (rr_policy_ != nullptr) {
|
1726
1719
|
if (grpc_lb_glb_trace.enabled()) {
|
1727
|
-
gpr_log(
|
1720
|
+
gpr_log(GPR_INFO, "[grpclb %p] Updating RR policy %p", this,
|
1728
1721
|
rr_policy_.get());
|
1729
1722
|
}
|
1730
1723
|
rr_policy_->UpdateLocked(*args);
|
@@ -1735,7 +1728,7 @@ void GrpcLb::CreateOrUpdateRoundRobinPolicyLocked() {
|
|
1735
1728
|
lb_policy_args.args = args;
|
1736
1729
|
CreateRoundRobinPolicyLocked(lb_policy_args);
|
1737
1730
|
if (grpc_lb_glb_trace.enabled()) {
|
1738
|
-
gpr_log(
|
1731
|
+
gpr_log(GPR_INFO, "[grpclb %p] Created new RR policy %p", this,
|
1739
1732
|
rr_policy_.get());
|
1740
1733
|
}
|
1741
1734
|
}
|
@@ -1751,7 +1744,7 @@ void GrpcLb::OnRoundRobinRequestReresolutionLocked(void* arg,
|
|
1751
1744
|
}
|
1752
1745
|
if (grpc_lb_glb_trace.enabled()) {
|
1753
1746
|
gpr_log(
|
1754
|
-
|
1747
|
+
GPR_INFO,
|
1755
1748
|
"[grpclb %p] Re-resolution requested from the internal RR policy (%p).",
|
1756
1749
|
grpclb_policy, grpclb_policy->rr_policy_.get());
|
1757
1750
|
}
|