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
@@ -0,0 +1,179 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2019 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
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/lib/iomgr/port.h"
|
21
|
+
#if GRPC_ARES == 1 && defined(GRPC_UV)
|
22
|
+
|
23
|
+
#include <ares.h>
|
24
|
+
#include <uv.h>
|
25
|
+
|
26
|
+
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
|
27
|
+
|
28
|
+
#include <grpc/support/alloc.h>
|
29
|
+
#include <grpc/support/log.h>
|
30
|
+
#include <grpc/support/string_util.h>
|
31
|
+
#include <grpc/support/time.h>
|
32
|
+
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
33
|
+
#include "src/core/lib/gpr/string.h"
|
34
|
+
#include "src/core/lib/iomgr/combiner.h"
|
35
|
+
|
36
|
+
namespace grpc_core {
|
37
|
+
|
38
|
+
void ares_uv_poll_cb(uv_poll_t* handle, int status, int events);
|
39
|
+
|
40
|
+
void ares_uv_poll_close_cb(uv_handle_t* handle) { Delete(handle); }
|
41
|
+
|
42
|
+
class GrpcPolledFdLibuv : public GrpcPolledFd {
|
43
|
+
public:
|
44
|
+
GrpcPolledFdLibuv(ares_socket_t as, grpc_combiner* combiner)
|
45
|
+
: as_(as), combiner_(combiner) {
|
46
|
+
gpr_asprintf(&name_, "c-ares socket: %" PRIdPTR, (intptr_t)as);
|
47
|
+
handle_ = New<uv_poll_t>();
|
48
|
+
uv_poll_init_socket(uv_default_loop(), handle_, as);
|
49
|
+
handle_->data = this;
|
50
|
+
GRPC_COMBINER_REF(combiner_, "libuv ares event driver");
|
51
|
+
}
|
52
|
+
|
53
|
+
~GrpcPolledFdLibuv() {
|
54
|
+
gpr_free(name_);
|
55
|
+
GRPC_COMBINER_UNREF(combiner_, "libuv ares event driver");
|
56
|
+
}
|
57
|
+
|
58
|
+
void RegisterForOnReadableLocked(grpc_closure* read_closure) override {
|
59
|
+
GPR_ASSERT(read_closure_ == nullptr);
|
60
|
+
GPR_ASSERT((poll_events_ & UV_READABLE) == 0);
|
61
|
+
read_closure_ = read_closure;
|
62
|
+
poll_events_ |= UV_READABLE;
|
63
|
+
uv_poll_start(handle_, poll_events_, ares_uv_poll_cb);
|
64
|
+
}
|
65
|
+
|
66
|
+
void RegisterForOnWriteableLocked(grpc_closure* write_closure) override {
|
67
|
+
GPR_ASSERT(write_closure_ == nullptr);
|
68
|
+
GPR_ASSERT((poll_events_ & UV_WRITABLE) == 0);
|
69
|
+
write_closure_ = write_closure;
|
70
|
+
poll_events_ |= UV_WRITABLE;
|
71
|
+
uv_poll_start(handle_, poll_events_, ares_uv_poll_cb);
|
72
|
+
}
|
73
|
+
|
74
|
+
bool IsFdStillReadableLocked() override {
|
75
|
+
/* uv_poll_t is based on poll, which is level triggered. So, if cares
|
76
|
+
* leaves some data unread, the event will trigger again. */
|
77
|
+
return false;
|
78
|
+
}
|
79
|
+
|
80
|
+
void ShutdownInternalLocked(grpc_error* error) {
|
81
|
+
uv_poll_stop(handle_);
|
82
|
+
uv_close(reinterpret_cast<uv_handle_t*>(handle_), ares_uv_poll_close_cb);
|
83
|
+
if (read_closure_ != nullptr) {
|
84
|
+
GRPC_CLOSURE_SCHED(read_closure_, GRPC_ERROR_CANCELLED);
|
85
|
+
}
|
86
|
+
if (write_closure_ != nullptr) {
|
87
|
+
GRPC_CLOSURE_SCHED(write_closure_, GRPC_ERROR_CANCELLED);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
void ShutdownLocked(grpc_error* error) override {
|
92
|
+
if (grpc_core::ExecCtx::Get() == nullptr) {
|
93
|
+
grpc_core::ExecCtx exec_ctx;
|
94
|
+
ShutdownInternalLocked(error);
|
95
|
+
} else {
|
96
|
+
ShutdownInternalLocked(error);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
ares_socket_t GetWrappedAresSocketLocked() override { return as_; }
|
101
|
+
|
102
|
+
const char* GetName() override { return name_; }
|
103
|
+
|
104
|
+
char* name_;
|
105
|
+
ares_socket_t as_;
|
106
|
+
uv_poll_t* handle_;
|
107
|
+
grpc_closure* read_closure_ = nullptr;
|
108
|
+
grpc_closure* write_closure_ = nullptr;
|
109
|
+
int poll_events_ = 0;
|
110
|
+
grpc_combiner* combiner_;
|
111
|
+
};
|
112
|
+
|
113
|
+
struct AresUvPollCbArg {
|
114
|
+
AresUvPollCbArg(uv_poll_t* handle, int status, int events)
|
115
|
+
: handle(handle), status(status), events(events) {}
|
116
|
+
|
117
|
+
uv_poll_t* handle;
|
118
|
+
int status;
|
119
|
+
int events;
|
120
|
+
};
|
121
|
+
|
122
|
+
static void ares_uv_poll_cb_locked(void* arg, grpc_error* error) {
|
123
|
+
grpc_core::UniquePtr<AresUvPollCbArg> arg_struct(
|
124
|
+
reinterpret_cast<AresUvPollCbArg*>(arg));
|
125
|
+
uv_poll_t* handle = arg_struct->handle;
|
126
|
+
int status = arg_struct->status;
|
127
|
+
int events = arg_struct->events;
|
128
|
+
GrpcPolledFdLibuv* polled_fd =
|
129
|
+
reinterpret_cast<GrpcPolledFdLibuv*>(handle->data);
|
130
|
+
if (status < 0) {
|
131
|
+
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("cares polling error");
|
132
|
+
error =
|
133
|
+
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR,
|
134
|
+
grpc_slice_from_static_string(uv_strerror(status)));
|
135
|
+
}
|
136
|
+
if (events & UV_READABLE) {
|
137
|
+
GPR_ASSERT(polled_fd->read_closure_ != nullptr);
|
138
|
+
GRPC_CLOSURE_SCHED(polled_fd->read_closure_, error);
|
139
|
+
polled_fd->read_closure_ = nullptr;
|
140
|
+
polled_fd->poll_events_ &= ~UV_READABLE;
|
141
|
+
}
|
142
|
+
if (events & UV_WRITABLE) {
|
143
|
+
GPR_ASSERT(polled_fd->write_closure_ != nullptr);
|
144
|
+
GRPC_CLOSURE_SCHED(polled_fd->write_closure_, error);
|
145
|
+
polled_fd->write_closure_ = nullptr;
|
146
|
+
polled_fd->poll_events_ &= ~UV_WRITABLE;
|
147
|
+
}
|
148
|
+
uv_poll_start(handle, polled_fd->poll_events_, ares_uv_poll_cb);
|
149
|
+
}
|
150
|
+
|
151
|
+
void ares_uv_poll_cb(uv_poll_t* handle, int status, int events) {
|
152
|
+
grpc_core::ExecCtx exec_ctx;
|
153
|
+
GrpcPolledFdLibuv* polled_fd =
|
154
|
+
reinterpret_cast<GrpcPolledFdLibuv*>(handle->data);
|
155
|
+
AresUvPollCbArg* arg = New<AresUvPollCbArg>(handle, status, events);
|
156
|
+
GRPC_CLOSURE_SCHED(
|
157
|
+
GRPC_CLOSURE_CREATE(ares_uv_poll_cb_locked, arg,
|
158
|
+
grpc_combiner_scheduler(polled_fd->combiner_)),
|
159
|
+
GRPC_ERROR_NONE);
|
160
|
+
}
|
161
|
+
|
162
|
+
class GrpcPolledFdFactoryLibuv : public GrpcPolledFdFactory {
|
163
|
+
public:
|
164
|
+
GrpcPolledFd* NewGrpcPolledFdLocked(ares_socket_t as,
|
165
|
+
grpc_pollset_set* driver_pollset_set,
|
166
|
+
grpc_combiner* combiner) override {
|
167
|
+
return New<GrpcPolledFdLibuv>(as, combiner);
|
168
|
+
}
|
169
|
+
|
170
|
+
void ConfigureAresChannelLocked(ares_channel channel) override {}
|
171
|
+
};
|
172
|
+
|
173
|
+
UniquePtr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(grpc_combiner* combiner) {
|
174
|
+
return UniquePtr<GrpcPolledFdFactory>(New<GrpcPolledFdFactoryLibuv>());
|
175
|
+
}
|
176
|
+
|
177
|
+
} // namespace grpc_core
|
178
|
+
|
179
|
+
#endif /* GRPC_ARES == 1 && defined(GRPC_UV) */
|
@@ -18,7 +18,7 @@
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include "src/core/lib/iomgr/port.h"
|
21
|
-
#if GRPC_ARES == 1 && defined(
|
21
|
+
#if GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
22
22
|
|
23
23
|
#include <ares.h>
|
24
24
|
|
@@ -109,6 +109,7 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
109
109
|
read_closure_ = read_closure;
|
110
110
|
GPR_ASSERT(GRPC_SLICE_LENGTH(read_buf_) == 0);
|
111
111
|
grpc_slice_unref_internal(read_buf_);
|
112
|
+
GPR_ASSERT(!read_buf_has_data_);
|
112
113
|
read_buf_ = GRPC_SLICE_MALLOC(4192);
|
113
114
|
WSABUF buffer;
|
114
115
|
buffer.buf = (char*)GRPC_SLICE_START_PTR(read_buf_);
|
@@ -120,13 +121,14 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
120
121
|
nullptr, &flags, (sockaddr*)recv_from_source_addr_,
|
121
122
|
&recv_from_source_addr_len_,
|
122
123
|
&winsocket_->read_info.overlapped, nullptr)) {
|
123
|
-
|
124
|
+
int wsa_last_error = WSAGetLastError();
|
125
|
+
char* msg = gpr_format_message(wsa_last_error);
|
124
126
|
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
|
125
127
|
GRPC_CARES_TRACE_LOG(
|
126
128
|
"RegisterForOnReadableLocked: WSARecvFrom error:|%s|. fd:|%s|", msg,
|
127
129
|
GetName());
|
128
130
|
gpr_free(msg);
|
129
|
-
if (
|
131
|
+
if (wsa_last_error != WSA_IO_PENDING) {
|
130
132
|
ScheduleAndNullReadClosure(error);
|
131
133
|
return;
|
132
134
|
}
|
@@ -174,7 +176,7 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
174
176
|
GRPC_CARES_TRACE_LOG(
|
175
177
|
"RecvFrom called on fd:|%s|. Current read buf length:|%d|", GetName(),
|
176
178
|
GRPC_SLICE_LENGTH(read_buf_));
|
177
|
-
if (
|
179
|
+
if (!read_buf_has_data_) {
|
178
180
|
WSASetLastError(WSAEWOULDBLOCK);
|
179
181
|
return -1;
|
180
182
|
}
|
@@ -185,6 +187,9 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
185
187
|
}
|
186
188
|
read_buf_ = grpc_slice_sub_no_ref(read_buf_, bytes_read,
|
187
189
|
GRPC_SLICE_LENGTH(read_buf_));
|
190
|
+
if (GRPC_SLICE_LENGTH(read_buf_) == 0) {
|
191
|
+
read_buf_has_data_ = false;
|
192
|
+
}
|
188
193
|
/* c-ares overloads this recv_from virtual socket function to receive
|
189
194
|
* data on both UDP and TCP sockets, and from is nullptr for TCP. */
|
190
195
|
if (from != nullptr) {
|
@@ -226,15 +231,15 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
226
231
|
|
227
232
|
ares_ssize_t TrySendWriteBufSyncNonBlocking() {
|
228
233
|
GPR_ASSERT(write_state_ == WRITE_IDLE);
|
229
|
-
ares_ssize_t total_sent;
|
230
234
|
DWORD bytes_sent = 0;
|
231
235
|
if (SendWriteBuf(&bytes_sent, nullptr) != 0) {
|
232
|
-
|
236
|
+
int wsa_last_error = WSAGetLastError();
|
237
|
+
char* msg = gpr_format_message(wsa_last_error);
|
233
238
|
GRPC_CARES_TRACE_LOG(
|
234
239
|
"TrySendWriteBufSyncNonBlocking: SendWriteBuf error:|%s|. fd:|%s|",
|
235
240
|
msg, GetName());
|
236
241
|
gpr_free(msg);
|
237
|
-
if (
|
242
|
+
if (wsa_last_error == WSA_IO_PENDING) {
|
238
243
|
WSASetLastError(WSAEWOULDBLOCK);
|
239
244
|
write_state_ = WRITE_REQUESTED;
|
240
245
|
}
|
@@ -284,9 +289,10 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
284
289
|
int out =
|
285
290
|
WSAConnect(s, target, target_len, nullptr, nullptr, nullptr, nullptr);
|
286
291
|
if (out != 0) {
|
287
|
-
|
292
|
+
int wsa_last_error = WSAGetLastError();
|
293
|
+
char* msg = gpr_format_message(wsa_last_error);
|
288
294
|
GRPC_CARES_TRACE_LOG("Connect error code:|%d|, msg:|%s|. fd:|%s|",
|
289
|
-
|
295
|
+
wsa_last_error, msg, GetName());
|
290
296
|
gpr_free(msg);
|
291
297
|
// c-ares expects a posix-style connect API
|
292
298
|
out = -1;
|
@@ -299,6 +305,11 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
299
305
|
polled_fd->OnIocpReadableInner(error);
|
300
306
|
}
|
301
307
|
|
308
|
+
// TODO(apolcyn): improve this error handling to be less conversative.
|
309
|
+
// An e.g. ECONNRESET error here should result in errors when
|
310
|
+
// c-ares reads from this socket later, but it shouldn't necessarily cancel
|
311
|
+
// the entire resolution attempt. Doing so will allow the "inject broken
|
312
|
+
// nameserver list" test to pass on Windows.
|
302
313
|
void OnIocpReadableInner(grpc_error* error) {
|
303
314
|
if (error == GRPC_ERROR_NONE) {
|
304
315
|
if (winsocket_->read_info.wsa_error != 0) {
|
@@ -320,6 +331,7 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
320
331
|
if (error == GRPC_ERROR_NONE) {
|
321
332
|
read_buf_ = grpc_slice_sub_no_ref(read_buf_, 0,
|
322
333
|
winsocket_->read_info.bytes_transfered);
|
334
|
+
read_buf_has_data_ = true;
|
323
335
|
} else {
|
324
336
|
grpc_slice_unref_internal(read_buf_);
|
325
337
|
read_buf_ = grpc_empty_slice();
|
@@ -367,6 +379,7 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
367
379
|
char recv_from_source_addr_[200];
|
368
380
|
ares_socklen_t recv_from_source_addr_len_;
|
369
381
|
grpc_slice read_buf_;
|
382
|
+
bool read_buf_has_data_ = false;
|
370
383
|
grpc_slice write_buf_;
|
371
384
|
grpc_closure* read_closure_ = nullptr;
|
372
385
|
grpc_closure* write_closure_ = nullptr;
|
@@ -442,7 +455,8 @@ class SockToPolledFdMap {
|
|
442
455
|
*/
|
443
456
|
static ares_socket_t Socket(int af, int type, int protocol, void* user_data) {
|
444
457
|
SockToPolledFdMap* map = static_cast<SockToPolledFdMap*>(user_data);
|
445
|
-
SOCKET s = WSASocket(af, type, protocol, nullptr, 0,
|
458
|
+
SOCKET s = WSASocket(af, type, protocol, nullptr, 0,
|
459
|
+
grpc_get_default_wsa_socket_flags());
|
446
460
|
if (s == INVALID_SOCKET) {
|
447
461
|
return s;
|
448
462
|
}
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
-
#if GRPC_ARES == 1
|
21
|
+
#if GRPC_ARES == 1
|
22
22
|
|
23
23
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
24
24
|
#include "src/core/lib/iomgr/sockaddr.h"
|
@@ -47,9 +47,6 @@
|
|
47
47
|
using grpc_core::ServerAddress;
|
48
48
|
using grpc_core::ServerAddressList;
|
49
49
|
|
50
|
-
static gpr_once g_basic_init = GPR_ONCE_INIT;
|
51
|
-
static gpr_mu g_init_mu;
|
52
|
-
|
53
50
|
grpc_core::TraceFlag grpc_trace_cares_address_sorting(false,
|
54
51
|
"cares_address_sorting");
|
55
52
|
|
@@ -70,9 +67,7 @@ struct grpc_ares_request {
|
|
70
67
|
/** number of ongoing queries */
|
71
68
|
size_t pending_queries;
|
72
69
|
|
73
|
-
/**
|
74
|
-
bool success;
|
75
|
-
/** the errors explaining the request failure, set in on_done_cb */
|
70
|
+
/** the errors explaining query failures, appended to in query callbacks */
|
76
71
|
grpc_error* error;
|
77
72
|
};
|
78
73
|
|
@@ -89,8 +84,6 @@ typedef struct grpc_ares_hostbyname_request {
|
|
89
84
|
bool is_balancer;
|
90
85
|
} grpc_ares_hostbyname_request;
|
91
86
|
|
92
|
-
static void do_basic_init(void) { gpr_mu_init(&g_init_mu); }
|
93
|
-
|
94
87
|
static void log_address_sorting_list(const ServerAddressList& addresses,
|
95
88
|
const char* input_output_str) {
|
96
89
|
for (size_t i = 0; i < addresses.size(); i++) {
|
@@ -108,7 +101,7 @@ static void log_address_sorting_list(const ServerAddressList& addresses,
|
|
108
101
|
}
|
109
102
|
|
110
103
|
void grpc_cares_wrapper_address_sorting_sort(ServerAddressList* addresses) {
|
111
|
-
if (grpc_trace_cares_address_sorting
|
104
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
|
112
105
|
log_address_sorting_list(*addresses, "input");
|
113
106
|
}
|
114
107
|
address_sorting_sortable* sortables = (address_sorting_sortable*)gpr_zalloc(
|
@@ -127,7 +120,7 @@ void grpc_cares_wrapper_address_sorting_sort(ServerAddressList* addresses) {
|
|
127
120
|
}
|
128
121
|
gpr_free(sortables);
|
129
122
|
*addresses = std::move(sorted);
|
130
|
-
if (grpc_trace_cares_address_sorting
|
123
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
|
131
124
|
log_address_sorting_list(*addresses, "output");
|
132
125
|
}
|
133
126
|
}
|
@@ -150,6 +143,10 @@ void grpc_ares_complete_request_locked(grpc_ares_request* r) {
|
|
150
143
|
ServerAddressList* addresses = r->addresses_out->get();
|
151
144
|
if (addresses != nullptr) {
|
152
145
|
grpc_cares_wrapper_address_sorting_sort(addresses);
|
146
|
+
GRPC_ERROR_UNREF(r->error);
|
147
|
+
r->error = GRPC_ERROR_NONE;
|
148
|
+
// TODO(apolcyn): allow c-ares to return a service config
|
149
|
+
// with no addresses along side it
|
153
150
|
}
|
154
151
|
GRPC_CLOSURE_SCHED(r->on_done, r->error);
|
155
152
|
}
|
@@ -157,6 +154,10 @@ void grpc_ares_complete_request_locked(grpc_ares_request* r) {
|
|
157
154
|
static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
|
158
155
|
grpc_ares_request* parent_request, char* host, uint16_t port,
|
159
156
|
bool is_balancer) {
|
157
|
+
GRPC_CARES_TRACE_LOG(
|
158
|
+
"request:%p create_hostbyname_request_locked host:%s port:%d "
|
159
|
+
"is_balancer:%d",
|
160
|
+
parent_request, host, port, is_balancer);
|
160
161
|
grpc_ares_hostbyname_request* hr = static_cast<grpc_ares_hostbyname_request*>(
|
161
162
|
gpr_zalloc(sizeof(grpc_ares_hostbyname_request)));
|
162
163
|
hr->parent_request = parent_request;
|
@@ -180,9 +181,9 @@ static void on_hostbyname_done_locked(void* arg, int status, int timeouts,
|
|
180
181
|
static_cast<grpc_ares_hostbyname_request*>(arg);
|
181
182
|
grpc_ares_request* r = hr->parent_request;
|
182
183
|
if (status == ARES_SUCCESS) {
|
183
|
-
|
184
|
-
|
185
|
-
|
184
|
+
GRPC_CARES_TRACE_LOG(
|
185
|
+
"request:%p on_hostbyname_done_locked host=%s ARES_SUCCESS", r,
|
186
|
+
hr->host);
|
186
187
|
if (*r->addresses_out == nullptr) {
|
187
188
|
*r->addresses_out = grpc_core::MakeUnique<ServerAddressList>();
|
188
189
|
}
|
@@ -234,17 +235,15 @@ static void on_hostbyname_done_locked(void* arg, int status, int timeouts,
|
|
234
235
|
}
|
235
236
|
}
|
236
237
|
}
|
237
|
-
} else
|
238
|
+
} else {
|
238
239
|
char* error_msg;
|
239
240
|
gpr_asprintf(&error_msg, "C-ares status is not ARES_SUCCESS: %s",
|
240
241
|
ares_strerror(status));
|
242
|
+
GRPC_CARES_TRACE_LOG("request:%p on_hostbyname_done_locked host=%s %s", r,
|
243
|
+
hr->host, error_msg);
|
241
244
|
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
|
242
245
|
gpr_free(error_msg);
|
243
|
-
|
244
|
-
r->error = error;
|
245
|
-
} else {
|
246
|
-
r->error = grpc_error_add_child(error, r->error);
|
247
|
-
}
|
246
|
+
r->error = grpc_error_add_child(error, r->error);
|
248
247
|
}
|
249
248
|
destroy_hostbyname_request_locked(hr);
|
250
249
|
}
|
@@ -252,11 +251,12 @@ static void on_hostbyname_done_locked(void* arg, int status, int timeouts,
|
|
252
251
|
static void on_srv_query_done_locked(void* arg, int status, int timeouts,
|
253
252
|
unsigned char* abuf, int alen) {
|
254
253
|
grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
|
255
|
-
GRPC_CARES_TRACE_LOG("request:%p on_query_srv_done_locked", r);
|
256
254
|
if (status == ARES_SUCCESS) {
|
257
|
-
GRPC_CARES_TRACE_LOG("request:%p
|
255
|
+
GRPC_CARES_TRACE_LOG("request:%p on_srv_query_done_locked ARES_SUCCESS", r);
|
258
256
|
struct ares_srv_reply* reply;
|
259
257
|
const int parse_status = ares_parse_srv_reply(abuf, alen, &reply);
|
258
|
+
GRPC_CARES_TRACE_LOG("request:%p ares_parse_srv_reply: %d", r,
|
259
|
+
parse_status);
|
260
260
|
if (parse_status == ARES_SUCCESS) {
|
261
261
|
ares_channel* channel =
|
262
262
|
grpc_ares_ev_driver_get_channel_locked(r->ev_driver);
|
@@ -278,17 +278,15 @@ static void on_srv_query_done_locked(void* arg, int status, int timeouts,
|
|
278
278
|
if (reply != nullptr) {
|
279
279
|
ares_free_data(reply);
|
280
280
|
}
|
281
|
-
} else
|
281
|
+
} else {
|
282
282
|
char* error_msg;
|
283
283
|
gpr_asprintf(&error_msg, "C-ares status is not ARES_SUCCESS: %s",
|
284
284
|
ares_strerror(status));
|
285
|
+
GRPC_CARES_TRACE_LOG("request:%p on_srv_query_done_locked %s", r,
|
286
|
+
error_msg);
|
285
287
|
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
|
286
288
|
gpr_free(error_msg);
|
287
|
-
|
288
|
-
r->error = error;
|
289
|
-
} else {
|
290
|
-
r->error = grpc_error_add_child(error, r->error);
|
291
|
-
}
|
289
|
+
r->error = grpc_error_add_child(error, r->error);
|
292
290
|
}
|
293
291
|
grpc_ares_request_unref_locked(r);
|
294
292
|
}
|
@@ -299,12 +297,12 @@ static void on_txt_done_locked(void* arg, int status, int timeouts,
|
|
299
297
|
unsigned char* buf, int len) {
|
300
298
|
char* error_msg;
|
301
299
|
grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
|
302
|
-
GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked", r);
|
303
300
|
const size_t prefix_len = sizeof(g_service_config_attribute_prefix) - 1;
|
304
301
|
struct ares_txt_ext* result = nullptr;
|
305
302
|
struct ares_txt_ext* reply = nullptr;
|
306
303
|
grpc_error* error = GRPC_ERROR_NONE;
|
307
304
|
if (status != ARES_SUCCESS) goto fail;
|
305
|
+
GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked ARES_SUCCESS", r);
|
308
306
|
status = ares_parse_txt_reply_ext(buf, len, &reply);
|
309
307
|
if (status != ARES_SUCCESS) goto fail;
|
310
308
|
// Find service config in TXT record.
|
@@ -342,12 +340,9 @@ fail:
|
|
342
340
|
gpr_asprintf(&error_msg, "C-ares TXT lookup status is not ARES_SUCCESS: %s",
|
343
341
|
ares_strerror(status));
|
344
342
|
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
|
343
|
+
GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked %s", r, error_msg);
|
345
344
|
gpr_free(error_msg);
|
346
|
-
|
347
|
-
r->error = error;
|
348
|
-
} else {
|
349
|
-
r->error = grpc_error_add_child(error, r->error);
|
350
|
-
}
|
345
|
+
r->error = grpc_error_add_child(error, r->error);
|
351
346
|
done:
|
352
347
|
grpc_ares_request_unref_locked(r);
|
353
348
|
}
|
@@ -527,6 +522,76 @@ static bool target_matches_localhost(const char* name) {
|
|
527
522
|
return out;
|
528
523
|
}
|
529
524
|
|
525
|
+
#ifdef GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY
|
526
|
+
static bool inner_maybe_resolve_localhost_manually_locked(
|
527
|
+
const char* name, const char* default_port,
|
528
|
+
grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs, char** host,
|
529
|
+
char** port) {
|
530
|
+
gpr_split_host_port(name, host, port);
|
531
|
+
if (*host == nullptr) {
|
532
|
+
gpr_log(GPR_ERROR,
|
533
|
+
"Failed to parse %s into host:port during manual localhost "
|
534
|
+
"resolution check.",
|
535
|
+
name);
|
536
|
+
return false;
|
537
|
+
}
|
538
|
+
if (*port == nullptr) {
|
539
|
+
if (default_port == nullptr) {
|
540
|
+
gpr_log(GPR_ERROR,
|
541
|
+
"No port or default port for %s during manual localhost "
|
542
|
+
"resolution check.",
|
543
|
+
name);
|
544
|
+
return false;
|
545
|
+
}
|
546
|
+
*port = gpr_strdup(default_port);
|
547
|
+
}
|
548
|
+
if (gpr_stricmp(*host, "localhost") == 0) {
|
549
|
+
GPR_ASSERT(*addrs == nullptr);
|
550
|
+
*addrs = grpc_core::MakeUnique<grpc_core::ServerAddressList>();
|
551
|
+
uint16_t numeric_port = grpc_strhtons(*port);
|
552
|
+
// Append the ipv6 loopback address.
|
553
|
+
struct sockaddr_in6 ipv6_loopback_addr;
|
554
|
+
memset(&ipv6_loopback_addr, 0, sizeof(ipv6_loopback_addr));
|
555
|
+
((char*)&ipv6_loopback_addr.sin6_addr)[15] = 1;
|
556
|
+
ipv6_loopback_addr.sin6_family = AF_INET6;
|
557
|
+
ipv6_loopback_addr.sin6_port = numeric_port;
|
558
|
+
(*addrs)->emplace_back(&ipv6_loopback_addr, sizeof(ipv6_loopback_addr),
|
559
|
+
nullptr /* args */);
|
560
|
+
// Append the ipv4 loopback address.
|
561
|
+
struct sockaddr_in ipv4_loopback_addr;
|
562
|
+
memset(&ipv4_loopback_addr, 0, sizeof(ipv4_loopback_addr));
|
563
|
+
((char*)&ipv4_loopback_addr.sin_addr)[0] = 0x7f;
|
564
|
+
((char*)&ipv4_loopback_addr.sin_addr)[3] = 0x01;
|
565
|
+
ipv4_loopback_addr.sin_family = AF_INET;
|
566
|
+
ipv4_loopback_addr.sin_port = numeric_port;
|
567
|
+
(*addrs)->emplace_back(&ipv4_loopback_addr, sizeof(ipv4_loopback_addr),
|
568
|
+
nullptr /* args */);
|
569
|
+
// Let the address sorter figure out which one should be tried first.
|
570
|
+
grpc_cares_wrapper_address_sorting_sort(addrs->get());
|
571
|
+
return true;
|
572
|
+
}
|
573
|
+
return false;
|
574
|
+
}
|
575
|
+
|
576
|
+
static bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
577
|
+
const char* name, const char* default_port,
|
578
|
+
grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs) {
|
579
|
+
char* host = nullptr;
|
580
|
+
char* port = nullptr;
|
581
|
+
bool out = inner_maybe_resolve_localhost_manually_locked(name, default_port,
|
582
|
+
addrs, &host, &port);
|
583
|
+
gpr_free(host);
|
584
|
+
gpr_free(port);
|
585
|
+
return out;
|
586
|
+
}
|
587
|
+
#else /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
|
588
|
+
static bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
589
|
+
const char* name, const char* default_port,
|
590
|
+
grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs) {
|
591
|
+
return false;
|
592
|
+
}
|
593
|
+
#endif /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
|
594
|
+
|
530
595
|
static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
531
596
|
const char* dns_server, const char* name, const char* default_port,
|
532
597
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
@@ -539,7 +604,6 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
|
539
604
|
r->on_done = on_done;
|
540
605
|
r->addresses_out = addrs;
|
541
606
|
r->service_config_json_out = service_config_json;
|
542
|
-
r->success = false;
|
543
607
|
r->error = GRPC_ERROR_NONE;
|
544
608
|
r->pending_queries = 0;
|
545
609
|
GRPC_CARES_TRACE_LOG(
|
@@ -548,13 +612,13 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
|
548
612
|
r, name, default_port);
|
549
613
|
// Early out if the target is an ipv4 or ipv6 literal.
|
550
614
|
if (resolve_as_ip_literal_locked(name, default_port, addrs)) {
|
551
|
-
|
615
|
+
grpc_ares_complete_request_locked(r);
|
552
616
|
return r;
|
553
617
|
}
|
554
618
|
// Early out if the target is localhost and we're on Windows.
|
555
619
|
if (grpc_ares_maybe_resolve_localhost_manually_locked(name, default_port,
|
556
620
|
addrs)) {
|
557
|
-
|
621
|
+
grpc_ares_complete_request_locked(r);
|
558
622
|
return r;
|
559
623
|
}
|
560
624
|
// Don't query for SRV and TXT records if the target is "localhost", so
|
@@ -588,12 +652,12 @@ static void grpc_cancel_ares_request_locked_impl(grpc_ares_request* r) {
|
|
588
652
|
void (*grpc_cancel_ares_request_locked)(grpc_ares_request* r) =
|
589
653
|
grpc_cancel_ares_request_locked_impl;
|
590
654
|
|
655
|
+
// ares_library_init and ares_library_cleanup are currently no-op except under
|
656
|
+
// Windows. Calling them may cause race conditions when other parts of the
|
657
|
+
// binary calls these functions concurrently.
|
658
|
+
#ifdef GPR_WINDOWS
|
591
659
|
grpc_error* grpc_ares_init(void) {
|
592
|
-
gpr_once_init(&g_basic_init, do_basic_init);
|
593
|
-
gpr_mu_lock(&g_init_mu);
|
594
660
|
int status = ares_library_init(ARES_LIB_INIT_ALL);
|
595
|
-
gpr_mu_unlock(&g_init_mu);
|
596
|
-
|
597
661
|
if (status != ARES_SUCCESS) {
|
598
662
|
char* error_msg;
|
599
663
|
gpr_asprintf(&error_msg, "ares_library_init failed: %s",
|
@@ -605,11 +669,11 @@ grpc_error* grpc_ares_init(void) {
|
|
605
669
|
return GRPC_ERROR_NONE;
|
606
670
|
}
|
607
671
|
|
608
|
-
void grpc_ares_cleanup(void) {
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
672
|
+
void grpc_ares_cleanup(void) { ares_library_cleanup(); }
|
673
|
+
#else
|
674
|
+
grpc_error* grpc_ares_init(void) { return GRPC_ERROR_NONE; }
|
675
|
+
void grpc_ares_cleanup(void) {}
|
676
|
+
#endif // GPR_WINDOWS
|
613
677
|
|
614
678
|
/*
|
615
679
|
* grpc_resolve_address_ares related structs and functions
|
@@ -699,4 +763,4 @@ void (*grpc_resolve_address_ares)(
|
|
699
763
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
700
764
|
grpc_resolved_addresses** addrs) = grpc_resolve_address_ares_impl;
|
701
765
|
|
702
|
-
#endif /* GRPC_ARES == 1
|
766
|
+
#endif /* GRPC_ARES == 1 */
|
@@ -26,16 +26,18 @@
|
|
26
26
|
#include "src/core/lib/iomgr/polling_entity.h"
|
27
27
|
#include "src/core/lib/iomgr/resolve_address.h"
|
28
28
|
|
29
|
-
#define GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS
|
29
|
+
#define GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS 120000
|
30
30
|
|
31
31
|
extern grpc_core::TraceFlag grpc_trace_cares_address_sorting;
|
32
32
|
|
33
33
|
extern grpc_core::TraceFlag grpc_trace_cares_resolver;
|
34
34
|
|
35
|
-
#define GRPC_CARES_TRACE_LOG(format, ...)
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
#define GRPC_CARES_TRACE_LOG(format, ...) \
|
36
|
+
do { \
|
37
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_resolver)) { \
|
38
|
+
gpr_log(GPR_DEBUG, "(c-ares resolver) " format, __VA_ARGS__); \
|
39
|
+
} \
|
40
|
+
} while (0)
|
39
41
|
|
40
42
|
typedef struct grpc_ares_request grpc_ares_request;
|
41
43
|
|
@@ -85,14 +87,6 @@ void grpc_ares_complete_request_locked(grpc_ares_request* request);
|
|
85
87
|
/* E.g., return false if ipv6 is known to not be available. */
|
86
88
|
bool grpc_ares_query_ipv6();
|
87
89
|
|
88
|
-
/* Maybe (depending on the current platform) checks if "name" matches
|
89
|
-
* "localhost" and if so fills in addrs with the correct sockaddr structures.
|
90
|
-
* Returns a bool indicating whether or not such an action was performed.
|
91
|
-
* See https://github.com/grpc/grpc/issues/15158. */
|
92
|
-
bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
93
|
-
const char* name, const char* default_port,
|
94
|
-
grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs);
|
95
|
-
|
96
90
|
/* Sorts destinations in lb_addrs according to RFC 6724. */
|
97
91
|
void grpc_cares_wrapper_address_sorting_sort(
|
98
92
|
grpc_core::ServerAddressList* addresses);
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
-
#if GRPC_ARES != 1
|
21
|
+
#if GRPC_ARES != 1
|
22
22
|
|
23
23
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
24
24
|
|
@@ -62,4 +62,4 @@ void (*grpc_resolve_address_ares)(
|
|
62
62
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
63
63
|
grpc_resolved_addresses** addrs) = grpc_resolve_address_ares_impl;
|
64
64
|
|
65
|
-
#endif /* GRPC_ARES != 1
|
65
|
+
#endif /* GRPC_ARES != 1 */
|