grpc 1.73.0 → 1.74.0
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 +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
#include <grpc/support/port_platform.h>
|
17
17
|
|
18
|
+
#include <cstddef>
|
18
19
|
#include <string>
|
19
20
|
#include <vector>
|
20
21
|
|
@@ -53,13 +54,14 @@
|
|
53
54
|
#include <utility>
|
54
55
|
|
55
56
|
#include "absl/functional/any_invocable.h"
|
56
|
-
#include "absl/hash/hash.h"
|
57
57
|
#include "absl/log/check.h"
|
58
58
|
#include "absl/log/log.h"
|
59
59
|
#include "absl/strings/match.h"
|
60
60
|
#include "absl/strings/numbers.h"
|
61
61
|
#include "absl/strings/str_cat.h"
|
62
62
|
#include "absl/strings/str_format.h"
|
63
|
+
#include "absl/strings/string_view.h"
|
64
|
+
#include "absl/strings/substitute.h"
|
63
65
|
#include "src/core/config/config_vars.h"
|
64
66
|
#include "src/core/lib/address_utils/parse_address.h"
|
65
67
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
@@ -67,7 +69,6 @@
|
|
67
69
|
#include "src/core/lib/event_engine/grpc_polled_fd.h"
|
68
70
|
#include "src/core/lib/event_engine/time_util.h"
|
69
71
|
#include "src/core/lib/iomgr/resolved_address.h"
|
70
|
-
#include "src/core/lib/iomgr/sockaddr.h"
|
71
72
|
#include "src/core/util/debug_location.h"
|
72
73
|
#include "src/core/util/host_port.h"
|
73
74
|
#include "src/core/util/orphanable.h"
|
@@ -107,9 +108,9 @@ absl::Status AresStatusToAbslStatus(int status, absl::string_view error_msg) {
|
|
107
108
|
constexpr EventEngine::Duration kAresBackupPollAlarmDuration =
|
108
109
|
std::chrono::seconds(1);
|
109
110
|
|
110
|
-
bool
|
111
|
+
bool AresIsIpv6LoopbackAvailable() {
|
111
112
|
#ifdef GRPC_POSIX_SOCKET_ARES_EV_DRIVER
|
112
|
-
return
|
113
|
+
return IsIpv6LoopbackAvailable();
|
113
114
|
#elif defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
114
115
|
// TODO(yijiem): implement this for Windows
|
115
116
|
return true;
|
@@ -189,73 +190,118 @@ struct HostnameQueryArg : public QueryArg {
|
|
189
190
|
std::vector<EventEngine::ResolvedAddress> result;
|
190
191
|
};
|
191
192
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
AresResolver::CreateAresResolver(
|
196
|
-
absl::string_view dns_server,
|
197
|
-
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
198
|
-
std::shared_ptr<EventEngine> event_engine) {
|
193
|
+
absl::Status InitAresChannel(absl::string_view dns_server,
|
194
|
+
GrpcPolledFdFactory& polled_fd_factory,
|
195
|
+
ares_channel* channel) {
|
199
196
|
ares_options opts = {};
|
200
197
|
opts.flags |= ARES_FLAG_STAYOPEN;
|
201
198
|
if (g_event_engine_grpc_ares_test_only_force_tcp) {
|
202
199
|
opts.flags |= ARES_FLAG_USEVC;
|
203
200
|
}
|
204
|
-
|
205
|
-
int status = ares_init_options(&channel, &opts, ARES_OPT_FLAGS);
|
201
|
+
int status = ares_init_options(channel, &opts, ARES_OPT_FLAGS);
|
206
202
|
if (status != ARES_SUCCESS) {
|
207
203
|
LOG(ERROR) << "ares_init_options failed, status: " << status;
|
208
204
|
return AresStatusToAbslStatus(
|
209
205
|
status,
|
210
206
|
absl::StrCat("Failed to init c-ares channel: ", ares_strerror(status)));
|
211
207
|
}
|
212
|
-
event_engine_grpc_ares_test_only_inject_config(
|
213
|
-
polled_fd_factory
|
208
|
+
event_engine_grpc_ares_test_only_inject_config(channel);
|
209
|
+
polled_fd_factory.ConfigureAresChannelLocked(*channel);
|
214
210
|
if (!dns_server.empty()) {
|
215
|
-
absl::Status status = SetRequestDNSServer(dns_server,
|
211
|
+
absl::Status status = SetRequestDNSServer(dns_server, channel);
|
216
212
|
if (!status.ok()) {
|
217
213
|
return status;
|
218
214
|
}
|
219
215
|
}
|
220
|
-
return
|
221
|
-
|
216
|
+
return absl::OkStatus();
|
217
|
+
}
|
218
|
+
|
219
|
+
} // namespace
|
220
|
+
|
221
|
+
// AresResolver::ReinitHandle
|
222
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
223
|
+
|
224
|
+
AresResolver::ReinitHandle::ReinitHandle(AresResolver* resolver)
|
225
|
+
: resolver_(resolver) {}
|
226
|
+
|
227
|
+
void AresResolver::ReinitHandle::OnResolverGone() {
|
228
|
+
grpc_core::MutexLock lock(&mutex_);
|
229
|
+
resolver_ = nullptr;
|
230
|
+
}
|
231
|
+
|
232
|
+
void AresResolver::ReinitHandle::Reset(const absl::Status& status) {
|
233
|
+
grpc_core::MutexLock lock(&mutex_);
|
234
|
+
if (resolver_ != nullptr) {
|
235
|
+
resolver_->Reset(status);
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
void AresResolver::ReinitHandle::Restart() {
|
240
|
+
grpc_core::MutexLock lock(&mutex_);
|
241
|
+
if (resolver_ != nullptr) {
|
242
|
+
resolver_->Restart();
|
243
|
+
}
|
244
|
+
}
|
245
|
+
|
246
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
247
|
+
|
248
|
+
// AresResolver
|
249
|
+
|
250
|
+
absl::StatusOr<grpc_core::OrphanablePtr<AresResolver>>
|
251
|
+
AresResolver::CreateAresResolver(
|
252
|
+
absl::string_view dns_server,
|
253
|
+
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
254
|
+
std::shared_ptr<EventEngine> event_engine) {
|
255
|
+
ares_channel channel;
|
256
|
+
absl::Status status =
|
257
|
+
InitAresChannel(dns_server, *polled_fd_factory, &channel);
|
258
|
+
if (!status.ok()) {
|
259
|
+
return status;
|
260
|
+
}
|
261
|
+
return grpc_core::MakeOrphanable<AresResolver>(std::move(polled_fd_factory),
|
262
|
+
std::move(event_engine),
|
263
|
+
channel, dns_server);
|
222
264
|
}
|
223
265
|
|
224
266
|
AresResolver::AresResolver(
|
225
267
|
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
226
|
-
std::shared_ptr<EventEngine> event_engine, ares_channel channel
|
268
|
+
std::shared_ptr<EventEngine> event_engine, ares_channel channel,
|
269
|
+
absl::string_view dns_server)
|
227
270
|
: RefCountedDNSResolverInterface(
|
228
271
|
GRPC_TRACE_FLAG_ENABLED(cares_resolver) ? "AresResolver" : nullptr),
|
229
272
|
channel_(channel),
|
230
273
|
polled_fd_factory_(std::move(polled_fd_factory)),
|
274
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
275
|
+
dns_server_(dns_server),
|
276
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
231
277
|
event_engine_(std::move(event_engine)) {
|
278
|
+
(void)dns_server; // Used whether or not compiled with fork support
|
232
279
|
polled_fd_factory_->Initialize(&mutex_, event_engine_.get());
|
233
280
|
}
|
234
281
|
|
235
282
|
AresResolver::~AresResolver() {
|
236
283
|
CHECK(fd_node_list_.empty());
|
237
284
|
CHECK(callback_map_.empty());
|
285
|
+
CHECK_NE(channel_, nullptr);
|
238
286
|
ares_destroy(channel_);
|
239
287
|
}
|
240
288
|
|
241
289
|
void AresResolver::Orphan() {
|
290
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
291
|
+
// Do this before locking &mutex_ - ensures there will be no deadlock if
|
292
|
+
// resolver is being orphaned during fork.
|
293
|
+
{
|
294
|
+
grpc_core::MutexLock handle_lock(&reinit_handle_mu_);
|
295
|
+
if (reinit_handle_ != nullptr) {
|
296
|
+
reinit_handle_->OnResolverGone();
|
297
|
+
}
|
298
|
+
}
|
299
|
+
#endif
|
242
300
|
{
|
243
301
|
grpc_core::MutexLock lock(&mutex_);
|
244
302
|
shutting_down_ = true;
|
245
|
-
|
246
|
-
|
247
|
-
ares_backup_poll_alarm_handle_.reset();
|
248
|
-
}
|
249
|
-
for (const auto& fd_node : fd_node_list_) {
|
250
|
-
if (!fd_node->already_shutdown) {
|
251
|
-
GRPC_TRACE_LOG(cares_resolver, INFO)
|
252
|
-
<< "(EventEngine c-ares resolver) resolver: " << this
|
253
|
-
<< " shutdown fd: " << fd_node->polled_fd->GetName();
|
254
|
-
CHECK(fd_node->polled_fd->ShutdownLocked(
|
255
|
-
absl::CancelledError("AresResolver::Orphan")));
|
256
|
-
fd_node->already_shutdown = true;
|
257
|
-
}
|
258
|
-
}
|
303
|
+
ShutdownLocked(absl::CancelledError("AresResolver::Orphan"),
|
304
|
+
"resolver orphaned");
|
259
305
|
}
|
260
306
|
Unref(DEBUG_LOCATION, "Orphan");
|
261
307
|
}
|
@@ -321,7 +367,8 @@ void AresResolver::LookupHostname(
|
|
321
367
|
grpc_core::MutexLock lock(&mutex_);
|
322
368
|
callback_map_.emplace(++id_, std::move(callback));
|
323
369
|
auto* resolver_arg = new HostnameQueryArg(this, id_, name, port);
|
324
|
-
|
370
|
+
CHECK_NE(channel_, nullptr);
|
371
|
+
if (AresIsIpv6LoopbackAvailable()) {
|
325
372
|
// Note that using AF_UNSPEC for both IPv6 and IPv4 queries does not work in
|
326
373
|
// all cases, e.g. for localhost:<> it only gets back the IPv6 result (i.e.
|
327
374
|
// ::1).
|
@@ -368,6 +415,7 @@ void AresResolver::LookupSRV(
|
|
368
415
|
grpc_core::MutexLock lock(&mutex_);
|
369
416
|
callback_map_.emplace(++id_, std::move(callback));
|
370
417
|
auto* resolver_arg = new QueryArg(this, id_, host);
|
418
|
+
CHECK_NE(channel_, nullptr);
|
371
419
|
ares_query(channel_, std::string(host).c_str(), ns_c_in, ns_t_srv,
|
372
420
|
&AresResolver::OnSRVQueryDoneLocked, resolver_arg);
|
373
421
|
CheckSocketsLocked();
|
@@ -403,6 +451,7 @@ void AresResolver::LookupTXT(
|
|
403
451
|
grpc_core::MutexLock lock(&mutex_);
|
404
452
|
callback_map_.emplace(++id_, std::move(callback));
|
405
453
|
auto* resolver_arg = new QueryArg(this, id_, host);
|
454
|
+
CHECK_NE(channel_, nullptr);
|
406
455
|
ares_search(channel_, std::string(host).c_str(), ns_c_in, ns_t_txt,
|
407
456
|
&AresResolver::OnTXTDoneLocked, resolver_arg);
|
408
457
|
CheckSocketsLocked();
|
@@ -411,15 +460,17 @@ void AresResolver::LookupTXT(
|
|
411
460
|
|
412
461
|
void AresResolver::CheckSocketsLocked() {
|
413
462
|
FdNodeList new_list;
|
414
|
-
if (!shutting_down_) {
|
463
|
+
if (!shutting_down_ && channel_ != nullptr) {
|
415
464
|
ares_socket_t socks[ARES_GETSOCK_MAXNUM] = {};
|
416
465
|
int socks_bitmask = ares_getsock(channel_, socks, ARES_GETSOCK_MAXNUM);
|
417
466
|
for (size_t i = 0; i < ARES_GETSOCK_MAXNUM; i++) {
|
418
467
|
if (ARES_GETSOCK_READABLE(socks_bitmask, i) ||
|
419
468
|
ARES_GETSOCK_WRITABLE(socks_bitmask, i)) {
|
420
|
-
auto iter = std::find_if(
|
421
|
-
|
422
|
-
|
469
|
+
auto iter = std::find_if(fd_node_list_.begin(), fd_node_list_.end(),
|
470
|
+
[sock = socks[i]](const auto& node) {
|
471
|
+
return node->as == sock &&
|
472
|
+
node->polled_fd->IsCurrent();
|
473
|
+
});
|
423
474
|
if (iter == fd_node_list_.end()) {
|
424
475
|
GRPC_TRACE_LOG(cares_resolver, INFO)
|
425
476
|
<< "(EventEngine c-ares resolver) resolver:" << this
|
@@ -530,14 +581,16 @@ void AresResolver::OnReadable(FdNode* fd_node, absl::Status status) {
|
|
530
581
|
GRPC_TRACE_LOG(cares_resolver, INFO)
|
531
582
|
<< "(EventEngine c-ares resolver) OnReadable: fd: " << fd_node->as
|
532
583
|
<< "; request: " << this << "; status: " << status;
|
533
|
-
if (status.ok() && !shutting_down_) {
|
584
|
+
if (status.ok() && !shutting_down_ && channel_ != nullptr) {
|
534
585
|
ares_process_fd(channel_, fd_node->as, ARES_SOCKET_BAD);
|
535
|
-
} else {
|
586
|
+
} else if (fd_node->polled_fd->IsCurrent() && channel_ != nullptr) {
|
536
587
|
// If error is not absl::OkStatus() or the resolution was cancelled, it
|
537
588
|
// means the fd has been shutdown or timed out. The pending lookups made
|
538
589
|
// on this request will be cancelled by the following ares_cancel(). The
|
539
590
|
// remaining file descriptors in this request will be cleaned up in the
|
540
591
|
// following Work() method.
|
592
|
+
//
|
593
|
+
// Nothing is done if the handle is not current.
|
541
594
|
ares_cancel(channel_);
|
542
595
|
}
|
543
596
|
CheckSocketsLocked();
|
@@ -550,9 +603,9 @@ void AresResolver::OnWritable(FdNode* fd_node, absl::Status status) {
|
|
550
603
|
GRPC_TRACE_LOG(cares_resolver, INFO)
|
551
604
|
<< "(EventEngine c-ares resolver) OnWritable: fd: " << fd_node->as
|
552
605
|
<< "; request:" << this << "; status: " << status;
|
553
|
-
if (status.ok() && !shutting_down_) {
|
606
|
+
if (status.ok() && !shutting_down_ && channel_ != nullptr) {
|
554
607
|
ares_process_fd(channel_, ARES_SOCKET_BAD, fd_node->as);
|
555
|
-
} else {
|
608
|
+
} else if (fd_node->polled_fd->IsCurrent() && channel_ != nullptr) {
|
556
609
|
// If error is not absl::OkStatus() or the resolution was cancelled, it
|
557
610
|
// means the fd has been shutdown or timed out. The pending lookups made
|
558
611
|
// on this request will be cancelled by the following ares_cancel(). The
|
@@ -577,7 +630,7 @@ void AresResolver::OnAresBackupPollAlarm() {
|
|
577
630
|
GRPC_TRACE_LOG(cares_resolver, INFO)
|
578
631
|
<< "(EventEngine c-ares resolver) request:" << this
|
579
632
|
<< " OnAresBackupPollAlarm shutting_down=" << shutting_down_;
|
580
|
-
if (!shutting_down_) {
|
633
|
+
if (!shutting_down_ && channel_ != nullptr) {
|
581
634
|
for (const auto& fd_node : fd_node_list_) {
|
582
635
|
if (!fd_node->already_shutdown) {
|
583
636
|
GRPC_TRACE_LOG(cares_resolver, INFO)
|
@@ -665,7 +718,10 @@ void AresResolver::OnHostbynameDoneLocked(void* arg, int status,
|
|
665
718
|
if (hostname_qa->pending_requests == 0) {
|
666
719
|
auto nh =
|
667
720
|
ares_resolver->callback_map_.extract(hostname_qa->callback_map_id);
|
668
|
-
|
721
|
+
if (nh.empty()) {
|
722
|
+
delete hostname_qa;
|
723
|
+
return;
|
724
|
+
}
|
669
725
|
CHECK(std::holds_alternative<
|
670
726
|
EventEngine::DNSResolver::LookupHostnameCallback>(nh.mapped()));
|
671
727
|
auto callback = std::get<EventEngine::DNSResolver::LookupHostnameCallback>(
|
@@ -692,7 +748,9 @@ void AresResolver::OnSRVQueryDoneLocked(void* arg, int status, int /*timeouts*/,
|
|
692
748
|
std::unique_ptr<QueryArg> qa(static_cast<QueryArg*>(arg));
|
693
749
|
auto* ares_resolver = qa->ares_resolver;
|
694
750
|
auto nh = ares_resolver->callback_map_.extract(qa->callback_map_id);
|
695
|
-
|
751
|
+
if (nh.empty()) {
|
752
|
+
return;
|
753
|
+
}
|
696
754
|
CHECK(std::holds_alternative<EventEngine::DNSResolver::LookupSRVCallback>(
|
697
755
|
nh.mapped()));
|
698
756
|
auto callback = std::get<EventEngine::DNSResolver::LookupSRVCallback>(
|
@@ -753,7 +811,9 @@ void AresResolver::OnTXTDoneLocked(void* arg, int status, int /*timeouts*/,
|
|
753
811
|
std::unique_ptr<QueryArg> qa(static_cast<QueryArg*>(arg));
|
754
812
|
auto* ares_resolver = qa->ares_resolver;
|
755
813
|
auto nh = ares_resolver->callback_map_.extract(qa->callback_map_id);
|
756
|
-
|
814
|
+
if (nh.empty()) {
|
815
|
+
return;
|
816
|
+
}
|
757
817
|
CHECK(std::holds_alternative<EventEngine::DNSResolver::LookupTXTCallback>(
|
758
818
|
nh.mapped()));
|
759
819
|
auto callback = std::get<EventEngine::DNSResolver::LookupTXTCallback>(
|
@@ -809,6 +869,65 @@ void AresResolver::OnTXTDoneLocked(void* arg, int status, int /*timeouts*/,
|
|
809
869
|
});
|
810
870
|
}
|
811
871
|
|
872
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
873
|
+
|
874
|
+
std::weak_ptr<AresResolver::ReinitHandle> AresResolver::GetReinitHandle() {
|
875
|
+
grpc_core::MutexLock lock(&reinit_handle_mu_);
|
876
|
+
if (reinit_handle_ == nullptr) {
|
877
|
+
reinit_handle_ = ReinitHandle::New(this);
|
878
|
+
}
|
879
|
+
return reinit_handle_;
|
880
|
+
}
|
881
|
+
|
882
|
+
void AresResolver::Reset(const absl::Status& reason) {
|
883
|
+
auto self = RefIfNonZero();
|
884
|
+
if (self == nullptr) {
|
885
|
+
return;
|
886
|
+
}
|
887
|
+
grpc_core::MutexLock lock(&mutex_);
|
888
|
+
for (auto& [_, callback] : callback_map_) {
|
889
|
+
event_engine_->Run(
|
890
|
+
[callback = std::move(callback), reason = reason]() mutable {
|
891
|
+
std::visit([&](auto& cb) { cb(reason); }, callback);
|
892
|
+
});
|
893
|
+
}
|
894
|
+
callback_map_.clear();
|
895
|
+
ShutdownLocked(reason, "resolver reset");
|
896
|
+
CheckSocketsLocked();
|
897
|
+
CHECK_NE(channel_, nullptr);
|
898
|
+
ares_destroy(channel_);
|
899
|
+
channel_ = nullptr;
|
900
|
+
}
|
901
|
+
|
902
|
+
void AresResolver::Restart() {
|
903
|
+
grpc_core::MutexLock lock(&mutex_);
|
904
|
+
polled_fd_factory_ = polled_fd_factory_->NewEmptyInstance();
|
905
|
+
polled_fd_factory_->Initialize(&mutex_, event_engine_.get());
|
906
|
+
CHECK_EQ(channel_, nullptr);
|
907
|
+
absl::Status status =
|
908
|
+
InitAresChannel(dns_server_, *polled_fd_factory_, &channel_);
|
909
|
+
CHECK_OK(status);
|
910
|
+
}
|
911
|
+
|
912
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
913
|
+
|
914
|
+
void AresResolver::ShutdownLocked(const absl::Status& shutdown_status,
|
915
|
+
absl::string_view reason) {
|
916
|
+
if (ares_backup_poll_alarm_handle_.has_value()) {
|
917
|
+
event_engine_->Cancel(*ares_backup_poll_alarm_handle_);
|
918
|
+
ares_backup_poll_alarm_handle_.reset();
|
919
|
+
}
|
920
|
+
for (const auto& fd_node : fd_node_list_) {
|
921
|
+
if (!fd_node->already_shutdown) {
|
922
|
+
GRPC_TRACE_LOG(cares_resolver, INFO) << absl::Substitute(
|
923
|
+
"(EventEngine c-ares resolver) resolver: $0 shutdown fd: $1 ($2)",
|
924
|
+
this, fd_node->polled_fd->GetName(), reason);
|
925
|
+
CHECK(fd_node->polled_fd->ShutdownLocked(shutdown_status));
|
926
|
+
fd_node->already_shutdown = true;
|
927
|
+
}
|
928
|
+
}
|
929
|
+
}
|
930
|
+
|
812
931
|
} // namespace grpc_event_engine::experimental
|
813
932
|
|
814
933
|
void noop_inject_channel_config(ares_channel* /*channel*/) {}
|
@@ -19,7 +19,6 @@
|
|
19
19
|
#include <utility>
|
20
20
|
|
21
21
|
#include "absl/status/status.h"
|
22
|
-
#include "src/core/lib/debug/trace.h"
|
23
22
|
|
24
23
|
#if GRPC_ARES == 1
|
25
24
|
|
@@ -42,6 +41,32 @@ namespace grpc_event_engine::experimental {
|
|
42
41
|
|
43
42
|
class AresResolver : public RefCountedDNSResolverInterface {
|
44
43
|
public:
|
44
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
45
|
+
// Handle to trigger reinitialization of this AresResolver instance after a
|
46
|
+
// fork(). Avoids global resolver management and POSIX-specific dependencies
|
47
|
+
// within AresResolver.
|
48
|
+
class ReinitHandle {
|
49
|
+
public:
|
50
|
+
static std::shared_ptr<ReinitHandle> New(AresResolver* resolver) {
|
51
|
+
return std::shared_ptr<ReinitHandle>(new ReinitHandle(resolver));
|
52
|
+
}
|
53
|
+
|
54
|
+
ReinitHandle(ReinitHandle&& other) = delete;
|
55
|
+
ReinitHandle(const ReinitHandle& other) = delete;
|
56
|
+
void OnResolverGone();
|
57
|
+
// Clears resources (such as CARES handles) held by the associated resolver.
|
58
|
+
void Reset(const absl::Status& status);
|
59
|
+
// Reinitializes the associated resolver after Reset.
|
60
|
+
void Restart();
|
61
|
+
|
62
|
+
private:
|
63
|
+
explicit ReinitHandle(AresResolver* resolver);
|
64
|
+
|
65
|
+
grpc_core::Mutex mutex_;
|
66
|
+
AresResolver* resolver_ ABSL_GUARDED_BY(&mutex_);
|
67
|
+
};
|
68
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
69
|
+
|
45
70
|
static absl::StatusOr<grpc_core::OrphanablePtr<AresResolver>>
|
46
71
|
CreateAresResolver(absl::string_view dns_server,
|
47
72
|
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
@@ -49,7 +74,8 @@ class AresResolver : public RefCountedDNSResolverInterface {
|
|
49
74
|
|
50
75
|
// Do not instantiate directly -- use CreateAresResolver() instead.
|
51
76
|
AresResolver(std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
52
|
-
std::shared_ptr<EventEngine> event_engine, ares_channel channel
|
77
|
+
std::shared_ptr<EventEngine> event_engine, ares_channel channel,
|
78
|
+
absl::string_view dns_server);
|
53
79
|
~AresResolver() override;
|
54
80
|
void Orphan() override ABSL_LOCKS_EXCLUDED(mutex_);
|
55
81
|
|
@@ -60,6 +86,9 @@ class AresResolver : public RefCountedDNSResolverInterface {
|
|
60
86
|
absl::string_view name) ABSL_LOCKS_EXCLUDED(mutex_) override;
|
61
87
|
void LookupTXT(EventEngine::DNSResolver::LookupTXTCallback callback,
|
62
88
|
absl::string_view name) ABSL_LOCKS_EXCLUDED(mutex_) override;
|
89
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
90
|
+
std::weak_ptr<ReinitHandle> GetReinitHandle();
|
91
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
63
92
|
|
64
93
|
private:
|
65
94
|
// A FdNode saves (not owns) a live socket/fd which c-ares creates, and owns a
|
@@ -109,6 +138,17 @@ class AresResolver : public RefCountedDNSResolverInterface {
|
|
109
138
|
static void OnTXTDoneLocked(void* arg, int status, int /*timeouts*/,
|
110
139
|
unsigned char* buf,
|
111
140
|
int len) ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
141
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
142
|
+
// Is executed on fork before the poller is restarted. Cleans up the resources
|
143
|
+
// from the previous generation.
|
144
|
+
void Reset(const absl::Status& reason);
|
145
|
+
// Is executed on fork after the poller is restarted. Makes the resolver
|
146
|
+
// usable once more.
|
147
|
+
void Restart();
|
148
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
149
|
+
void ShutdownLocked(const absl::Status& shutdown_status,
|
150
|
+
absl::string_view reason)
|
151
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
|
112
152
|
|
113
153
|
grpc_core::Mutex mutex_;
|
114
154
|
bool shutting_down_ ABSL_GUARDED_BY(mutex_) = false;
|
@@ -119,6 +159,12 @@ class AresResolver : public RefCountedDNSResolverInterface {
|
|
119
159
|
std::optional<EventEngine::TaskHandle> ares_backup_poll_alarm_handle_
|
120
160
|
ABSL_GUARDED_BY(mutex_);
|
121
161
|
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory_;
|
162
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
163
|
+
std::string dns_server_;
|
164
|
+
grpc_core::Mutex reinit_handle_mu_;
|
165
|
+
std::shared_ptr<ReinitHandle> reinit_handle_
|
166
|
+
ABSL_GUARDED_BY(reinit_handle_mu_);
|
167
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
122
168
|
std::shared_ptr<EventEngine> event_engine_;
|
123
169
|
};
|
124
170
|
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
32
32
|
#include "src/core/lib/event_engine/utils.h"
|
33
33
|
#include "src/core/util/crash.h"
|
34
|
+
#include "src/core/util/useful.h"
|
34
35
|
|
35
36
|
#ifndef GRPC_CFSTREAM_MAX_THREADPOOL_SIZE
|
36
37
|
#define GRPC_CFSTREAM_MAX_THREADPOOL_SIZE 16u
|
@@ -58,7 +59,8 @@ struct CFEventEngine::Closure final : public EventEngine::Closure {
|
|
58
59
|
|
59
60
|
CFEventEngine::CFEventEngine()
|
60
61
|
: thread_pool_(MakeThreadPool(grpc_core::Clamp(
|
61
|
-
gpr_cpu_num_cores(), 2u,
|
62
|
+
gpr_cpu_num_cores(), 2u,
|
63
|
+
static_cast<unsigned int>(GRPC_CFSTREAM_MAX_THREADPOOL_SIZE)))),
|
62
64
|
timer_manager_(thread_pool_) {}
|
63
65
|
|
64
66
|
CFEventEngine::~CFEventEngine() {
|
@@ -26,14 +26,11 @@
|
|
26
26
|
#include "src/core/lib/event_engine/posix_engine/lockfree_event.h"
|
27
27
|
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
|
28
28
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
29
|
-
#include "src/core/lib/surface/init_internally.h"
|
30
29
|
#include "src/core/util/sync.h"
|
31
30
|
|
32
31
|
namespace grpc_event_engine::experimental {
|
33
32
|
|
34
|
-
class CFEventEngine : public EventEngine,
|
35
|
-
public Scheduler,
|
36
|
-
public grpc_core::KeepsGrpcInitialized {
|
33
|
+
class CFEventEngine : public EventEngine, public Scheduler {
|
37
34
|
public:
|
38
35
|
CFEventEngine();
|
39
36
|
~CFEventEngine() override;
|
@@ -124,12 +124,8 @@ class CFStreamEndpoint : public EventEngine::Endpoint {
|
|
124
124
|
return impl_->GetLocalAddress();
|
125
125
|
}
|
126
126
|
|
127
|
-
std::
|
128
|
-
|
129
|
-
return std::nullopt;
|
130
|
-
}
|
131
|
-
std::optional<size_t> GetMetricKey(absl::string_view) override {
|
132
|
-
return std::nullopt;
|
127
|
+
std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const override {
|
128
|
+
return nullptr;
|
133
129
|
}
|
134
130
|
|
135
131
|
public:
|
@@ -0,0 +1,40 @@
|
|
1
|
+
// Copyright 2025 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
|
+
#include "src/core/lib/event_engine/endpoint_channel_arg_wrapper.h"
|
16
|
+
|
17
|
+
#include "src/core/util/useful.h"
|
18
|
+
namespace grpc_event_engine {
|
19
|
+
namespace experimental {
|
20
|
+
|
21
|
+
EndpointChannelArgWrapper::EndpointChannelArgWrapper(
|
22
|
+
std::unique_ptr<EventEngine::Endpoint> endpoint)
|
23
|
+
: endpoint_(std::move(endpoint)) {}
|
24
|
+
|
25
|
+
std::unique_ptr<EventEngine::Endpoint>
|
26
|
+
EndpointChannelArgWrapper::TakeEndpoint() {
|
27
|
+
return std::move(endpoint_);
|
28
|
+
}
|
29
|
+
|
30
|
+
absl::string_view EndpointChannelArgWrapper::ChannelArgName() {
|
31
|
+
return "grpc.internal.subchannel_endpoint";
|
32
|
+
}
|
33
|
+
|
34
|
+
int EndpointChannelArgWrapper::ChannelArgsCompare(
|
35
|
+
const EndpointChannelArgWrapper* a, const EndpointChannelArgWrapper* b) {
|
36
|
+
return QsortCompare(a, b);
|
37
|
+
}
|
38
|
+
|
39
|
+
} // namespace experimental
|
40
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,60 @@
|
|
1
|
+
// Copyright 2025 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_ENDPOINT_CHANNEL_ARG_WRAPPER_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_ENDPOINT_CHANNEL_ARG_WRAPPER_H
|
17
|
+
|
18
|
+
#include <grpc/event_engine/event_engine.h>
|
19
|
+
|
20
|
+
#include <memory>
|
21
|
+
|
22
|
+
#include "src/core/util/ref_counted.h"
|
23
|
+
|
24
|
+
namespace grpc_event_engine {
|
25
|
+
|
26
|
+
namespace experimental {
|
27
|
+
|
28
|
+
/// Wrapper for EventEngine::Endpoint to enable storing it in channel args.
|
29
|
+
///
|
30
|
+
/// This class encapsulates a `std::unique_ptr<EventEngine::Endpoint>` so that
|
31
|
+
/// an already-connected endpoint can be passed through channel arguments.
|
32
|
+
/// This is useful when creating a channel with a pre-established connection,
|
33
|
+
/// such as when using `CreateChannelFromEndpoint()` or `CreateChannelFromFd()`.
|
34
|
+
///
|
35
|
+
/// The wrapper provides:
|
36
|
+
/// - Ownership management via unique_ptr
|
37
|
+
/// - A static `ChannelArgName()` method to identify the channel arg
|
38
|
+
/// - A comparison function for use in channel args internals
|
39
|
+
///
|
40
|
+
/// Note: This is intended for internal use only.
|
41
|
+
class EndpointChannelArgWrapper
|
42
|
+
: public grpc_core::RefCounted<EndpointChannelArgWrapper> {
|
43
|
+
public:
|
44
|
+
explicit EndpointChannelArgWrapper(
|
45
|
+
std::unique_ptr<EventEngine::Endpoint> endpoint);
|
46
|
+
|
47
|
+
std::unique_ptr<EventEngine::Endpoint> TakeEndpoint();
|
48
|
+
|
49
|
+
static absl::string_view ChannelArgName();
|
50
|
+
static int ChannelArgsCompare(const EndpointChannelArgWrapper* a,
|
51
|
+
const EndpointChannelArgWrapper* b);
|
52
|
+
|
53
|
+
private:
|
54
|
+
std::unique_ptr<EventEngine::Endpoint> endpoint_;
|
55
|
+
};
|
56
|
+
|
57
|
+
} // namespace experimental
|
58
|
+
} // namespace grpc_event_engine
|
59
|
+
|
60
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_ENDPOINT_CHANNEL_ARG_WRAPPER_H
|
@@ -15,9 +15,16 @@
|
|
15
15
|
#include <grpc/support/port_platform.h>
|
16
16
|
|
17
17
|
#include "absl/strings/str_cat.h"
|
18
|
+
#include "src/core/telemetry/context_list_entry.h"
|
18
19
|
|
19
20
|
namespace grpc_event_engine::experimental {
|
20
21
|
|
22
|
+
EventEngine::Endpoint::WriteArgs::~WriteArgs() {
|
23
|
+
if (google_specific_ != nullptr) {
|
24
|
+
delete reinterpret_cast<grpc_core::ContextList*>(google_specific_);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
21
28
|
const EventEngine::TaskHandle EventEngine::TaskHandle::kInvalid = {-1, -1};
|
22
29
|
const EventEngine::ConnectionHandle EventEngine::ConnectionHandle::kInvalid = {
|
23
30
|
-1, -1};
|
@@ -34,19 +34,23 @@ class ChannelzExtension {
|
|
34
34
|
|
35
35
|
void SetSocketNode(
|
36
36
|
grpc_core::RefCountedPtr<grpc_core::channelz::SocketNode> socket_node) {
|
37
|
-
data_source_
|
38
|
-
std::make_unique<EndpointDataSource>(std::move(socket_node), this);
|
37
|
+
data_source_.emplace(std::move(socket_node), this);
|
39
38
|
}
|
40
39
|
|
40
|
+
protected:
|
41
|
+
void ShutdownChannelzExtension() { data_source_.reset(); }
|
42
|
+
|
41
43
|
private:
|
42
44
|
class EndpointDataSource final : public grpc_core::channelz::DataSource {
|
43
45
|
public:
|
44
46
|
EndpointDataSource(
|
45
47
|
grpc_core::RefCountedPtr<grpc_core::channelz::SocketNode> socket_node,
|
46
48
|
ChannelzExtension* ep)
|
47
|
-
: grpc_core::channelz::DataSource(std::move(socket_node)), ep_(ep) {
|
48
|
-
|
49
|
-
|
49
|
+
: grpc_core::channelz::DataSource(std::move(socket_node)), ep_(ep) {
|
50
|
+
SourceConstructed();
|
51
|
+
}
|
52
|
+
~EndpointDataSource() { SourceDestructing(); }
|
53
|
+
void AddData(grpc_core::channelz::DataSink sink) override {
|
50
54
|
ep_->AddJson(sink);
|
51
55
|
}
|
52
56
|
|
@@ -54,7 +58,7 @@ class ChannelzExtension {
|
|
54
58
|
ChannelzExtension* ep_;
|
55
59
|
};
|
56
60
|
|
57
|
-
std::
|
61
|
+
std::optional<EndpointDataSource> data_source_;
|
58
62
|
};
|
59
63
|
|
60
64
|
} // namespace grpc_event_engine::experimental
|