grpc 1.18.0 → 1.22.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +4731 -7404
- data/etc/roots.pem +146 -0
- data/include/grpc/grpc.h +11 -6
- data/include/grpc/grpc_security.h +297 -4
- data/include/grpc/grpc_security_constants.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +13 -0
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +30 -7
- data/include/grpc/impl/codegen/port_platform.h +88 -7
- data/include/grpc/impl/codegen/slice.h +2 -22
- data/include/grpc/impl/codegen/status.h +2 -1
- data/include/grpc/impl/codegen/sync_posix.h +18 -0
- data/include/grpc/slice.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
- data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
- data/src/core/ext/filters/client_channel/client_channel.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
- data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
- data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
- data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
- data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
- data/src/core/ext/filters/client_channel/resolver.cc +54 -1
- data/src/core/ext/filters/client_channel/resolver.h +52 -23
- data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -54
- data/src/core/ext/filters/client_channel/server_address.h +1 -13
- data/src/core/ext/filters/client_channel/service_config.cc +329 -0
- data/src/core/ext/filters/client_channel/service_config.h +205 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
- data/src/core/ext/filters/client_channel/subchannel.h +295 -128
- data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
- data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
- data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
- data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
- data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
- data/src/core/lib/channel/channel_args.cc +2 -101
- data/src/core/lib/channel/channel_args.h +3 -37
- data/src/core/lib/channel/channel_stack.h +10 -6
- data/src/core/lib/channel/channel_trace.cc +4 -4
- data/src/core/lib/channel/channel_trace.h +4 -4
- data/src/core/lib/channel/channelz.cc +168 -38
- data/src/core/lib/channel/channelz.h +40 -44
- data/src/core/lib/channel/channelz_registry.cc +75 -107
- data/src/core/lib/channel/channelz_registry.h +10 -28
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/handshaker.cc +151 -218
- data/src/core/lib/channel/handshaker.h +110 -101
- data/src/core/lib/channel/handshaker_factory.h +11 -19
- data/src/core/lib/channel/handshaker_registry.cc +67 -51
- data/src/core/lib/channel/handshaker_registry.h +21 -16
- data/src/core/lib/compression/algorithm_metadata.h +3 -3
- data/src/core/lib/compression/compression.cc +14 -9
- data/src/core/lib/compression/compression_args.cc +127 -0
- data/src/core/lib/compression/compression_args.h +55 -0
- data/src/core/lib/compression/compression_internal.cc +16 -12
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/debug/trace.cc +13 -7
- data/src/core/lib/debug/trace.h +14 -1
- data/src/core/lib/gpr/arena.h +13 -9
- data/src/core/lib/gpr/cpu_posix.cc +5 -3
- data/src/core/lib/gpr/env.h +3 -6
- data/src/core/lib/gpr/env_linux.cc +6 -1
- data/src/core/lib/gpr/env_posix.cc +5 -0
- data/src/core/lib/gpr/env_windows.cc +7 -5
- data/src/core/lib/gpr/log.cc +9 -13
- data/src/core/lib/gpr/log_posix.cc +2 -1
- data/src/core/lib/gpr/string.cc +20 -7
- data/src/core/lib/gpr/string.h +10 -3
- data/src/core/lib/gpr/sync_posix.cc +65 -4
- data/src/core/lib/gpr/time.cc +8 -0
- data/src/core/lib/gpr/time_posix.cc +21 -2
- data/src/core/lib/gprpp/arena.cc +103 -0
- data/src/core/lib/gprpp/arena.h +121 -0
- data/src/core/lib/gprpp/atomic.h +75 -5
- data/src/core/lib/gprpp/fork.cc +13 -32
- data/src/core/lib/gprpp/fork.h +5 -1
- data/src/core/lib/gprpp/global_config.h +96 -0
- data/src/core/lib/gprpp/global_config_custom.h +29 -0
- data/src/core/lib/gprpp/global_config_env.cc +135 -0
- data/src/core/lib/gprpp/global_config_env.h +131 -0
- data/src/core/lib/gprpp/global_config_generic.h +44 -0
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/map.h +436 -0
- data/src/core/lib/gprpp/memory.h +2 -2
- data/src/core/lib/gprpp/optional.h +48 -0
- data/src/core/lib/gprpp/orphanable.h +6 -5
- data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
- data/src/core/lib/gprpp/ref_counted.h +36 -17
- data/src/core/lib/gprpp/sync.h +126 -0
- data/src/core/lib/gprpp/thd.h +42 -7
- data/src/core/lib/gprpp/thd_posix.cc +31 -13
- data/src/core/lib/gprpp/thd_windows.cc +47 -34
- data/src/core/lib/http/httpcli.cc +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +13 -15
- data/src/core/lib/http/parser.cc +3 -2
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/buffer_list.cc +182 -24
- data/src/core/lib/iomgr/buffer_list.h +72 -10
- data/src/core/lib/iomgr/call_combiner.cc +84 -90
- data/src/core/lib/iomgr/call_combiner.h +75 -82
- data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
- data/src/core/lib/iomgr/cfstream_handle.h +86 -0
- data/src/core/lib/iomgr/combiner.cc +11 -3
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +3 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
- data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +21 -17
- data/src/core/lib/iomgr/error.h +36 -6
- data/src/core/lib/iomgr/error_cfstream.cc +52 -0
- data/src/core/lib/iomgr/error_cfstream.h +31 -0
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
- data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
- data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
- data/src/core/lib/iomgr/ev_posix.cc +29 -19
- data/src/core/lib/iomgr/ev_posix.h +19 -3
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -0
- data/src/core/lib/iomgr/exec_ctx.h +137 -8
- data/src/core/lib/iomgr/executor.cc +147 -95
- data/src/core/lib/iomgr/executor.h +55 -49
- data/src/core/lib/iomgr/fork_posix.cc +6 -5
- data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
- data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.h +105 -3
- data/src/core/lib/iomgr/iomgr.cc +20 -13
- data/src/core/lib/iomgr/iomgr.h +15 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
- data/src/core/lib/iomgr/iomgr_internal.h +12 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
- data/src/core/lib/iomgr/lockfree_event.cc +4 -4
- data/src/core/lib/iomgr/port.h +35 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
- data/src/core/lib/iomgr/resource_quota.cc +40 -37
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
- data/src/core/lib/iomgr/socket_windows.cc +19 -0
- data/src/core/lib/iomgr/socket_windows.h +8 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +10 -14
- data/src/core/lib/iomgr/tcp_posix.cc +256 -140
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
- data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
- data/src/core/lib/iomgr/tcp_uv.cc +5 -7
- data/src/core/lib/iomgr/tcp_windows.cc +8 -14
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -16
- data/src/core/lib/iomgr/timer_manager.cc +20 -11
- data/src/core/lib/iomgr/udp_server.cc +8 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
- data/src/core/lib/json/json.cc +1 -4
- data/src/core/lib/profiling/basic_timers.cc +10 -4
- data/src/core/lib/security/context/security_context.cc +6 -7
- data/src/core/lib/security/context/security_context.h +3 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
- data/src/core/lib/security/credentials/credentials.h +9 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/security_connector.cc +0 -1
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
- data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
- data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
- data/src/core/lib/security/transport/auth_filters.h +5 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
- data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
- data/src/core/lib/security/transport/security_handshaker.cc +271 -303
- data/src/core/lib/security/transport/security_handshaker.h +11 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
- data/src/core/lib/slice/b64.h +2 -2
- data/src/core/lib/slice/percent_encoding.cc +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +174 -122
- data/src/core/lib/slice/slice_buffer.cc +54 -21
- data/src/core/lib/slice/slice_hash_table.h +4 -4
- data/src/core/lib/slice/slice_intern.cc +49 -107
- data/src/core/lib/slice/slice_internal.h +264 -3
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +50 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
- data/src/core/lib/surface/api_trace.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +7 -2
- data/src/core/lib/surface/call_details.cc +0 -1
- data/src/core/lib/surface/channel.cc +89 -97
- data/src/core/lib/surface/channel.h +60 -6
- data/src/core/lib/surface/channel_init.h +5 -0
- data/src/core/lib/surface/completion_queue.cc +221 -216
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +82 -33
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +5 -7
- data/src/core/lib/surface/server.cc +42 -47
- data/src/core/lib/surface/validate_metadata.cc +14 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- 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/connectivity_state.cc +10 -40
- data/src/core/lib/transport/connectivity_state.h +0 -8
- data/src/core/lib/transport/error_utils.cc +12 -0
- data/src/core/lib/transport/metadata.cc +258 -267
- data/src/core/lib/transport/metadata.h +227 -16
- data/src/core/lib/transport/metadata_batch.cc +1 -1
- data/src/core/lib/transport/metadata_batch.h +1 -1
- data/src/core/lib/transport/static_metadata.cc +477 -399
- data/src/core/lib/transport/static_metadata.h +273 -182
- data/src/core/lib/transport/status_metadata.cc +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -1
- data/src/core/lib/transport/transport.cc +39 -72
- data/src/core/lib/transport/transport.h +59 -24
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +12 -10
- data/src/core/tsi/ssl_transport_security.h +24 -4
- data/src/ruby/bin/math_pb.rb +18 -16
- data/src/ruby/ext/grpc/extconf.rb +12 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_channel.c +14 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +23 -24
- data/src/ruby/ext/grpc/rb_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
- data/src/ruby/ext/grpc/rb_server.c +8 -4
- data/src/ruby/lib/grpc/errors.rb +22 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
- data/src/ruby/spec/errors_spec.rb +141 -0
- data/third_party/cares/cares/ares.h +12 -0
- data/third_party/cares/cares/ares_create_query.c +5 -1
- data/third_party/cares/cares/ares_data.c +74 -73
- data/third_party/cares/cares/ares_destroy.c +6 -1
- data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
- data/third_party/cares/cares/ares_gethostbyname.c +15 -4
- data/third_party/cares/cares/ares_getnameinfo.c +11 -0
- data/third_party/cares/cares/ares_init.c +274 -173
- data/third_party/cares/cares/ares_library_init.c +21 -3
- data/third_party/cares/cares/ares_options.c +6 -2
- data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
- data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
- data/third_party/cares/cares/ares_platform.c +7 -0
- data/third_party/cares/cares/ares_private.h +19 -11
- data/third_party/cares/cares/ares_process.c +27 -2
- data/third_party/cares/cares/ares_rules.h +1 -1
- data/third_party/cares/cares/ares_search.c +7 -0
- data/third_party/cares/cares/ares_send.c +6 -0
- data/third_party/cares/cares/ares_strsplit.c +174 -0
- data/third_party/cares/cares/ares_strsplit.h +43 -0
- data/third_party/cares/cares/ares_version.h +4 -4
- data/third_party/cares/cares/config-win32.h +1 -1
- data/third_party/cares/cares/inet_ntop.c +2 -3
- data/third_party/cares/config_darwin/ares_config.h +3 -0
- data/third_party/cares/config_freebsd/ares_config.h +3 -0
- data/third_party/cares/config_linux/ares_config.h +3 -0
- data/third_party/cares/config_openbsd/ares_config.h +3 -0
- metadata +83 -48
- data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
- data/src/core/ext/filters/client_channel/request_routing.h +0 -177
- data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
- data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
- data/src/core/lib/channel/handshaker_factory.cc +0 -42
- data/src/core/lib/gpr/arena.cc +0 -192
- data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
- data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
- data/src/core/lib/transport/service_config.cc +0 -106
- data/src/core/lib/transport/service_config.h +0 -249
@@ -1,177 +0,0 @@
|
|
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_REQUEST_ROUTING_H
|
20
|
-
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_REQUEST_ROUTING_H
|
21
|
-
|
22
|
-
#include <grpc/support/port_platform.h>
|
23
|
-
|
24
|
-
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
25
|
-
#include "src/core/ext/filters/client_channel/client_channel_factory.h"
|
26
|
-
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
27
|
-
#include "src/core/ext/filters/client_channel/resolver.h"
|
28
|
-
#include "src/core/lib/channel/channel_args.h"
|
29
|
-
#include "src/core/lib/channel/channel_stack.h"
|
30
|
-
#include "src/core/lib/debug/trace.h"
|
31
|
-
#include "src/core/lib/gprpp/inlined_vector.h"
|
32
|
-
#include "src/core/lib/gprpp/orphanable.h"
|
33
|
-
#include "src/core/lib/iomgr/call_combiner.h"
|
34
|
-
#include "src/core/lib/iomgr/closure.h"
|
35
|
-
#include "src/core/lib/iomgr/polling_entity.h"
|
36
|
-
#include "src/core/lib/iomgr/pollset_set.h"
|
37
|
-
#include "src/core/lib/transport/connectivity_state.h"
|
38
|
-
#include "src/core/lib/transport/metadata_batch.h"
|
39
|
-
|
40
|
-
namespace grpc_core {
|
41
|
-
|
42
|
-
class RequestRouter {
|
43
|
-
public:
|
44
|
-
class Request {
|
45
|
-
public:
|
46
|
-
// Synchronous callback that applies the service config to a call.
|
47
|
-
// Returns false if the call should be failed.
|
48
|
-
typedef bool (*ApplyServiceConfigCallback)(void* user_data);
|
49
|
-
|
50
|
-
Request(grpc_call_stack* owning_call, grpc_call_combiner* call_combiner,
|
51
|
-
grpc_polling_entity* pollent,
|
52
|
-
grpc_metadata_batch* send_initial_metadata,
|
53
|
-
uint32_t* send_initial_metadata_flags,
|
54
|
-
ApplyServiceConfigCallback apply_service_config,
|
55
|
-
void* apply_service_config_user_data, grpc_closure* on_route_done);
|
56
|
-
|
57
|
-
~Request();
|
58
|
-
|
59
|
-
// TODO(roth): It seems a bit ugly to expose this member in a
|
60
|
-
// non-const way. Find a better API to avoid this.
|
61
|
-
LoadBalancingPolicy::PickState* pick() { return &pick_; }
|
62
|
-
|
63
|
-
private:
|
64
|
-
friend class RequestRouter;
|
65
|
-
|
66
|
-
class ResolverResultWaiter;
|
67
|
-
class AsyncPickCanceller;
|
68
|
-
|
69
|
-
void ProcessServiceConfigAndStartLbPickLocked();
|
70
|
-
void StartLbPickLocked();
|
71
|
-
static void LbPickDoneLocked(void* arg, grpc_error* error);
|
72
|
-
|
73
|
-
void MaybeAddCallToInterestedPartiesLocked();
|
74
|
-
void MaybeRemoveCallFromInterestedPartiesLocked();
|
75
|
-
|
76
|
-
// Populated by caller.
|
77
|
-
grpc_call_stack* owning_call_;
|
78
|
-
grpc_call_combiner* call_combiner_;
|
79
|
-
grpc_polling_entity* pollent_;
|
80
|
-
ApplyServiceConfigCallback apply_service_config_;
|
81
|
-
void* apply_service_config_user_data_;
|
82
|
-
grpc_closure* on_route_done_;
|
83
|
-
LoadBalancingPolicy::PickState pick_;
|
84
|
-
|
85
|
-
// Internal state.
|
86
|
-
RequestRouter* request_router_ = nullptr;
|
87
|
-
bool pollent_added_to_interested_parties_ = false;
|
88
|
-
grpc_closure on_pick_done_;
|
89
|
-
AsyncPickCanceller* pick_canceller_ = nullptr;
|
90
|
-
};
|
91
|
-
|
92
|
-
// Synchronous callback that takes the service config JSON string and
|
93
|
-
// LB policy name.
|
94
|
-
// Returns true if the service config has changed since the last result.
|
95
|
-
typedef bool (*ProcessResolverResultCallback)(void* user_data,
|
96
|
-
const grpc_channel_args& args,
|
97
|
-
const char** lb_policy_name,
|
98
|
-
grpc_json** lb_policy_config);
|
99
|
-
|
100
|
-
RequestRouter(grpc_channel_stack* owning_stack, grpc_combiner* combiner,
|
101
|
-
grpc_client_channel_factory* client_channel_factory,
|
102
|
-
grpc_pollset_set* interested_parties, TraceFlag* tracer,
|
103
|
-
ProcessResolverResultCallback process_resolver_result,
|
104
|
-
void* process_resolver_result_user_data, const char* target_uri,
|
105
|
-
const grpc_channel_args* args, grpc_error** error);
|
106
|
-
|
107
|
-
~RequestRouter();
|
108
|
-
|
109
|
-
void set_channelz_node(channelz::ClientChannelNode* channelz_node) {
|
110
|
-
channelz_node_ = channelz_node;
|
111
|
-
}
|
112
|
-
|
113
|
-
void RouteCallLocked(Request* request);
|
114
|
-
|
115
|
-
// TODO(roth): Add methods to cancel picks.
|
116
|
-
|
117
|
-
void ShutdownLocked(grpc_error* error);
|
118
|
-
|
119
|
-
void ExitIdleLocked();
|
120
|
-
void ResetConnectionBackoffLocked();
|
121
|
-
|
122
|
-
grpc_connectivity_state GetConnectivityState();
|
123
|
-
void NotifyOnConnectivityStateChange(grpc_connectivity_state* state,
|
124
|
-
grpc_closure* closure);
|
125
|
-
|
126
|
-
LoadBalancingPolicy* lb_policy() const { return lb_policy_.get(); }
|
127
|
-
|
128
|
-
private:
|
129
|
-
using TraceStringVector = grpc_core::InlinedVector<char*, 3>;
|
130
|
-
|
131
|
-
class ReresolutionRequestHandler;
|
132
|
-
class LbConnectivityWatcher;
|
133
|
-
|
134
|
-
void StartResolvingLocked();
|
135
|
-
void OnResolverShutdownLocked(grpc_error* error);
|
136
|
-
void CreateNewLbPolicyLocked(const char* lb_policy_name, grpc_json* lb_config,
|
137
|
-
grpc_connectivity_state* connectivity_state,
|
138
|
-
grpc_error** connectivity_error,
|
139
|
-
TraceStringVector* trace_strings);
|
140
|
-
void MaybeAddTraceMessagesForAddressChangesLocked(
|
141
|
-
TraceStringVector* trace_strings);
|
142
|
-
void ConcatenateAndAddChannelTraceLocked(
|
143
|
-
TraceStringVector* trace_strings) const;
|
144
|
-
static void OnResolverResultChangedLocked(void* arg, grpc_error* error);
|
145
|
-
|
146
|
-
void SetConnectivityStateLocked(grpc_connectivity_state state,
|
147
|
-
grpc_error* error, const char* reason);
|
148
|
-
|
149
|
-
// Passed in from caller at construction time.
|
150
|
-
grpc_channel_stack* owning_stack_;
|
151
|
-
grpc_combiner* combiner_;
|
152
|
-
grpc_client_channel_factory* client_channel_factory_;
|
153
|
-
grpc_pollset_set* interested_parties_;
|
154
|
-
TraceFlag* tracer_;
|
155
|
-
|
156
|
-
channelz::ClientChannelNode* channelz_node_ = nullptr;
|
157
|
-
|
158
|
-
// Resolver and associated state.
|
159
|
-
OrphanablePtr<Resolver> resolver_;
|
160
|
-
ProcessResolverResultCallback process_resolver_result_;
|
161
|
-
void* process_resolver_result_user_data_;
|
162
|
-
bool started_resolving_ = false;
|
163
|
-
grpc_channel_args* resolver_result_ = nullptr;
|
164
|
-
bool previous_resolution_contained_addresses_ = false;
|
165
|
-
grpc_closure_list waiting_for_resolver_result_closures_;
|
166
|
-
grpc_closure on_resolver_result_changed_;
|
167
|
-
|
168
|
-
// LB policy and associated state.
|
169
|
-
OrphanablePtr<LoadBalancingPolicy> lb_policy_;
|
170
|
-
bool exit_idle_when_lb_policy_arrives_ = false;
|
171
|
-
|
172
|
-
grpc_connectivity_state_tracker state_tracker_;
|
173
|
-
};
|
174
|
-
|
175
|
-
} // namespace grpc_core
|
176
|
-
|
177
|
-
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_REQUEST_ROUTING_H */
|
@@ -1,248 +0,0 @@
|
|
1
|
-
//
|
2
|
-
//
|
3
|
-
// Copyright 2016 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/subchannel_index.h"
|
22
|
-
|
23
|
-
#include <stdbool.h>
|
24
|
-
#include <string.h>
|
25
|
-
|
26
|
-
#include <grpc/support/alloc.h>
|
27
|
-
#include <grpc/support/string_util.h>
|
28
|
-
|
29
|
-
#include "src/core/lib/avl/avl.h"
|
30
|
-
#include "src/core/lib/channel/channel_args.h"
|
31
|
-
#include "src/core/lib/gpr/tls.h"
|
32
|
-
|
33
|
-
// a map of subchannel_key --> subchannel, used for detecting connections
|
34
|
-
// to the same destination in order to share them
|
35
|
-
static grpc_avl g_subchannel_index;
|
36
|
-
|
37
|
-
static gpr_mu g_mu;
|
38
|
-
|
39
|
-
static gpr_refcount g_refcount;
|
40
|
-
|
41
|
-
struct grpc_subchannel_key {
|
42
|
-
grpc_subchannel_args args;
|
43
|
-
};
|
44
|
-
|
45
|
-
static bool g_force_creation = false;
|
46
|
-
|
47
|
-
static grpc_subchannel_key* create_key(
|
48
|
-
const grpc_subchannel_args* args,
|
49
|
-
grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args)) {
|
50
|
-
grpc_subchannel_key* k =
|
51
|
-
static_cast<grpc_subchannel_key*>(gpr_malloc(sizeof(*k)));
|
52
|
-
k->args.filter_count = args->filter_count;
|
53
|
-
if (k->args.filter_count > 0) {
|
54
|
-
k->args.filters = static_cast<const grpc_channel_filter**>(
|
55
|
-
gpr_malloc(sizeof(*k->args.filters) * k->args.filter_count));
|
56
|
-
memcpy(reinterpret_cast<grpc_channel_filter*>(k->args.filters),
|
57
|
-
args->filters, sizeof(*k->args.filters) * k->args.filter_count);
|
58
|
-
} else {
|
59
|
-
k->args.filters = nullptr;
|
60
|
-
}
|
61
|
-
k->args.args = copy_channel_args(args->args);
|
62
|
-
return k;
|
63
|
-
}
|
64
|
-
|
65
|
-
grpc_subchannel_key* grpc_subchannel_key_create(
|
66
|
-
const grpc_subchannel_args* args) {
|
67
|
-
return create_key(args, grpc_channel_args_normalize);
|
68
|
-
}
|
69
|
-
|
70
|
-
static grpc_subchannel_key* subchannel_key_copy(grpc_subchannel_key* k) {
|
71
|
-
return create_key(&k->args, grpc_channel_args_copy);
|
72
|
-
}
|
73
|
-
|
74
|
-
int grpc_subchannel_key_compare(const grpc_subchannel_key* a,
|
75
|
-
const grpc_subchannel_key* b) {
|
76
|
-
// To pretend the keys are different, return a non-zero value.
|
77
|
-
if (GPR_UNLIKELY(g_force_creation)) return 1;
|
78
|
-
int c = GPR_ICMP(a->args.filter_count, b->args.filter_count);
|
79
|
-
if (c != 0) return c;
|
80
|
-
if (a->args.filter_count > 0) {
|
81
|
-
c = memcmp(a->args.filters, b->args.filters,
|
82
|
-
a->args.filter_count * sizeof(*a->args.filters));
|
83
|
-
if (c != 0) return c;
|
84
|
-
}
|
85
|
-
return grpc_channel_args_compare(a->args.args, b->args.args);
|
86
|
-
}
|
87
|
-
|
88
|
-
void grpc_subchannel_key_destroy(grpc_subchannel_key* k) {
|
89
|
-
gpr_free(reinterpret_cast<grpc_channel_args*>(k->args.filters));
|
90
|
-
grpc_channel_args_destroy(const_cast<grpc_channel_args*>(k->args.args));
|
91
|
-
gpr_free(k);
|
92
|
-
}
|
93
|
-
|
94
|
-
static void sck_avl_destroy(void* p, void* unused) {
|
95
|
-
grpc_subchannel_key_destroy(static_cast<grpc_subchannel_key*>(p));
|
96
|
-
}
|
97
|
-
|
98
|
-
static void* sck_avl_copy(void* p, void* unused) {
|
99
|
-
return subchannel_key_copy(static_cast<grpc_subchannel_key*>(p));
|
100
|
-
}
|
101
|
-
|
102
|
-
static long sck_avl_compare(void* a, void* b, void* unused) {
|
103
|
-
return grpc_subchannel_key_compare(static_cast<grpc_subchannel_key*>(a),
|
104
|
-
static_cast<grpc_subchannel_key*>(b));
|
105
|
-
}
|
106
|
-
|
107
|
-
static void scv_avl_destroy(void* p, void* unused) {
|
108
|
-
GRPC_SUBCHANNEL_WEAK_UNREF((grpc_subchannel*)p, "subchannel_index");
|
109
|
-
}
|
110
|
-
|
111
|
-
static void* scv_avl_copy(void* p, void* unused) {
|
112
|
-
GRPC_SUBCHANNEL_WEAK_REF((grpc_subchannel*)p, "subchannel_index");
|
113
|
-
return p;
|
114
|
-
}
|
115
|
-
|
116
|
-
static const grpc_avl_vtable subchannel_avl_vtable = {
|
117
|
-
sck_avl_destroy, // destroy_key
|
118
|
-
sck_avl_copy, // copy_key
|
119
|
-
sck_avl_compare, // compare_keys
|
120
|
-
scv_avl_destroy, // destroy_value
|
121
|
-
scv_avl_copy // copy_value
|
122
|
-
};
|
123
|
-
|
124
|
-
void grpc_subchannel_index_init(void) {
|
125
|
-
g_subchannel_index = grpc_avl_create(&subchannel_avl_vtable);
|
126
|
-
gpr_mu_init(&g_mu);
|
127
|
-
gpr_ref_init(&g_refcount, 1);
|
128
|
-
}
|
129
|
-
|
130
|
-
void grpc_subchannel_index_shutdown(void) {
|
131
|
-
// TODO(juanlishen): This refcounting mechanism may lead to memory leackage.
|
132
|
-
// To solve that, we should force polling to flush any pending callbacks, then
|
133
|
-
// shutdown safely.
|
134
|
-
grpc_subchannel_index_unref();
|
135
|
-
}
|
136
|
-
|
137
|
-
void grpc_subchannel_index_unref(void) {
|
138
|
-
if (gpr_unref(&g_refcount)) {
|
139
|
-
gpr_mu_destroy(&g_mu);
|
140
|
-
grpc_avl_unref(g_subchannel_index, nullptr);
|
141
|
-
}
|
142
|
-
}
|
143
|
-
|
144
|
-
void grpc_subchannel_index_ref(void) { gpr_ref_non_zero(&g_refcount); }
|
145
|
-
|
146
|
-
grpc_subchannel* grpc_subchannel_index_find(grpc_subchannel_key* key) {
|
147
|
-
// Lock, and take a reference to the subchannel index.
|
148
|
-
// We don't need to do the search under a lock as avl's are immutable.
|
149
|
-
gpr_mu_lock(&g_mu);
|
150
|
-
grpc_avl index = grpc_avl_ref(g_subchannel_index, nullptr);
|
151
|
-
gpr_mu_unlock(&g_mu);
|
152
|
-
|
153
|
-
grpc_subchannel* c = GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(
|
154
|
-
(grpc_subchannel*)grpc_avl_get(index, key, nullptr), "index_find");
|
155
|
-
grpc_avl_unref(index, nullptr);
|
156
|
-
|
157
|
-
return c;
|
158
|
-
}
|
159
|
-
|
160
|
-
grpc_subchannel* grpc_subchannel_index_register(grpc_subchannel_key* key,
|
161
|
-
grpc_subchannel* constructed) {
|
162
|
-
grpc_subchannel* c = nullptr;
|
163
|
-
bool need_to_unref_constructed = false;
|
164
|
-
|
165
|
-
while (c == nullptr) {
|
166
|
-
need_to_unref_constructed = false;
|
167
|
-
|
168
|
-
// Compare and swap loop:
|
169
|
-
// - take a reference to the current index
|
170
|
-
gpr_mu_lock(&g_mu);
|
171
|
-
grpc_avl index = grpc_avl_ref(g_subchannel_index, nullptr);
|
172
|
-
gpr_mu_unlock(&g_mu);
|
173
|
-
|
174
|
-
// - Check to see if a subchannel already exists
|
175
|
-
c = static_cast<grpc_subchannel*>(grpc_avl_get(index, key, nullptr));
|
176
|
-
if (c != nullptr) {
|
177
|
-
c = GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(c, "index_register");
|
178
|
-
}
|
179
|
-
if (c != nullptr) {
|
180
|
-
// yes -> we're done
|
181
|
-
need_to_unref_constructed = true;
|
182
|
-
} else {
|
183
|
-
// no -> update the avl and compare/swap
|
184
|
-
grpc_avl updated = grpc_avl_add(
|
185
|
-
grpc_avl_ref(index, nullptr), subchannel_key_copy(key),
|
186
|
-
GRPC_SUBCHANNEL_WEAK_REF(constructed, "index_register"), nullptr);
|
187
|
-
|
188
|
-
// it may happen (but it's expected to be unlikely)
|
189
|
-
// that some other thread has changed the index:
|
190
|
-
// compare/swap here to check that, and retry as necessary
|
191
|
-
gpr_mu_lock(&g_mu);
|
192
|
-
if (index.root == g_subchannel_index.root) {
|
193
|
-
GPR_SWAP(grpc_avl, updated, g_subchannel_index);
|
194
|
-
c = constructed;
|
195
|
-
}
|
196
|
-
gpr_mu_unlock(&g_mu);
|
197
|
-
|
198
|
-
grpc_avl_unref(updated, nullptr);
|
199
|
-
}
|
200
|
-
grpc_avl_unref(index, nullptr);
|
201
|
-
}
|
202
|
-
|
203
|
-
if (need_to_unref_constructed) {
|
204
|
-
GRPC_SUBCHANNEL_UNREF(constructed, "index_register");
|
205
|
-
}
|
206
|
-
|
207
|
-
return c;
|
208
|
-
}
|
209
|
-
|
210
|
-
void grpc_subchannel_index_unregister(grpc_subchannel_key* key,
|
211
|
-
grpc_subchannel* constructed) {
|
212
|
-
bool done = false;
|
213
|
-
while (!done) {
|
214
|
-
// Compare and swap loop:
|
215
|
-
// - take a reference to the current index
|
216
|
-
gpr_mu_lock(&g_mu);
|
217
|
-
grpc_avl index = grpc_avl_ref(g_subchannel_index, nullptr);
|
218
|
-
gpr_mu_unlock(&g_mu);
|
219
|
-
|
220
|
-
// Check to see if this key still refers to the previously
|
221
|
-
// registered subchannel
|
222
|
-
grpc_subchannel* c =
|
223
|
-
static_cast<grpc_subchannel*>(grpc_avl_get(index, key, nullptr));
|
224
|
-
if (c != constructed) {
|
225
|
-
grpc_avl_unref(index, nullptr);
|
226
|
-
break;
|
227
|
-
}
|
228
|
-
|
229
|
-
// compare and swap the update (some other thread may have
|
230
|
-
// mutated the index behind us)
|
231
|
-
grpc_avl updated =
|
232
|
-
grpc_avl_remove(grpc_avl_ref(index, nullptr), key, nullptr);
|
233
|
-
|
234
|
-
gpr_mu_lock(&g_mu);
|
235
|
-
if (index.root == g_subchannel_index.root) {
|
236
|
-
GPR_SWAP(grpc_avl, updated, g_subchannel_index);
|
237
|
-
done = true;
|
238
|
-
}
|
239
|
-
gpr_mu_unlock(&g_mu);
|
240
|
-
|
241
|
-
grpc_avl_unref(updated, nullptr);
|
242
|
-
grpc_avl_unref(index, nullptr);
|
243
|
-
}
|
244
|
-
}
|
245
|
-
|
246
|
-
void grpc_subchannel_index_test_only_set_force_creation(bool force_creation) {
|
247
|
-
g_force_creation = force_creation;
|
248
|
-
}
|
@@ -1,76 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2016 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_SUBCHANNEL_INDEX_H
|
20
|
-
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H
|
21
|
-
|
22
|
-
#include <grpc/support/port_platform.h>
|
23
|
-
|
24
|
-
#include "src/core/ext/filters/client_channel/subchannel.h"
|
25
|
-
|
26
|
-
/** \file Provides an index of active subchannels so that they can be
|
27
|
-
shared amongst channels */
|
28
|
-
|
29
|
-
/** Create a key that can be used to uniquely identify a subchannel */
|
30
|
-
grpc_subchannel_key* grpc_subchannel_key_create(
|
31
|
-
const grpc_subchannel_args* args);
|
32
|
-
|
33
|
-
/** Destroy a subchannel key */
|
34
|
-
void grpc_subchannel_key_destroy(grpc_subchannel_key* key);
|
35
|
-
|
36
|
-
/** Given a subchannel key, find the subchannel registered for it.
|
37
|
-
Returns NULL if no such channel exists.
|
38
|
-
Thread-safe. */
|
39
|
-
grpc_subchannel* grpc_subchannel_index_find(grpc_subchannel_key* key);
|
40
|
-
|
41
|
-
/** Register a subchannel against a key.
|
42
|
-
Takes ownership of \a constructed.
|
43
|
-
Returns the registered subchannel. This may be different from
|
44
|
-
\a constructed in the case of a registration race. */
|
45
|
-
grpc_subchannel* grpc_subchannel_index_register(grpc_subchannel_key* key,
|
46
|
-
grpc_subchannel* constructed);
|
47
|
-
|
48
|
-
/** Remove \a constructed as the registered subchannel for \a key. */
|
49
|
-
void grpc_subchannel_index_unregister(grpc_subchannel_key* key,
|
50
|
-
grpc_subchannel* constructed);
|
51
|
-
|
52
|
-
int grpc_subchannel_key_compare(const grpc_subchannel_key* a,
|
53
|
-
const grpc_subchannel_key* b);
|
54
|
-
|
55
|
-
/** Initialize the subchannel index (global) */
|
56
|
-
void grpc_subchannel_index_init(void);
|
57
|
-
/** Shutdown the subchannel index (global) */
|
58
|
-
void grpc_subchannel_index_shutdown(void);
|
59
|
-
|
60
|
-
/** Increment the refcount (non-zero) of subchannel index (global). */
|
61
|
-
void grpc_subchannel_index_ref(void);
|
62
|
-
|
63
|
-
/** Decrement the refcount of subchannel index (global). If the refcount drops
|
64
|
-
to zero, unref the subchannel index and destroy its mutex. */
|
65
|
-
void grpc_subchannel_index_unref(void);
|
66
|
-
|
67
|
-
/** \em TEST ONLY.
|
68
|
-
* If \a force_creation is true, all keys are regarded different, resulting in
|
69
|
-
* new subchannels always being created. Otherwise, the keys will be compared as
|
70
|
-
* usual.
|
71
|
-
*
|
72
|
-
* Tests using this function \em MUST run tests with and without \a
|
73
|
-
* force_creation set. */
|
74
|
-
void grpc_subchannel_index_test_only_set_force_creation(bool force_creation);
|
75
|
-
|
76
|
-
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_INDEX_H */
|
@@ -1,42 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2016 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/lib/channel/handshaker_factory.h"
|
22
|
-
|
23
|
-
#include <grpc/support/log.h>
|
24
|
-
|
25
|
-
void grpc_handshaker_factory_add_handshakers(
|
26
|
-
grpc_handshaker_factory* handshaker_factory, const grpc_channel_args* args,
|
27
|
-
grpc_pollset_set* interested_parties,
|
28
|
-
grpc_handshake_manager* handshake_mgr) {
|
29
|
-
if (handshaker_factory != nullptr) {
|
30
|
-
GPR_ASSERT(handshaker_factory->vtable != nullptr);
|
31
|
-
handshaker_factory->vtable->add_handshakers(
|
32
|
-
handshaker_factory, args, interested_parties, handshake_mgr);
|
33
|
-
}
|
34
|
-
}
|
35
|
-
|
36
|
-
void grpc_handshaker_factory_destroy(
|
37
|
-
grpc_handshaker_factory* handshaker_factory) {
|
38
|
-
if (handshaker_factory != nullptr) {
|
39
|
-
GPR_ASSERT(handshaker_factory->vtable != nullptr);
|
40
|
-
handshaker_factory->vtable->destroy(handshaker_factory);
|
41
|
-
}
|
42
|
-
}
|