grpc 1.73.0 → 1.75.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 +116 -53
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +18 -6
- 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/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +274 -192
- data/src/core/channelz/channelz.h +224 -72
- data/src/core/channelz/channelz_registry.cc +2 -163
- data/src/core/channelz/channelz_registry.h +37 -6
- data/src/core/channelz/property_list.cc +353 -0
- data/src/core/channelz/property_list.h +204 -0
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -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 +24 -33
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- 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/load_balanced_call_destination.cc +6 -5
- 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 +57 -25
- data/src/core/client_channel/subchannel.h +10 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +4 -1
- data/src/core/config/core_configuration.h +23 -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/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +4 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- 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/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -6
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- 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 +165 -117
- 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.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +99 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +40 -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 +290 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -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 +1233 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +712 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +65 -51
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- 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 +121 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +76 -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 +4 -5
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +152 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +197 -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_data_queue.h +607 -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/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +41 -13
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- 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 +1072 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -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/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -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 +133 -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 +2 -27
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/filter/fused_filters.cc +154 -0
- 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 +7 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +98 -38
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- 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.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +11 -10
- 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 +51 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +12 -6
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -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 +139 -169
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +17 -19
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +90 -131
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +13 -13
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- 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 +30 -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/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +147 -94
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +435 -229
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +78 -50
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +46 -38
- 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 +11 -171
- 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 +6 -1
- 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 +165 -99
- data/src/core/lib/experiments/experiments.h +65 -52
- data/src/core/lib/iomgr/combiner.cc +1 -1
- 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/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +15 -9
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +3 -2
- 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 +55 -6
- data/src/core/lib/promise/party.h +68 -3
- data/src/core/lib/promise/poll.h +10 -0
- 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/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- 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/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +19 -10
- 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/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- 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 +15 -5
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- 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 +22 -7
- 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 +84 -13
- data/src/core/server/server.h +21 -2
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- 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_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +369 -343
- data/src/core/telemetry/stats_data.h +341 -244
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- 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 +205 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -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/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +249 -189
- 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 +7 -4
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +144 -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/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -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_certificate_provider.cc +5 -6
- 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 +70 -557
- 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 +2 -2
- 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
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +192 -68
- 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/src/core/util/ring_buffer.h +0 -122
- 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
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -0,0 +1,124 @@
|
|
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/posix_engine/file_descriptor_collection.h"
|
16
|
+
|
17
|
+
#include "absl/strings/substitute.h"
|
18
|
+
#include "src/core/lib/experiments/experiments.h"
|
19
|
+
#include "src/core/util/crash.h" // IWYU pragma: keep
|
20
|
+
#include "src/core/util/strerror.h"
|
21
|
+
|
22
|
+
namespace grpc_event_engine::experimental {
|
23
|
+
|
24
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
25
|
+
|
26
|
+
namespace {
|
27
|
+
|
28
|
+
bool IsForkEnabled() { return grpc_core::IsEventEngineForkEnabled(); }
|
29
|
+
|
30
|
+
} // namespace
|
31
|
+
|
32
|
+
FileDescriptorCollection::FileDescriptorCollection(int generation) noexcept
|
33
|
+
: generation_(generation) {}
|
34
|
+
|
35
|
+
FileDescriptorCollection::FileDescriptorCollection(
|
36
|
+
FileDescriptorCollection&& other) noexcept
|
37
|
+
: generation_(other.generation_) {
|
38
|
+
grpc_core::MutexLock lock(&other.mu_);
|
39
|
+
file_descriptors_ = std::move(other.file_descriptors_);
|
40
|
+
other.generation_ = -1;
|
41
|
+
other.file_descriptors_.clear();
|
42
|
+
}
|
43
|
+
|
44
|
+
FileDescriptorCollection& FileDescriptorCollection::operator=(
|
45
|
+
FileDescriptorCollection&& other) noexcept {
|
46
|
+
generation_ = other.generation_;
|
47
|
+
grpc_core::MutexLock self_lock(&mu_);
|
48
|
+
grpc_core::MutexLock other_lock(&other.mu_);
|
49
|
+
file_descriptors_ = std::move(other.file_descriptors_);
|
50
|
+
other.generation_ = -1;
|
51
|
+
other.file_descriptors_.clear();
|
52
|
+
return *this;
|
53
|
+
}
|
54
|
+
|
55
|
+
FileDescriptor FileDescriptorCollection::Add(int fd) {
|
56
|
+
if (IsForkEnabled()) {
|
57
|
+
grpc_core::MutexLock lock(&mu_);
|
58
|
+
file_descriptors_.emplace(fd);
|
59
|
+
}
|
60
|
+
return FileDescriptor(fd, generation_);
|
61
|
+
}
|
62
|
+
|
63
|
+
bool FileDescriptorCollection::Remove(const FileDescriptor& fd) {
|
64
|
+
if (!IsForkEnabled()) {
|
65
|
+
return true;
|
66
|
+
}
|
67
|
+
if (fd.generation() == generation_) {
|
68
|
+
grpc_core::MutexLock lock(&mu_);
|
69
|
+
return file_descriptors_.erase(fd.fd()) == 1;
|
70
|
+
}
|
71
|
+
return false;
|
72
|
+
}
|
73
|
+
|
74
|
+
absl::flat_hash_set<int>
|
75
|
+
FileDescriptorCollection::ClearAndReturnRawDescriptors() {
|
76
|
+
if (!IsForkEnabled()) {
|
77
|
+
return {};
|
78
|
+
}
|
79
|
+
grpc_core::MutexLock lock(&mu_);
|
80
|
+
absl::flat_hash_set<int> file_descriptors = std::move(file_descriptors_);
|
81
|
+
// Should not be necessary, but standard is not clear if move would empty
|
82
|
+
// the collection
|
83
|
+
file_descriptors_.clear();
|
84
|
+
return file_descriptors;
|
85
|
+
}
|
86
|
+
|
87
|
+
#else // GRPC_ENABLE_FORK_SUPPORT
|
88
|
+
|
89
|
+
FileDescriptorCollection::FileDescriptorCollection(
|
90
|
+
int /* generation */) noexcept {}
|
91
|
+
|
92
|
+
FileDescriptorCollection::FileDescriptorCollection(
|
93
|
+
FileDescriptorCollection&& other) noexcept = default;
|
94
|
+
|
95
|
+
FileDescriptorCollection& FileDescriptorCollection::operator=(
|
96
|
+
FileDescriptorCollection&& other) noexcept = default;
|
97
|
+
|
98
|
+
FileDescriptor FileDescriptorCollection::Add(int fd) {
|
99
|
+
return FileDescriptor(fd, 0);
|
100
|
+
}
|
101
|
+
|
102
|
+
bool FileDescriptorCollection::Remove(const FileDescriptor& /* fd */) {
|
103
|
+
return true;
|
104
|
+
}
|
105
|
+
|
106
|
+
absl::flat_hash_set<int>
|
107
|
+
FileDescriptorCollection::ClearAndReturnRawDescriptors() {
|
108
|
+
return {};
|
109
|
+
}
|
110
|
+
|
111
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
112
|
+
|
113
|
+
std::string PosixError::StrError() const {
|
114
|
+
if (ok()) {
|
115
|
+
return "ok";
|
116
|
+
}
|
117
|
+
if (IsWrongGenerationError()) {
|
118
|
+
return "file descriptor was created pre fork";
|
119
|
+
}
|
120
|
+
int value = *errno_value();
|
121
|
+
return absl::Substitute("$0 ($1)", grpc_core::StrError(value), value);
|
122
|
+
}
|
123
|
+
|
124
|
+
} // namespace grpc_event_engine::experimental
|
@@ -0,0 +1,243 @@
|
|
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_POSIX_ENGINE_FILE_DESCRIPTOR_COLLECTION_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_FILE_DESCRIPTOR_COLLECTION_H
|
17
|
+
|
18
|
+
#include <optional>
|
19
|
+
#include <ostream>
|
20
|
+
#include <string>
|
21
|
+
#include <utility>
|
22
|
+
#include <variant>
|
23
|
+
|
24
|
+
#include "absl/container/flat_hash_set.h"
|
25
|
+
#include "absl/strings/str_cat.h"
|
26
|
+
#include "absl/strings/str_format.h"
|
27
|
+
#include "src/core/util/sync.h"
|
28
|
+
|
29
|
+
namespace grpc_event_engine::experimental {
|
30
|
+
|
31
|
+
class PosixError {
|
32
|
+
public:
|
33
|
+
static constexpr PosixError Ok() { return PosixError(kOk); }
|
34
|
+
|
35
|
+
static constexpr PosixError Error(int errno_value) {
|
36
|
+
CHECK_GT(errno_value, 0);
|
37
|
+
return PosixError(errno_value);
|
38
|
+
}
|
39
|
+
|
40
|
+
static constexpr PosixError WrongGeneration() {
|
41
|
+
return PosixError(kWrongGenerationError);
|
42
|
+
}
|
43
|
+
|
44
|
+
constexpr PosixError() : payload_(kOk) {}
|
45
|
+
|
46
|
+
constexpr bool ok() const { return payload_ == kOk; }
|
47
|
+
|
48
|
+
bool IsPosixError() const { return payload_ > 0; }
|
49
|
+
|
50
|
+
bool IsPosixError(int errno_value) const {
|
51
|
+
return errno_value >= 0 && payload_ == errno_value;
|
52
|
+
}
|
53
|
+
|
54
|
+
bool IsWrongGenerationError() const {
|
55
|
+
return payload_ == kWrongGenerationError;
|
56
|
+
}
|
57
|
+
|
58
|
+
std::optional<int> errno_value() const {
|
59
|
+
if (payload_ > 0) return payload_;
|
60
|
+
return std::nullopt;
|
61
|
+
}
|
62
|
+
|
63
|
+
std::string StrError() const;
|
64
|
+
|
65
|
+
private:
|
66
|
+
static constexpr int kWrongGenerationError = -1;
|
67
|
+
static constexpr int kOk = 0;
|
68
|
+
|
69
|
+
explicit constexpr PosixError(int error) : payload_(error) {}
|
70
|
+
|
71
|
+
int payload_;
|
72
|
+
};
|
73
|
+
|
74
|
+
template <typename T>
|
75
|
+
class PosixErrorOr {
|
76
|
+
public:
|
77
|
+
using Payload = std::variant<T, PosixError>;
|
78
|
+
|
79
|
+
constexpr PosixErrorOr() = default;
|
80
|
+
constexpr PosixErrorOr(const PosixErrorOr& other) = default;
|
81
|
+
constexpr PosixErrorOr(PosixErrorOr&& other) = default;
|
82
|
+
constexpr PosixErrorOr( // NOLINT(google-explicit-constructor)
|
83
|
+
const PosixError& error)
|
84
|
+
: value_(error) {
|
85
|
+
CHECK(!error.ok());
|
86
|
+
}
|
87
|
+
constexpr PosixErrorOr(T&& value) // NOLINT(google-explicit-constructor)
|
88
|
+
: value_(std::forward<T>(value)) {}
|
89
|
+
PosixErrorOr& operator=(const PosixErrorOr& other) = default;
|
90
|
+
PosixErrorOr& operator=(PosixErrorOr&& other) = default;
|
91
|
+
|
92
|
+
bool ok() const { return std::holds_alternative<T>(value_); }
|
93
|
+
|
94
|
+
std::optional<int> errno_value() const {
|
95
|
+
if (ok()) {
|
96
|
+
return std::nullopt;
|
97
|
+
}
|
98
|
+
return std::get<PosixError>(value_).errno_value();
|
99
|
+
}
|
100
|
+
|
101
|
+
bool IsPosixError() const {
|
102
|
+
const PosixError* error = std::get_if<PosixError>(&value_);
|
103
|
+
return error != nullptr && error->IsPosixError();
|
104
|
+
}
|
105
|
+
|
106
|
+
bool IsPosixError(int errno_value) const {
|
107
|
+
const PosixError* error = std::get_if<PosixError>(&value_);
|
108
|
+
return error != nullptr && error->IsPosixError(errno_value);
|
109
|
+
}
|
110
|
+
|
111
|
+
bool IsWrongGenerationError() const {
|
112
|
+
const PosixError* error = std::get_if<PosixError>(&value_);
|
113
|
+
return error != nullptr && error->IsWrongGenerationError();
|
114
|
+
}
|
115
|
+
|
116
|
+
T* operator->() { return &std::get<T>(value_); }
|
117
|
+
|
118
|
+
const T* operator->() const { return &std::get<T>(value_); }
|
119
|
+
|
120
|
+
T& operator*() { return std::get<T>(value_); }
|
121
|
+
|
122
|
+
const T& value() const { return std::get<T>(value_); }
|
123
|
+
|
124
|
+
T value_or(T default_value) const {
|
125
|
+
if (ok()) {
|
126
|
+
return value();
|
127
|
+
}
|
128
|
+
return default_value;
|
129
|
+
}
|
130
|
+
|
131
|
+
std::string StrError() const {
|
132
|
+
if (ok()) {
|
133
|
+
return "ok";
|
134
|
+
}
|
135
|
+
return std::get<PosixError>(value_).StrError();
|
136
|
+
}
|
137
|
+
|
138
|
+
template <typename Sink>
|
139
|
+
friend void AbslStringify(Sink& sink, PosixErrorOr<T> error) {
|
140
|
+
if (error.ok()) {
|
141
|
+
sink.Append(absl::StrCat(error.value()));
|
142
|
+
} else {
|
143
|
+
sink.Append(error.StrError());
|
144
|
+
}
|
145
|
+
}
|
146
|
+
|
147
|
+
private:
|
148
|
+
Payload value_;
|
149
|
+
};
|
150
|
+
|
151
|
+
// Represents a file descriptor, potentially associated with a fork generation.
|
152
|
+
// When compiling with fork support (GRPC_ENABLE_FORK_SUPPORT is defined),
|
153
|
+
// FileDescriptor includes a generation number to track its validity across
|
154
|
+
// forks. Otherwise, it only stores the fd.
|
155
|
+
class FileDescriptor {
|
156
|
+
public:
|
157
|
+
constexpr FileDescriptor() noexcept = default;
|
158
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
159
|
+
constexpr FileDescriptor(int fd, int generation) noexcept
|
160
|
+
: fd_(fd), generation_(generation) {};
|
161
|
+
#else // GRPC_ENABLE_FORK_SUPPORT
|
162
|
+
constexpr FileDescriptor(int fd, int /* generation */) noexcept : fd_(fd) {};
|
163
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
164
|
+
|
165
|
+
bool ready() const { return fd_ >= 0; }
|
166
|
+
int fd() const { return fd_; }
|
167
|
+
constexpr static FileDescriptor Invalid() { return FileDescriptor(-1, 0); }
|
168
|
+
|
169
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
170
|
+
int generation() const { return generation_; }
|
171
|
+
template <typename Sink>
|
172
|
+
friend void AbslStringify(Sink& sink, FileDescriptor fd) {
|
173
|
+
sink.Append(
|
174
|
+
absl::StrFormat("fd(%d, generation: %d)", fd.fd_, fd.generation_));
|
175
|
+
}
|
176
|
+
|
177
|
+
bool operator==(const FileDescriptor& other) const {
|
178
|
+
return fd_ == other.fd_ && generation_ == other.generation_;
|
179
|
+
}
|
180
|
+
#else // GRPC_ENABLE_FORK_SUPPORT
|
181
|
+
int generation() const { return 0; }
|
182
|
+
template <typename Sink>
|
183
|
+
friend void AbslStringify(Sink& sink, FileDescriptor fd) {
|
184
|
+
sink.Append(absl::StrFormat("fd(%d)", fd.fd_));
|
185
|
+
}
|
186
|
+
bool operator==(const FileDescriptor& other) const {
|
187
|
+
return fd_ == other.fd_;
|
188
|
+
}
|
189
|
+
|
190
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
191
|
+
|
192
|
+
friend std::ostream& operator<<(std::ostream& os, const FileDescriptor& fd) {
|
193
|
+
os << absl::StrCat(fd);
|
194
|
+
return os;
|
195
|
+
}
|
196
|
+
|
197
|
+
private:
|
198
|
+
int fd_ = -1;
|
199
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
200
|
+
int generation_ = 0;
|
201
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
202
|
+
};
|
203
|
+
|
204
|
+
// Manages a collection of file descriptors, tracking their validity across
|
205
|
+
// forks by associating them with a generation number. This is necessary
|
206
|
+
// to ensure FDs created before a fork are not used after the fork.
|
207
|
+
class FileDescriptorCollection {
|
208
|
+
public:
|
209
|
+
explicit FileDescriptorCollection(int generation) noexcept;
|
210
|
+
FileDescriptorCollection(FileDescriptorCollection&& other) noexcept;
|
211
|
+
FileDescriptorCollection& operator=(
|
212
|
+
FileDescriptorCollection&& other) noexcept;
|
213
|
+
// Adds a raw file descriptor `fd` to the collection and associates it
|
214
|
+
// with the current generation. Simply constructs a new FileDescriptor
|
215
|
+
// instance without adding to a collection if fork is disabled.
|
216
|
+
FileDescriptor Add(int fd);
|
217
|
+
// Removes a FileDescriptor from the collection.
|
218
|
+
// If fork support is disabled, this always returns true.
|
219
|
+
// If fork support is enabled, fd is only removed if its generation matches
|
220
|
+
// the current collection generation. Returns true if the fd was removed.
|
221
|
+
bool Remove(const FileDescriptor& fd);
|
222
|
+
// Clears the internal collection and returns a set of file descriptors
|
223
|
+
absl::flat_hash_set<int> ClearAndReturnRawDescriptors();
|
224
|
+
|
225
|
+
// Returns the current generation number of the collection.
|
226
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
227
|
+
int generation() const { return generation_; }
|
228
|
+
#else // GRPC_ENABLE_FORK_SUPPORT
|
229
|
+
int generation() const { return 0; }
|
230
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
231
|
+
|
232
|
+
private:
|
233
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
234
|
+
grpc_core::Mutex mu_;
|
235
|
+
absl::flat_hash_set<int> file_descriptors_ ABSL_GUARDED_BY(mu_);
|
236
|
+
// Never changed outside of ctor, no need to synchronize
|
237
|
+
int generation_;
|
238
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
239
|
+
};
|
240
|
+
|
241
|
+
} // namespace grpc_event_engine::experimental
|
242
|
+
|
243
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_FILE_DESCRIPTOR_COLLECTION_H
|
@@ -20,6 +20,9 @@
|
|
20
20
|
|
21
21
|
#include <memory>
|
22
22
|
|
23
|
+
#include "absl/base/thread_annotations.h"
|
24
|
+
#include "src/core/lib/event_engine/posix_engine/file_descriptor_collection.h"
|
25
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
23
26
|
#include "src/core/lib/iomgr/port.h"
|
24
27
|
#include "src/core/util/sync.h"
|
25
28
|
|
@@ -31,7 +34,6 @@
|
|
31
34
|
#include <sys/ioctl.h>
|
32
35
|
#include <sys/socket.h>
|
33
36
|
#include <sys/uio.h>
|
34
|
-
#include <unistd.h>
|
35
37
|
|
36
38
|
#include <string>
|
37
39
|
#include <unordered_set>
|
@@ -43,7 +45,6 @@
|
|
43
45
|
#include "src/core/lib/event_engine/grpc_polled_fd.h"
|
44
46
|
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
45
47
|
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
|
46
|
-
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
47
48
|
|
48
49
|
namespace grpc_event_engine::experimental {
|
49
50
|
|
@@ -57,7 +58,7 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
|
|
57
58
|
~GrpcPolledFdPosix() override {
|
58
59
|
// c-ares library will close the fd. This fd may be picked up immediately by
|
59
60
|
// another thread and should not be closed by the following OrphanHandle.
|
60
|
-
|
61
|
+
FileDescriptor phony_release_fd;
|
61
62
|
handle_->OrphanHandle(/*on_done=*/nullptr, &phony_release_fd,
|
62
63
|
"c-ares query finished");
|
63
64
|
}
|
@@ -76,8 +77,7 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
|
|
76
77
|
|
77
78
|
bool IsFdStillReadableLocked() override {
|
78
79
|
size_t bytes_available = 0;
|
79
|
-
return ioctl(
|
80
|
-
bytes_available > 0;
|
80
|
+
return ioctl(as_, FIONREAD, &bytes_available) == 0 && bytes_available > 0;
|
81
81
|
}
|
82
82
|
|
83
83
|
bool ShutdownLocked(absl::Status error) override {
|
@@ -89,6 +89,11 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
|
|
89
89
|
|
90
90
|
const char* GetName() const override { return name_.c_str(); }
|
91
91
|
|
92
|
+
bool IsCurrent() const override {
|
93
|
+
return handle_->Poller()->posix_interface().generation() ==
|
94
|
+
handle_->WrappedFd().generation();
|
95
|
+
}
|
96
|
+
|
92
97
|
private:
|
93
98
|
const std::string name_;
|
94
99
|
const ares_socket_t as_;
|
@@ -101,6 +106,7 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
101
106
|
: poller_(poller) {}
|
102
107
|
|
103
108
|
~GrpcPolledFdFactoryPosix() override {
|
109
|
+
grpc_core::MutexLock lock(&mu_);
|
104
110
|
for (auto& fd : owned_fds_) {
|
105
111
|
close(fd);
|
106
112
|
}
|
@@ -110,16 +116,23 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
110
116
|
|
111
117
|
std::unique_ptr<GrpcPolledFd> NewGrpcPolledFdLocked(
|
112
118
|
ares_socket_t as) override {
|
119
|
+
grpc_core::MutexLock lock(&mu_);
|
113
120
|
owned_fds_.insert(as);
|
121
|
+
CHECK_NE(poller_, nullptr);
|
122
|
+
FileDescriptor fd(as, poller_->posix_interface().generation());
|
114
123
|
return std::make_unique<GrpcPolledFdPosix>(
|
115
124
|
as,
|
116
|
-
poller_->CreateHandle(
|
125
|
+
poller_->CreateHandle(fd, "c-ares socket", poller_->CanTrackErrors()));
|
117
126
|
}
|
118
127
|
|
119
128
|
void ConfigureAresChannelLocked(ares_channel channel) override {
|
120
129
|
ares_set_socket_functions(channel, &kSockFuncs, this);
|
121
130
|
ares_set_socket_configure_callback(
|
122
|
-
channel, &GrpcPolledFdFactoryPosix::ConfigureSocket,
|
131
|
+
channel, &GrpcPolledFdFactoryPosix::ConfigureSocket, this);
|
132
|
+
}
|
133
|
+
|
134
|
+
std::unique_ptr<GrpcPolledFdFactory> NewEmptyInstance() const override {
|
135
|
+
return std::make_unique<GrpcPolledFdFactoryPosix>(poller_);
|
123
136
|
}
|
124
137
|
|
125
138
|
private:
|
@@ -152,6 +165,7 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
152
165
|
static int Close(ares_socket_t as, void* user_data) {
|
153
166
|
GrpcPolledFdFactoryPosix* self =
|
154
167
|
static_cast<GrpcPolledFdFactoryPosix*>(user_data);
|
168
|
+
grpc_core::MutexLock lock(&self->mu_);
|
155
169
|
if (self->owned_fds_.find(as) == self->owned_fds_.end()) {
|
156
170
|
// c-ares owns this fd, grpc has never seen it
|
157
171
|
return close(as);
|
@@ -167,17 +181,13 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
167
181
|
/// - non-blocking
|
168
182
|
/// - cloexec flag
|
169
183
|
/// - disable nagle
|
170
|
-
static int ConfigureSocket(ares_socket_t
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
if (type == SOCK_STREAM) {
|
178
|
-
RETURN_IF_ERROR(sock.SetSocketLowLatency(1));
|
179
|
-
}
|
180
|
-
return 0;
|
184
|
+
static int ConfigureSocket(ares_socket_t as, int type,
|
185
|
+
void* polled_fd_factory) {
|
186
|
+
auto& posix_interface =
|
187
|
+
static_cast<GrpcPolledFdFactoryPosix*>(polled_fd_factory)
|
188
|
+
->poller_->posix_interface();
|
189
|
+
return posix_interface.ConfigureSocket({as, posix_interface.generation()},
|
190
|
+
type);
|
181
191
|
}
|
182
192
|
|
183
193
|
const struct ares_socket_functions kSockFuncs = {
|
@@ -189,9 +199,10 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
189
199
|
};
|
190
200
|
|
191
201
|
PosixEventPoller* poller_;
|
202
|
+
grpc_core::Mutex mu_;
|
192
203
|
// fds that are used/owned by grpc - we (grpc) will close them rather than
|
193
204
|
// c-ares
|
194
|
-
std::unordered_set<ares_socket_t> owned_fds_;
|
205
|
+
std::unordered_set<ares_socket_t> owned_fds_ ABSL_GUARDED_BY(mu_);
|
195
206
|
};
|
196
207
|
|
197
208
|
} // namespace grpc_event_engine::experimental
|
@@ -17,6 +17,7 @@
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
19
|
#include "absl/log/log.h"
|
20
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
20
21
|
#include "src/core/lib/iomgr/port.h"
|
21
22
|
|
22
23
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
@@ -34,10 +35,13 @@
|
|
34
35
|
namespace grpc_event_engine::experimental {
|
35
36
|
|
36
37
|
#ifdef GRPC_LINUX_ERRQUEUE
|
37
|
-
|
38
|
+
PosixError GetSocketTcpInfo(tcp_info* info,
|
39
|
+
EventEnginePosixInterface* posix_interface,
|
40
|
+
const FileDescriptor& fd) {
|
38
41
|
memset(info, 0, sizeof(*info));
|
39
42
|
info->length = offsetof(tcp_info, length);
|
40
|
-
return
|
43
|
+
return posix_interface->GetSockOpt(fd, IPPROTO_TCP, TCP_INFO, info,
|
44
|
+
&(info->length));
|
41
45
|
}
|
42
46
|
#endif
|
43
47
|
|
@@ -18,6 +18,7 @@
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
#include <stdint.h>
|
20
20
|
|
21
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
21
22
|
#include "src/core/lib/iomgr/port.h"
|
22
23
|
|
23
24
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
@@ -92,6 +93,8 @@ enum TCPOptStats {
|
|
92
93
|
TCP_NLA_DSACK_DUPS, // DSACK blocks received
|
93
94
|
TCP_NLA_REORD_SEEN, // reordering events seen
|
94
95
|
TCP_NLA_SRTT, // smoothed RTT in usecs
|
96
|
+
TCP_NLA_TIMEOUT_REHASH, // Timeout-triggered rehash attempts
|
97
|
+
TCP_NLA_BYTES_NOTSENT, // Bytes in write queue not yet sent
|
95
98
|
};
|
96
99
|
|
97
100
|
// tcp_info from from linux/tcp.h
|
@@ -161,7 +164,9 @@ struct tcp_info {
|
|
161
164
|
#define TCP_INFO 11
|
162
165
|
#endif
|
163
166
|
|
164
|
-
|
167
|
+
PosixError GetSocketTcpInfo(tcp_info* info,
|
168
|
+
EventEnginePosixInterface* posix_interface,
|
169
|
+
const FileDescriptor& fd);
|
165
170
|
|
166
171
|
#endif // GRPC_LINUX_ERRQUEUE
|
167
172
|
|
@@ -117,7 +117,7 @@ void LockfreeEvent::NotifyOn(PosixEngineClosure* closure) {
|
|
117
117
|
if (state_.compare_exchange_strong(curr, kClosureNotReady,
|
118
118
|
std::memory_order_acq_rel,
|
119
119
|
std::memory_order_acquire)) {
|
120
|
-
|
120
|
+
thread_pool_->Run(closure);
|
121
121
|
return; // Successful. Return.
|
122
122
|
}
|
123
123
|
break; // retry
|
@@ -131,7 +131,7 @@ void LockfreeEvent::NotifyOn(PosixEngineClosure* closure) {
|
|
131
131
|
absl::Status shutdown_err =
|
132
132
|
grpc_core::internal::StatusGetFromHeapPtr(curr & ~kShutdownBit);
|
133
133
|
closure->SetStatus(shutdown_err);
|
134
|
-
|
134
|
+
thread_pool_->Run(closure);
|
135
135
|
return;
|
136
136
|
}
|
137
137
|
|
@@ -187,7 +187,7 @@ bool LockfreeEvent::SetShutdown(absl::Status shutdown_error) {
|
|
187
187
|
std::memory_order_acquire)) {
|
188
188
|
auto closure = reinterpret_cast<PosixEngineClosure*>(curr);
|
189
189
|
closure->SetStatus(shutdown_error);
|
190
|
-
|
190
|
+
thread_pool_->Run(closure);
|
191
191
|
return true;
|
192
192
|
}
|
193
193
|
// 'curr' was a closure but now changed to a different state. We will
|
@@ -234,7 +234,7 @@ void LockfreeEvent::SetReady() {
|
|
234
234
|
// notify_on (or set_shutdown)
|
235
235
|
auto closure = reinterpret_cast<PosixEngineClosure*>(curr);
|
236
236
|
closure->SetStatus(absl::OkStatus());
|
237
|
-
|
237
|
+
thread_pool_->Run(closure);
|
238
238
|
return;
|
239
239
|
}
|
240
240
|
// else the state changed again (only possible by either a racing
|
@@ -21,14 +21,13 @@
|
|
21
21
|
|
22
22
|
#include "absl/status/status.h"
|
23
23
|
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
|
24
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
24
25
|
|
25
26
|
namespace grpc_event_engine::experimental {
|
26
27
|
|
27
|
-
class Scheduler;
|
28
|
-
|
29
28
|
class LockfreeEvent {
|
30
29
|
public:
|
31
|
-
explicit LockfreeEvent(
|
30
|
+
explicit LockfreeEvent(ThreadPool* thread_pool) : thread_pool_(thread_pool) {}
|
32
31
|
|
33
32
|
LockfreeEvent(const LockfreeEvent&) = delete;
|
34
33
|
LockfreeEvent& operator=(const LockfreeEvent&) = delete;
|
@@ -62,7 +61,7 @@ class LockfreeEvent {
|
|
62
61
|
enum State { kClosureNotReady = 0, kClosureReady = 2, kShutdownBit = 1 };
|
63
62
|
|
64
63
|
std::atomic<intptr_t> state_;
|
65
|
-
|
64
|
+
ThreadPool* thread_pool_;
|
66
65
|
};
|
67
66
|
|
68
67
|
} // namespace grpc_event_engine::experimental
|