grpc 1.60.2 → 1.61.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
@@ -34,11 +34,11 @@
|
|
34
34
|
#include <grpc/event_engine/event_engine.h>
|
35
35
|
#include <grpc/event_engine/memory_allocator.h>
|
36
36
|
|
37
|
-
#include "src/core/lib/event_engine/ares_resolver.h"
|
38
37
|
#include "src/core/lib/event_engine/handle_containers.h"
|
39
38
|
#include "src/core/lib/event_engine/posix.h"
|
40
39
|
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
41
40
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
41
|
+
#include "src/core/lib/event_engine/ref_counted_dns_resolver_interface.h"
|
42
42
|
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
43
43
|
#include "src/core/lib/gprpp/orphanable.h"
|
44
44
|
#include "src/core/lib/gprpp/sync.h"
|
@@ -141,11 +141,8 @@ class PosixEventEngine final : public PosixEventEngineWithFdSupport,
|
|
141
141
|
public:
|
142
142
|
class PosixDNSResolver : public EventEngine::DNSResolver {
|
143
143
|
public:
|
144
|
-
PosixDNSResolver() = delete;
|
145
|
-
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
|
146
144
|
explicit PosixDNSResolver(
|
147
|
-
grpc_core::OrphanablePtr<
|
148
|
-
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
|
145
|
+
grpc_core::OrphanablePtr<RefCountedDNSResolverInterface> dns_resolver);
|
149
146
|
void LookupHostname(LookupHostnameCallback on_resolve,
|
150
147
|
absl::string_view name,
|
151
148
|
absl::string_view default_port) override;
|
@@ -154,10 +151,8 @@ class PosixEventEngine final : public PosixEventEngineWithFdSupport,
|
|
154
151
|
void LookupTXT(LookupTXTCallback on_resolve,
|
155
152
|
absl::string_view name) override;
|
156
153
|
|
157
|
-
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
|
158
154
|
private:
|
159
|
-
grpc_core::OrphanablePtr<
|
160
|
-
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
|
155
|
+
grpc_core::OrphanablePtr<RefCountedDNSResolverInterface> dns_resolver_;
|
161
156
|
};
|
162
157
|
|
163
158
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
@@ -203,7 +198,7 @@ class PosixEventEngine final : public PosixEventEngineWithFdSupport,
|
|
203
198
|
bool CancelConnect(ConnectionHandle handle) override;
|
204
199
|
bool IsWorkerThread() override;
|
205
200
|
absl::StatusOr<std::unique_ptr<DNSResolver>> GetDNSResolver(
|
206
|
-
const DNSResolver::ResolverOptions& options) override;
|
201
|
+
GRPC_UNUSED const DNSResolver::ResolverOptions& options) override;
|
207
202
|
void Run(Closure* closure) override;
|
208
203
|
void Run(absl::AnyInvocable<void()> closure) override;
|
209
204
|
// Caution!! The timer implementation cannot create any fds. See #20418.
|
@@ -25,6 +25,8 @@
|
|
25
25
|
|
26
26
|
#include "absl/cleanup/cleanup.h"
|
27
27
|
#include "absl/status/status.h"
|
28
|
+
#include "absl/strings/str_cat.h"
|
29
|
+
#include "absl/strings/str_replace.h"
|
28
30
|
|
29
31
|
#include <grpc/event_engine/event_engine.h>
|
30
32
|
#include <grpc/support/log.h>
|
@@ -44,8 +46,6 @@
|
|
44
46
|
#include <netinet/in.h> // IWYU pragma: keep
|
45
47
|
#include <sys/socket.h> // IWYU pragma: keep
|
46
48
|
#include <unistd.h> // IWYU pragma: keep
|
47
|
-
|
48
|
-
#include "absl/strings/str_cat.h"
|
49
49
|
#endif
|
50
50
|
|
51
51
|
namespace grpc_event_engine {
|
@@ -176,8 +176,16 @@ absl::Status PrepareSocket(const PosixTcpOptions& options,
|
|
176
176
|
GRPC_FD_SERVER_LISTENER_USAGE, options));
|
177
177
|
|
178
178
|
if (bind(fd, socket.addr.address(), socket.addr.size()) < 0) {
|
179
|
+
auto sockaddr_str = ResolvedAddressToString(socket.addr);
|
180
|
+
if (!sockaddr_str.ok()) {
|
181
|
+
gpr_log(GPR_ERROR, "Could not convert sockaddr to string: %s",
|
182
|
+
sockaddr_str.status().ToString().c_str());
|
183
|
+
sockaddr_str = "<unparsable>";
|
184
|
+
}
|
185
|
+
sockaddr_str = absl::StrReplaceAll(*sockaddr_str, {{"\0", "@"}});
|
179
186
|
return absl::FailedPreconditionError(
|
180
|
-
absl::StrCat("Error in bind
|
187
|
+
absl::StrCat("Error in bind for address '", *sockaddr_str,
|
188
|
+
"': ", std::strerror(errno)));
|
181
189
|
}
|
182
190
|
|
183
191
|
if (listen(fd, GetMaxAcceptQueueSize()) < 0) {
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include "absl/types/optional.h"
|
26
26
|
|
27
27
|
#include <grpc/event_engine/event_engine.h>
|
28
|
+
#include <grpc/event_engine/memory_allocator.h>
|
28
29
|
#include <grpc/impl/channel_arg_names.h>
|
29
30
|
|
30
31
|
#include "src/core/lib/gpr/useful.h"
|
@@ -75,6 +76,7 @@ int AdjustValue(int default_value, int min_value, int max_value,
|
|
75
76
|
return *actual_value;
|
76
77
|
}
|
77
78
|
|
79
|
+
#ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
|
78
80
|
// The default values for TCP_USER_TIMEOUT are currently configured to be in
|
79
81
|
// line with the default values of KEEPALIVE_TIMEOUT as proposed in
|
80
82
|
// https://github.com/grpc/proposal/blob/master/A18-tcp-user-timeout.md */
|
@@ -83,8 +85,6 @@ int kDefaultServerUserTimeoutMs = 20000;
|
|
83
85
|
bool kDefaultClientUserTimeoutEnabled = false;
|
84
86
|
bool kDefaultServerUserTimeoutEnabled = true;
|
85
87
|
|
86
|
-
#ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
|
87
|
-
|
88
88
|
absl::Status ErrorForFd(
|
89
89
|
int fd, const experimental::EventEngine::ResolvedAddress& addr) {
|
90
90
|
if (fd >= 0) return absl::OkStatus();
|
@@ -210,6 +210,13 @@ PosixTcpOptions TcpOptionsFromEndpointConfig(const EndpointConfig& config) {
|
|
210
210
|
options.socket_mutator =
|
211
211
|
grpc_socket_mutator_ref(static_cast<grpc_socket_mutator*>(value));
|
212
212
|
}
|
213
|
+
value =
|
214
|
+
config.GetVoidPointer(GRPC_ARG_EVENT_ENGINE_USE_MEMORY_ALLOCATOR_FACTORY);
|
215
|
+
if (value != nullptr) {
|
216
|
+
options.memory_allocator_factory =
|
217
|
+
static_cast<grpc_event_engine::experimental::MemoryAllocatorFactory*>(
|
218
|
+
value);
|
219
|
+
}
|
213
220
|
return options;
|
214
221
|
}
|
215
222
|
|
@@ -26,6 +26,7 @@
|
|
26
26
|
|
27
27
|
#include <grpc/event_engine/endpoint_config.h>
|
28
28
|
#include <grpc/event_engine/event_engine.h>
|
29
|
+
#include <grpc/event_engine/memory_allocator.h>
|
29
30
|
#include <grpc/grpc.h>
|
30
31
|
#include <grpc/support/log.h>
|
31
32
|
|
@@ -75,6 +76,8 @@ struct PosixTcpOptions {
|
|
75
76
|
int dscp = kDscpNotSet;
|
76
77
|
grpc_core::RefCountedPtr<grpc_core::ResourceQuota> resource_quota;
|
77
78
|
struct grpc_socket_mutator* socket_mutator = nullptr;
|
79
|
+
grpc_event_engine::experimental::MemoryAllocatorFactory*
|
80
|
+
memory_allocator_factory = nullptr;
|
78
81
|
PosixTcpOptions() = default;
|
79
82
|
// Move ctor
|
80
83
|
PosixTcpOptions(PosixTcpOptions&& other) noexcept {
|
@@ -89,6 +92,8 @@ struct PosixTcpOptions {
|
|
89
92
|
}
|
90
93
|
socket_mutator = std::exchange(other.socket_mutator, nullptr);
|
91
94
|
resource_quota = std::move(other.resource_quota);
|
95
|
+
memory_allocator_factory =
|
96
|
+
std::exchange(other.memory_allocator_factory, nullptr);
|
92
97
|
CopyIntegerOptions(other);
|
93
98
|
return *this;
|
94
99
|
}
|
@@ -98,6 +103,7 @@ struct PosixTcpOptions {
|
|
98
103
|
socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
|
99
104
|
}
|
100
105
|
resource_quota = other.resource_quota;
|
106
|
+
memory_allocator_factory = other.memory_allocator_factory;
|
101
107
|
CopyIntegerOptions(other);
|
102
108
|
}
|
103
109
|
// Copy assignment
|
@@ -113,6 +119,7 @@ struct PosixTcpOptions {
|
|
113
119
|
socket_mutator = grpc_socket_mutator_ref(other.socket_mutator);
|
114
120
|
}
|
115
121
|
resource_quota = other.resource_quota;
|
122
|
+
memory_allocator_factory = other.memory_allocator_factory;
|
116
123
|
CopyIntegerOptions(other);
|
117
124
|
return *this;
|
118
125
|
}
|
@@ -30,7 +30,6 @@
|
|
30
30
|
#include <grpc/support/time.h>
|
31
31
|
|
32
32
|
#include "src/core/lib/debug/trace.h"
|
33
|
-
#include "src/core/lib/gprpp/thd.h"
|
34
33
|
|
35
34
|
static thread_local bool g_timer_thread;
|
36
35
|
|
@@ -67,41 +66,32 @@ bool TimerManager::WaitUntil(grpc_core::Timestamp next) {
|
|
67
66
|
}
|
68
67
|
|
69
68
|
void TimerManager::MainLoop() {
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
continue;
|
79
|
-
}
|
80
|
-
if (!WaitUntil(next)) break;
|
69
|
+
grpc_core::Timestamp next = grpc_core::Timestamp::InfFuture();
|
70
|
+
absl::optional<std::vector<experimental::EventEngine::Closure*>>
|
71
|
+
check_result = timer_list_->TimerCheck(&next);
|
72
|
+
GPR_ASSERT(check_result.has_value() &&
|
73
|
+
"ERROR: More than one MainLoop is running.");
|
74
|
+
bool timers_found = !check_result->empty();
|
75
|
+
if (timers_found) {
|
76
|
+
RunSomeTimers(std::move(*check_result));
|
81
77
|
}
|
82
|
-
|
78
|
+
thread_pool_->Run([this, next, timers_found]() {
|
79
|
+
if (!timers_found && !WaitUntil(next)) {
|
80
|
+
main_loop_exit_signal_->Notify();
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
MainLoop();
|
84
|
+
});
|
83
85
|
}
|
84
86
|
|
85
87
|
bool TimerManager::IsTimerManagerThread() { return g_timer_thread; }
|
86
88
|
|
87
|
-
void TimerManager::StartMainLoopThread() {
|
88
|
-
main_thread_ = grpc_core::Thread(
|
89
|
-
"timer_manager",
|
90
|
-
[](void* arg) {
|
91
|
-
auto self = static_cast<TimerManager*>(arg);
|
92
|
-
self->MainLoop();
|
93
|
-
},
|
94
|
-
this, nullptr,
|
95
|
-
grpc_core::Thread::Options().set_tracked(false).set_joinable(false));
|
96
|
-
main_thread_.Start();
|
97
|
-
}
|
98
|
-
|
99
89
|
TimerManager::TimerManager(
|
100
90
|
std::shared_ptr<grpc_event_engine::experimental::ThreadPool> thread_pool)
|
101
91
|
: host_(this), thread_pool_(std::move(thread_pool)) {
|
102
92
|
timer_list_ = std::make_unique<TimerList>(&host_);
|
103
93
|
main_loop_exit_signal_.emplace();
|
104
|
-
|
94
|
+
thread_pool_->Run([this]() { MainLoop(); });
|
105
95
|
}
|
106
96
|
|
107
97
|
grpc_core::Timestamp TimerManager::Host::Now() {
|
@@ -162,7 +152,7 @@ void TimerManager::RestartPostFork() {
|
|
162
152
|
}
|
163
153
|
shutdown_ = false;
|
164
154
|
main_loop_exit_signal_.emplace();
|
165
|
-
|
155
|
+
thread_pool_->Run([this]() { MainLoop(); });
|
166
156
|
}
|
167
157
|
|
168
158
|
void TimerManager::PrepareFork() { Shutdown(); }
|
@@ -36,7 +36,6 @@
|
|
36
36
|
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
37
37
|
#include "src/core/lib/gprpp/notification.h"
|
38
38
|
#include "src/core/lib/gprpp/sync.h"
|
39
|
-
#include "src/core/lib/gprpp/thd.h"
|
40
39
|
#include "src/core/lib/gprpp/time.h"
|
41
40
|
|
42
41
|
namespace grpc_event_engine {
|
@@ -80,7 +79,6 @@ class TimerManager final : public grpc_event_engine::experimental::Forkable {
|
|
80
79
|
TimerManager* const timer_manager_;
|
81
80
|
};
|
82
81
|
|
83
|
-
void StartMainLoopThread();
|
84
82
|
void RestartPostFork();
|
85
83
|
void MainLoop();
|
86
84
|
void RunSomeTimers(std::vector<experimental::EventEngine::Closure*> timers);
|
@@ -103,7 +101,6 @@ class TimerManager final : public grpc_event_engine::experimental::Forkable {
|
|
103
101
|
uint64_t wakeups_ ABSL_GUARDED_BY(mu_) = false;
|
104
102
|
// actual timer implementation
|
105
103
|
std::unique_ptr<TimerList> timer_list_;
|
106
|
-
grpc_core::Thread main_thread_;
|
107
104
|
std::shared_ptr<grpc_event_engine::experimental::ThreadPool> thread_pool_;
|
108
105
|
absl::optional<grpc_core::Notification> main_loop_exit_signal_;
|
109
106
|
};
|
@@ -0,0 +1,55 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_REF_COUNTED_DNS_RESOLVER_INTERFACE_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_REF_COUNTED_DNS_RESOLVER_INTERFACE_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <stdint.h>
|
21
|
+
|
22
|
+
#include "absl/strings/string_view.h"
|
23
|
+
|
24
|
+
#include <grpc/event_engine/event_engine.h>
|
25
|
+
|
26
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
27
|
+
|
28
|
+
namespace grpc_event_engine {
|
29
|
+
namespace experimental {
|
30
|
+
|
31
|
+
class RefCountedDNSResolverInterface
|
32
|
+
: public grpc_core::InternallyRefCounted<RefCountedDNSResolverInterface> {
|
33
|
+
public:
|
34
|
+
explicit RefCountedDNSResolverInterface(const char* trace = nullptr,
|
35
|
+
intptr_t initial_refcount = 1)
|
36
|
+
: grpc_core::InternallyRefCounted<RefCountedDNSResolverInterface>(
|
37
|
+
trace, initial_refcount) {}
|
38
|
+
|
39
|
+
virtual void LookupHostname(
|
40
|
+
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
|
41
|
+
absl::string_view name, absl::string_view default_port) = 0;
|
42
|
+
|
43
|
+
virtual void LookupSRV(
|
44
|
+
EventEngine::DNSResolver::LookupSRVCallback on_resolved,
|
45
|
+
absl::string_view name) = 0;
|
46
|
+
|
47
|
+
virtual void LookupTXT(
|
48
|
+
EventEngine::DNSResolver::LookupTXTCallback on_resolved,
|
49
|
+
absl::string_view name) = 0;
|
50
|
+
};
|
51
|
+
|
52
|
+
} // namespace experimental
|
53
|
+
} // namespace grpc_event_engine
|
54
|
+
|
55
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_REF_COUNTED_DNS_RESOLVER_INTERFACE_H
|
@@ -0,0 +1,114 @@
|
|
1
|
+
// Copyright 2024 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#include <grpc/support/port_platform.h>
|
15
|
+
|
16
|
+
#ifdef GPR_WINDOWS
|
17
|
+
#include <inttypes.h>
|
18
|
+
#include <string.h>
|
19
|
+
#include <sys/types.h>
|
20
|
+
|
21
|
+
#include <string>
|
22
|
+
|
23
|
+
#include "absl/strings/str_format.h"
|
24
|
+
|
25
|
+
#include <grpc/event_engine/event_engine.h>
|
26
|
+
|
27
|
+
#include "src/core/lib/event_engine/windows/native_windows_dns_resolver.h"
|
28
|
+
#include "src/core/lib/gprpp/host_port.h"
|
29
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
30
|
+
#include "src/core/lib/iomgr/error.h"
|
31
|
+
|
32
|
+
namespace grpc_event_engine {
|
33
|
+
namespace experimental {
|
34
|
+
|
35
|
+
namespace {
|
36
|
+
absl::StatusOr<std::vector<EventEngine::ResolvedAddress>>
|
37
|
+
LookupHostnameBlocking(absl::string_view name, absl::string_view default_port) {
|
38
|
+
std::vector<EventEngine::ResolvedAddress> addresses;
|
39
|
+
// parse name, splitting it into host and port parts
|
40
|
+
std::string host;
|
41
|
+
std::string port;
|
42
|
+
grpc_core::SplitHostPort(name, &host, &port);
|
43
|
+
if (host.empty()) {
|
44
|
+
return absl::InvalidArgumentError(absl::StrCat("Unparseable name: ", name));
|
45
|
+
}
|
46
|
+
if (port.empty()) {
|
47
|
+
if (default_port.empty()) {
|
48
|
+
return absl::InvalidArgumentError(
|
49
|
+
absl::StrFormat("No port in name %s or default_port argument", name));
|
50
|
+
}
|
51
|
+
port = std::string(default_port);
|
52
|
+
}
|
53
|
+
// Call getaddrinfo
|
54
|
+
struct addrinfo hints;
|
55
|
+
memset(&hints, 0, sizeof(hints));
|
56
|
+
hints.ai_family = AF_UNSPEC; // ipv4 or ipv6
|
57
|
+
hints.ai_socktype = SOCK_STREAM; // stream socket
|
58
|
+
hints.ai_flags = AI_PASSIVE; // for wildcard IP address
|
59
|
+
struct addrinfo* result = nullptr;
|
60
|
+
int getaddrinfo_error =
|
61
|
+
getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
|
62
|
+
if (getaddrinfo_error != 0) {
|
63
|
+
return absl::UnknownError(
|
64
|
+
absl::StrFormat("Address lookup failed for %s os_error: %s", name,
|
65
|
+
grpc_core::StatusToString(
|
66
|
+
GRPC_WSA_ERROR(WSAGetLastError(), "getaddrinfo"))
|
67
|
+
.c_str()));
|
68
|
+
}
|
69
|
+
// Success path: collect and return all addresses
|
70
|
+
for (auto* resp = result; resp != nullptr; resp = resp->ai_next) {
|
71
|
+
addresses.emplace_back(resp->ai_addr, resp->ai_addrlen);
|
72
|
+
}
|
73
|
+
if (result) freeaddrinfo(result);
|
74
|
+
return addresses;
|
75
|
+
}
|
76
|
+
|
77
|
+
} // namespace
|
78
|
+
NativeWindowsDNSResolver::NativeWindowsDNSResolver(
|
79
|
+
std::shared_ptr<EventEngine> event_engine)
|
80
|
+
: event_engine_(std::move(event_engine)) {}
|
81
|
+
|
82
|
+
void NativeWindowsDNSResolver::LookupHostname(
|
83
|
+
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
|
84
|
+
absl::string_view name, absl::string_view default_port) {
|
85
|
+
event_engine_->Run(
|
86
|
+
[name, default_port, on_resolved = std::move(on_resolved)]() mutable {
|
87
|
+
on_resolved(LookupHostnameBlocking(name, default_port));
|
88
|
+
});
|
89
|
+
}
|
90
|
+
|
91
|
+
void NativeWindowsDNSResolver::LookupSRV(
|
92
|
+
EventEngine::DNSResolver::LookupSRVCallback on_resolved,
|
93
|
+
absl::string_view /* name */) {
|
94
|
+
// Not supported
|
95
|
+
event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
|
96
|
+
on_resolved(absl::UnimplementedError(
|
97
|
+
"The Native resolver does not support looking up SRV records"));
|
98
|
+
});
|
99
|
+
}
|
100
|
+
|
101
|
+
void NativeWindowsDNSResolver::LookupTXT(
|
102
|
+
EventEngine::DNSResolver::LookupTXTCallback on_resolved,
|
103
|
+
absl::string_view /* name */) {
|
104
|
+
// Not supported
|
105
|
+
event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
|
106
|
+
on_resolved(absl::UnimplementedError(
|
107
|
+
"The Native resolver does not support looking up TXT records"));
|
108
|
+
});
|
109
|
+
}
|
110
|
+
|
111
|
+
} // namespace experimental
|
112
|
+
} // namespace grpc_event_engine
|
113
|
+
|
114
|
+
#endif // GPR_WINDOWS
|
@@ -0,0 +1,51 @@
|
|
1
|
+
// Copyright 2024 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
|
15
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#ifdef GPR_WINDOWS
|
20
|
+
|
21
|
+
#include <grpc/event_engine/event_engine.h>
|
22
|
+
|
23
|
+
namespace grpc_event_engine {
|
24
|
+
namespace experimental {
|
25
|
+
|
26
|
+
// An asynchronous DNS resolver which uses the native platform's getaddrinfo
|
27
|
+
// API. Only supports A/AAAA records.
|
28
|
+
class NativeWindowsDNSResolver : public EventEngine::DNSResolver {
|
29
|
+
public:
|
30
|
+
explicit NativeWindowsDNSResolver(std::shared_ptr<EventEngine> event_engine);
|
31
|
+
|
32
|
+
void LookupHostname(
|
33
|
+
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
|
34
|
+
absl::string_view name, absl::string_view default_port) override;
|
35
|
+
|
36
|
+
void LookupSRV(EventEngine::DNSResolver::LookupSRVCallback on_resolved,
|
37
|
+
absl::string_view name) override;
|
38
|
+
|
39
|
+
void LookupTXT(EventEngine::DNSResolver::LookupTXTCallback on_resolved,
|
40
|
+
absl::string_view name) override;
|
41
|
+
|
42
|
+
private:
|
43
|
+
std::shared_ptr<EventEngine> event_engine_;
|
44
|
+
};
|
45
|
+
|
46
|
+
} // namespace experimental
|
47
|
+
} // namespace grpc_event_engine
|
48
|
+
|
49
|
+
#endif
|
50
|
+
|
51
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
|
@@ -37,6 +37,7 @@
|
|
37
37
|
#include "src/core/lib/event_engine/utils.h"
|
38
38
|
#include "src/core/lib/event_engine/windows/grpc_polled_fd_windows.h"
|
39
39
|
#include "src/core/lib/event_engine/windows/iocp.h"
|
40
|
+
#include "src/core/lib/event_engine/windows/native_windows_dns_resolver.h"
|
40
41
|
#include "src/core/lib/event_engine/windows/windows_endpoint.h"
|
41
42
|
#include "src/core/lib/event_engine/windows/windows_engine.h"
|
42
43
|
#include "src/core/lib/event_engine/windows/windows_listener.h"
|
@@ -204,17 +205,17 @@ WindowsEventEngine::WindowsDNSResolver::WindowsDNSResolver(
|
|
204
205
|
void WindowsEventEngine::WindowsDNSResolver::LookupHostname(
|
205
206
|
LookupHostnameCallback on_resolve, absl::string_view name,
|
206
207
|
absl::string_view default_port) {
|
207
|
-
ares_resolver_->LookupHostname(
|
208
|
+
ares_resolver_->LookupHostname(std::move(on_resolve), name, default_port);
|
208
209
|
}
|
209
210
|
|
210
211
|
void WindowsEventEngine::WindowsDNSResolver::LookupSRV(
|
211
212
|
LookupSRVCallback on_resolve, absl::string_view name) {
|
212
|
-
ares_resolver_->LookupSRV(
|
213
|
+
ares_resolver_->LookupSRV(std::move(on_resolve), name);
|
213
214
|
}
|
214
215
|
|
215
216
|
void WindowsEventEngine::WindowsDNSResolver::LookupTXT(
|
216
217
|
LookupTXTCallback on_resolve, absl::string_view name) {
|
217
|
-
ares_resolver_->LookupTXT(
|
218
|
+
ares_resolver_->LookupTXT(std::move(on_resolve), name);
|
218
219
|
}
|
219
220
|
|
220
221
|
#endif // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
@@ -233,10 +234,9 @@ WindowsEventEngine::GetDNSResolver(
|
|
233
234
|
return std::make_unique<WindowsEventEngine::WindowsDNSResolver>(
|
234
235
|
std::move(*ares_resolver));
|
235
236
|
#else // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
236
|
-
|
237
|
-
|
238
|
-
(
|
239
|
-
grpc_core::Crash("unimplemented");
|
237
|
+
GRPC_EVENT_ENGINE_DNS_TRACE(
|
238
|
+
"WindowsEventEngine:%p creating NativeWindowsDNSResolver", this);
|
239
|
+
return std::make_unique<NativeWindowsDNSResolver>(shared_from_this());
|
240
240
|
#endif // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
241
241
|
}
|
242
242
|
|
@@ -135,6 +135,19 @@ GPR_ATTRIBUTE_NOINLINE Experiments LoadExperimentsFromConfigVariable() {
|
|
135
135
|
std::string(experiment).c_str());
|
136
136
|
}
|
137
137
|
}
|
138
|
+
for (size_t i = 0; i < kNumExperiments; i++) {
|
139
|
+
// If required experiments are not enabled, disable this one too.
|
140
|
+
for (size_t j = 0; j < g_experiment_metadata[i].num_required_experiments;
|
141
|
+
j++) {
|
142
|
+
// Require that we can check dependent requirements with a linear sweep
|
143
|
+
// (implies the experiments generator must DAG sort the experiments)
|
144
|
+
GPR_ASSERT(g_experiment_metadata[i].required_experiments[j] < i);
|
145
|
+
if (!experiments
|
146
|
+
.enabled[g_experiment_metadata[i].required_experiments[j]]) {
|
147
|
+
experiments.enabled[i] = false;
|
148
|
+
}
|
149
|
+
}
|
150
|
+
}
|
138
151
|
return experiments;
|
139
152
|
}
|
140
153
|
|
@@ -18,6 +18,7 @@
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include <stddef.h>
|
21
|
+
#include <stdint.h>
|
21
22
|
|
22
23
|
#include "absl/functional/any_invocable.h"
|
23
24
|
#include "absl/strings/string_view.h"
|
@@ -30,6 +31,8 @@ struct ExperimentMetadata {
|
|
30
31
|
const char* name;
|
31
32
|
const char* description;
|
32
33
|
const char* additional_constaints;
|
34
|
+
const uint8_t* required_experiments;
|
35
|
+
uint8_t num_required_experiments;
|
33
36
|
bool default_value;
|
34
37
|
bool allow_in_fuzzing_config;
|
35
38
|
};
|