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
@@ -31,7 +31,6 @@
|
|
31
31
|
#include <grpc/support/time.h>
|
32
32
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
33
33
|
#include "src/core/lib/gpr/string.h"
|
34
|
-
#include "src/core/lib/iomgr/combiner.h"
|
35
34
|
#include "src/core/lib/iomgr/iomgr_internal.h"
|
36
35
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
37
36
|
#include "src/core/lib/iomgr/timer.h"
|
@@ -66,8 +65,8 @@ struct grpc_ares_ev_driver {
|
|
66
65
|
/** refcount of the event driver */
|
67
66
|
gpr_refcount refs;
|
68
67
|
|
69
|
-
/**
|
70
|
-
grpc_core::
|
68
|
+
/** work_serializer to synchronize c-ares and I/O callbacks on */
|
69
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
|
71
70
|
/** a list of grpc_fd that this event driver is currently using. */
|
72
71
|
fd_node* fds;
|
73
72
|
/** is this event driver currently working? */
|
@@ -107,7 +106,6 @@ static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver* ev_driver) {
|
|
107
106
|
GRPC_CARES_TRACE_LOG("request:%p destroy ev_driver %p", ev_driver->request,
|
108
107
|
ev_driver);
|
109
108
|
GPR_ASSERT(ev_driver->fds == nullptr);
|
110
|
-
GRPC_COMBINER_UNREF(ev_driver->combiner, "free ares event driver");
|
111
109
|
ares_destroy(ev_driver->channel);
|
112
110
|
grpc_ares_complete_request_locked(ev_driver->request);
|
113
111
|
delete ev_driver;
|
@@ -133,21 +131,22 @@ static void fd_node_shutdown_locked(fd_node* fdn, const char* reason) {
|
|
133
131
|
}
|
134
132
|
|
135
133
|
static void on_timeout(void* arg, grpc_error* error);
|
136
|
-
static void on_timeout_locked(
|
134
|
+
static void on_timeout_locked(grpc_ares_ev_driver* arg, grpc_error* error);
|
137
135
|
|
138
136
|
static void on_ares_backup_poll_alarm(void* arg, grpc_error* error);
|
139
|
-
static void on_ares_backup_poll_alarm_locked(
|
137
|
+
static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* arg,
|
138
|
+
grpc_error* error);
|
140
139
|
|
141
140
|
static void noop_inject_channel_config(ares_channel /*channel*/) {}
|
142
141
|
|
143
142
|
void (*grpc_ares_test_only_inject_config)(ares_channel channel) =
|
144
143
|
noop_inject_channel_config;
|
145
144
|
|
146
|
-
grpc_error* grpc_ares_ev_driver_create_locked(
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
145
|
+
grpc_error* grpc_ares_ev_driver_create_locked(
|
146
|
+
grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
|
147
|
+
int query_timeout_ms,
|
148
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
|
149
|
+
grpc_ares_request* request) {
|
151
150
|
*ev_driver = new grpc_ares_ev_driver();
|
152
151
|
ares_options opts;
|
153
152
|
memset(&opts, 0, sizeof(opts));
|
@@ -164,7 +163,7 @@ grpc_error* grpc_ares_ev_driver_create_locked(grpc_ares_ev_driver** ev_driver,
|
|
164
163
|
gpr_free(*ev_driver);
|
165
164
|
return err;
|
166
165
|
}
|
167
|
-
(*ev_driver)->
|
166
|
+
(*ev_driver)->work_serializer = std::move(work_serializer);
|
168
167
|
gpr_ref_init(&(*ev_driver)->refs, 1);
|
169
168
|
(*ev_driver)->pollset_set = pollset_set;
|
170
169
|
(*ev_driver)->fds = nullptr;
|
@@ -172,7 +171,7 @@ grpc_error* grpc_ares_ev_driver_create_locked(grpc_ares_ev_driver** ev_driver,
|
|
172
171
|
(*ev_driver)->shutting_down = false;
|
173
172
|
(*ev_driver)->request = request;
|
174
173
|
(*ev_driver)->polled_fd_factory =
|
175
|
-
grpc_core::NewGrpcPolledFdFactory((*ev_driver)->
|
174
|
+
grpc_core::NewGrpcPolledFdFactory((*ev_driver)->work_serializer);
|
176
175
|
(*ev_driver)
|
177
176
|
->polled_fd_factory->ConfigureAresChannelLocked((*ev_driver)->channel);
|
178
177
|
(*ev_driver)->query_timeout_ms = query_timeout_ms;
|
@@ -234,13 +233,12 @@ static grpc_millis calculate_next_ares_backup_poll_alarm_ms(
|
|
234
233
|
|
235
234
|
static void on_timeout(void* arg, grpc_error* error) {
|
236
235
|
grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
|
237
|
-
|
238
|
-
|
239
|
-
|
236
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
237
|
+
driver->work_serializer->Run(
|
238
|
+
[driver, error]() { on_timeout_locked(driver, error); }, DEBUG_LOCATION);
|
240
239
|
}
|
241
240
|
|
242
|
-
static void on_timeout_locked(
|
243
|
-
grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
|
241
|
+
static void on_timeout_locked(grpc_ares_ev_driver* driver, grpc_error* error) {
|
244
242
|
GRPC_CARES_TRACE_LOG(
|
245
243
|
"request:%p ev_driver=%p on_timeout_locked. driver->shutting_down=%d. "
|
246
244
|
"err=%s",
|
@@ -249,14 +247,15 @@ static void on_timeout_locked(void* arg, grpc_error* error) {
|
|
249
247
|
grpc_ares_ev_driver_shutdown_locked(driver);
|
250
248
|
}
|
251
249
|
grpc_ares_ev_driver_unref(driver);
|
250
|
+
GRPC_ERROR_UNREF(error);
|
252
251
|
}
|
253
252
|
|
254
253
|
static void on_ares_backup_poll_alarm(void* arg, grpc_error* error) {
|
255
254
|
grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
255
|
+
GRPC_ERROR_REF(error);
|
256
|
+
driver->work_serializer->Run(
|
257
|
+
[driver, error]() { on_ares_backup_poll_alarm_locked(driver, error); },
|
258
|
+
DEBUG_LOCATION);
|
260
259
|
}
|
261
260
|
|
262
261
|
/* In case of non-responsive DNS servers, dropped packets, etc., c-ares has
|
@@ -267,8 +266,8 @@ static void on_ares_backup_poll_alarm(void* arg, grpc_error* error) {
|
|
267
266
|
* b) when some time has passed without fd events having happened
|
268
267
|
* For the latter, we use this backup poller. Also see
|
269
268
|
* https://github.com/grpc/grpc/pull/17688 description for more details. */
|
270
|
-
static void on_ares_backup_poll_alarm_locked(
|
271
|
-
|
269
|
+
static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
|
270
|
+
grpc_error* error) {
|
272
271
|
GRPC_CARES_TRACE_LOG(
|
273
272
|
"request:%p ev_driver=%p on_ares_backup_poll_alarm_locked. "
|
274
273
|
"driver->shutting_down=%d. "
|
@@ -301,10 +300,10 @@ static void on_ares_backup_poll_alarm_locked(void* arg, grpc_error* error) {
|
|
301
300
|
grpc_ares_notify_on_event_locked(driver);
|
302
301
|
}
|
303
302
|
grpc_ares_ev_driver_unref(driver);
|
303
|
+
GRPC_ERROR_UNREF(error);
|
304
304
|
}
|
305
305
|
|
306
|
-
static void on_readable_locked(
|
307
|
-
fd_node* fdn = static_cast<fd_node*>(arg);
|
306
|
+
static void on_readable_locked(fd_node* fdn, grpc_error* error) {
|
308
307
|
GPR_ASSERT(fdn->readable_registered);
|
309
308
|
grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
|
310
309
|
const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
|
@@ -326,17 +325,17 @@ static void on_readable_locked(void* arg, grpc_error* error) {
|
|
326
325
|
}
|
327
326
|
grpc_ares_notify_on_event_locked(ev_driver);
|
328
327
|
grpc_ares_ev_driver_unref(ev_driver);
|
328
|
+
GRPC_ERROR_UNREF(error);
|
329
329
|
}
|
330
330
|
|
331
331
|
static void on_readable(void* arg, grpc_error* error) {
|
332
332
|
fd_node* fdn = static_cast<fd_node*>(arg);
|
333
|
-
|
334
|
-
|
335
|
-
|
333
|
+
GRPC_ERROR_REF(error); /* ref owned by lambda */
|
334
|
+
fdn->ev_driver->work_serializer->Run(
|
335
|
+
[fdn, error]() { on_readable_locked(fdn, error); }, DEBUG_LOCATION);
|
336
336
|
}
|
337
337
|
|
338
|
-
static void on_writable_locked(
|
339
|
-
fd_node* fdn = static_cast<fd_node*>(arg);
|
338
|
+
static void on_writable_locked(fd_node* fdn, grpc_error* error) {
|
340
339
|
GPR_ASSERT(fdn->writable_registered);
|
341
340
|
grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
|
342
341
|
const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
|
@@ -356,13 +355,14 @@ static void on_writable_locked(void* arg, grpc_error* error) {
|
|
356
355
|
}
|
357
356
|
grpc_ares_notify_on_event_locked(ev_driver);
|
358
357
|
grpc_ares_ev_driver_unref(ev_driver);
|
358
|
+
GRPC_ERROR_UNREF(error);
|
359
359
|
}
|
360
360
|
|
361
361
|
static void on_writable(void* arg, grpc_error* error) {
|
362
362
|
fd_node* fdn = static_cast<fd_node*>(arg);
|
363
|
-
|
364
|
-
|
365
|
-
|
363
|
+
GRPC_ERROR_REF(error); /* ref owned by lambda */
|
364
|
+
fdn->ev_driver->work_serializer->Run(
|
365
|
+
[fdn, error]() { on_writable_locked(fdn, error); }, DEBUG_LOCATION);
|
366
366
|
}
|
367
367
|
|
368
368
|
ares_channel* grpc_ares_ev_driver_get_channel_locked(
|
@@ -387,7 +387,7 @@ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver) {
|
|
387
387
|
fdn = static_cast<fd_node*>(gpr_malloc(sizeof(fd_node)));
|
388
388
|
fdn->grpc_polled_fd =
|
389
389
|
ev_driver->polled_fd_factory->NewGrpcPolledFdLocked(
|
390
|
-
socks[i], ev_driver->pollset_set, ev_driver->
|
390
|
+
socks[i], ev_driver->pollset_set, ev_driver->work_serializer);
|
391
391
|
GRPC_CARES_TRACE_LOG("request:%p new fd: %s", ev_driver->request,
|
392
392
|
fdn->grpc_polled_fd->GetName());
|
393
393
|
fdn->ev_driver = ev_driver;
|
@@ -40,11 +40,11 @@ ares_channel* grpc_ares_ev_driver_get_channel_locked(
|
|
40
40
|
|
41
41
|
/* Creates a new grpc_ares_ev_driver. Returns GRPC_ERROR_NONE if \a ev_driver is
|
42
42
|
created successfully. */
|
43
|
-
grpc_error* grpc_ares_ev_driver_create_locked(
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
grpc_error* grpc_ares_ev_driver_create_locked(
|
44
|
+
grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
|
45
|
+
int query_timeout_ms,
|
46
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
|
47
|
+
grpc_ares_request* request);
|
48
48
|
|
49
49
|
/* Called back when all DNS lookups have completed. */
|
50
50
|
void grpc_ares_ev_driver_on_queries_complete_locked(
|
@@ -90,12 +90,13 @@ class GrpcPolledFdFactory {
|
|
90
90
|
/* Creates a new wrapped fd for the current platform */
|
91
91
|
virtual GrpcPolledFd* NewGrpcPolledFdLocked(
|
92
92
|
ares_socket_t as, grpc_pollset_set* driver_pollset_set,
|
93
|
-
|
93
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer) = 0;
|
94
94
|
/* Optionally configures the ares channel after creation */
|
95
95
|
virtual void ConfigureAresChannelLocked(ares_channel channel) = 0;
|
96
96
|
};
|
97
97
|
|
98
|
-
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
|
98
|
+
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
|
99
|
+
std::shared_ptr<grpc_core::WorkSerializer> work_serializer);
|
99
100
|
|
100
101
|
} // namespace grpc_core
|
101
102
|
|
@@ -31,7 +31,7 @@
|
|
31
31
|
#include <grpc/support/time.h>
|
32
32
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
|
33
33
|
#include "src/core/lib/gpr/string.h"
|
34
|
-
#include "src/core/lib/iomgr/
|
34
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
35
35
|
|
36
36
|
namespace grpc_core {
|
37
37
|
|
@@ -41,19 +41,16 @@ void ares_uv_poll_close_cb(uv_handle_t* handle) { delete handle; }
|
|
41
41
|
|
42
42
|
class GrpcPolledFdLibuv : public GrpcPolledFd {
|
43
43
|
public:
|
44
|
-
GrpcPolledFdLibuv(ares_socket_t as,
|
45
|
-
|
44
|
+
GrpcPolledFdLibuv(ares_socket_t as,
|
45
|
+
std::shared_ptr<WorkSerializer> work_serializer)
|
46
|
+
: as_(as), work_serializer_(std::move(work_serializer)) {
|
46
47
|
gpr_asprintf(&name_, "c-ares socket: %" PRIdPTR, (intptr_t)as);
|
47
48
|
handle_ = new uv_poll_t();
|
48
49
|
uv_poll_init_socket(uv_default_loop(), handle_, as);
|
49
50
|
handle_->data = this;
|
50
|
-
GRPC_COMBINER_REF(combiner_, "libuv ares event driver");
|
51
51
|
}
|
52
52
|
|
53
|
-
~GrpcPolledFdLibuv() {
|
54
|
-
gpr_free(name_);
|
55
|
-
GRPC_COMBINER_UNREF(combiner_, "libuv ares event driver");
|
56
|
-
}
|
53
|
+
~GrpcPolledFdLibuv() { gpr_free(name_); }
|
57
54
|
|
58
55
|
void RegisterForOnReadableLocked(grpc_closure* read_closure) override {
|
59
56
|
GPR_ASSERT(read_closure_ == nullptr);
|
@@ -109,7 +106,7 @@ class GrpcPolledFdLibuv : public GrpcPolledFd {
|
|
109
106
|
grpc_closure* read_closure_ = nullptr;
|
110
107
|
grpc_closure* write_closure_ = nullptr;
|
111
108
|
int poll_events_ = 0;
|
112
|
-
|
109
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
113
110
|
};
|
114
111
|
|
115
112
|
struct AresUvPollCbArg {
|
@@ -121,14 +118,14 @@ struct AresUvPollCbArg {
|
|
121
118
|
int events;
|
122
119
|
};
|
123
120
|
|
124
|
-
static void ares_uv_poll_cb_locked(
|
125
|
-
std::unique_ptr<AresUvPollCbArg> arg_struct(
|
126
|
-
reinterpret_cast<AresUvPollCbArg*>(arg));
|
121
|
+
static void ares_uv_poll_cb_locked(AresUvPollCbArg* arg) {
|
122
|
+
std::unique_ptr<AresUvPollCbArg> arg_struct(arg);
|
127
123
|
uv_poll_t* handle = arg_struct->handle;
|
128
124
|
int status = arg_struct->status;
|
129
125
|
int events = arg_struct->events;
|
130
126
|
GrpcPolledFdLibuv* polled_fd =
|
131
127
|
reinterpret_cast<GrpcPolledFdLibuv*>(handle->data);
|
128
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
132
129
|
if (status < 0) {
|
133
130
|
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("cares polling error");
|
134
131
|
error =
|
@@ -155,24 +152,23 @@ void ares_uv_poll_cb(uv_poll_t* handle, int status, int events) {
|
|
155
152
|
GrpcPolledFdLibuv* polled_fd =
|
156
153
|
reinterpret_cast<GrpcPolledFdLibuv*>(handle->data);
|
157
154
|
AresUvPollCbArg* arg = new AresUvPollCbArg(handle, status, events);
|
158
|
-
polled_fd->
|
159
|
-
|
160
|
-
GRPC_ERROR_NONE);
|
155
|
+
polled_fd->work_serializer_->Run([arg]() { ares_uv_poll_cb_locked(arg); },
|
156
|
+
DEBUG_LOCATION);
|
161
157
|
}
|
162
158
|
|
163
159
|
class GrpcPolledFdFactoryLibuv : public GrpcPolledFdFactory {
|
164
160
|
public:
|
165
|
-
GrpcPolledFd* NewGrpcPolledFdLocked(
|
166
|
-
|
167
|
-
|
168
|
-
return new GrpcPolledFdLibuv(as,
|
161
|
+
GrpcPolledFd* NewGrpcPolledFdLocked(
|
162
|
+
ares_socket_t as, grpc_pollset_set* driver_pollset_set,
|
163
|
+
std::shared_ptr<WorkSerializer> work_serializer) override {
|
164
|
+
return new GrpcPolledFdLibuv(as, std::move(work_serializer));
|
169
165
|
}
|
170
166
|
|
171
167
|
void ConfigureAresChannelLocked(ares_channel channel) override {}
|
172
168
|
};
|
173
169
|
|
174
170
|
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
|
175
|
-
|
171
|
+
std::shared_ptr<WorkSerializer> work_serializer) {
|
176
172
|
return absl::make_unique<GrpcPolledFdFactoryLibuv>();
|
177
173
|
}
|
178
174
|
|
@@ -88,9 +88,9 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
|
|
88
88
|
|
89
89
|
class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
90
90
|
public:
|
91
|
-
GrpcPolledFd* NewGrpcPolledFdLocked(
|
92
|
-
|
93
|
-
|
91
|
+
GrpcPolledFd* NewGrpcPolledFdLocked(
|
92
|
+
ares_socket_t as, grpc_pollset_set* driver_pollset_set,
|
93
|
+
std::shared_ptr<WorkSerializer> /*work_serializer*/) override {
|
94
94
|
return new GrpcPolledFdPosix(as, driver_pollset_set);
|
95
95
|
}
|
96
96
|
|
@@ -98,7 +98,7 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
98
98
|
};
|
99
99
|
|
100
100
|
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
|
101
|
-
|
101
|
+
std::shared_ptr<WorkSerializer> work_serializer) { /* NOLINT */
|
102
102
|
return absl::make_unique<GrpcPolledFdFactoryPosix>();
|
103
103
|
}
|
104
104
|
|
@@ -30,12 +30,12 @@
|
|
30
30
|
#include <string.h>
|
31
31
|
#include "src/core/lib/gpr/string.h"
|
32
32
|
#include "src/core/lib/gprpp/memory.h"
|
33
|
-
#include "src/core/lib/iomgr/combiner.h"
|
34
33
|
#include "src/core/lib/iomgr/iocp_windows.h"
|
35
34
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
36
35
|
#include "src/core/lib/iomgr/sockaddr_windows.h"
|
37
36
|
#include "src/core/lib/iomgr/socket_windows.h"
|
38
37
|
#include "src/core/lib/iomgr/tcp_windows.h"
|
38
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
39
39
|
#include "src/core/lib/slice/slice_internal.h"
|
40
40
|
|
41
41
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
|
@@ -97,28 +97,31 @@ class GrpcPolledFdWindows {
|
|
97
97
|
WRITE_WAITING_FOR_VERIFICATION_UPON_RETRY,
|
98
98
|
};
|
99
99
|
|
100
|
-
GrpcPolledFdWindows(ares_socket_t as,
|
101
|
-
|
102
|
-
|
100
|
+
GrpcPolledFdWindows(ares_socket_t as,
|
101
|
+
std::shared_ptr<WorkSerializer> work_serializer,
|
102
|
+
int address_family, int socket_type)
|
103
|
+
: work_serializer_(std::move(work_serializer)),
|
104
|
+
read_buf_(grpc_empty_slice()),
|
103
105
|
write_buf_(grpc_empty_slice()),
|
104
106
|
tcp_write_state_(WRITE_IDLE),
|
105
107
|
gotten_into_driver_list_(false),
|
106
108
|
address_family_(address_family),
|
107
109
|
socket_type_(socket_type) {
|
108
110
|
gpr_asprintf(&name_, "c-ares socket: %" PRIdPTR, as);
|
111
|
+
// Closure Initialization
|
112
|
+
GRPC_CLOSURE_INIT(&outer_read_closure_,
|
113
|
+
&GrpcPolledFdWindows::OnIocpReadable, this,
|
114
|
+
grpc_schedule_on_exec_ctx);
|
115
|
+
GRPC_CLOSURE_INIT(&outer_write_closure_,
|
116
|
+
&GrpcPolledFdWindows::OnIocpWriteable, this,
|
117
|
+
grpc_schedule_on_exec_ctx);
|
118
|
+
GRPC_CLOSURE_INIT(&on_tcp_connect_locked_,
|
119
|
+
&GrpcPolledFdWindows::OnTcpConnect, this,
|
120
|
+
grpc_schedule_on_exec_ctx);
|
109
121
|
winsocket_ = grpc_winsocket_create(as, name_);
|
110
|
-
combiner_ = GRPC_COMBINER_REF(combiner, name_);
|
111
|
-
GRPC_CLOSURE_INIT(&continue_register_for_on_readable_locked_,
|
112
|
-
&GrpcPolledFdWindows::ContinueRegisterForOnReadableLocked,
|
113
|
-
this, nullptr);
|
114
|
-
GRPC_CLOSURE_INIT(
|
115
|
-
&continue_register_for_on_writeable_locked_,
|
116
|
-
&GrpcPolledFdWindows::ContinueRegisterForOnWriteableLocked, this,
|
117
|
-
nullptr);
|
118
122
|
}
|
119
123
|
|
120
124
|
~GrpcPolledFdWindows() {
|
121
|
-
GRPC_COMBINER_UNREF(combiner_, name_);
|
122
125
|
grpc_slice_unref_internal(read_buf_);
|
123
126
|
grpc_slice_unref_internal(write_buf_);
|
124
127
|
GPR_ASSERT(read_closure_ == nullptr);
|
@@ -145,23 +148,15 @@ class GrpcPolledFdWindows {
|
|
145
148
|
GPR_ASSERT(!read_buf_has_data_);
|
146
149
|
read_buf_ = GRPC_SLICE_MALLOC(4192);
|
147
150
|
if (connect_done_) {
|
148
|
-
|
149
|
-
|
151
|
+
work_serializer_->Run([this]() { ContinueRegisterForOnReadableLocked(); },
|
152
|
+
DEBUG_LOCATION);
|
150
153
|
} else {
|
151
|
-
GPR_ASSERT(pending_continue_register_for_on_readable_locked_ ==
|
152
|
-
pending_continue_register_for_on_readable_locked_ =
|
153
|
-
&continue_register_for_on_readable_locked_;
|
154
|
+
GPR_ASSERT(pending_continue_register_for_on_readable_locked_ == false);
|
155
|
+
pending_continue_register_for_on_readable_locked_ = true;
|
154
156
|
}
|
155
157
|
}
|
156
158
|
|
157
|
-
|
158
|
-
grpc_error* unused_error) {
|
159
|
-
GrpcPolledFdWindows* grpc_polled_fd =
|
160
|
-
static_cast<GrpcPolledFdWindows*>(arg);
|
161
|
-
grpc_polled_fd->InnerContinueRegisterForOnReadableLocked(GRPC_ERROR_NONE);
|
162
|
-
}
|
163
|
-
|
164
|
-
void InnerContinueRegisterForOnReadableLocked(grpc_error* unused_error) {
|
159
|
+
void ContinueRegisterForOnReadableLocked() {
|
165
160
|
GRPC_CARES_TRACE_LOG(
|
166
161
|
"fd:|%s| InnerContinueRegisterForOnReadableLocked "
|
167
162
|
"wsa_connect_error_:%d",
|
@@ -194,10 +189,7 @@ class GrpcPolledFdWindows {
|
|
194
189
|
return;
|
195
190
|
}
|
196
191
|
}
|
197
|
-
grpc_socket_notify_on_read(
|
198
|
-
winsocket_, GRPC_CLOSURE_INIT(&outer_read_closure_,
|
199
|
-
&GrpcPolledFdWindows::OnIocpReadable,
|
200
|
-
this, grpc_schedule_on_exec_ctx));
|
192
|
+
grpc_socket_notify_on_read(winsocket_, &outer_read_closure_);
|
201
193
|
}
|
202
194
|
|
203
195
|
void RegisterForOnWriteableLocked(grpc_closure* write_closure) {
|
@@ -213,23 +205,15 @@ class GrpcPolledFdWindows {
|
|
213
205
|
GPR_ASSERT(write_closure_ == nullptr);
|
214
206
|
write_closure_ = write_closure;
|
215
207
|
if (connect_done_) {
|
216
|
-
|
217
|
-
|
208
|
+
work_serializer_->Run(
|
209
|
+
[this]() { ContinueRegisterForOnWriteableLocked(); }, DEBUG_LOCATION);
|
218
210
|
} else {
|
219
|
-
GPR_ASSERT(pending_continue_register_for_on_writeable_locked_ ==
|
220
|
-
pending_continue_register_for_on_writeable_locked_ =
|
221
|
-
&continue_register_for_on_writeable_locked_;
|
211
|
+
GPR_ASSERT(pending_continue_register_for_on_writeable_locked_ == false);
|
212
|
+
pending_continue_register_for_on_writeable_locked_ = true;
|
222
213
|
}
|
223
214
|
}
|
224
215
|
|
225
|
-
|
226
|
-
grpc_error* unused_error) {
|
227
|
-
GrpcPolledFdWindows* grpc_polled_fd =
|
228
|
-
static_cast<GrpcPolledFdWindows*>(arg);
|
229
|
-
grpc_polled_fd->InnerContinueRegisterForOnWriteableLocked(GRPC_ERROR_NONE);
|
230
|
-
}
|
231
|
-
|
232
|
-
void InnerContinueRegisterForOnWriteableLocked(grpc_error* unused_error) {
|
216
|
+
void ContinueRegisterForOnWriteableLocked() {
|
233
217
|
GRPC_CARES_TRACE_LOG(
|
234
218
|
"fd:|%s| InnerContinueRegisterForOnWriteableLocked "
|
235
219
|
"wsa_connect_error_:%d",
|
@@ -256,11 +240,7 @@ class GrpcPolledFdWindows {
|
|
256
240
|
ScheduleAndNullWriteClosure(
|
257
241
|
GRPC_WSA_ERROR(wsa_error_code, "WSASend (overlapped)"));
|
258
242
|
} else {
|
259
|
-
grpc_socket_notify_on_write(
|
260
|
-
winsocket_,
|
261
|
-
GRPC_CLOSURE_INIT(&outer_write_closure_,
|
262
|
-
&GrpcPolledFdWindows::OnIocpWriteable, this,
|
263
|
-
grpc_schedule_on_exec_ctx));
|
243
|
+
grpc_socket_notify_on_write(winsocket_, &outer_write_closure_);
|
264
244
|
}
|
265
245
|
break;
|
266
246
|
case WRITE_PENDING:
|
@@ -440,24 +420,19 @@ class GrpcPolledFdWindows {
|
|
440
420
|
static void OnTcpConnect(void* arg, grpc_error* error) {
|
441
421
|
GrpcPolledFdWindows* grpc_polled_fd =
|
442
422
|
static_cast<GrpcPolledFdWindows*>(arg);
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
static void OnTcpConnectLocked(void* arg, grpc_error* error) {
|
451
|
-
GrpcPolledFdWindows* grpc_polled_fd =
|
452
|
-
static_cast<GrpcPolledFdWindows*>(arg);
|
453
|
-
grpc_polled_fd->InnerOnTcpConnectLocked(error);
|
423
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
424
|
+
grpc_polled_fd->work_serializer_->Run(
|
425
|
+
[grpc_polled_fd, error]() {
|
426
|
+
grpc_polled_fd->OnTcpConnectLocked(error);
|
427
|
+
},
|
428
|
+
DEBUG_LOCATION);
|
454
429
|
}
|
455
430
|
|
456
|
-
void
|
431
|
+
void OnTcpConnectLocked(grpc_error* error) {
|
457
432
|
GRPC_CARES_TRACE_LOG(
|
458
433
|
"fd:%s InnerOnTcpConnectLocked error:|%s| "
|
459
|
-
"pending_register_for_readable:%"
|
460
|
-
" pending_register_for_writeable:%"
|
434
|
+
"pending_register_for_readable:%d"
|
435
|
+
" pending_register_for_writeable:%d",
|
461
436
|
GetName(), grpc_error_string(error),
|
462
437
|
pending_continue_register_for_on_readable_locked_,
|
463
438
|
pending_continue_register_for_on_writeable_locked_);
|
@@ -486,14 +461,15 @@ class GrpcPolledFdWindows {
|
|
486
461
|
// this fd to abort.
|
487
462
|
wsa_connect_error_ = WSA_OPERATION_ABORTED;
|
488
463
|
}
|
489
|
-
if (pending_continue_register_for_on_readable_locked_
|
490
|
-
|
491
|
-
|
464
|
+
if (pending_continue_register_for_on_readable_locked_) {
|
465
|
+
work_serializer_->Run([this]() { ContinueRegisterForOnReadableLocked(); },
|
466
|
+
DEBUG_LOCATION);
|
492
467
|
}
|
493
|
-
if (pending_continue_register_for_on_writeable_locked_
|
494
|
-
|
495
|
-
|
468
|
+
if (pending_continue_register_for_on_writeable_locked_) {
|
469
|
+
work_serializer_->Run(
|
470
|
+
[this]() { ContinueRegisterForOnWriteableLocked(); }, DEBUG_LOCATION);
|
496
471
|
}
|
472
|
+
GRPC_ERROR_UNREF(error);
|
497
473
|
}
|
498
474
|
|
499
475
|
int Connect(WSAErrorContext* wsa_error_ctx, const struct sockaddr* target,
|
@@ -593,25 +569,16 @@ class GrpcPolledFdWindows {
|
|
593
569
|
return -1;
|
594
570
|
}
|
595
571
|
}
|
596
|
-
GRPC_CLOSURE_INIT(&on_tcp_connect_locked_,
|
597
|
-
&GrpcPolledFdWindows::OnTcpConnect, this,
|
598
|
-
grpc_schedule_on_exec_ctx);
|
599
572
|
grpc_socket_notify_on_write(winsocket_, &on_tcp_connect_locked_);
|
600
573
|
return out;
|
601
574
|
}
|
602
575
|
|
603
576
|
static void OnIocpReadable(void* arg, grpc_error* error) {
|
604
577
|
GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
GRPC_ERROR_REF(error));
|
610
|
-
}
|
611
|
-
|
612
|
-
static void OnIocpReadableLocked(void* arg, grpc_error* error) {
|
613
|
-
GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
|
614
|
-
polled_fd->OnIocpReadableInner(error);
|
578
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
579
|
+
polled_fd->work_serializer_->Run(
|
580
|
+
[polled_fd, error]() { polled_fd->OnIocpReadableLocked(error); },
|
581
|
+
DEBUG_LOCATION);
|
615
582
|
}
|
616
583
|
|
617
584
|
// TODO(apolcyn): improve this error handling to be less conversative.
|
@@ -619,7 +586,7 @@ class GrpcPolledFdWindows {
|
|
619
586
|
// c-ares reads from this socket later, but it shouldn't necessarily cancel
|
620
587
|
// the entire resolution attempt. Doing so will allow the "inject broken
|
621
588
|
// nameserver list" test to pass on Windows.
|
622
|
-
void
|
589
|
+
void OnIocpReadableLocked(grpc_error* error) {
|
623
590
|
if (error == GRPC_ERROR_NONE) {
|
624
591
|
if (winsocket_->read_info.wsa_error != 0) {
|
625
592
|
/* WSAEMSGSIZE would be due to receiving more data
|
@@ -627,7 +594,6 @@ class GrpcPolledFdWindows {
|
|
627
594
|
* the connection is TCP and read the leftovers
|
628
595
|
* in subsequent c-ares reads. */
|
629
596
|
if (winsocket_->read_info.wsa_error != WSAEMSGSIZE) {
|
630
|
-
GRPC_ERROR_UNREF(error);
|
631
597
|
error = GRPC_WSA_ERROR(winsocket_->read_info.wsa_error,
|
632
598
|
"OnIocpReadableInner");
|
633
599
|
GRPC_CARES_TRACE_LOG(
|
@@ -654,24 +620,17 @@ class GrpcPolledFdWindows {
|
|
654
620
|
|
655
621
|
static void OnIocpWriteable(void* arg, grpc_error* error) {
|
656
622
|
GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
GRPC_ERROR_REF(error));
|
623
|
+
GRPC_ERROR_REF(error); // error owned by lambda
|
624
|
+
polled_fd->work_serializer_->Run(
|
625
|
+
[polled_fd, error]() { polled_fd->OnIocpWriteableLocked(error); },
|
626
|
+
DEBUG_LOCATION);
|
662
627
|
}
|
663
628
|
|
664
|
-
|
665
|
-
GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
|
666
|
-
polled_fd->OnIocpWriteableInner(error);
|
667
|
-
}
|
668
|
-
|
669
|
-
void OnIocpWriteableInner(grpc_error* error) {
|
629
|
+
void OnIocpWriteableLocked(grpc_error* error) {
|
670
630
|
GRPC_CARES_TRACE_LOG("OnIocpWriteableInner. fd:|%s|", GetName());
|
671
631
|
GPR_ASSERT(socket_type_ == SOCK_STREAM);
|
672
632
|
if (error == GRPC_ERROR_NONE) {
|
673
633
|
if (winsocket_->write_info.wsa_error != 0) {
|
674
|
-
GRPC_ERROR_UNREF(error);
|
675
634
|
error = GRPC_WSA_ERROR(winsocket_->write_info.wsa_error,
|
676
635
|
"OnIocpWriteableInner");
|
677
636
|
GRPC_CARES_TRACE_LOG(
|
@@ -698,7 +657,7 @@ class GrpcPolledFdWindows {
|
|
698
657
|
bool gotten_into_driver_list() const { return gotten_into_driver_list_; }
|
699
658
|
void set_gotten_into_driver_list() { gotten_into_driver_list_ = true; }
|
700
659
|
|
701
|
-
|
660
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
702
661
|
char recv_from_source_addr_[200];
|
703
662
|
ares_socklen_t recv_from_source_addr_len_;
|
704
663
|
grpc_slice read_buf_;
|
@@ -721,10 +680,8 @@ class GrpcPolledFdWindows {
|
|
721
680
|
// We don't run register_for_{readable,writeable} logic until
|
722
681
|
// a socket is connected. In the interim, we queue readable/writeable
|
723
682
|
// registrations with the following state.
|
724
|
-
|
725
|
-
|
726
|
-
grpc_closure* pending_continue_register_for_on_readable_locked_ = nullptr;
|
727
|
-
grpc_closure* pending_continue_register_for_on_writeable_locked_ = nullptr;
|
683
|
+
bool pending_continue_register_for_on_readable_locked_ = false;
|
684
|
+
bool pending_continue_register_for_on_writeable_locked_ = false;
|
728
685
|
};
|
729
686
|
|
730
687
|
struct SockToPolledFdEntry {
|
@@ -742,14 +699,10 @@ struct SockToPolledFdEntry {
|
|
742
699
|
* with a GrpcPolledFdWindows factory and event driver */
|
743
700
|
class SockToPolledFdMap {
|
744
701
|
public:
|
745
|
-
SockToPolledFdMap(
|
746
|
-
|
747
|
-
}
|
702
|
+
explicit SockToPolledFdMap(std::shared_ptr<WorkSerializer> work_serializer)
|
703
|
+
: work_serializer_(std::move(work_serializer)) {}
|
748
704
|
|
749
|
-
~SockToPolledFdMap() {
|
750
|
-
GPR_ASSERT(head_ == nullptr);
|
751
|
-
GRPC_COMBINER_UNREF(combiner_, "sock to polled fd map");
|
752
|
-
}
|
705
|
+
~SockToPolledFdMap() { GPR_ASSERT(head_ == nullptr); }
|
753
706
|
|
754
707
|
void AddNewSocket(SOCKET s, GrpcPolledFdWindows* polled_fd) {
|
755
708
|
SockToPolledFdEntry* new_node = new SockToPolledFdEntry(s, polled_fd);
|
@@ -805,7 +758,7 @@ class SockToPolledFdMap {
|
|
805
758
|
}
|
806
759
|
grpc_tcp_set_non_block(s);
|
807
760
|
GrpcPolledFdWindows* polled_fd =
|
808
|
-
new GrpcPolledFdWindows(s, map->
|
761
|
+
new GrpcPolledFdWindows(s, map->work_serializer_, af, type);
|
809
762
|
GRPC_CARES_TRACE_LOG(
|
810
763
|
"fd:|%s| created with params af:%d type:%d protocol:%d",
|
811
764
|
polled_fd->GetName(), af, type, protocol);
|
@@ -861,7 +814,7 @@ class SockToPolledFdMap {
|
|
861
814
|
|
862
815
|
private:
|
863
816
|
SockToPolledFdEntry* head_ = nullptr;
|
864
|
-
|
817
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
865
818
|
};
|
866
819
|
|
867
820
|
const struct ares_socket_functions custom_ares_sock_funcs = {
|
@@ -877,7 +830,7 @@ const struct ares_socket_functions custom_ares_sock_funcs = {
|
|
877
830
|
so that c-ares can close it via usual socket teardown. */
|
878
831
|
class GrpcPolledFdWindowsWrapper : public GrpcPolledFd {
|
879
832
|
public:
|
880
|
-
GrpcPolledFdWindowsWrapper(GrpcPolledFdWindows* wrapped)
|
833
|
+
explicit GrpcPolledFdWindowsWrapper(GrpcPolledFdWindows* wrapped)
|
881
834
|
: wrapped_(wrapped) {}
|
882
835
|
|
883
836
|
~GrpcPolledFdWindowsWrapper() {}
|
@@ -910,12 +863,13 @@ class GrpcPolledFdWindowsWrapper : public GrpcPolledFd {
|
|
910
863
|
|
911
864
|
class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
|
912
865
|
public:
|
913
|
-
GrpcPolledFdFactoryWindows(
|
914
|
-
|
866
|
+
explicit GrpcPolledFdFactoryWindows(
|
867
|
+
std::shared_ptr<WorkSerializer> work_serializer)
|
868
|
+
: sock_to_polled_fd_map_(std::move(work_serializer)) {}
|
915
869
|
|
916
|
-
GrpcPolledFd* NewGrpcPolledFdLocked(
|
917
|
-
|
918
|
-
|
870
|
+
GrpcPolledFd* NewGrpcPolledFdLocked(
|
871
|
+
ares_socket_t as, grpc_pollset_set* driver_pollset_set,
|
872
|
+
std::shared_ptr<WorkSerializer> work_serializer) override {
|
919
873
|
GrpcPolledFdWindows* polled_fd = sock_to_polled_fd_map_.LookupPolledFd(as);
|
920
874
|
// Set a flag so that the virtual socket "close" method knows it
|
921
875
|
// doesn't need to call ShutdownLocked, since now the driver will.
|
@@ -933,8 +887,9 @@ class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
|
|
933
887
|
};
|
934
888
|
|
935
889
|
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
|
936
|
-
|
937
|
-
return absl::make_unique<GrpcPolledFdFactoryWindows>(
|
890
|
+
std::shared_ptr<WorkSerializer> work_serializer) {
|
891
|
+
return absl::make_unique<GrpcPolledFdFactoryWindows>(
|
892
|
+
std::move(work_serializer));
|
938
893
|
}
|
939
894
|
|
940
895
|
} // namespace grpc_core
|