grpc 1.28.0 → 1.30.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 +7694 -11190
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +22 -9
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/grpc_types.h +19 -21
- data/include/grpc/impl/codegen/port_platform.h +6 -2
- data/include/grpc/module.modulemap +24 -39
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
- data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +104 -144
- data/src/core/ext/filters/client_channel/service_config.h +28 -98
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
- data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
- data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
- data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
- data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
- data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +3 -2
- data/src/core/lib/channel/channelz_registry.cc +5 -3
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- data/src/core/lib/gpr/sync_abseil.cc +2 -0
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +29 -35
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
- data/src/core/lib/iomgr/port.h +1 -0
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +2 -3
- data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +9 -14
- data/src/core/lib/json/json.h +3 -2
- data/src/core/lib/json/json_reader.cc +5 -5
- data/src/core/lib/json/json_writer.cc +13 -12
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +8 -59
- data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +2 -3
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +33 -33
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/fake_transport_security.cc +10 -15
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl_transport_security.cc +52 -39
- data/src/core/tsi/ssl_transport_security.h +8 -8
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.h +2 -3
- data/src/core/tsi/transport_security_interface.h +3 -3
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/boringssl-with-bazel/err_data.c +329 -297
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
- metadata +111 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
- data/src/core/lib/gprpp/string_view.h +0 -60
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -26,6 +26,8 @@
|
|
26
26
|
#include <string.h>
|
27
27
|
#include <sys/types.h>
|
28
28
|
|
29
|
+
#include "absl/container/inlined_vector.h"
|
30
|
+
|
29
31
|
#include <ares.h>
|
30
32
|
#include <grpc/support/alloc.h>
|
31
33
|
#include <grpc/support/log.h>
|
@@ -33,11 +35,11 @@
|
|
33
35
|
#include <grpc/support/time.h>
|
34
36
|
|
35
37
|
#include <address_sorting/address_sorting.h>
|
38
|
+
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
|
36
39
|
#include "src/core/ext/filters/client_channel/parse_address.h"
|
37
40
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
|
38
41
|
#include "src/core/lib/gpr/string.h"
|
39
42
|
#include "src/core/lib/gprpp/host_port.h"
|
40
|
-
#include "src/core/lib/iomgr/combiner.h"
|
41
43
|
#include "src/core/lib/iomgr/error.h"
|
42
44
|
#include "src/core/lib/iomgr/executor.h"
|
43
45
|
#include "src/core/lib/iomgr/iomgr_internal.h"
|
@@ -60,6 +62,8 @@ struct grpc_ares_request {
|
|
60
62
|
grpc_closure* on_done;
|
61
63
|
/** the pointer to receive the resolved addresses */
|
62
64
|
std::unique_ptr<grpc_core::ServerAddressList>* addresses_out;
|
65
|
+
/** the pointer to receive the resolved balancer addresses */
|
66
|
+
std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses_out;
|
63
67
|
/** the pointer to receive the service config in JSON */
|
64
68
|
char** service_config_json_out;
|
65
69
|
/** the evernt driver used by this request */
|
@@ -71,6 +75,8 @@ struct grpc_ares_request {
|
|
71
75
|
grpc_error* error;
|
72
76
|
};
|
73
77
|
|
78
|
+
// TODO(apolcyn): make grpc_ares_hostbyname_request a sub-class
|
79
|
+
// of GrpcAresQuery.
|
74
80
|
typedef struct grpc_ares_hostbyname_request {
|
75
81
|
/** following members are set in create_hostbyname_request_locked
|
76
82
|
*/
|
@@ -82,27 +88,54 @@ typedef struct grpc_ares_hostbyname_request {
|
|
82
88
|
uint16_t port;
|
83
89
|
/** is it a grpclb address */
|
84
90
|
bool is_balancer;
|
91
|
+
/** for logging and errors: the query type ("A" or "AAAA") */
|
92
|
+
const char* qtype;
|
85
93
|
} grpc_ares_hostbyname_request;
|
86
94
|
|
87
|
-
static void
|
95
|
+
static void grpc_ares_request_ref_locked(grpc_ares_request* r);
|
96
|
+
static void grpc_ares_request_unref_locked(grpc_ares_request* r);
|
97
|
+
|
98
|
+
// TODO(apolcyn): as a part of C++-ification, find a way to
|
99
|
+
// organize per-query and per-resolution information in such a way
|
100
|
+
// that doesn't involve allocating a number of different data
|
101
|
+
// structures.
|
102
|
+
class GrpcAresQuery {
|
103
|
+
public:
|
104
|
+
explicit GrpcAresQuery(grpc_ares_request* r, const std::string& name)
|
105
|
+
: r_(r), name_(name) {
|
106
|
+
grpc_ares_request_ref_locked(r_);
|
107
|
+
}
|
108
|
+
|
109
|
+
~GrpcAresQuery() { grpc_ares_request_unref_locked(r_); }
|
110
|
+
|
111
|
+
grpc_ares_request* parent_request() { return r_; }
|
112
|
+
|
113
|
+
const std::string& name() { return name_; }
|
114
|
+
|
115
|
+
private:
|
116
|
+
/* the top level request instance */
|
117
|
+
grpc_ares_request* r_;
|
118
|
+
/** for logging and errors */
|
119
|
+
const std::string name_;
|
120
|
+
};
|
121
|
+
|
122
|
+
static void log_address_sorting_list(const grpc_ares_request* r,
|
123
|
+
const ServerAddressList& addresses,
|
88
124
|
const char* input_output_str) {
|
89
125
|
for (size_t i = 0; i < addresses.size(); i++) {
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
gpr_log(GPR_INFO,
|
97
|
-
"c-ares address sorting: %s[%" PRIuPTR "]=<unprintable>",
|
98
|
-
input_output_str, i);
|
99
|
-
}
|
126
|
+
std::string addr_str =
|
127
|
+
grpc_sockaddr_to_string(&addresses[i].address(), true);
|
128
|
+
gpr_log(GPR_INFO,
|
129
|
+
"(c-ares resolver) request:%p c-ares address sorting: %s[%" PRIuPTR
|
130
|
+
"]=%s",
|
131
|
+
r, input_output_str, i, addr_str.c_str());
|
100
132
|
}
|
101
133
|
}
|
102
134
|
|
103
|
-
void grpc_cares_wrapper_address_sorting_sort(
|
135
|
+
void grpc_cares_wrapper_address_sorting_sort(const grpc_ares_request* r,
|
136
|
+
ServerAddressList* addresses) {
|
104
137
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
|
105
|
-
log_address_sorting_list(*addresses, "input");
|
138
|
+
log_address_sorting_list(r, *addresses, "input");
|
106
139
|
}
|
107
140
|
address_sorting_sortable* sortables = (address_sorting_sortable*)gpr_zalloc(
|
108
141
|
sizeof(address_sorting_sortable) * addresses->size());
|
@@ -121,7 +154,7 @@ void grpc_cares_wrapper_address_sorting_sort(ServerAddressList* addresses) {
|
|
121
154
|
gpr_free(sortables);
|
122
155
|
*addresses = std::move(sorted);
|
123
156
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
|
124
|
-
log_address_sorting_list(*addresses, "output");
|
157
|
+
log_address_sorting_list(r, *addresses, "output");
|
125
158
|
}
|
126
159
|
}
|
127
160
|
|
@@ -142,28 +175,36 @@ void grpc_ares_complete_request_locked(grpc_ares_request* r) {
|
|
142
175
|
r->ev_driver = nullptr;
|
143
176
|
ServerAddressList* addresses = r->addresses_out->get();
|
144
177
|
if (addresses != nullptr) {
|
145
|
-
grpc_cares_wrapper_address_sorting_sort(addresses);
|
178
|
+
grpc_cares_wrapper_address_sorting_sort(r, addresses);
|
146
179
|
GRPC_ERROR_UNREF(r->error);
|
147
180
|
r->error = GRPC_ERROR_NONE;
|
148
181
|
// TODO(apolcyn): allow c-ares to return a service config
|
149
182
|
// with no addresses along side it
|
150
183
|
}
|
184
|
+
if (r->balancer_addresses_out != nullptr) {
|
185
|
+
ServerAddressList* balancer_addresses = r->balancer_addresses_out->get();
|
186
|
+
if (balancer_addresses != nullptr) {
|
187
|
+
grpc_cares_wrapper_address_sorting_sort(r, balancer_addresses);
|
188
|
+
}
|
189
|
+
}
|
151
190
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, r->error);
|
152
191
|
}
|
153
192
|
|
193
|
+
/* Note that the returned object takes a reference to qtype, so
|
194
|
+
* qtype must outlive it. */
|
154
195
|
static grpc_ares_hostbyname_request* create_hostbyname_request_locked(
|
155
|
-
grpc_ares_request* parent_request, char* host, uint16_t port,
|
156
|
-
bool is_balancer) {
|
196
|
+
grpc_ares_request* parent_request, const char* host, uint16_t port,
|
197
|
+
bool is_balancer, const char* qtype) {
|
157
198
|
GRPC_CARES_TRACE_LOG(
|
158
199
|
"request:%p create_hostbyname_request_locked host:%s port:%d "
|
159
|
-
"is_balancer:%d",
|
160
|
-
parent_request, host, port, is_balancer);
|
161
|
-
grpc_ares_hostbyname_request* hr =
|
162
|
-
gpr_zalloc(sizeof(grpc_ares_hostbyname_request)));
|
200
|
+
"is_balancer:%d qtype:%s",
|
201
|
+
parent_request, host, port, is_balancer, qtype);
|
202
|
+
grpc_ares_hostbyname_request* hr = new grpc_ares_hostbyname_request();
|
163
203
|
hr->parent_request = parent_request;
|
164
204
|
hr->host = gpr_strdup(host);
|
165
205
|
hr->port = port;
|
166
206
|
hr->is_balancer = is_balancer;
|
207
|
+
hr->qtype = qtype;
|
167
208
|
grpc_ares_request_ref_locked(parent_request);
|
168
209
|
return hr;
|
169
210
|
}
|
@@ -172,7 +213,7 @@ static void destroy_hostbyname_request_locked(
|
|
172
213
|
grpc_ares_hostbyname_request* hr) {
|
173
214
|
grpc_ares_request_unref_locked(hr->parent_request);
|
174
215
|
gpr_free(hr->host);
|
175
|
-
|
216
|
+
delete hr;
|
176
217
|
}
|
177
218
|
|
178
219
|
static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
|
@@ -182,19 +223,19 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
|
|
182
223
|
grpc_ares_request* r = hr->parent_request;
|
183
224
|
if (status == ARES_SUCCESS) {
|
184
225
|
GRPC_CARES_TRACE_LOG(
|
185
|
-
"request:%p on_hostbyname_done_locked host=%s ARES_SUCCESS", r,
|
186
|
-
hr->host);
|
187
|
-
|
188
|
-
|
226
|
+
"request:%p on_hostbyname_done_locked qtype=%s host=%s ARES_SUCCESS", r,
|
227
|
+
hr->qtype, hr->host);
|
228
|
+
std::unique_ptr<ServerAddressList>* address_list_ptr =
|
229
|
+
hr->is_balancer ? r->balancer_addresses_out : r->addresses_out;
|
230
|
+
if (*address_list_ptr == nullptr) {
|
231
|
+
*address_list_ptr = absl::make_unique<ServerAddressList>();
|
189
232
|
}
|
190
|
-
ServerAddressList& addresses = **
|
233
|
+
ServerAddressList& addresses = **address_list_ptr;
|
191
234
|
for (size_t i = 0; hostent->h_addr_list[i] != nullptr; ++i) {
|
192
|
-
|
235
|
+
absl::InlinedVector<grpc_arg, 1> args_to_add;
|
193
236
|
if (hr->is_balancer) {
|
194
|
-
args_to_add.emplace_back(
|
195
|
-
|
196
|
-
args_to_add.emplace_back(grpc_channel_arg_string_create(
|
197
|
-
const_cast<char*>(GRPC_ARG_ADDRESS_BALANCER_NAME), hr->host));
|
237
|
+
args_to_add.emplace_back(
|
238
|
+
grpc_core::CreateGrpclbBalancerNameArg(hr->host));
|
198
239
|
}
|
199
240
|
grpc_channel_args* args = grpc_channel_args_copy_and_add(
|
200
241
|
nullptr, args_to_add.data(), args_to_add.size());
|
@@ -237,10 +278,12 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
|
|
237
278
|
}
|
238
279
|
} else {
|
239
280
|
char* error_msg;
|
240
|
-
gpr_asprintf(&error_msg,
|
241
|
-
|
242
|
-
|
243
|
-
|
281
|
+
gpr_asprintf(&error_msg,
|
282
|
+
"C-ares status is not ARES_SUCCESS "
|
283
|
+
"qtype=%s name=%s is_balancer=%d: %s",
|
284
|
+
hr->qtype, hr->host, hr->is_balancer, ares_strerror(status));
|
285
|
+
GRPC_CARES_TRACE_LOG("request:%p on_hostbyname_done_locked: %s", r,
|
286
|
+
error_msg);
|
244
287
|
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
|
245
288
|
gpr_free(error_msg);
|
246
289
|
r->error = grpc_error_add_child(error, r->error);
|
@@ -250,9 +293,12 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
|
|
250
293
|
|
251
294
|
static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
|
252
295
|
unsigned char* abuf, int alen) {
|
253
|
-
|
296
|
+
GrpcAresQuery* q = static_cast<GrpcAresQuery*>(arg);
|
297
|
+
grpc_ares_request* r = q->parent_request();
|
254
298
|
if (status == ARES_SUCCESS) {
|
255
|
-
GRPC_CARES_TRACE_LOG(
|
299
|
+
GRPC_CARES_TRACE_LOG(
|
300
|
+
"request:%p on_srv_query_done_locked name=%s ARES_SUCCESS", r,
|
301
|
+
q->name().c_str());
|
256
302
|
struct ares_srv_reply* reply;
|
257
303
|
const int parse_status = ares_parse_srv_reply(abuf, alen, &reply);
|
258
304
|
GRPC_CARES_TRACE_LOG("request:%p ares_parse_srv_reply: %d", r,
|
@@ -264,12 +310,13 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
|
|
264
310
|
srv_it = srv_it->next) {
|
265
311
|
if (grpc_ares_query_ipv6()) {
|
266
312
|
grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
|
267
|
-
r, srv_it->host, htons(srv_it->port), true /* is_balancer
|
313
|
+
r, srv_it->host, htons(srv_it->port), true /* is_balancer */,
|
314
|
+
"AAAA");
|
268
315
|
ares_gethostbyname(*channel, hr->host, AF_INET6,
|
269
316
|
on_hostbyname_done_locked, hr);
|
270
317
|
}
|
271
318
|
grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
|
272
|
-
r, srv_it->host, htons(srv_it->port), true /* is_balancer
|
319
|
+
r, srv_it->host, htons(srv_it->port), true /* is_balancer */, "A");
|
273
320
|
ares_gethostbyname(*channel, hr->host, AF_INET,
|
274
321
|
on_hostbyname_done_locked, hr);
|
275
322
|
grpc_ares_ev_driver_start_locked(r->ev_driver);
|
@@ -280,15 +327,17 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
|
|
280
327
|
}
|
281
328
|
} else {
|
282
329
|
char* error_msg;
|
283
|
-
gpr_asprintf(&error_msg,
|
284
|
-
|
285
|
-
|
330
|
+
gpr_asprintf(&error_msg,
|
331
|
+
"C-ares status is not ARES_SUCCESS "
|
332
|
+
"qtype=SRV name=%s: %s",
|
333
|
+
q->name().c_str(), ares_strerror(status));
|
334
|
+
GRPC_CARES_TRACE_LOG("request:%p on_srv_query_done_locked: %s", r,
|
286
335
|
error_msg);
|
287
336
|
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
|
288
337
|
gpr_free(error_msg);
|
289
338
|
r->error = grpc_error_add_child(error, r->error);
|
290
339
|
}
|
291
|
-
|
340
|
+
delete q;
|
292
341
|
}
|
293
342
|
|
294
343
|
static const char g_service_config_attribute_prefix[] = "grpc_config=";
|
@@ -296,13 +345,15 @@ static const char g_service_config_attribute_prefix[] = "grpc_config=";
|
|
296
345
|
static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
|
297
346
|
unsigned char* buf, int len) {
|
298
347
|
char* error_msg;
|
299
|
-
|
348
|
+
GrpcAresQuery* q = static_cast<GrpcAresQuery*>(arg);
|
349
|
+
grpc_ares_request* r = q->parent_request();
|
300
350
|
const size_t prefix_len = sizeof(g_service_config_attribute_prefix) - 1;
|
301
351
|
struct ares_txt_ext* result = nullptr;
|
302
352
|
struct ares_txt_ext* reply = nullptr;
|
303
353
|
grpc_error* error = GRPC_ERROR_NONE;
|
304
354
|
if (status != ARES_SUCCESS) goto fail;
|
305
|
-
GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked ARES_SUCCESS", r
|
355
|
+
GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked name=%s ARES_SUCCESS", r,
|
356
|
+
q->name().c_str());
|
306
357
|
status = ares_parse_txt_reply_ext(buf, len, &reply);
|
307
358
|
if (status != ARES_SUCCESS) goto fail;
|
308
359
|
// Find service config in TXT record.
|
@@ -337,43 +388,47 @@ static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
|
|
337
388
|
ares_free_data(reply);
|
338
389
|
goto done;
|
339
390
|
fail:
|
340
|
-
gpr_asprintf(&error_msg,
|
341
|
-
|
391
|
+
gpr_asprintf(&error_msg,
|
392
|
+
"C-ares status is not ARES_SUCCESS "
|
393
|
+
"qtype=TXT name=%s: %s",
|
394
|
+
q->name().c_str(), ares_strerror(status));
|
342
395
|
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg);
|
343
396
|
GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked %s", r, error_msg);
|
344
397
|
gpr_free(error_msg);
|
345
398
|
r->error = grpc_error_add_child(error, r->error);
|
346
399
|
done:
|
347
|
-
|
400
|
+
delete q;
|
348
401
|
}
|
349
402
|
|
350
403
|
void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
351
404
|
grpc_ares_request* r, const char* dns_server, const char* name,
|
352
405
|
const char* default_port, grpc_pollset_set* interested_parties,
|
353
|
-
|
406
|
+
int query_timeout_ms,
|
407
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
|
354
408
|
grpc_error* error = GRPC_ERROR_NONE;
|
355
409
|
grpc_ares_hostbyname_request* hr = nullptr;
|
356
410
|
ares_channel* channel = nullptr;
|
357
411
|
/* parse name, splitting it into host and port parts */
|
358
|
-
|
359
|
-
|
412
|
+
std::string host;
|
413
|
+
std::string port;
|
360
414
|
grpc_core::SplitHostPort(name, &host, &port);
|
361
|
-
if (host
|
415
|
+
if (host.empty()) {
|
362
416
|
error = grpc_error_set_str(
|
363
417
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
|
364
418
|
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
|
365
419
|
goto error_cleanup;
|
366
|
-
} else if (port
|
420
|
+
} else if (port.empty()) {
|
367
421
|
if (default_port == nullptr) {
|
368
422
|
error = grpc_error_set_str(
|
369
423
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
|
370
424
|
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
|
371
425
|
goto error_cleanup;
|
372
426
|
}
|
373
|
-
port
|
427
|
+
port = default_port;
|
374
428
|
}
|
375
429
|
error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
|
376
|
-
query_timeout_ms,
|
430
|
+
query_timeout_ms,
|
431
|
+
std::move(work_serializer), r);
|
377
432
|
if (error != GRPC_ERROR_NONE) goto error_cleanup;
|
378
433
|
channel = grpc_ares_ev_driver_get_channel_locked(r->ev_driver);
|
379
434
|
// If dns_server is specified, use it.
|
@@ -414,32 +469,32 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
|
414
469
|
}
|
415
470
|
r->pending_queries = 1;
|
416
471
|
if (grpc_ares_query_ipv6()) {
|
417
|
-
hr = create_hostbyname_request_locked(r, host.
|
418
|
-
grpc_strhtons(port.
|
419
|
-
/*is_balancer=*/false);
|
472
|
+
hr = create_hostbyname_request_locked(r, host.c_str(),
|
473
|
+
grpc_strhtons(port.c_str()),
|
474
|
+
/*is_balancer=*/false, "AAAA");
|
420
475
|
ares_gethostbyname(*channel, hr->host, AF_INET6, on_hostbyname_done_locked,
|
421
476
|
hr);
|
422
477
|
}
|
423
|
-
hr =
|
424
|
-
|
425
|
-
|
478
|
+
hr = create_hostbyname_request_locked(r, host.c_str(),
|
479
|
+
grpc_strhtons(port.c_str()),
|
480
|
+
/*is_balancer=*/false, "A");
|
426
481
|
ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_locked,
|
427
482
|
hr);
|
428
|
-
if (
|
483
|
+
if (r->balancer_addresses_out != nullptr) {
|
429
484
|
/* Query the SRV record */
|
430
|
-
grpc_ares_request_ref_locked(r);
|
431
485
|
char* service_name;
|
432
|
-
gpr_asprintf(&service_name, "_grpclb._tcp.%s", host.
|
486
|
+
gpr_asprintf(&service_name, "_grpclb._tcp.%s", host.c_str());
|
487
|
+
GrpcAresQuery* srv_query = new GrpcAresQuery(r, service_name);
|
433
488
|
ares_query(*channel, service_name, ns_c_in, ns_t_srv,
|
434
|
-
on_srv_query_done_locked,
|
489
|
+
on_srv_query_done_locked, srv_query);
|
435
490
|
gpr_free(service_name);
|
436
491
|
}
|
437
492
|
if (r->service_config_json_out != nullptr) {
|
438
|
-
grpc_ares_request_ref_locked(r);
|
439
493
|
char* config_name;
|
440
|
-
gpr_asprintf(&config_name, "_grpc_config.%s", host.
|
494
|
+
gpr_asprintf(&config_name, "_grpc_config.%s", host.c_str());
|
495
|
+
GrpcAresQuery* txt_query = new GrpcAresQuery(r, config_name);
|
441
496
|
ares_search(*channel, config_name, ns_c_in, ns_t_txt, on_txt_done_locked,
|
442
|
-
|
497
|
+
txt_query);
|
443
498
|
gpr_free(config_name);
|
444
499
|
}
|
445
500
|
grpc_ares_ev_driver_start_locked(r->ev_driver);
|
@@ -452,18 +507,16 @@ error_cleanup:
|
|
452
507
|
|
453
508
|
static bool inner_resolve_as_ip_literal_locked(
|
454
509
|
const char* name, const char* default_port,
|
455
|
-
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
456
|
-
|
457
|
-
|
458
|
-
grpc_core::SplitHostPort(name, host, port);
|
459
|
-
if (*host == nullptr) {
|
510
|
+
std::unique_ptr<grpc_core::ServerAddressList>* addrs, std::string* host,
|
511
|
+
std::string* port, std::string* hostport) {
|
512
|
+
if (!grpc_core::SplitHostPort(name, host, port)) {
|
460
513
|
gpr_log(GPR_ERROR,
|
461
514
|
"Failed to parse %s to host:port while attempting to resolve as ip "
|
462
515
|
"literal.",
|
463
516
|
name);
|
464
517
|
return false;
|
465
518
|
}
|
466
|
-
if (
|
519
|
+
if (port->empty()) {
|
467
520
|
if (default_port == nullptr) {
|
468
521
|
gpr_log(GPR_ERROR,
|
469
522
|
"No port or default port for %s while attempting to resolve as "
|
@@ -471,13 +524,13 @@ static bool inner_resolve_as_ip_literal_locked(
|
|
471
524
|
name);
|
472
525
|
return false;
|
473
526
|
}
|
474
|
-
port
|
527
|
+
*port = default_port;
|
475
528
|
}
|
476
529
|
grpc_resolved_address addr;
|
477
|
-
|
478
|
-
if (grpc_parse_ipv4_hostport(hostport->
|
530
|
+
*hostport = grpc_core::JoinHostPort(*host, atoi(port->c_str()));
|
531
|
+
if (grpc_parse_ipv4_hostport(hostport->c_str(), &addr,
|
479
532
|
false /* log errors */) ||
|
480
|
-
grpc_parse_ipv6_hostport(hostport->
|
533
|
+
grpc_parse_ipv6_hostport(hostport->c_str(), &addr,
|
481
534
|
false /* log errors */)) {
|
482
535
|
GPR_ASSERT(*addrs == nullptr);
|
483
536
|
*addrs = absl::make_unique<ServerAddressList>();
|
@@ -490,22 +543,21 @@ static bool inner_resolve_as_ip_literal_locked(
|
|
490
543
|
static bool resolve_as_ip_literal_locked(
|
491
544
|
const char* name, const char* default_port,
|
492
545
|
std::unique_ptr<grpc_core::ServerAddressList>* addrs) {
|
493
|
-
|
494
|
-
|
495
|
-
|
546
|
+
std::string host;
|
547
|
+
std::string port;
|
548
|
+
std::string hostport;
|
496
549
|
bool out = inner_resolve_as_ip_literal_locked(name, default_port, addrs,
|
497
550
|
&host, &port, &hostport);
|
498
551
|
return out;
|
499
552
|
}
|
500
553
|
|
501
|
-
static bool target_matches_localhost_inner(const char* name,
|
502
|
-
|
503
|
-
grpc_core::UniquePtr<char>* port) {
|
554
|
+
static bool target_matches_localhost_inner(const char* name, std::string* host,
|
555
|
+
std::string* port) {
|
504
556
|
if (!grpc_core::SplitHostPort(name, host, port)) {
|
505
557
|
gpr_log(GPR_ERROR, "Unable to split host and port for name: %s", name);
|
506
558
|
return false;
|
507
559
|
}
|
508
|
-
if (gpr_stricmp(host->
|
560
|
+
if (gpr_stricmp(host->c_str(), "localhost") == 0) {
|
509
561
|
return true;
|
510
562
|
} else {
|
511
563
|
return false;
|
@@ -513,25 +565,25 @@ static bool target_matches_localhost_inner(const char* name,
|
|
513
565
|
}
|
514
566
|
|
515
567
|
static bool target_matches_localhost(const char* name) {
|
516
|
-
|
517
|
-
|
568
|
+
std::string host;
|
569
|
+
std::string port;
|
518
570
|
return target_matches_localhost_inner(name, &host, &port);
|
519
571
|
}
|
520
572
|
|
521
573
|
#ifdef GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY
|
522
574
|
static bool inner_maybe_resolve_localhost_manually_locked(
|
523
|
-
const char* name, const char* default_port,
|
524
|
-
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
525
|
-
|
575
|
+
const grpc_ares_request* r, const char* name, const char* default_port,
|
576
|
+
std::unique_ptr<grpc_core::ServerAddressList>* addrs, std::string* host,
|
577
|
+
std::string* port) {
|
526
578
|
grpc_core::SplitHostPort(name, host, port);
|
527
|
-
if (
|
579
|
+
if (host->empty()) {
|
528
580
|
gpr_log(GPR_ERROR,
|
529
581
|
"Failed to parse %s into host:port during manual localhost "
|
530
582
|
"resolution check.",
|
531
583
|
name);
|
532
584
|
return false;
|
533
585
|
}
|
534
|
-
if (
|
586
|
+
if (port->empty()) {
|
535
587
|
if (default_port == nullptr) {
|
536
588
|
gpr_log(GPR_ERROR,
|
537
589
|
"No port or default port for %s during manual localhost "
|
@@ -539,12 +591,12 @@ static bool inner_maybe_resolve_localhost_manually_locked(
|
|
539
591
|
name);
|
540
592
|
return false;
|
541
593
|
}
|
542
|
-
port
|
594
|
+
*port = default_port;
|
543
595
|
}
|
544
|
-
if (gpr_stricmp(host->
|
596
|
+
if (gpr_stricmp(host->c_str(), "localhost") == 0) {
|
545
597
|
GPR_ASSERT(*addrs == nullptr);
|
546
598
|
*addrs = absl::make_unique<grpc_core::ServerAddressList>();
|
547
|
-
uint16_t numeric_port = grpc_strhtons(port->
|
599
|
+
uint16_t numeric_port = grpc_strhtons(port->c_str());
|
548
600
|
// Append the ipv6 loopback address.
|
549
601
|
struct sockaddr_in6 ipv6_loopback_addr;
|
550
602
|
memset(&ipv6_loopback_addr, 0, sizeof(ipv6_loopback_addr));
|
@@ -563,23 +615,24 @@ static bool inner_maybe_resolve_localhost_manually_locked(
|
|
563
615
|
(*addrs)->emplace_back(&ipv4_loopback_addr, sizeof(ipv4_loopback_addr),
|
564
616
|
nullptr /* args */);
|
565
617
|
// Let the address sorter figure out which one should be tried first.
|
566
|
-
grpc_cares_wrapper_address_sorting_sort(addrs->get());
|
618
|
+
grpc_cares_wrapper_address_sorting_sort(r, addrs->get());
|
567
619
|
return true;
|
568
620
|
}
|
569
621
|
return false;
|
570
622
|
}
|
571
623
|
|
572
624
|
static bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
573
|
-
const char* name, const char* default_port,
|
625
|
+
const grpc_ares_request* r, const char* name, const char* default_port,
|
574
626
|
std::unique_ptr<grpc_core::ServerAddressList>* addrs) {
|
575
|
-
|
576
|
-
|
577
|
-
return inner_maybe_resolve_localhost_manually_locked(name, default_port,
|
627
|
+
std::string host;
|
628
|
+
std::string port;
|
629
|
+
return inner_maybe_resolve_localhost_manually_locked(r, name, default_port,
|
578
630
|
addrs, &host, &port);
|
579
631
|
}
|
580
632
|
#else /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
|
581
633
|
static bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
582
|
-
const
|
634
|
+
const grpc_ares_request* r, const char* /*name*/,
|
635
|
+
const char* /*default_port*/,
|
583
636
|
std::unique_ptr<grpc_core::ServerAddressList>* /*addrs*/) {
|
584
637
|
return false;
|
585
638
|
}
|
@@ -588,14 +641,16 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
|
|
588
641
|
static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
589
642
|
const char* dns_server, const char* name, const char* default_port,
|
590
643
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
591
|
-
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
644
|
+
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
645
|
+
std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
|
592
646
|
char** service_config_json, int query_timeout_ms,
|
593
|
-
grpc_core::
|
647
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
|
594
648
|
grpc_ares_request* r =
|
595
649
|
static_cast<grpc_ares_request*>(gpr_zalloc(sizeof(grpc_ares_request)));
|
596
650
|
r->ev_driver = nullptr;
|
597
651
|
r->on_done = on_done;
|
598
652
|
r->addresses_out = addrs;
|
653
|
+
r->balancer_addresses_out = balancer_addrs;
|
599
654
|
r->service_config_json_out = service_config_json;
|
600
655
|
r->error = GRPC_ERROR_NONE;
|
601
656
|
r->pending_queries = 0;
|
@@ -609,7 +664,7 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
|
609
664
|
return r;
|
610
665
|
}
|
611
666
|
// Early out if the target is localhost and we're on Windows.
|
612
|
-
if (grpc_ares_maybe_resolve_localhost_manually_locked(name, default_port,
|
667
|
+
if (grpc_ares_maybe_resolve_localhost_manually_locked(r, name, default_port,
|
613
668
|
addrs)) {
|
614
669
|
grpc_ares_complete_request_locked(r);
|
615
670
|
return r;
|
@@ -618,22 +673,24 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
|
|
618
673
|
// as to cut down on lookups over the network, especially in tests:
|
619
674
|
// https://github.com/grpc/proposal/pull/79
|
620
675
|
if (target_matches_localhost(name)) {
|
621
|
-
|
676
|
+
r->balancer_addresses_out = nullptr;
|
622
677
|
r->service_config_json_out = nullptr;
|
623
678
|
}
|
624
679
|
// Look up name using c-ares lib.
|
625
680
|
grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
|
626
|
-
r, dns_server, name, default_port, interested_parties,
|
627
|
-
|
681
|
+
r, dns_server, name, default_port, interested_parties, query_timeout_ms,
|
682
|
+
std::move(work_serializer));
|
628
683
|
return r;
|
629
684
|
}
|
630
685
|
|
631
686
|
grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
|
632
687
|
const char* dns_server, const char* name, const char* default_port,
|
633
688
|
grpc_pollset_set* interested_parties, grpc_closure* on_done,
|
634
|
-
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
689
|
+
std::unique_ptr<grpc_core::ServerAddressList>* addrs,
|
690
|
+
std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
|
635
691
|
char** service_config_json, int query_timeout_ms,
|
636
|
-
grpc_core::
|
692
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer) =
|
693
|
+
grpc_dns_lookup_ares_locked_impl;
|
637
694
|
|
638
695
|
static void grpc_cancel_ares_request_locked_impl(grpc_ares_request* r) {
|
639
696
|
GPR_ASSERT(r != nullptr);
|
@@ -673,8 +730,8 @@ void grpc_ares_cleanup(void) {}
|
|
673
730
|
*/
|
674
731
|
|
675
732
|
typedef struct grpc_resolve_address_ares_request {
|
676
|
-
/*
|
677
|
-
grpc_core::
|
733
|
+
/* work_serializer that queries and related callbacks run under */
|
734
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
|
678
735
|
/** the pointer to receive the resolved addresses */
|
679
736
|
grpc_resolved_addresses** addrs_out;
|
680
737
|
/** currently resolving addresses */
|
@@ -694,9 +751,8 @@ typedef struct grpc_resolve_address_ares_request {
|
|
694
751
|
grpc_ares_request* ares_request = nullptr;
|
695
752
|
} grpc_resolve_address_ares_request;
|
696
753
|
|
697
|
-
static void on_dns_lookup_done_locked(
|
698
|
-
|
699
|
-
static_cast<grpc_resolve_address_ares_request*>(arg);
|
754
|
+
static void on_dns_lookup_done_locked(grpc_resolve_address_ares_request* r,
|
755
|
+
grpc_error* error) {
|
700
756
|
gpr_free(r->ares_request);
|
701
757
|
grpc_resolved_addresses** resolved_addresses = r->addrs_out;
|
702
758
|
if (r->addresses == nullptr || r->addresses->empty()) {
|
@@ -709,36 +765,32 @@ static void on_dns_lookup_done_locked(void* arg, grpc_error* error) {
|
|
709
765
|
static_cast<grpc_resolved_address*>(gpr_zalloc(
|
710
766
|
sizeof(grpc_resolved_address) * (*resolved_addresses)->naddrs));
|
711
767
|
for (size_t i = 0; i < (*resolved_addresses)->naddrs; ++i) {
|
712
|
-
GPR_ASSERT(!(*r->addresses)[i].IsBalancer());
|
713
768
|
memcpy(&(*resolved_addresses)->addrs[i], &(*r->addresses)[i].address(),
|
714
769
|
sizeof(grpc_resolved_address));
|
715
770
|
}
|
716
771
|
}
|
717
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_resolve_address_done,
|
718
|
-
GRPC_ERROR_REF(error));
|
719
|
-
GRPC_COMBINER_UNREF(r->combiner, "on_dns_lookup_done_cb");
|
772
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_resolve_address_done, error);
|
720
773
|
delete r;
|
721
774
|
}
|
722
775
|
|
723
776
|
static void on_dns_lookup_done(void* arg, grpc_error* error) {
|
724
777
|
grpc_resolve_address_ares_request* r =
|
725
778
|
static_cast<grpc_resolve_address_ares_request*>(arg);
|
726
|
-
|
727
|
-
|
728
|
-
|
779
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
780
|
+
r->work_serializer->Run([r, error]() { on_dns_lookup_done_locked(r, error); },
|
781
|
+
DEBUG_LOCATION);
|
729
782
|
}
|
730
783
|
|
731
|
-
static void grpc_resolve_address_invoke_dns_lookup_ares_locked(
|
732
|
-
void* arg, grpc_error* /*unused_error*/) {
|
784
|
+
static void grpc_resolve_address_invoke_dns_lookup_ares_locked(void* arg) {
|
733
785
|
grpc_resolve_address_ares_request* r =
|
734
786
|
static_cast<grpc_resolve_address_ares_request*>(arg);
|
735
787
|
GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked, on_dns_lookup_done, r,
|
736
788
|
grpc_schedule_on_exec_ctx);
|
737
789
|
r->ares_request = grpc_dns_lookup_ares_locked(
|
738
790
|
nullptr /* dns_server */, r->name, r->default_port, r->interested_parties,
|
739
|
-
&r->on_dns_lookup_done_locked, &r->addresses,
|
740
|
-
nullptr /* service_config_json */,
|
741
|
-
r->
|
791
|
+
&r->on_dns_lookup_done_locked, &r->addresses,
|
792
|
+
nullptr /* balancer_addresses */, nullptr /* service_config_json */,
|
793
|
+
GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, r->work_serializer);
|
742
794
|
}
|
743
795
|
|
744
796
|
static void grpc_resolve_address_ares_impl(const char* name,
|
@@ -748,16 +800,15 @@ static void grpc_resolve_address_ares_impl(const char* name,
|
|
748
800
|
grpc_resolved_addresses** addrs) {
|
749
801
|
grpc_resolve_address_ares_request* r =
|
750
802
|
new grpc_resolve_address_ares_request();
|
751
|
-
r->
|
803
|
+
r->work_serializer = std::make_shared<grpc_core::WorkSerializer>();
|
752
804
|
r->addrs_out = addrs;
|
753
805
|
r->on_resolve_address_done = on_done;
|
754
806
|
r->name = name;
|
755
807
|
r->default_port = default_port;
|
756
808
|
r->interested_parties = interested_parties;
|
757
|
-
r->
|
758
|
-
|
759
|
-
|
760
|
-
GRPC_ERROR_NONE);
|
809
|
+
r->work_serializer->Run(
|
810
|
+
[r]() { grpc_resolve_address_invoke_dns_lookup_ares_locked(r); },
|
811
|
+
DEBUG_LOCATION);
|
761
812
|
}
|
762
813
|
|
763
814
|
void (*grpc_resolve_address_ares)(
|