grpc-flamingo 1.11.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,116 +21,556 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <string.h>
|
25
|
+
|
26
|
+
#include <grpc/support/alloc.h>
|
27
|
+
|
24
28
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
25
29
|
#include "src/core/ext/filters/client_channel/subchannel.h"
|
30
|
+
#include "src/core/lib/channel/channel_args.h"
|
26
31
|
#include "src/core/lib/debug/trace.h"
|
32
|
+
#include "src/core/lib/gprpp/abstract.h"
|
33
|
+
#include "src/core/lib/gprpp/inlined_vector.h"
|
34
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
35
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
27
36
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
37
|
+
#include "src/core/lib/iomgr/closure.h"
|
38
|
+
#include "src/core/lib/iomgr/combiner.h"
|
39
|
+
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
28
40
|
#include "src/core/lib/transport/connectivity_state.h"
|
29
41
|
|
30
|
-
//
|
31
|
-
//
|
32
|
-
//
|
33
|
-
|
34
|
-
|
35
|
-
//
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
//
|
99
|
-
//
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
42
|
+
// Code for maintaining a list of subchannels within an LB policy.
|
43
|
+
//
|
44
|
+
// To use this, callers must create their own subclasses, like so:
|
45
|
+
/*
|
46
|
+
|
47
|
+
class MySubchannelList; // Forward declaration.
|
48
|
+
|
49
|
+
class MySubchannelData
|
50
|
+
: public SubchannelData<MySubchannelList, MySubchannelData> {
|
51
|
+
public:
|
52
|
+
void ProcessConnectivityChangeLocked(
|
53
|
+
grpc_connectivity_state connectivity_state, grpc_error* error) override {
|
54
|
+
// ...code to handle connectivity changes...
|
55
|
+
}
|
56
|
+
};
|
57
|
+
|
58
|
+
class MySubchannelList
|
59
|
+
: public SubchannelList<MySubchannelList, MySubchannelData> {
|
60
|
+
};
|
61
|
+
|
62
|
+
*/
|
63
|
+
// All methods with a Locked() suffix must be called from within the
|
64
|
+
// client_channel combiner.
|
65
|
+
|
66
|
+
namespace grpc_core {
|
67
|
+
|
68
|
+
// Stores data for a particular subchannel in a subchannel list.
|
69
|
+
// Callers must create a subclass that implements the
|
70
|
+
// ProcessConnectivityChangeLocked() method.
|
71
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
72
|
+
class SubchannelData {
|
73
|
+
public:
|
74
|
+
// Returns a pointer to the subchannel list containing this object.
|
75
|
+
SubchannelListType* subchannel_list() const { return subchannel_list_; }
|
76
|
+
|
77
|
+
// Returns the index into the subchannel list of this object.
|
78
|
+
size_t Index() const {
|
79
|
+
return static_cast<size_t>(static_cast<const SubchannelDataType*>(this) -
|
80
|
+
subchannel_list_->subchannel(0));
|
81
|
+
}
|
82
|
+
|
83
|
+
// Returns a pointer to the subchannel.
|
84
|
+
grpc_subchannel* subchannel() const { return subchannel_; }
|
85
|
+
|
86
|
+
// Returns the connected subchannel. Will be null if the subchannel
|
87
|
+
// is not connected.
|
88
|
+
ConnectedSubchannel* connected_subchannel() const {
|
89
|
+
return connected_subchannel_.get();
|
90
|
+
}
|
91
|
+
|
92
|
+
// Synchronously checks the subchannel's connectivity state.
|
93
|
+
// Must not be called while there is a connectivity notification
|
94
|
+
// pending (i.e., between calling StartConnectivityWatchLocked() or
|
95
|
+
// RenewConnectivityWatchLocked() and the resulting invocation of
|
96
|
+
// ProcessConnectivityChangeLocked()).
|
97
|
+
grpc_connectivity_state CheckConnectivityStateLocked(grpc_error** error) {
|
98
|
+
GPR_ASSERT(!connectivity_notification_pending_);
|
99
|
+
pending_connectivity_state_unsafe_ =
|
100
|
+
grpc_subchannel_check_connectivity(subchannel(), error);
|
101
|
+
UpdateConnectedSubchannelLocked();
|
102
|
+
return pending_connectivity_state_unsafe_;
|
103
|
+
}
|
104
|
+
|
105
|
+
// Unrefs the subchannel. May be used if an individual subchannel is
|
106
|
+
// no longer needed even though the subchannel list as a whole is not
|
107
|
+
// being unreffed.
|
108
|
+
virtual void UnrefSubchannelLocked(const char* reason);
|
109
|
+
|
110
|
+
// Resets the connection backoff.
|
111
|
+
// TODO(roth): This method should go away when we move the backoff
|
112
|
+
// code out of the subchannel and into the LB policies.
|
113
|
+
void ResetBackoffLocked();
|
114
|
+
|
115
|
+
// Starts watching the connectivity state of the subchannel.
|
116
|
+
// ProcessConnectivityChangeLocked() will be called when the
|
117
|
+
// connectivity state changes.
|
118
|
+
void StartConnectivityWatchLocked();
|
119
|
+
|
120
|
+
// Renews watching the connectivity state of the subchannel.
|
121
|
+
void RenewConnectivityWatchLocked();
|
122
|
+
|
123
|
+
// Stops watching the connectivity state of the subchannel.
|
124
|
+
void StopConnectivityWatchLocked();
|
125
|
+
|
126
|
+
// Cancels watching the connectivity state of the subchannel.
|
127
|
+
// Must be called only while there is a connectivity notification
|
128
|
+
// pending (i.e., between calling StartConnectivityWatchLocked() or
|
129
|
+
// RenewConnectivityWatchLocked() and the resulting invocation of
|
130
|
+
// ProcessConnectivityChangeLocked()).
|
131
|
+
// From within ProcessConnectivityChangeLocked(), use
|
132
|
+
// StopConnectivityWatchLocked() instead.
|
133
|
+
void CancelConnectivityWatchLocked(const char* reason);
|
134
|
+
|
135
|
+
// Cancels any pending connectivity watch and unrefs the subchannel.
|
136
|
+
void ShutdownLocked();
|
137
|
+
|
138
|
+
GRPC_ABSTRACT_BASE_CLASS
|
139
|
+
|
140
|
+
protected:
|
141
|
+
SubchannelData(SubchannelListType* subchannel_list,
|
142
|
+
const grpc_lb_user_data_vtable* user_data_vtable,
|
143
|
+
const grpc_lb_address& address, grpc_subchannel* subchannel,
|
144
|
+
grpc_combiner* combiner);
|
145
|
+
|
146
|
+
virtual ~SubchannelData();
|
147
|
+
|
148
|
+
// After StartConnectivityWatchLocked() or RenewConnectivityWatchLocked()
|
149
|
+
// is called, this method will be invoked when the subchannel's connectivity
|
150
|
+
// state changes.
|
151
|
+
// Implementations must invoke either RenewConnectivityWatchLocked() or
|
152
|
+
// StopConnectivityWatchLocked() before returning.
|
153
|
+
virtual void ProcessConnectivityChangeLocked(
|
154
|
+
grpc_connectivity_state connectivity_state,
|
155
|
+
grpc_error* error) GRPC_ABSTRACT;
|
156
|
+
|
157
|
+
private:
|
158
|
+
// Updates connected_subchannel_ based on pending_connectivity_state_unsafe_.
|
159
|
+
// Returns true if the connectivity state should be reported.
|
160
|
+
bool UpdateConnectedSubchannelLocked();
|
161
|
+
|
162
|
+
static void OnConnectivityChangedLocked(void* arg, grpc_error* error);
|
163
|
+
|
164
|
+
// Backpointer to owning subchannel list. Not owned.
|
165
|
+
SubchannelListType* subchannel_list_;
|
166
|
+
|
167
|
+
// The subchannel and connected subchannel.
|
168
|
+
grpc_subchannel* subchannel_;
|
169
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
170
|
+
|
171
|
+
// Notification that connectivity has changed on subchannel.
|
172
|
+
grpc_closure connectivity_changed_closure_;
|
173
|
+
// Is a connectivity notification pending?
|
174
|
+
bool connectivity_notification_pending_ = false;
|
175
|
+
// Connectivity state to be updated by
|
176
|
+
// grpc_subchannel_notify_on_state_change(), not guarded by
|
177
|
+
// the combiner.
|
178
|
+
grpc_connectivity_state pending_connectivity_state_unsafe_;
|
179
|
+
};
|
180
|
+
|
181
|
+
// A list of subchannels.
|
182
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
183
|
+
class SubchannelList
|
184
|
+
: public InternallyRefCountedWithTracing<SubchannelListType> {
|
185
|
+
public:
|
186
|
+
typedef InlinedVector<SubchannelDataType, 10> SubchannelVector;
|
187
|
+
|
188
|
+
// The number of subchannels in the list.
|
189
|
+
size_t num_subchannels() const { return subchannels_.size(); }
|
190
|
+
|
191
|
+
// The data for the subchannel at a particular index.
|
192
|
+
SubchannelDataType* subchannel(size_t index) { return &subchannels_[index]; }
|
193
|
+
|
194
|
+
// Returns true if the subchannel list is shutting down.
|
195
|
+
bool shutting_down() const { return shutting_down_; }
|
196
|
+
|
197
|
+
// Populates refs_list with the uuids of this SubchannelLists's subchannels.
|
198
|
+
void PopulateChildRefsList(ChildRefsList* refs_list) {
|
199
|
+
for (size_t i = 0; i < subchannels_.size(); ++i) {
|
200
|
+
if (subchannels_[i].subchannel() != nullptr) {
|
201
|
+
grpc_core::channelz::SubchannelNode* subchannel_node =
|
202
|
+
grpc_subchannel_get_channelz_node(subchannels_[i].subchannel());
|
203
|
+
if (subchannel_node != nullptr) {
|
204
|
+
refs_list->push_back(subchannel_node->subchannel_uuid());
|
205
|
+
}
|
206
|
+
}
|
207
|
+
}
|
208
|
+
}
|
209
|
+
|
210
|
+
// Accessors.
|
211
|
+
LoadBalancingPolicy* policy() const { return policy_; }
|
212
|
+
TraceFlag* tracer() const { return tracer_; }
|
213
|
+
|
214
|
+
// Resets connection backoff of all subchannels.
|
215
|
+
// TODO(roth): We will probably need to rethink this as part of moving
|
216
|
+
// the backoff code out of subchannels and into LB policies.
|
217
|
+
void ResetBackoffLocked();
|
218
|
+
|
219
|
+
// Note: Caller must ensure that this is invoked inside of the combiner.
|
220
|
+
void Orphan() override {
|
221
|
+
ShutdownLocked();
|
222
|
+
InternallyRefCountedWithTracing<SubchannelListType>::Unref(DEBUG_LOCATION,
|
223
|
+
"shutdown");
|
224
|
+
}
|
225
|
+
|
226
|
+
GRPC_ABSTRACT_BASE_CLASS
|
227
|
+
|
228
|
+
protected:
|
229
|
+
SubchannelList(LoadBalancingPolicy* policy, TraceFlag* tracer,
|
230
|
+
const grpc_lb_addresses* addresses, grpc_combiner* combiner,
|
231
|
+
grpc_client_channel_factory* client_channel_factory,
|
232
|
+
const grpc_channel_args& args);
|
233
|
+
|
234
|
+
virtual ~SubchannelList();
|
235
|
+
|
236
|
+
private:
|
237
|
+
// So New() can call our private ctor.
|
238
|
+
template <typename T, typename... Args>
|
239
|
+
friend T* New(Args&&... args);
|
240
|
+
|
241
|
+
// For accessing Ref() and Unref().
|
242
|
+
friend class SubchannelData<SubchannelListType, SubchannelDataType>;
|
243
|
+
|
244
|
+
void ShutdownLocked();
|
245
|
+
|
246
|
+
// Backpointer to owning policy.
|
247
|
+
LoadBalancingPolicy* policy_;
|
248
|
+
|
249
|
+
TraceFlag* tracer_;
|
250
|
+
|
251
|
+
grpc_combiner* combiner_;
|
252
|
+
|
253
|
+
// The list of subchannels.
|
254
|
+
SubchannelVector subchannels_;
|
255
|
+
|
256
|
+
// Is this list shutting down? This may be true due to the shutdown of the
|
257
|
+
// policy itself or because a newer update has arrived while this one hadn't
|
258
|
+
// finished processing.
|
259
|
+
bool shutting_down_ = false;
|
117
260
|
};
|
118
261
|
|
119
|
-
|
120
|
-
|
262
|
+
//
|
263
|
+
// implementation -- no user-servicable parts below
|
264
|
+
//
|
265
|
+
|
266
|
+
//
|
267
|
+
// SubchannelData
|
268
|
+
//
|
269
|
+
|
270
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
271
|
+
SubchannelData<SubchannelListType, SubchannelDataType>::SubchannelData(
|
272
|
+
SubchannelListType* subchannel_list,
|
273
|
+
const grpc_lb_user_data_vtable* user_data_vtable,
|
274
|
+
const grpc_lb_address& address, grpc_subchannel* subchannel,
|
275
|
+
grpc_combiner* combiner)
|
276
|
+
: subchannel_list_(subchannel_list),
|
277
|
+
subchannel_(subchannel),
|
278
|
+
// We assume that the current state is IDLE. If not, we'll get a
|
279
|
+
// callback telling us that.
|
280
|
+
pending_connectivity_state_unsafe_(GRPC_CHANNEL_IDLE) {
|
281
|
+
GRPC_CLOSURE_INIT(
|
282
|
+
&connectivity_changed_closure_,
|
283
|
+
(&SubchannelData<SubchannelListType,
|
284
|
+
SubchannelDataType>::OnConnectivityChangedLocked),
|
285
|
+
this, grpc_combiner_scheduler(combiner));
|
286
|
+
}
|
287
|
+
|
288
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
289
|
+
SubchannelData<SubchannelListType, SubchannelDataType>::~SubchannelData() {
|
290
|
+
UnrefSubchannelLocked("subchannel_data_destroy");
|
291
|
+
}
|
292
|
+
|
293
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
294
|
+
void SubchannelData<SubchannelListType, SubchannelDataType>::
|
295
|
+
UnrefSubchannelLocked(const char* reason) {
|
296
|
+
if (subchannel_ != nullptr) {
|
297
|
+
if (subchannel_list_->tracer()->enabled()) {
|
298
|
+
gpr_log(GPR_INFO,
|
299
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
300
|
+
" (subchannel %p): unreffing subchannel",
|
301
|
+
subchannel_list_->tracer()->name(), subchannel_list_->policy(),
|
302
|
+
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
303
|
+
subchannel_);
|
304
|
+
}
|
305
|
+
GRPC_SUBCHANNEL_UNREF(subchannel_, reason);
|
306
|
+
subchannel_ = nullptr;
|
307
|
+
connected_subchannel_.reset();
|
308
|
+
}
|
309
|
+
}
|
310
|
+
|
311
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
312
|
+
void SubchannelData<SubchannelListType,
|
313
|
+
SubchannelDataType>::ResetBackoffLocked() {
|
314
|
+
if (subchannel_ != nullptr) {
|
315
|
+
grpc_subchannel_reset_backoff(subchannel_);
|
316
|
+
}
|
317
|
+
}
|
318
|
+
|
319
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
320
|
+
void SubchannelData<SubchannelListType,
|
321
|
+
SubchannelDataType>::StartConnectivityWatchLocked() {
|
322
|
+
if (subchannel_list_->tracer()->enabled()) {
|
323
|
+
gpr_log(GPR_INFO,
|
324
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
325
|
+
" (subchannel %p): starting watch: requesting connectivity change "
|
326
|
+
"notification (from %s)",
|
327
|
+
subchannel_list_->tracer()->name(), subchannel_list_->policy(),
|
328
|
+
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
329
|
+
subchannel_,
|
330
|
+
grpc_connectivity_state_name(pending_connectivity_state_unsafe_));
|
331
|
+
}
|
332
|
+
GPR_ASSERT(!connectivity_notification_pending_);
|
333
|
+
connectivity_notification_pending_ = true;
|
334
|
+
subchannel_list()->Ref(DEBUG_LOCATION, "connectivity_watch").release();
|
335
|
+
grpc_subchannel_notify_on_state_change(
|
336
|
+
subchannel_, subchannel_list_->policy()->interested_parties(),
|
337
|
+
&pending_connectivity_state_unsafe_, &connectivity_changed_closure_);
|
338
|
+
}
|
339
|
+
|
340
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
341
|
+
void SubchannelData<SubchannelListType,
|
342
|
+
SubchannelDataType>::RenewConnectivityWatchLocked() {
|
343
|
+
if (subchannel_list_->tracer()->enabled()) {
|
344
|
+
gpr_log(GPR_INFO,
|
345
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
346
|
+
" (subchannel %p): renewing watch: requesting connectivity change "
|
347
|
+
"notification (from %s)",
|
348
|
+
subchannel_list_->tracer()->name(), subchannel_list_->policy(),
|
349
|
+
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
350
|
+
subchannel_,
|
351
|
+
grpc_connectivity_state_name(pending_connectivity_state_unsafe_));
|
352
|
+
}
|
353
|
+
GPR_ASSERT(connectivity_notification_pending_);
|
354
|
+
grpc_subchannel_notify_on_state_change(
|
355
|
+
subchannel_, subchannel_list_->policy()->interested_parties(),
|
356
|
+
&pending_connectivity_state_unsafe_, &connectivity_changed_closure_);
|
357
|
+
}
|
358
|
+
|
359
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
360
|
+
void SubchannelData<SubchannelListType,
|
361
|
+
SubchannelDataType>::StopConnectivityWatchLocked() {
|
362
|
+
if (subchannel_list_->tracer()->enabled()) {
|
363
|
+
gpr_log(GPR_INFO,
|
364
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
365
|
+
" (subchannel %p): stopping connectivity watch",
|
366
|
+
subchannel_list_->tracer()->name(), subchannel_list_->policy(),
|
367
|
+
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
368
|
+
subchannel_);
|
369
|
+
}
|
370
|
+
GPR_ASSERT(connectivity_notification_pending_);
|
371
|
+
connectivity_notification_pending_ = false;
|
372
|
+
subchannel_list()->Unref(DEBUG_LOCATION, "connectivity_watch");
|
373
|
+
}
|
374
|
+
|
375
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
376
|
+
void SubchannelData<SubchannelListType, SubchannelDataType>::
|
377
|
+
CancelConnectivityWatchLocked(const char* reason) {
|
378
|
+
if (subchannel_list_->tracer()->enabled()) {
|
379
|
+
gpr_log(GPR_INFO,
|
380
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
381
|
+
" (subchannel %p): canceling connectivity watch (%s)",
|
382
|
+
subchannel_list_->tracer()->name(), subchannel_list_->policy(),
|
383
|
+
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
384
|
+
subchannel_, reason);
|
385
|
+
}
|
386
|
+
GPR_ASSERT(connectivity_notification_pending_);
|
387
|
+
grpc_subchannel_notify_on_state_change(subchannel_, nullptr, nullptr,
|
388
|
+
&connectivity_changed_closure_);
|
389
|
+
}
|
390
|
+
|
391
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
392
|
+
bool SubchannelData<SubchannelListType,
|
393
|
+
SubchannelDataType>::UpdateConnectedSubchannelLocked() {
|
394
|
+
// If the subchannel is READY, take a ref to the connected subchannel.
|
395
|
+
if (pending_connectivity_state_unsafe_ == GRPC_CHANNEL_READY) {
|
396
|
+
connected_subchannel_ =
|
397
|
+
grpc_subchannel_get_connected_subchannel(subchannel_);
|
398
|
+
// If the subchannel became disconnected between the time that READY
|
399
|
+
// was reported and the time we got here (e.g., between when a
|
400
|
+
// notification callback is scheduled and when it was actually run in
|
401
|
+
// the combiner), then the connected subchannel may have disappeared out
|
402
|
+
// from under us. In that case, we don't actually want to consider the
|
403
|
+
// subchannel to be in state READY. Instead, we use IDLE as the
|
404
|
+
// basis for any future connectivity watch; this is the one state that
|
405
|
+
// the subchannel will never transition back into, so this ensures
|
406
|
+
// that we will get a notification for the next state, even if that state
|
407
|
+
// is READY again (e.g., if the subchannel has transitioned back to
|
408
|
+
// READY before the next watch gets requested).
|
409
|
+
if (connected_subchannel_ == nullptr) {
|
410
|
+
if (subchannel_list_->tracer()->enabled()) {
|
411
|
+
gpr_log(GPR_INFO,
|
412
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
413
|
+
" (subchannel %p): state is READY but connected subchannel is "
|
414
|
+
"null; moving to state IDLE",
|
415
|
+
subchannel_list_->tracer()->name(), subchannel_list_->policy(),
|
416
|
+
subchannel_list_, Index(), subchannel_list_->num_subchannels(),
|
417
|
+
subchannel_);
|
418
|
+
}
|
419
|
+
pending_connectivity_state_unsafe_ = GRPC_CHANNEL_IDLE;
|
420
|
+
return false;
|
421
|
+
}
|
422
|
+
} else {
|
423
|
+
// For any state other than READY, unref the connected subchannel.
|
424
|
+
connected_subchannel_.reset();
|
425
|
+
}
|
426
|
+
return true;
|
427
|
+
}
|
428
|
+
|
429
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
430
|
+
void SubchannelData<SubchannelListType, SubchannelDataType>::
|
431
|
+
OnConnectivityChangedLocked(void* arg, grpc_error* error) {
|
432
|
+
SubchannelData* sd = static_cast<SubchannelData*>(arg);
|
433
|
+
if (sd->subchannel_list_->tracer()->enabled()) {
|
434
|
+
gpr_log(
|
435
|
+
GPR_INFO,
|
436
|
+
"[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
437
|
+
" (subchannel %p): connectivity changed: state=%s, error=%s, "
|
438
|
+
"shutting_down=%d",
|
439
|
+
sd->subchannel_list_->tracer()->name(), sd->subchannel_list_->policy(),
|
440
|
+
sd->subchannel_list_, sd->Index(),
|
441
|
+
sd->subchannel_list_->num_subchannels(), sd->subchannel_,
|
442
|
+
grpc_connectivity_state_name(sd->pending_connectivity_state_unsafe_),
|
443
|
+
grpc_error_string(error), sd->subchannel_list_->shutting_down());
|
444
|
+
}
|
445
|
+
// If shutting down, unref subchannel and stop watching.
|
446
|
+
if (sd->subchannel_list_->shutting_down() || error == GRPC_ERROR_CANCELLED) {
|
447
|
+
sd->UnrefSubchannelLocked("connectivity_shutdown");
|
448
|
+
sd->StopConnectivityWatchLocked();
|
449
|
+
return;
|
450
|
+
}
|
451
|
+
// Get or release ref to connected subchannel.
|
452
|
+
if (!sd->UpdateConnectedSubchannelLocked()) {
|
453
|
+
// We don't want to report this connectivity state, so renew the watch.
|
454
|
+
sd->RenewConnectivityWatchLocked();
|
455
|
+
return;
|
456
|
+
}
|
457
|
+
// Call the subclass's ProcessConnectivityChangeLocked() method.
|
458
|
+
sd->ProcessConnectivityChangeLocked(sd->pending_connectivity_state_unsafe_,
|
459
|
+
GRPC_ERROR_REF(error));
|
460
|
+
}
|
461
|
+
|
462
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
463
|
+
void SubchannelData<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
|
464
|
+
// If there's a pending notification for this subchannel, cancel it;
|
465
|
+
// the callback is responsible for unreffing the subchannel.
|
466
|
+
// Otherwise, unref the subchannel directly.
|
467
|
+
if (connectivity_notification_pending_) {
|
468
|
+
CancelConnectivityWatchLocked("shutdown");
|
469
|
+
} else if (subchannel_ != nullptr) {
|
470
|
+
UnrefSubchannelLocked("shutdown");
|
471
|
+
}
|
472
|
+
}
|
473
|
+
|
474
|
+
//
|
475
|
+
// SubchannelList
|
476
|
+
//
|
477
|
+
|
478
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
479
|
+
SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
|
480
|
+
LoadBalancingPolicy* policy, TraceFlag* tracer,
|
121
481
|
const grpc_lb_addresses* addresses, grpc_combiner* combiner,
|
122
482
|
grpc_client_channel_factory* client_channel_factory,
|
123
|
-
const grpc_channel_args& args
|
483
|
+
const grpc_channel_args& args)
|
484
|
+
: InternallyRefCountedWithTracing<SubchannelListType>(tracer),
|
485
|
+
policy_(policy),
|
486
|
+
tracer_(tracer),
|
487
|
+
combiner_(GRPC_COMBINER_REF(combiner, "subchannel_list")) {
|
488
|
+
if (tracer_->enabled()) {
|
489
|
+
gpr_log(GPR_INFO,
|
490
|
+
"[%s %p] Creating subchannel list %p for %" PRIuPTR " subchannels",
|
491
|
+
tracer_->name(), policy, this, addresses->num_addresses);
|
492
|
+
}
|
493
|
+
subchannels_.reserve(addresses->num_addresses);
|
494
|
+
// We need to remove the LB addresses in order to be able to compare the
|
495
|
+
// subchannel keys of subchannels from a different batch of addresses.
|
496
|
+
static const char* keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS,
|
497
|
+
GRPC_ARG_LB_ADDRESSES};
|
498
|
+
// Create a subchannel for each address.
|
499
|
+
grpc_subchannel_args sc_args;
|
500
|
+
for (size_t i = 0; i < addresses->num_addresses; i++) {
|
501
|
+
// If there were any balancer, we would have chosen grpclb policy instead.
|
502
|
+
GPR_ASSERT(!addresses->addresses[i].is_balancer);
|
503
|
+
memset(&sc_args, 0, sizeof(grpc_subchannel_args));
|
504
|
+
grpc_arg addr_arg =
|
505
|
+
grpc_create_subchannel_address_arg(&addresses->addresses[i].address);
|
506
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
507
|
+
&args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), &addr_arg, 1);
|
508
|
+
gpr_free(addr_arg.value.string);
|
509
|
+
sc_args.args = new_args;
|
510
|
+
grpc_subchannel* subchannel = grpc_client_channel_factory_create_subchannel(
|
511
|
+
client_channel_factory, &sc_args);
|
512
|
+
grpc_channel_args_destroy(new_args);
|
513
|
+
if (subchannel == nullptr) {
|
514
|
+
// Subchannel could not be created.
|
515
|
+
if (tracer_->enabled()) {
|
516
|
+
char* address_uri =
|
517
|
+
grpc_sockaddr_to_uri(&addresses->addresses[i].address);
|
518
|
+
gpr_log(GPR_INFO,
|
519
|
+
"[%s %p] could not create subchannel for address uri %s, "
|
520
|
+
"ignoring",
|
521
|
+
tracer_->name(), policy_, address_uri);
|
522
|
+
gpr_free(address_uri);
|
523
|
+
}
|
524
|
+
continue;
|
525
|
+
}
|
526
|
+
if (tracer_->enabled()) {
|
527
|
+
char* address_uri =
|
528
|
+
grpc_sockaddr_to_uri(&addresses->addresses[i].address);
|
529
|
+
gpr_log(GPR_INFO,
|
530
|
+
"[%s %p] subchannel list %p index %" PRIuPTR
|
531
|
+
": Created subchannel %p for address uri %s",
|
532
|
+
tracer_->name(), policy_, this, subchannels_.size(), subchannel,
|
533
|
+
address_uri);
|
534
|
+
gpr_free(address_uri);
|
535
|
+
}
|
536
|
+
subchannels_.emplace_back(static_cast<SubchannelListType*>(this),
|
537
|
+
addresses->user_data_vtable,
|
538
|
+
addresses->addresses[i], subchannel, combiner);
|
539
|
+
}
|
540
|
+
}
|
541
|
+
|
542
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
543
|
+
SubchannelList<SubchannelListType, SubchannelDataType>::~SubchannelList() {
|
544
|
+
if (tracer_->enabled()) {
|
545
|
+
gpr_log(GPR_INFO, "[%s %p] Destroying subchannel_list %p", tracer_->name(),
|
546
|
+
policy_, this);
|
547
|
+
}
|
548
|
+
GRPC_COMBINER_UNREF(combiner_, "subchannel_list");
|
549
|
+
}
|
124
550
|
|
125
|
-
|
126
|
-
|
551
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
552
|
+
void SubchannelList<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
|
553
|
+
if (tracer_->enabled()) {
|
554
|
+
gpr_log(GPR_INFO, "[%s %p] Shutting down subchannel_list %p",
|
555
|
+
tracer_->name(), policy_, this);
|
556
|
+
}
|
557
|
+
GPR_ASSERT(!shutting_down_);
|
558
|
+
shutting_down_ = true;
|
559
|
+
for (size_t i = 0; i < subchannels_.size(); i++) {
|
560
|
+
SubchannelDataType* sd = &subchannels_[i];
|
561
|
+
sd->ShutdownLocked();
|
562
|
+
}
|
563
|
+
}
|
127
564
|
|
128
|
-
|
129
|
-
|
565
|
+
template <typename SubchannelListType, typename SubchannelDataType>
|
566
|
+
void SubchannelList<SubchannelListType,
|
567
|
+
SubchannelDataType>::ResetBackoffLocked() {
|
568
|
+
for (size_t i = 0; i < subchannels_.size(); i++) {
|
569
|
+
SubchannelDataType* sd = &subchannels_[i];
|
570
|
+
sd->ResetBackoffLocked();
|
571
|
+
}
|
572
|
+
}
|
130
573
|
|
131
|
-
|
132
|
-
/// connectivity state notification callback will ultimately unref it.
|
133
|
-
void grpc_lb_subchannel_list_shutdown_and_unref(
|
134
|
-
grpc_lb_subchannel_list* subchannel_list, const char* reason);
|
574
|
+
} // namespace grpc_core
|
135
575
|
|
136
576
|
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_SUBCHANNEL_LIST_H */
|