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,39 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/iomgr/port.h"
|
22
|
+
#if GRPC_ARES == 1 && defined(GRPC_UV)
|
23
|
+
|
24
|
+
#include <grpc/support/string_util.h>
|
25
|
+
|
26
|
+
#include "src/core/ext/filters/client_channel/parse_address.h"
|
27
|
+
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
28
|
+
#include "src/core/ext/filters/client_channel/server_address.h"
|
29
|
+
#include "src/core/lib/gpr/host_port.h"
|
30
|
+
#include "src/core/lib/gpr/string.h"
|
31
|
+
|
32
|
+
bool grpc_ares_query_ipv6() {
|
33
|
+
/* The libuv grpc code currently does not have the code to probe for this,
|
34
|
+
* so we assume for now that IPv6 is always available in contexts where this
|
35
|
+
* code will be used. */
|
36
|
+
return true;
|
37
|
+
}
|
38
|
+
|
39
|
+
#endif /* GRPC_ARES == 1 && defined(GRPC_UV) */
|
@@ -26,10 +26,4 @@
|
|
26
26
|
|
27
27
|
bool grpc_ares_query_ipv6() { return grpc_ipv6_loopback_available(); }
|
28
28
|
|
29
|
-
bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
30
|
-
const char* name, const char* default_port,
|
31
|
-
grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs) {
|
32
|
-
return false;
|
33
|
-
}
|
34
|
-
|
35
29
|
#endif /* GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER) */
|
@@ -19,7 +19,7 @@
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
21
|
#include "src/core/lib/iomgr/port.h"
|
22
|
-
#if GRPC_ARES == 1 && defined(
|
22
|
+
#if GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
23
23
|
|
24
24
|
#include <grpc/support/string_util.h>
|
25
25
|
|
@@ -32,66 +32,4 @@
|
|
32
32
|
|
33
33
|
bool grpc_ares_query_ipv6() { return grpc_ipv6_loopback_available(); }
|
34
34
|
|
35
|
-
|
36
|
-
const char* name, const char* default_port,
|
37
|
-
grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs, char** host,
|
38
|
-
char** port) {
|
39
|
-
gpr_split_host_port(name, host, port);
|
40
|
-
if (*host == nullptr) {
|
41
|
-
gpr_log(GPR_ERROR,
|
42
|
-
"Failed to parse %s into host:port during Windows localhost "
|
43
|
-
"resolution check.",
|
44
|
-
name);
|
45
|
-
return false;
|
46
|
-
}
|
47
|
-
if (*port == nullptr) {
|
48
|
-
if (default_port == nullptr) {
|
49
|
-
gpr_log(GPR_ERROR,
|
50
|
-
"No port or default port for %s during Windows localhost "
|
51
|
-
"resolution check.",
|
52
|
-
name);
|
53
|
-
return false;
|
54
|
-
}
|
55
|
-
*port = gpr_strdup(default_port);
|
56
|
-
}
|
57
|
-
if (gpr_stricmp(*host, "localhost") == 0) {
|
58
|
-
GPR_ASSERT(*addrs == nullptr);
|
59
|
-
*addrs = grpc_core::MakeUnique<grpc_core::ServerAddressList>();
|
60
|
-
uint16_t numeric_port = grpc_strhtons(*port);
|
61
|
-
// Append the ipv6 loopback address.
|
62
|
-
struct sockaddr_in6 ipv6_loopback_addr;
|
63
|
-
memset(&ipv6_loopback_addr, 0, sizeof(ipv6_loopback_addr));
|
64
|
-
((char*)&ipv6_loopback_addr.sin6_addr)[15] = 1;
|
65
|
-
ipv6_loopback_addr.sin6_family = AF_INET6;
|
66
|
-
ipv6_loopback_addr.sin6_port = numeric_port;
|
67
|
-
(*addrs)->emplace_back(&ipv6_loopback_addr, sizeof(ipv6_loopback_addr),
|
68
|
-
nullptr /* args */);
|
69
|
-
// Append the ipv4 loopback address.
|
70
|
-
struct sockaddr_in ipv4_loopback_addr;
|
71
|
-
memset(&ipv4_loopback_addr, 0, sizeof(ipv4_loopback_addr));
|
72
|
-
((char*)&ipv4_loopback_addr.sin_addr)[0] = 0x7f;
|
73
|
-
((char*)&ipv4_loopback_addr.sin_addr)[3] = 0x01;
|
74
|
-
ipv4_loopback_addr.sin_family = AF_INET;
|
75
|
-
ipv4_loopback_addr.sin_port = numeric_port;
|
76
|
-
(*addrs)->emplace_back(&ipv4_loopback_addr, sizeof(ipv4_loopback_addr),
|
77
|
-
nullptr /* args */);
|
78
|
-
// Let the address sorter figure out which one should be tried first.
|
79
|
-
grpc_cares_wrapper_address_sorting_sort(addrs->get());
|
80
|
-
return true;
|
81
|
-
}
|
82
|
-
return false;
|
83
|
-
}
|
84
|
-
|
85
|
-
bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
86
|
-
const char* name, const char* default_port,
|
87
|
-
grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs) {
|
88
|
-
char* host = nullptr;
|
89
|
-
char* port = nullptr;
|
90
|
-
bool out = inner_maybe_resolve_localhost_manually_locked(name, default_port,
|
91
|
-
addrs, &host, &port);
|
92
|
-
gpr_free(host);
|
93
|
-
gpr_free(port);
|
94
|
-
return out;
|
95
|
-
}
|
96
|
-
|
97
|
-
#endif /* GRPC_ARES == 1 && defined(GPR_WINDOWS) */
|
35
|
+
#endif /* GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER) */
|
@@ -0,0 +1,28 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2019 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
// This is similar to the sockaddr resolver, except that it supports a
|
18
|
+
// bunch of query args that are useful for dependency injection in tests.
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
|
23
|
+
|
24
|
+
GPR_GLOBAL_CONFIG_DEFINE_STRING(
|
25
|
+
grpc_dns_resolver, "",
|
26
|
+
"Declares which DNS resolver to use. The default is ares if gRPC is built "
|
27
|
+
"with c-ares support. Otherwise, the value of this environment variable is "
|
28
|
+
"ignored.")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright
|
3
|
+
* Copyright 2019 gRPC authors.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -16,21 +16,14 @@
|
|
16
16
|
*
|
17
17
|
*/
|
18
18
|
|
19
|
-
#
|
20
|
-
|
21
|
-
#include "src/core/lib/iomgr/endpoint.h"
|
22
|
-
#include "src/core/lib/iomgr/network_status_tracker.h"
|
23
|
-
|
24
|
-
void grpc_network_status_shutdown(void) {}
|
19
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_DNS_DNS_RESOLVER_SELECTION_H
|
20
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_DNS_DNS_RESOLVER_SELECTION_H
|
25
21
|
|
26
|
-
|
27
|
-
// TODO(makarandd): Install callback with OS to monitor network status.
|
28
|
-
}
|
29
|
-
|
30
|
-
void grpc_destroy_network_status_monitor() {}
|
22
|
+
#include <grpc/support/port_platform.h>
|
31
23
|
|
32
|
-
|
24
|
+
#include "src/core/lib/gprpp/global_config.h"
|
33
25
|
|
34
|
-
|
26
|
+
GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_dns_resolver);
|
35
27
|
|
36
|
-
|
28
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_DNS_DNS_RESOLVER_SELECTION_H \
|
29
|
+
*/
|
@@ -26,11 +26,11 @@
|
|
26
26
|
#include <grpc/support/string_util.h>
|
27
27
|
#include <grpc/support/time.h>
|
28
28
|
|
29
|
+
#include "src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h"
|
29
30
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
30
31
|
#include "src/core/ext/filters/client_channel/server_address.h"
|
31
32
|
#include "src/core/lib/backoff/backoff.h"
|
32
33
|
#include "src/core/lib/channel/channel_args.h"
|
33
|
-
#include "src/core/lib/gpr/env.h"
|
34
34
|
#include "src/core/lib/gpr/host_port.h"
|
35
35
|
#include "src/core/lib/gpr/string.h"
|
36
36
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
@@ -51,10 +51,9 @@ const char kDefaultPort[] = "https";
|
|
51
51
|
|
52
52
|
class NativeDnsResolver : public Resolver {
|
53
53
|
public:
|
54
|
-
explicit NativeDnsResolver(
|
54
|
+
explicit NativeDnsResolver(ResolverArgs args);
|
55
55
|
|
56
|
-
void
|
57
|
-
grpc_closure* on_complete) override;
|
56
|
+
void StartLocked() override;
|
58
57
|
|
59
58
|
void RequestReresolutionLocked() override;
|
60
59
|
|
@@ -67,7 +66,6 @@ class NativeDnsResolver : public Resolver {
|
|
67
66
|
|
68
67
|
void MaybeStartResolvingLocked();
|
69
68
|
void StartResolvingLocked();
|
70
|
-
void MaybeFinishNextLocked();
|
71
69
|
|
72
70
|
static void OnNextResolutionLocked(void* arg, grpc_error* error);
|
73
71
|
static void OnResolvedLocked(void* arg, grpc_error* error);
|
@@ -78,19 +76,11 @@ class NativeDnsResolver : public Resolver {
|
|
78
76
|
grpc_channel_args* channel_args_ = nullptr;
|
79
77
|
/// pollset_set to drive the name resolution process
|
80
78
|
grpc_pollset_set* interested_parties_ = nullptr;
|
79
|
+
/// are we shutting down?
|
80
|
+
bool shutdown_ = false;
|
81
81
|
/// are we currently resolving?
|
82
82
|
bool resolving_ = false;
|
83
83
|
grpc_closure on_resolved_;
|
84
|
-
/// which version of the result have we published?
|
85
|
-
int published_version_ = 0;
|
86
|
-
/// which version of the result is current?
|
87
|
-
int resolved_version_ = 0;
|
88
|
-
/// pending next completion, or nullptr
|
89
|
-
grpc_closure* next_completion_ = nullptr;
|
90
|
-
/// target result address for next completion
|
91
|
-
grpc_channel_args** target_result_ = nullptr;
|
92
|
-
/// current (fully resolved) result
|
93
|
-
grpc_channel_args* resolved_result_ = nullptr;
|
94
84
|
/// next resolution timer
|
95
85
|
bool have_next_resolution_timer_ = false;
|
96
86
|
grpc_timer next_resolution_timer_;
|
@@ -105,8 +95,8 @@ class NativeDnsResolver : public Resolver {
|
|
105
95
|
grpc_resolved_addresses* addresses_ = nullptr;
|
106
96
|
};
|
107
97
|
|
108
|
-
NativeDnsResolver::NativeDnsResolver(
|
109
|
-
: Resolver(args.combiner),
|
98
|
+
NativeDnsResolver::NativeDnsResolver(ResolverArgs args)
|
99
|
+
: Resolver(args.combiner, std::move(args.result_handler)),
|
110
100
|
backoff_(
|
111
101
|
BackOff::Options()
|
112
102
|
.set_initial_backoff(GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS *
|
@@ -134,25 +124,12 @@ NativeDnsResolver::NativeDnsResolver(const ResolverArgs& args)
|
|
134
124
|
}
|
135
125
|
|
136
126
|
NativeDnsResolver::~NativeDnsResolver() {
|
137
|
-
|
138
|
-
grpc_channel_args_destroy(resolved_result_);
|
139
|
-
}
|
127
|
+
grpc_channel_args_destroy(channel_args_);
|
140
128
|
grpc_pollset_set_destroy(interested_parties_);
|
141
129
|
gpr_free(name_to_resolve_);
|
142
|
-
grpc_channel_args_destroy(channel_args_);
|
143
130
|
}
|
144
131
|
|
145
|
-
void NativeDnsResolver::
|
146
|
-
grpc_closure* on_complete) {
|
147
|
-
GPR_ASSERT(next_completion_ == nullptr);
|
148
|
-
next_completion_ = on_complete;
|
149
|
-
target_result_ = result;
|
150
|
-
if (resolved_version_ == 0 && !resolving_) {
|
151
|
-
MaybeStartResolvingLocked();
|
152
|
-
} else {
|
153
|
-
MaybeFinishNextLocked();
|
154
|
-
}
|
155
|
-
}
|
132
|
+
void NativeDnsResolver::StartLocked() { MaybeStartResolvingLocked(); }
|
156
133
|
|
157
134
|
void NativeDnsResolver::RequestReresolutionLocked() {
|
158
135
|
if (!resolving_) {
|
@@ -168,15 +145,10 @@ void NativeDnsResolver::ResetBackoffLocked() {
|
|
168
145
|
}
|
169
146
|
|
170
147
|
void NativeDnsResolver::ShutdownLocked() {
|
148
|
+
shutdown_ = true;
|
171
149
|
if (have_next_resolution_timer_) {
|
172
150
|
grpc_timer_cancel(&next_resolution_timer_);
|
173
151
|
}
|
174
|
-
if (next_completion_ != nullptr) {
|
175
|
-
*target_result_ = nullptr;
|
176
|
-
GRPC_CLOSURE_SCHED(next_completion_, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
177
|
-
"Resolver Shutdown"));
|
178
|
-
next_completion_ = nullptr;
|
179
|
-
}
|
180
152
|
}
|
181
153
|
|
182
154
|
void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
|
@@ -190,38 +162,42 @@ void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
|
|
190
162
|
|
191
163
|
void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
|
192
164
|
NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
|
193
|
-
grpc_channel_args* result = nullptr;
|
194
165
|
GPR_ASSERT(r->resolving_);
|
195
166
|
r->resolving_ = false;
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
167
|
+
if (r->shutdown_) {
|
168
|
+
r->Unref(DEBUG_LOCATION, "dns-resolving");
|
169
|
+
return;
|
170
|
+
}
|
200
171
|
if (r->addresses_ != nullptr) {
|
201
|
-
|
172
|
+
Result result;
|
202
173
|
for (size_t i = 0; i < r->addresses_->naddrs; ++i) {
|
203
|
-
addresses.emplace_back(&r->addresses_->addrs[i].addr,
|
204
|
-
|
174
|
+
result.addresses.emplace_back(&r->addresses_->addrs[i].addr,
|
175
|
+
r->addresses_->addrs[i].len,
|
176
|
+
nullptr /* args */);
|
205
177
|
}
|
206
|
-
grpc_arg new_arg = CreateServerAddressListChannelArg(&addresses);
|
207
|
-
result = grpc_channel_args_copy_and_add(r->channel_args_, &new_arg, 1);
|
208
178
|
grpc_resolved_addresses_destroy(r->addresses_);
|
179
|
+
result.args = grpc_channel_args_copy(r->channel_args_);
|
180
|
+
r->result_handler()->ReturnResult(std::move(result));
|
209
181
|
// Reset backoff state so that we start from the beginning when the
|
210
182
|
// next request gets triggered.
|
211
183
|
r->backoff_.Reset();
|
212
184
|
} else {
|
213
|
-
grpc_millis next_try = r->backoff_.NextAttemptTime();
|
214
|
-
grpc_millis timeout = next_try - ExecCtx::Get()->Now();
|
215
185
|
gpr_log(GPR_INFO, "dns resolution failed (will retry): %s",
|
216
186
|
grpc_error_string(error));
|
187
|
+
// Return transient error.
|
188
|
+
r->result_handler()->ReturnError(grpc_error_set_int(
|
189
|
+
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
190
|
+
"DNS resolution failed", &error, 1),
|
191
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
|
192
|
+
// Set up for retry.
|
193
|
+
grpc_millis next_try = r->backoff_.NextAttemptTime();
|
194
|
+
grpc_millis timeout = next_try - ExecCtx::Get()->Now();
|
217
195
|
GPR_ASSERT(!r->have_next_resolution_timer_);
|
218
196
|
r->have_next_resolution_timer_ = true;
|
219
197
|
// TODO(roth): We currently deal with this ref manually. Once the
|
220
198
|
// new closure API is done, find a way to track this ref with the timer
|
221
199
|
// callback as part of the type system.
|
222
|
-
|
223
|
-
r->Ref(DEBUG_LOCATION, "next_resolution_timer");
|
224
|
-
self.release();
|
200
|
+
r->Ref(DEBUG_LOCATION, "next_resolution_timer").release();
|
225
201
|
if (timeout > 0) {
|
226
202
|
gpr_log(GPR_DEBUG, "retrying in %" PRId64 " milliseconds", timeout);
|
227
203
|
} else {
|
@@ -230,13 +206,6 @@ void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
|
|
230
206
|
grpc_timer_init(&r->next_resolution_timer_, next_try,
|
231
207
|
&r->on_next_resolution_);
|
232
208
|
}
|
233
|
-
if (r->resolved_result_ != nullptr) {
|
234
|
-
grpc_channel_args_destroy(r->resolved_result_);
|
235
|
-
}
|
236
|
-
r->resolved_result_ = result;
|
237
|
-
++r->resolved_version_;
|
238
|
-
r->MaybeFinishNextLocked();
|
239
|
-
GRPC_ERROR_UNREF(error);
|
240
209
|
r->Unref(DEBUG_LOCATION, "dns-resolving");
|
241
210
|
}
|
242
211
|
|
@@ -260,9 +229,7 @@ void NativeDnsResolver::MaybeStartResolvingLocked() {
|
|
260
229
|
// TODO(roth): We currently deal with this ref manually. Once the
|
261
230
|
// new closure API is done, find a way to track this ref with the timer
|
262
231
|
// callback as part of the type system.
|
263
|
-
|
264
|
-
Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown");
|
265
|
-
self.release();
|
232
|
+
Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown").release();
|
266
233
|
grpc_timer_init(&next_resolution_timer_, ms_until_next_resolution,
|
267
234
|
&on_next_resolution_);
|
268
235
|
return;
|
@@ -276,8 +243,7 @@ void NativeDnsResolver::StartResolvingLocked() {
|
|
276
243
|
// TODO(roth): We currently deal with this ref manually. Once the
|
277
244
|
// new closure API is done, find a way to track this ref with the timer
|
278
245
|
// callback as part of the type system.
|
279
|
-
|
280
|
-
self.release();
|
246
|
+
Ref(DEBUG_LOCATION, "dns-resolving").release();
|
281
247
|
GPR_ASSERT(!resolving_);
|
282
248
|
resolving_ = true;
|
283
249
|
addresses_ = nullptr;
|
@@ -286,30 +252,18 @@ void NativeDnsResolver::StartResolvingLocked() {
|
|
286
252
|
last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
|
287
253
|
}
|
288
254
|
|
289
|
-
void NativeDnsResolver::MaybeFinishNextLocked() {
|
290
|
-
if (next_completion_ != nullptr && resolved_version_ != published_version_) {
|
291
|
-
*target_result_ = resolved_result_ == nullptr
|
292
|
-
? nullptr
|
293
|
-
: grpc_channel_args_copy(resolved_result_);
|
294
|
-
GRPC_CLOSURE_SCHED(next_completion_, GRPC_ERROR_NONE);
|
295
|
-
next_completion_ = nullptr;
|
296
|
-
published_version_ = resolved_version_;
|
297
|
-
}
|
298
|
-
}
|
299
|
-
|
300
255
|
//
|
301
256
|
// Factory
|
302
257
|
//
|
303
258
|
|
304
259
|
class NativeDnsResolverFactory : public ResolverFactory {
|
305
260
|
public:
|
306
|
-
OrphanablePtr<Resolver> CreateResolver(
|
307
|
-
const ResolverArgs& args) const override {
|
261
|
+
OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
|
308
262
|
if (GPR_UNLIKELY(0 != strcmp(args.uri->authority, ""))) {
|
309
263
|
gpr_log(GPR_ERROR, "authority based dns uri's not supported");
|
310
264
|
return OrphanablePtr<Resolver>(nullptr);
|
311
265
|
}
|
312
|
-
return OrphanablePtr<Resolver>(New<NativeDnsResolver>(args));
|
266
|
+
return OrphanablePtr<Resolver>(New<NativeDnsResolver>(std::move(args)));
|
313
267
|
}
|
314
268
|
|
315
269
|
const char* scheme() const override { return "dns"; }
|
@@ -320,8 +274,9 @@ class NativeDnsResolverFactory : public ResolverFactory {
|
|
320
274
|
} // namespace grpc_core
|
321
275
|
|
322
276
|
void grpc_resolver_dns_native_init() {
|
323
|
-
char
|
324
|
-
|
277
|
+
grpc_core::UniquePtr<char> resolver =
|
278
|
+
GPR_GLOBAL_CONFIG_GET(grpc_dns_resolver);
|
279
|
+
if (gpr_stricmp(resolver.get(), "native") == 0) {
|
325
280
|
gpr_log(GPR_DEBUG, "Using native dns resolver");
|
326
281
|
grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
|
327
282
|
grpc_core::UniquePtr<grpc_core::ResolverFactory>(
|
@@ -337,7 +292,6 @@ void grpc_resolver_dns_native_init() {
|
|
337
292
|
grpc_core::New<grpc_core::NativeDnsResolverFactory>()));
|
338
293
|
}
|
339
294
|
}
|
340
|
-
gpr_free(resolver_env);
|
341
295
|
}
|
342
296
|
|
343
297
|
void grpc_resolver_dns_native_shutdown() {}
|