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
@@ -41,6 +41,11 @@ grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
|
|
41
41
|
return grpc_tcp_server_impl->add_port(s, addr, out_port);
|
42
42
|
}
|
43
43
|
|
44
|
+
grpc_core::TcpServerFdHandler* grpc_tcp_server_create_fd_handler(
|
45
|
+
grpc_tcp_server* s) {
|
46
|
+
return grpc_tcp_server_impl->create_fd_handler(s);
|
47
|
+
}
|
48
|
+
|
44
49
|
unsigned grpc_tcp_server_port_fd_count(grpc_tcp_server* s,
|
45
50
|
unsigned port_index) {
|
46
51
|
return grpc_tcp_server_impl->port_fd_count(s, port_index);
|
@@ -22,7 +22,9 @@
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
24
|
#include <grpc/grpc.h>
|
25
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
25
26
|
|
27
|
+
#include "src/core/lib/gprpp/abstract.h"
|
26
28
|
#include "src/core/lib/iomgr/closure.h"
|
27
29
|
#include "src/core/lib/iomgr/endpoint.h"
|
28
30
|
#include "src/core/lib/iomgr/resolve_address.h"
|
@@ -37,6 +39,10 @@ typedef struct grpc_tcp_server_acceptor {
|
|
37
39
|
/* Indices that may be passed to grpc_tcp_server_port_fd(). */
|
38
40
|
unsigned port_index;
|
39
41
|
unsigned fd_index;
|
42
|
+
/* Data when the connection is passed to tcp_server from external. */
|
43
|
+
bool external_connection;
|
44
|
+
int listener_fd;
|
45
|
+
grpc_byte_buffer* pending_data;
|
40
46
|
} grpc_tcp_server_acceptor;
|
41
47
|
|
42
48
|
/* Called for newly connected TCP connections.
|
@@ -44,6 +50,18 @@ typedef struct grpc_tcp_server_acceptor {
|
|
44
50
|
typedef void (*grpc_tcp_server_cb)(void* arg, grpc_endpoint* ep,
|
45
51
|
grpc_pollset* accepting_pollset,
|
46
52
|
grpc_tcp_server_acceptor* acceptor);
|
53
|
+
namespace grpc_core {
|
54
|
+
// An interface for a handler to take a externally connected fd as a internal
|
55
|
+
// connection.
|
56
|
+
class TcpServerFdHandler {
|
57
|
+
public:
|
58
|
+
virtual ~TcpServerFdHandler() = default;
|
59
|
+
virtual void Handle(int listener_fd, int fd,
|
60
|
+
grpc_byte_buffer* pending_read) GRPC_ABSTRACT;
|
61
|
+
|
62
|
+
GRPC_ABSTRACT_BASE_CLASS;
|
63
|
+
};
|
64
|
+
} // namespace grpc_core
|
47
65
|
|
48
66
|
typedef struct grpc_tcp_server_vtable {
|
49
67
|
grpc_error* (*create)(grpc_closure* shutdown_complete,
|
@@ -54,6 +72,7 @@ typedef struct grpc_tcp_server_vtable {
|
|
54
72
|
void* cb_arg);
|
55
73
|
grpc_error* (*add_port)(grpc_tcp_server* s, const grpc_resolved_address* addr,
|
56
74
|
int* out_port);
|
75
|
+
grpc_core::TcpServerFdHandler* (*create_fd_handler)(grpc_tcp_server* s);
|
57
76
|
unsigned (*port_fd_count)(grpc_tcp_server* s, unsigned port_index);
|
58
77
|
int (*port_fd)(grpc_tcp_server* s, unsigned port_index, unsigned fd_index);
|
59
78
|
grpc_tcp_server* (*ref)(grpc_tcp_server* s);
|
@@ -88,6 +107,11 @@ grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
|
|
88
107
|
const grpc_resolved_address* addr,
|
89
108
|
int* out_port);
|
90
109
|
|
110
|
+
/* Create and return a TcpServerFdHandler so that it can be used by upper layer
|
111
|
+
to hand over an externally connected fd to the grpc server. */
|
112
|
+
grpc_core::TcpServerFdHandler* grpc_tcp_server_create_fd_handler(
|
113
|
+
grpc_tcp_server* s);
|
114
|
+
|
91
115
|
/* Number of fds at the given port_index, or 0 if port_index is out of
|
92
116
|
bounds. */
|
93
117
|
unsigned grpc_tcp_server_port_fd_count(grpc_tcp_server* s, unsigned port_index);
|
@@ -220,7 +220,7 @@ static void finish_accept(grpc_tcp_listener* sp, grpc_custom_socket* socket) {
|
|
220
220
|
GRPC_LOG_IF_ERROR("getpeername error", err);
|
221
221
|
GRPC_ERROR_UNREF(err);
|
222
222
|
}
|
223
|
-
if (grpc_tcp_trace
|
223
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
224
224
|
if (peer_name_string) {
|
225
225
|
gpr_log(GPR_INFO, "SERVER_CONNECT: %p accepted connection: %s",
|
226
226
|
sp->server, peer_name_string);
|
@@ -233,6 +233,7 @@ static void finish_accept(grpc_tcp_listener* sp, grpc_custom_socket* socket) {
|
|
233
233
|
acceptor->from_server = sp->server;
|
234
234
|
acceptor->port_index = sp->port_index;
|
235
235
|
acceptor->fd_index = 0;
|
236
|
+
acceptor->external_connection = false;
|
236
237
|
sp->server->on_accept_cb(sp->server->on_accept_cb_arg, ep, nullptr, acceptor);
|
237
238
|
gpr_free(peer_name_string);
|
238
239
|
}
|
@@ -372,7 +373,7 @@ static grpc_error* tcp_server_add_port(grpc_tcp_server* s,
|
|
372
373
|
addr = &wildcard;
|
373
374
|
}
|
374
375
|
|
375
|
-
if (grpc_tcp_trace
|
376
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
376
377
|
char* port_string;
|
377
378
|
grpc_sockaddr_to_string(&port_string, addr, 0);
|
378
379
|
const char* str = grpc_error_string(error);
|
@@ -418,7 +419,7 @@ static void tcp_server_start(grpc_tcp_server* server, grpc_pollset** pollsets,
|
|
418
419
|
(void)pollsets;
|
419
420
|
(void)pollset_count;
|
420
421
|
GRPC_CUSTOM_IOMGR_ASSERT_SAME_THREAD();
|
421
|
-
if (grpc_tcp_trace
|
422
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
422
423
|
gpr_log(GPR_INFO, "SERVER_START %p", server);
|
423
424
|
}
|
424
425
|
GPR_ASSERT(on_accept_cb);
|
@@ -456,16 +457,17 @@ static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {
|
|
456
457
|
}
|
457
458
|
}
|
458
459
|
|
460
|
+
static grpc_core::TcpServerFdHandler* tcp_server_create_fd_handler(
|
461
|
+
grpc_tcp_server* s) {
|
462
|
+
return nullptr;
|
463
|
+
}
|
464
|
+
|
459
465
|
grpc_tcp_server_vtable custom_tcp_server_vtable = {
|
460
|
-
tcp_server_create,
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
tcp_server_ref,
|
466
|
-
tcp_server_shutdown_starting_add,
|
467
|
-
tcp_server_unref,
|
468
|
-
tcp_server_shutdown_listeners};
|
466
|
+
tcp_server_create, tcp_server_start,
|
467
|
+
tcp_server_add_port, tcp_server_create_fd_handler,
|
468
|
+
tcp_server_port_fd_count, tcp_server_port_fd,
|
469
|
+
tcp_server_ref, tcp_server_shutdown_starting_add,
|
470
|
+
tcp_server_unref, tcp_server_shutdown_listeners};
|
469
471
|
|
470
472
|
#ifdef GRPC_UV_TEST
|
471
473
|
grpc_tcp_server_vtable* default_tcp_server_vtable = &custom_tcp_server_vtable;
|
@@ -27,8 +27,6 @@
|
|
27
27
|
|
28
28
|
#ifdef GRPC_POSIX_SOCKET_TCP_SERVER
|
29
29
|
|
30
|
-
#include "src/core/lib/iomgr/tcp_server.h"
|
31
|
-
|
32
30
|
#include <errno.h>
|
33
31
|
#include <fcntl.h>
|
34
32
|
#include <netinet/in.h>
|
@@ -47,11 +45,14 @@
|
|
47
45
|
|
48
46
|
#include "src/core/lib/channel/channel_args.h"
|
49
47
|
#include "src/core/lib/gpr/string.h"
|
48
|
+
#include "src/core/lib/gprpp/memory.h"
|
49
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
50
50
|
#include "src/core/lib/iomgr/resolve_address.h"
|
51
51
|
#include "src/core/lib/iomgr/sockaddr.h"
|
52
52
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
53
53
|
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
54
54
|
#include "src/core/lib/iomgr/tcp_posix.h"
|
55
|
+
#include "src/core/lib/iomgr/tcp_server.h"
|
55
56
|
#include "src/core/lib/iomgr/tcp_server_utils_posix.h"
|
56
57
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
57
58
|
|
@@ -96,6 +97,7 @@ static grpc_error* tcp_server_create(grpc_closure* shutdown_complete,
|
|
96
97
|
s->tail = nullptr;
|
97
98
|
s->nports = 0;
|
98
99
|
s->channel_args = grpc_channel_args_copy(args);
|
100
|
+
s->fd_handler = nullptr;
|
99
101
|
gpr_atm_no_barrier_store(&s->next_pollset_to_assign, 0);
|
100
102
|
*server = s;
|
101
103
|
return GRPC_ERROR_NONE;
|
@@ -117,6 +119,7 @@ static void finish_shutdown(grpc_tcp_server* s) {
|
|
117
119
|
gpr_free(sp);
|
118
120
|
}
|
119
121
|
grpc_channel_args_destroy(s->channel_args);
|
122
|
+
grpc_core::Delete(s->fd_handler);
|
120
123
|
|
121
124
|
gpr_free(s);
|
122
125
|
}
|
@@ -217,12 +220,25 @@ static void on_read(void* arg, grpc_error* err) {
|
|
217
220
|
}
|
218
221
|
}
|
219
222
|
|
223
|
+
/* For UNIX sockets, the accept call might not fill up the member sun_path
|
224
|
+
* of sockaddr_un, so explicitly call getsockname to get it. */
|
225
|
+
if (grpc_is_unix_socket(&addr)) {
|
226
|
+
memset(&addr, 0, sizeof(addr));
|
227
|
+
addr.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
228
|
+
if (getsockname(fd, reinterpret_cast<struct sockaddr*>(addr.addr),
|
229
|
+
&(addr.len)) < 0) {
|
230
|
+
gpr_log(GPR_ERROR, "Failed getsockname: %s", strerror(errno));
|
231
|
+
close(fd);
|
232
|
+
goto error;
|
233
|
+
}
|
234
|
+
}
|
235
|
+
|
220
236
|
grpc_set_socket_no_sigpipe_if_possible(fd);
|
221
237
|
|
222
238
|
addr_str = grpc_sockaddr_to_uri(&addr);
|
223
239
|
gpr_asprintf(&name, "tcp-server-connection:%s", addr_str);
|
224
240
|
|
225
|
-
if (grpc_tcp_trace
|
241
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
226
242
|
gpr_log(GPR_INFO, "SERVER_CONNECT: incoming connection: %s", addr_str);
|
227
243
|
}
|
228
244
|
|
@@ -241,6 +257,7 @@ static void on_read(void* arg, grpc_error* err) {
|
|
241
257
|
acceptor->from_server = sp->server;
|
242
258
|
acceptor->port_index = sp->port_index;
|
243
259
|
acceptor->fd_index = sp->fd_index;
|
260
|
+
acceptor->external_connection = false;
|
244
261
|
|
245
262
|
sp->server->on_accept_cb(
|
246
263
|
sp->server->on_accept_cb_arg,
|
@@ -549,14 +566,71 @@ static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {
|
|
549
566
|
gpr_mu_unlock(&s->mu);
|
550
567
|
}
|
551
568
|
|
569
|
+
namespace {
|
570
|
+
class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
|
571
|
+
public:
|
572
|
+
explicit ExternalConnectionHandler(grpc_tcp_server* s) : s_(s) {}
|
573
|
+
|
574
|
+
// TODO(yangg) resolve duplicate code with on_read
|
575
|
+
void Handle(int listener_fd, int fd, grpc_byte_buffer* buf) override {
|
576
|
+
grpc_pollset* read_notifier_pollset;
|
577
|
+
grpc_resolved_address addr;
|
578
|
+
char* addr_str;
|
579
|
+
char* name;
|
580
|
+
memset(&addr, 0, sizeof(addr));
|
581
|
+
addr.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
582
|
+
grpc_core::ExecCtx exec_ctx;
|
583
|
+
|
584
|
+
if (getpeername(fd, reinterpret_cast<struct sockaddr*>(addr.addr),
|
585
|
+
&(addr.len)) < 0) {
|
586
|
+
gpr_log(GPR_ERROR, "Failed getpeername: %s", strerror(errno));
|
587
|
+
close(fd);
|
588
|
+
return;
|
589
|
+
}
|
590
|
+
grpc_set_socket_no_sigpipe_if_possible(fd);
|
591
|
+
addr_str = grpc_sockaddr_to_uri(&addr);
|
592
|
+
gpr_asprintf(&name, "tcp-server-connection:%s", addr_str);
|
593
|
+
if (grpc_tcp_trace.enabled()) {
|
594
|
+
gpr_log(GPR_INFO, "SERVER_CONNECT: incoming external connection: %s",
|
595
|
+
addr_str);
|
596
|
+
}
|
597
|
+
grpc_fd* fdobj = grpc_fd_create(fd, name, true);
|
598
|
+
read_notifier_pollset =
|
599
|
+
s_->pollsets[static_cast<size_t>(gpr_atm_no_barrier_fetch_add(
|
600
|
+
&s_->next_pollset_to_assign, 1)) %
|
601
|
+
s_->pollset_count];
|
602
|
+
grpc_pollset_add_fd(read_notifier_pollset, fdobj);
|
603
|
+
grpc_tcp_server_acceptor* acceptor =
|
604
|
+
static_cast<grpc_tcp_server_acceptor*>(gpr_malloc(sizeof(*acceptor)));
|
605
|
+
acceptor->from_server = s_;
|
606
|
+
acceptor->port_index = -1;
|
607
|
+
acceptor->fd_index = -1;
|
608
|
+
acceptor->external_connection = true;
|
609
|
+
acceptor->listener_fd = listener_fd;
|
610
|
+
acceptor->pending_data = buf;
|
611
|
+
s_->on_accept_cb(s_->on_accept_cb_arg,
|
612
|
+
grpc_tcp_create(fdobj, s_->channel_args, addr_str),
|
613
|
+
read_notifier_pollset, acceptor);
|
614
|
+
gpr_free(name);
|
615
|
+
gpr_free(addr_str);
|
616
|
+
}
|
617
|
+
|
618
|
+
private:
|
619
|
+
grpc_tcp_server* s_;
|
620
|
+
};
|
621
|
+
} // namespace
|
622
|
+
|
623
|
+
static grpc_core::TcpServerFdHandler* tcp_server_create_fd_handler(
|
624
|
+
grpc_tcp_server* s) {
|
625
|
+
s->fd_handler = grpc_core::New<ExternalConnectionHandler>(s);
|
626
|
+
return s->fd_handler;
|
627
|
+
}
|
628
|
+
|
552
629
|
grpc_tcp_server_vtable grpc_posix_tcp_server_vtable = {
|
553
|
-
tcp_server_create,
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
tcp_server_shutdown_starting_add,
|
560
|
-
tcp_server_unref,
|
561
|
-
tcp_server_shutdown_listeners};
|
630
|
+
tcp_server_create, tcp_server_start,
|
631
|
+
tcp_server_add_port, tcp_server_create_fd_handler,
|
632
|
+
tcp_server_port_fd_count, tcp_server_port_fd,
|
633
|
+
tcp_server_ref, tcp_server_shutdown_starting_add,
|
634
|
+
tcp_server_unref, tcp_server_shutdown_listeners};
|
635
|
+
|
562
636
|
#endif /* GRPC_POSIX_SOCKET_TCP_SERVER */
|
@@ -92,6 +92,9 @@ struct grpc_tcp_server {
|
|
92
92
|
|
93
93
|
/* channel args for this server */
|
94
94
|
grpc_channel_args* channel_args;
|
95
|
+
|
96
|
+
/* a handler for external connections, owned */
|
97
|
+
grpc_core::TcpServerFdHandler* fd_handler;
|
95
98
|
};
|
96
99
|
|
97
100
|
/* If successful, add a listener to \a s for \a addr, set \a dsmode for the
|
@@ -255,7 +255,7 @@ static grpc_error* start_accept_locked(grpc_tcp_listener* port) {
|
|
255
255
|
}
|
256
256
|
|
257
257
|
sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
|
258
|
-
|
258
|
+
grpc_get_default_wsa_socket_flags());
|
259
259
|
if (sock == INVALID_SOCKET) {
|
260
260
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket");
|
261
261
|
goto failure;
|
@@ -372,6 +372,7 @@ static void on_accept(void* arg, grpc_error* error) {
|
|
372
372
|
acceptor->from_server = sp->server;
|
373
373
|
acceptor->port_index = sp->port_index;
|
374
374
|
acceptor->fd_index = 0;
|
375
|
+
acceptor->external_connection = false;
|
375
376
|
sp->server->on_accept_cb(sp->server->on_accept_cb_arg, ep, NULL, acceptor);
|
376
377
|
}
|
377
378
|
/* As we were notified from the IOCP of one and exactly one accept,
|
@@ -493,7 +494,7 @@ static grpc_error* tcp_server_add_port(grpc_tcp_server* s,
|
|
493
494
|
}
|
494
495
|
|
495
496
|
sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
|
496
|
-
|
497
|
+
grpc_get_default_wsa_socket_flags());
|
497
498
|
if (sock == INVALID_SOCKET) {
|
498
499
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket");
|
499
500
|
goto done;
|
@@ -545,16 +546,17 @@ static int tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
|
|
545
546
|
return -1;
|
546
547
|
}
|
547
548
|
|
549
|
+
static grpc_core::TcpServerFdHandler* tcp_server_create_fd_handler(
|
550
|
+
grpc_tcp_server* s) {
|
551
|
+
return nullptr;
|
552
|
+
}
|
553
|
+
|
548
554
|
static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {}
|
549
555
|
|
550
556
|
grpc_tcp_server_vtable grpc_windows_tcp_server_vtable = {
|
551
|
-
tcp_server_create,
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
tcp_server_ref,
|
557
|
-
tcp_server_shutdown_starting_add,
|
558
|
-
tcp_server_unref,
|
559
|
-
tcp_server_shutdown_listeners};
|
557
|
+
tcp_server_create, tcp_server_start,
|
558
|
+
tcp_server_add_port, tcp_server_create_fd_handler,
|
559
|
+
tcp_server_port_fd_count, tcp_server_port_fd,
|
560
|
+
tcp_server_ref, tcp_server_shutdown_starting_add,
|
561
|
+
tcp_server_unref, tcp_server_shutdown_listeners};
|
560
562
|
#endif /* GRPC_WINSOCK_SOCKET */
|
@@ -33,7 +33,6 @@
|
|
33
33
|
#include "src/core/lib/gpr/string.h"
|
34
34
|
#include "src/core/lib/iomgr/error.h"
|
35
35
|
#include "src/core/lib/iomgr/iomgr_custom.h"
|
36
|
-
#include "src/core/lib/iomgr/network_status_tracker.h"
|
37
36
|
#include "src/core/lib/iomgr/resolve_address_custom.h"
|
38
37
|
#include "src/core/lib/iomgr/resource_quota.h"
|
39
38
|
#include "src/core/lib/iomgr/tcp_custom.h"
|
@@ -54,7 +53,7 @@ typedef struct uv_socket_t {
|
|
54
53
|
char* read_buf;
|
55
54
|
size_t read_len;
|
56
55
|
|
57
|
-
|
56
|
+
int pending_connections;
|
58
57
|
grpc_custom_socket* accept_socket;
|
59
58
|
grpc_error* accept_error;
|
60
59
|
|
@@ -207,7 +206,7 @@ static grpc_error* uv_socket_init_helper(uv_socket_t* uv_socket, int domain) {
|
|
207
206
|
// Node uses a garbage collector to call destructors, so we don't
|
208
207
|
// want to hold the uv loop open with active gRPC objects.
|
209
208
|
uv_unref((uv_handle_t*)uv_socket->handle);
|
210
|
-
uv_socket->
|
209
|
+
uv_socket->pending_connections = 0;
|
211
210
|
uv_socket->accept_socket = nullptr;
|
212
211
|
uv_socket->accept_error = GRPC_ERROR_NONE;
|
213
212
|
return GRPC_ERROR_NONE;
|
@@ -244,14 +243,14 @@ static grpc_error* uv_socket_getsockname(grpc_custom_socket* socket,
|
|
244
243
|
|
245
244
|
static void accept_new_connection(grpc_custom_socket* socket) {
|
246
245
|
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
247
|
-
if (
|
246
|
+
if (uv_socket->pending_connections == 0 || !uv_socket->accept_socket) {
|
248
247
|
return;
|
249
248
|
}
|
250
249
|
grpc_custom_socket* new_socket = uv_socket->accept_socket;
|
251
250
|
grpc_error* error = uv_socket->accept_error;
|
252
251
|
uv_socket->accept_socket = nullptr;
|
253
252
|
uv_socket->accept_error = GRPC_ERROR_NONE;
|
254
|
-
uv_socket->
|
253
|
+
uv_socket->pending_connections -= 1;
|
255
254
|
if (uv_socket->accept_error != GRPC_ERROR_NONE) {
|
256
255
|
uv_stream_t dummy_handle;
|
257
256
|
uv_accept((uv_stream_t*)uv_socket->handle, &dummy_handle);
|
@@ -271,8 +270,6 @@ static void accept_new_connection(grpc_custom_socket* socket) {
|
|
271
270
|
static void uv_on_connect(uv_stream_t* server, int status) {
|
272
271
|
grpc_custom_socket* socket = (grpc_custom_socket*)server->data;
|
273
272
|
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
274
|
-
GPR_ASSERT(!uv_socket->pending_connection);
|
275
|
-
uv_socket->pending_connection = true;
|
276
273
|
if (status < 0) {
|
277
274
|
switch (status) {
|
278
275
|
case UV_EINTR:
|
@@ -282,6 +279,7 @@ static void uv_on_connect(uv_stream_t* server, int status) {
|
|
282
279
|
uv_socket->accept_error = tcp_error_create("accept failed", status);
|
283
280
|
}
|
284
281
|
}
|
282
|
+
uv_socket->pending_connections += 1;
|
285
283
|
accept_new_connection(socket);
|
286
284
|
}
|
287
285
|
|
@@ -24,7 +24,6 @@
|
|
24
24
|
|
25
25
|
#include <limits.h>
|
26
26
|
|
27
|
-
#include "src/core/lib/iomgr/network_status_tracker.h"
|
28
27
|
#include "src/core/lib/iomgr/sockaddr_windows.h"
|
29
28
|
|
30
29
|
#include <grpc/slice_buffer.h>
|
@@ -75,18 +74,16 @@ static grpc_error* set_dualstack(SOCKET sock) {
|
|
75
74
|
: GRPC_WSA_ERROR(WSAGetLastError(), "setsockopt(IPV6_V6ONLY)");
|
76
75
|
}
|
77
76
|
|
78
|
-
static grpc_error*
|
77
|
+
static grpc_error* enable_socket_low_latency(SOCKET sock) {
|
79
78
|
int status;
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
¶m, sizeof(param), NULL, 0, &ret, 0, 0);
|
79
|
+
BOOL param = TRUE;
|
80
|
+
status = ::setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
|
81
|
+
reinterpret_cast<char*>(¶m), sizeof(param));
|
84
82
|
if (status == SOCKET_ERROR) {
|
85
83
|
status = WSAGetLastError();
|
86
84
|
}
|
87
|
-
return status == 0
|
88
|
-
|
89
|
-
: GRPC_WSA_ERROR(status, "WSAIoctl(SIO_LOOPBACK_FAST_PATH)");
|
85
|
+
return status == 0 ? GRPC_ERROR_NONE
|
86
|
+
: GRPC_WSA_ERROR(status, "setsockopt(TCP_NODELAY)");
|
90
87
|
}
|
91
88
|
|
92
89
|
grpc_error* grpc_tcp_prepare_socket(SOCKET sock) {
|
@@ -95,7 +92,7 @@ grpc_error* grpc_tcp_prepare_socket(SOCKET sock) {
|
|
95
92
|
if (err != GRPC_ERROR_NONE) return err;
|
96
93
|
err = set_dualstack(sock);
|
97
94
|
if (err != GRPC_ERROR_NONE) return err;
|
98
|
-
err =
|
95
|
+
err = enable_socket_low_latency(sock);
|
99
96
|
if (err != GRPC_ERROR_NONE) return err;
|
100
97
|
return GRPC_ERROR_NONE;
|
101
98
|
}
|
@@ -242,7 +239,7 @@ static void on_read(void* tcpp, grpc_error* error) {
|
|
242
239
|
#define DEFAULT_TARGET_READ_SIZE 8192
|
243
240
|
#define MAX_WSABUF_COUNT 16
|
244
241
|
static void win_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
|
245
|
-
grpc_closure* cb) {
|
242
|
+
grpc_closure* cb, bool urgent) {
|
246
243
|
grpc_tcp* tcp = (grpc_tcp*)ep;
|
247
244
|
grpc_winsocket* handle = tcp->socket;
|
248
245
|
grpc_winsocket_callback_info* info = &handle->read_info;
|
@@ -470,7 +467,6 @@ static void win_shutdown(grpc_endpoint* ep, grpc_error* why) {
|
|
470
467
|
}
|
471
468
|
|
472
469
|
static void win_destroy(grpc_endpoint* ep) {
|
473
|
-
grpc_network_status_unregister_endpoint(ep);
|
474
470
|
grpc_tcp* tcp = (grpc_tcp*)ep;
|
475
471
|
grpc_slice_buffer_reset_and_unref_internal(&tcp->last_read_buffer);
|
476
472
|
TCP_UNREF(tcp, "destroy");
|
@@ -526,8 +522,6 @@ grpc_endpoint* grpc_tcp_create(grpc_winsocket* socket,
|
|
526
522
|
tcp->peer_string = gpr_strdup(peer_string);
|
527
523
|
grpc_slice_buffer_init(&tcp->last_read_buffer);
|
528
524
|
tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
|
529
|
-
/* Tell network status tracking code about the new endpoint */
|
530
|
-
grpc_network_status_register_endpoint(&tcp->base);
|
531
525
|
grpc_resource_quota_unref_internal(resource_quota);
|
532
526
|
|
533
527
|
return &tcp->base;
|
data/src/core/lib/iomgr/timer.h
CHANGED
@@ -29,7 +29,8 @@
|
|
29
29
|
|
30
30
|
typedef struct grpc_timer {
|
31
31
|
grpc_millis deadline;
|
32
|
-
|
32
|
+
// Uninitialized if not using heap, or INVALID_HEAP_INDEX if not in heap.
|
33
|
+
uint32_t heap_index;
|
33
34
|
bool pending;
|
34
35
|
struct grpc_timer* next;
|
35
36
|
struct grpc_timer* prev;
|
@@ -361,7 +361,7 @@ static void timer_init(grpc_timer* timer, grpc_millis deadline,
|
|
361
361
|
timer->hash_table_next = nullptr;
|
362
362
|
#endif
|
363
363
|
|
364
|
-
if (grpc_timer_trace
|
364
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_trace)) {
|
365
365
|
gpr_log(GPR_INFO, "TIMER %p: SET %" PRId64 " now %" PRId64 " call %p[%p]",
|
366
366
|
timer, deadline, grpc_core::ExecCtx::Get()->Now(), closure,
|
367
367
|
closure->cb);
|
@@ -397,7 +397,7 @@ static void timer_init(grpc_timer* timer, grpc_millis deadline,
|
|
397
397
|
timer->heap_index = INVALID_HEAP_INDEX;
|
398
398
|
list_join(&shard->list, timer);
|
399
399
|
}
|
400
|
-
if (grpc_timer_trace
|
400
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_trace)) {
|
401
401
|
gpr_log(GPR_INFO,
|
402
402
|
" .. add to shard %d with queue_deadline_cap=%" PRId64
|
403
403
|
" => is_first_timer=%s",
|
@@ -419,7 +419,7 @@ static void timer_init(grpc_timer* timer, grpc_millis deadline,
|
|
419
419
|
grpc_timer_check. */
|
420
420
|
if (is_first_timer) {
|
421
421
|
gpr_mu_lock(&g_shared_mutables.mu);
|
422
|
-
if (grpc_timer_trace
|
422
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_trace)) {
|
423
423
|
gpr_log(GPR_INFO, " .. old shard min_deadline=%" PRId64,
|
424
424
|
shard->min_deadline);
|
425
425
|
}
|
@@ -463,7 +463,7 @@ static void timer_cancel(grpc_timer* timer) {
|
|
463
463
|
|
464
464
|
timer_shard* shard = &g_shards[GPR_HASH_POINTER(timer, g_num_shards)];
|
465
465
|
gpr_mu_lock(&shard->mu);
|
466
|
-
if (grpc_timer_trace
|
466
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_trace)) {
|
467
467
|
gpr_log(GPR_INFO, "TIMER %p: CANCEL pending=%s", timer,
|
468
468
|
timer->pending ? "true" : "false");
|
469
469
|
}
|
@@ -487,7 +487,7 @@ static void timer_cancel(grpc_timer* timer) {
|
|
487
487
|
/* Rebalances the timer shard by computing a new 'queue_deadline_cap' and moving
|
488
488
|
all relevant timers in shard->list (i.e timers with deadlines earlier than
|
489
489
|
'queue_deadline_cap') into into shard->heap.
|
490
|
-
Returns 'true' if shard->heap has
|
490
|
+
Returns 'true' if shard->heap has at least ONE element
|
491
491
|
REQUIRES: shard->mu locked */
|
492
492
|
static bool refill_heap(timer_shard* shard, grpc_millis now) {
|
493
493
|
/* Compute the new queue window width and bound by the limits: */
|
@@ -504,7 +504,7 @@ static bool refill_heap(timer_shard* shard, grpc_millis now) {
|
|
504
504
|
saturating_add(GPR_MAX(now, shard->queue_deadline_cap),
|
505
505
|
static_cast<grpc_millis>(deadline_delta * 1000.0));
|
506
506
|
|
507
|
-
if (grpc_timer_check_trace
|
507
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
508
508
|
gpr_log(GPR_INFO, " .. shard[%d]->queue_deadline_cap --> %" PRId64,
|
509
509
|
static_cast<int>(shard - g_shards), shard->queue_deadline_cap);
|
510
510
|
}
|
@@ -512,7 +512,7 @@ static bool refill_heap(timer_shard* shard, grpc_millis now) {
|
|
512
512
|
next = timer->next;
|
513
513
|
|
514
514
|
if (timer->deadline < shard->queue_deadline_cap) {
|
515
|
-
if (grpc_timer_check_trace
|
515
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
516
516
|
gpr_log(GPR_INFO, " .. add timer with deadline %" PRId64 " to heap",
|
517
517
|
timer->deadline);
|
518
518
|
}
|
@@ -529,7 +529,7 @@ static bool refill_heap(timer_shard* shard, grpc_millis now) {
|
|
529
529
|
static grpc_timer* pop_one(timer_shard* shard, grpc_millis now) {
|
530
530
|
grpc_timer* timer;
|
531
531
|
for (;;) {
|
532
|
-
if (grpc_timer_check_trace
|
532
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
533
533
|
gpr_log(GPR_INFO, " .. shard[%d]: heap_empty=%s",
|
534
534
|
static_cast<int>(shard - g_shards),
|
535
535
|
grpc_timer_heap_is_empty(&shard->heap) ? "true" : "false");
|
@@ -539,13 +539,13 @@ static grpc_timer* pop_one(timer_shard* shard, grpc_millis now) {
|
|
539
539
|
if (!refill_heap(shard, now)) return nullptr;
|
540
540
|
}
|
541
541
|
timer = grpc_timer_heap_top(&shard->heap);
|
542
|
-
if (grpc_timer_check_trace
|
542
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
543
543
|
gpr_log(GPR_INFO,
|
544
544
|
" .. check top timer deadline=%" PRId64 " now=%" PRId64,
|
545
545
|
timer->deadline, now);
|
546
546
|
}
|
547
547
|
if (timer->deadline > now) return nullptr;
|
548
|
-
if (grpc_timer_trace
|
548
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_trace)) {
|
549
549
|
gpr_log(GPR_INFO, "TIMER %p: FIRE %" PRId64 "ms late via %s scheduler",
|
550
550
|
timer, now - timer->deadline,
|
551
551
|
timer->closure->scheduler->vtable->name);
|
@@ -569,7 +569,7 @@ static size_t pop_timers(timer_shard* shard, grpc_millis now,
|
|
569
569
|
}
|
570
570
|
*new_min_deadline = compute_min_deadline(shard);
|
571
571
|
gpr_mu_unlock(&shard->mu);
|
572
|
-
if (grpc_timer_check_trace
|
572
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
573
573
|
gpr_log(GPR_INFO, " .. shard[%d] popped %" PRIdPTR,
|
574
574
|
static_cast<int>(shard - g_shards), n);
|
575
575
|
}
|
@@ -606,7 +606,7 @@ static grpc_timer_check_result run_some_expired_timers(grpc_millis now,
|
|
606
606
|
gpr_mu_lock(&g_shared_mutables.mu);
|
607
607
|
result = GRPC_TIMERS_CHECKED_AND_EMPTY;
|
608
608
|
|
609
|
-
if (grpc_timer_check_trace
|
609
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
610
610
|
gpr_log(GPR_INFO, " .. shard[%d]->min_deadline = %" PRId64,
|
611
611
|
static_cast<int>(g_shard_queue[0] - g_shards),
|
612
612
|
g_shard_queue[0]->min_deadline);
|
@@ -624,7 +624,7 @@ static grpc_timer_check_result run_some_expired_timers(grpc_millis now,
|
|
624
624
|
result = GRPC_TIMERS_FIRED;
|
625
625
|
}
|
626
626
|
|
627
|
-
if (grpc_timer_check_trace
|
627
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
628
628
|
gpr_log(GPR_INFO,
|
629
629
|
" .. result --> %d"
|
630
630
|
", shard[%d]->min_deadline %" PRId64 " --> %" PRId64
|
@@ -691,7 +691,7 @@ static grpc_timer_check_result timer_check(grpc_millis* next) {
|
|
691
691
|
if (next != nullptr) {
|
692
692
|
*next = GPR_MIN(*next, min_timer);
|
693
693
|
}
|
694
|
-
if (grpc_timer_check_trace
|
694
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
695
695
|
gpr_log(GPR_INFO, "TIMER CHECK SKIP: now=%" PRId64 " min_timer=%" PRId64,
|
696
696
|
now, min_timer);
|
697
697
|
}
|
@@ -704,7 +704,7 @@ static grpc_timer_check_result timer_check(grpc_millis* next) {
|
|
704
704
|
: GRPC_ERROR_CREATE_FROM_STATIC_STRING("Shutting down timer system");
|
705
705
|
|
706
706
|
// tracing
|
707
|
-
if (grpc_timer_check_trace
|
707
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
708
708
|
char* next_str;
|
709
709
|
if (next == nullptr) {
|
710
710
|
next_str = gpr_strdup("NULL");
|
@@ -728,7 +728,7 @@ static grpc_timer_check_result timer_check(grpc_millis* next) {
|
|
728
728
|
grpc_timer_check_result r =
|
729
729
|
run_some_expired_timers(now, next, shutdown_error);
|
730
730
|
// tracing
|
731
|
-
if (grpc_timer_check_trace
|
731
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
732
732
|
char* next_str;
|
733
733
|
if (next == nullptr) {
|
734
734
|
next_str = gpr_strdup("NULL");
|