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
@@ -17,7 +17,6 @@
|
|
17
17
|
#include <grpc/event_engine/event_engine.h>
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
#include <limits.h>
|
20
|
-
#include <stdio.h>
|
21
20
|
#include <stdlib.h>
|
22
21
|
|
23
22
|
#include <cstdint>
|
@@ -29,16 +28,13 @@
|
|
29
28
|
#include "absl/log/log.h"
|
30
29
|
#include "absl/status/status.h"
|
31
30
|
#include "absl/strings/str_cat.h"
|
32
|
-
#include "
|
31
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
33
32
|
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
34
33
|
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
35
34
|
#include "src/core/lib/iomgr/port.h"
|
36
|
-
#include "src/core/lib/iomgr/socket_mutator.h"
|
37
35
|
#include "src/core/util/crash.h" // IWYU pragma: keep
|
38
36
|
#include "src/core/util/status_helper.h"
|
39
37
|
|
40
|
-
#define MIN_SAFE_ACCEPT_QUEUE_SIZE 100
|
41
|
-
|
42
38
|
#ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
|
43
39
|
#include <errno.h> // IWYU pragma: keep
|
44
40
|
#include <ifaddrs.h> // IWYU pragma: keep
|
@@ -59,36 +55,6 @@ using ListenerSocket = ListenerSocketsContainer::ListenerSocket;
|
|
59
55
|
|
60
56
|
#ifdef GRPC_HAVE_IFADDRS
|
61
57
|
|
62
|
-
// Bind to "::" to get a port number not used by any address.
|
63
|
-
absl::StatusOr<int> GetUnusedPort() {
|
64
|
-
ResolvedAddress wild = ResolvedAddressMakeWild6(0);
|
65
|
-
PosixSocketWrapper::DSMode dsmode;
|
66
|
-
auto sock = PosixSocketWrapper::CreateDualStackSocket(nullptr, wild,
|
67
|
-
SOCK_STREAM, 0, dsmode);
|
68
|
-
GRPC_RETURN_IF_ERROR(sock.status());
|
69
|
-
if (dsmode == PosixSocketWrapper::DSMode::DSMODE_IPV4) {
|
70
|
-
wild = ResolvedAddressMakeWild4(0);
|
71
|
-
}
|
72
|
-
if (bind(sock->Fd(), wild.address(), wild.size()) != 0) {
|
73
|
-
close(sock->Fd());
|
74
|
-
return absl::FailedPreconditionError(
|
75
|
-
absl::StrCat("bind(GetUnusedPort): ", std::strerror(errno)));
|
76
|
-
}
|
77
|
-
socklen_t len = wild.size();
|
78
|
-
if (getsockname(sock->Fd(), const_cast<sockaddr*>(wild.address()), &len) !=
|
79
|
-
0) {
|
80
|
-
close(sock->Fd());
|
81
|
-
return absl::FailedPreconditionError(
|
82
|
-
absl::StrCat("getsockname(GetUnusedPort): ", std::strerror(errno)));
|
83
|
-
}
|
84
|
-
close(sock->Fd());
|
85
|
-
int port = ResolvedAddressGetPort(wild);
|
86
|
-
if (port <= 0) {
|
87
|
-
return absl::FailedPreconditionError("Bad port");
|
88
|
-
}
|
89
|
-
return port;
|
90
|
-
}
|
91
|
-
|
92
58
|
bool SystemHasIfAddrs() { return true; }
|
93
59
|
|
94
60
|
#else // GRPC_HAVE_IFADDRS
|
@@ -97,108 +63,28 @@ bool SystemHasIfAddrs() { return false; }
|
|
97
63
|
|
98
64
|
#endif // GRPC_HAVE_IFADDRS
|
99
65
|
|
100
|
-
// get max listen queue size on linux
|
101
|
-
int InitMaxAcceptQueueSize() {
|
102
|
-
int n = SOMAXCONN;
|
103
|
-
char buf[64];
|
104
|
-
FILE* fp = fopen("/proc/sys/net/core/somaxconn", "r");
|
105
|
-
int max_accept_queue_size;
|
106
|
-
if (fp == nullptr) {
|
107
|
-
// 2.4 kernel.
|
108
|
-
return SOMAXCONN;
|
109
|
-
}
|
110
|
-
if (fgets(buf, sizeof buf, fp)) {
|
111
|
-
char* end;
|
112
|
-
long i = strtol(buf, &end, 10);
|
113
|
-
if (i > 0 && i <= INT_MAX && end && *end == '\n') {
|
114
|
-
n = static_cast<int>(i);
|
115
|
-
}
|
116
|
-
}
|
117
|
-
fclose(fp);
|
118
|
-
max_accept_queue_size = n;
|
119
|
-
|
120
|
-
if (max_accept_queue_size < MIN_SAFE_ACCEPT_QUEUE_SIZE) {
|
121
|
-
LOG(INFO) << "Suspiciously small accept queue (" << max_accept_queue_size
|
122
|
-
<< ") will probably lead to connection drops";
|
123
|
-
}
|
124
|
-
return max_accept_queue_size;
|
125
|
-
}
|
126
|
-
|
127
|
-
int GetMaxAcceptQueueSize() {
|
128
|
-
static const int kMaxAcceptQueueSize = InitMaxAcceptQueueSize();
|
129
|
-
return kMaxAcceptQueueSize;
|
130
|
-
}
|
131
|
-
|
132
66
|
// Prepare a recently-created socket for listening.
|
133
|
-
absl::Status PrepareSocket(
|
67
|
+
absl::Status PrepareSocket(EventEnginePosixInterface* posix_interface,
|
68
|
+
const PosixTcpOptions& options,
|
134
69
|
ListenerSocket& socket) {
|
135
|
-
|
136
|
-
|
137
|
-
CHECK_GE(fd, 0);
|
70
|
+
FileDescriptor fd = socket.sock;
|
71
|
+
CHECK(fd.ready());
|
138
72
|
bool close_fd = true;
|
139
|
-
socket.zero_copy_enabled = false;
|
140
73
|
socket.port = 0;
|
141
|
-
auto sock_cleanup =
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
#ifdef GRPC_LINUX_ERRQUEUE
|
153
|
-
if (!socket.sock.SetSocketZeroCopy().ok()) {
|
154
|
-
// it's not fatal, so just log it.
|
155
|
-
VLOG(2) << "Node does not support SO_ZEROCOPY, continuing.";
|
156
|
-
} else {
|
157
|
-
socket.zero_copy_enabled = true;
|
158
|
-
}
|
159
|
-
#endif
|
160
|
-
|
161
|
-
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketNonBlocking(1));
|
162
|
-
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketCloexec(1));
|
163
|
-
|
164
|
-
if (socket.addr.address()->sa_family != AF_UNIX &&
|
165
|
-
!ResolvedAddressIsVSock(socket.addr)) {
|
166
|
-
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketLowLatency(1));
|
167
|
-
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketReuseAddr(1));
|
168
|
-
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketDscp(options.dscp));
|
169
|
-
socket.sock.TrySetSocketTcpUserTimeout(options, false);
|
170
|
-
}
|
171
|
-
GRPC_RETURN_IF_ERROR(socket.sock.SetSocketNoSigpipeIfPossible());
|
172
|
-
GRPC_RETURN_IF_ERROR(socket.sock.ApplySocketMutatorInOptions(
|
173
|
-
GRPC_FD_SERVER_LISTENER_USAGE, options));
|
174
|
-
|
175
|
-
if (bind(fd, socket.addr.address(), socket.addr.size()) < 0) {
|
176
|
-
auto sockaddr_str = ResolvedAddressToString(socket.addr);
|
177
|
-
if (!sockaddr_str.ok()) {
|
178
|
-
LOG(ERROR) << "Could not convert sockaddr to string: "
|
179
|
-
<< sockaddr_str.status();
|
180
|
-
sockaddr_str = "<unparsable>";
|
181
|
-
}
|
182
|
-
sockaddr_str = absl::StrReplaceAll(*sockaddr_str, {{"\0", "@"}});
|
183
|
-
return absl::FailedPreconditionError(
|
184
|
-
absl::StrCat("Error in bind for address '", *sockaddr_str,
|
185
|
-
"': ", std::strerror(errno)));
|
186
|
-
}
|
187
|
-
|
188
|
-
if (listen(fd, GetMaxAcceptQueueSize()) < 0) {
|
189
|
-
return absl::FailedPreconditionError(
|
190
|
-
absl::StrCat("Error in listen: ", std::strerror(errno)));
|
74
|
+
auto sock_cleanup =
|
75
|
+
absl::MakeCleanup([&close_fd, fd, posix_interface]() -> void {
|
76
|
+
if (close_fd && fd.ready()) {
|
77
|
+
posix_interface->Close(fd);
|
78
|
+
}
|
79
|
+
});
|
80
|
+
auto listen_address =
|
81
|
+
posix_interface->PrepareListenerSocket(socket.sock, options, socket.addr);
|
82
|
+
if (!listen_address.ok()) {
|
83
|
+
return std::move(listen_address).status();
|
191
84
|
}
|
192
85
|
socklen_t len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
193
|
-
|
194
|
-
if (getsockname(fd, const_cast<sockaddr*>(sockname_temp.address()), &len) <
|
195
|
-
0) {
|
196
|
-
return absl::FailedPreconditionError(
|
197
|
-
absl::StrCat("Error in getsockname: ", std::strerror(errno)));
|
198
|
-
}
|
199
|
-
|
200
86
|
socket.port =
|
201
|
-
ResolvedAddressGetPort(ResolvedAddress(
|
87
|
+
ResolvedAddressGetPort(ResolvedAddress(listen_address->address(), len));
|
202
88
|
// No errors. Set close_fd to false to ensure the socket is not closed.
|
203
89
|
close_fd = false;
|
204
90
|
return absl::OkStatus();
|
@@ -207,22 +93,23 @@ absl::Status PrepareSocket(const PosixTcpOptions& options,
|
|
207
93
|
} // namespace
|
208
94
|
|
209
95
|
absl::StatusOr<ListenerSocket> CreateAndPrepareListenerSocket(
|
210
|
-
const PosixTcpOptions& options,
|
96
|
+
EventEnginePosixInterface* posix_interface, const PosixTcpOptions& options,
|
97
|
+
const ResolvedAddress& addr) {
|
211
98
|
ResolvedAddress addr4_copy;
|
212
99
|
ListenerSocket socket;
|
213
|
-
auto result =
|
100
|
+
auto result = posix_interface->CreateDualStackSocket(
|
214
101
|
nullptr, addr, SOCK_STREAM, 0, socket.dsmode);
|
215
102
|
if (!result.ok()) {
|
216
103
|
return result.status();
|
217
104
|
}
|
218
105
|
socket.sock = *result;
|
219
|
-
if (socket.dsmode ==
|
106
|
+
if (socket.dsmode == EventEnginePosixInterface::DSMODE_IPV4 &&
|
220
107
|
ResolvedAddressIsV4Mapped(addr, &addr4_copy)) {
|
221
108
|
socket.addr = addr4_copy;
|
222
109
|
} else {
|
223
110
|
socket.addr = addr;
|
224
111
|
}
|
225
|
-
GRPC_RETURN_IF_ERROR(PrepareSocket(options, socket));
|
112
|
+
GRPC_RETURN_IF_ERROR(PrepareSocket(posix_interface, options, socket));
|
226
113
|
CHECK_GT(socket.port, 0);
|
227
114
|
return socket;
|
228
115
|
}
|
@@ -249,6 +136,7 @@ bool IsSockAddrLinkLocal(const EventEngine::ResolvedAddress* resolved_addr) {
|
|
249
136
|
}
|
250
137
|
|
251
138
|
absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
139
|
+
EventEnginePosixInterface* posix_interface,
|
252
140
|
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
253
141
|
int requested_port) {
|
254
142
|
#ifdef GRPC_HAVE_IFADDRS
|
@@ -258,7 +146,7 @@ absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
|
258
146
|
bool no_local_addresses = true;
|
259
147
|
int assigned_port = 0;
|
260
148
|
if (requested_port == 0) {
|
261
|
-
auto result = GetUnusedPort();
|
149
|
+
auto result = posix_interface->GetUnusedPort();
|
262
150
|
GRPC_RETURN_IF_ERROR(result.status());
|
263
151
|
requested_port = *result;
|
264
152
|
VLOG(2) << "Picked unused port " << requested_port;
|
@@ -307,7 +195,8 @@ absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
|
307
195
|
<< ifa_name;
|
308
196
|
continue;
|
309
197
|
}
|
310
|
-
auto result =
|
198
|
+
auto result =
|
199
|
+
CreateAndPrepareListenerSocket(posix_interface, options, addr);
|
311
200
|
if (!result.ok()) {
|
312
201
|
op_status = absl::FailedPreconditionError(
|
313
202
|
absl::StrCat("Failed to add listener: ", addr_str,
|
@@ -335,6 +224,7 @@ absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
|
335
224
|
}
|
336
225
|
|
337
226
|
absl::StatusOr<int> ListenerContainerAddWildcardAddresses(
|
227
|
+
EventEnginePosixInterface* posix_interface,
|
338
228
|
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
339
229
|
int requested_port) {
|
340
230
|
ResolvedAddress wild4 = ResolvedAddressMakeWild4(requested_port);
|
@@ -344,24 +234,24 @@ absl::StatusOr<int> ListenerContainerAddWildcardAddresses(
|
|
344
234
|
int assigned_port = 0;
|
345
235
|
|
346
236
|
if (SystemHasIfAddrs() && options.expand_wildcard_addrs) {
|
347
|
-
return ListenerContainerAddAllLocalAddresses(
|
348
|
-
|
237
|
+
return ListenerContainerAddAllLocalAddresses(
|
238
|
+
posix_interface, listener_sockets, options, requested_port);
|
349
239
|
}
|
350
240
|
|
351
241
|
// Try listening on IPv6 first.
|
352
|
-
v6_sock = CreateAndPrepareListenerSocket(options, wild6);
|
242
|
+
v6_sock = CreateAndPrepareListenerSocket(posix_interface, options, wild6);
|
353
243
|
if (v6_sock.ok()) {
|
354
244
|
listener_sockets.Append(*v6_sock);
|
355
245
|
requested_port = v6_sock->port;
|
356
246
|
assigned_port = v6_sock->port;
|
357
|
-
if (v6_sock->dsmode ==
|
358
|
-
v6_sock->dsmode ==
|
247
|
+
if (v6_sock->dsmode == EventEnginePosixInterface::DSMODE_DUALSTACK ||
|
248
|
+
v6_sock->dsmode == EventEnginePosixInterface::DSMODE_IPV4) {
|
359
249
|
return v6_sock->port;
|
360
250
|
}
|
361
251
|
}
|
362
252
|
// If we got a v6-only socket or nothing, try adding 0.0.0.0.
|
363
253
|
ResolvedAddressSetPort(wild4, requested_port);
|
364
|
-
v4_sock = CreateAndPrepareListenerSocket(options, wild4);
|
254
|
+
v4_sock = CreateAndPrepareListenerSocket(posix_interface, options, wild4);
|
365
255
|
if (v4_sock.ok()) {
|
366
256
|
assigned_port = v4_sock->port;
|
367
257
|
listener_sockets.Append(*v4_sock);
|
@@ -18,6 +18,7 @@
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include "absl/status/statusor.h"
|
21
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
21
22
|
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
22
23
|
|
23
24
|
namespace grpc_event_engine::experimental {
|
@@ -30,15 +31,13 @@ class ListenerSocketsContainer {
|
|
30
31
|
public:
|
31
32
|
struct ListenerSocket {
|
32
33
|
// Listener socket fd
|
33
|
-
|
34
|
+
FileDescriptor sock;
|
34
35
|
// Assigned/chosen listening port
|
35
36
|
int port;
|
36
|
-
// Socket configuration
|
37
|
-
bool zero_copy_enabled;
|
38
37
|
// Address at which the socket is listening for connections
|
39
38
|
grpc_event_engine::experimental::EventEngine::ResolvedAddress addr;
|
40
39
|
// Dual stack mode.
|
41
|
-
|
40
|
+
EventEnginePosixInterface::DSMode dsmode;
|
42
41
|
};
|
43
42
|
// Adds a socket to the internal db of sockets associated with a listener.
|
44
43
|
virtual void Append(ListenerSocket socket) = 0;
|
@@ -59,7 +58,7 @@ class ListenerSocketsContainer {
|
|
59
58
|
// socket fd and its dsmode. If unsuccessful, it returns a Not-OK status.
|
60
59
|
absl::StatusOr<ListenerSocketsContainer::ListenerSocket>
|
61
60
|
CreateAndPrepareListenerSocket(
|
62
|
-
const PosixTcpOptions& options,
|
61
|
+
EventEnginePosixInterface* posix_interface, const PosixTcpOptions& options,
|
63
62
|
const grpc_event_engine::experimental::EventEngine::ResolvedAddress& addr);
|
64
63
|
|
65
64
|
// Instead of creating and adding a socket bound to specific address, this
|
@@ -69,6 +68,7 @@ CreateAndPrepareListenerSocket(
|
|
69
68
|
// returns the port at which the created socket listens for incoming
|
70
69
|
// connections.
|
71
70
|
absl::StatusOr<int> ListenerContainerAddWildcardAddresses(
|
71
|
+
EventEnginePosixInterface* posix_interface,
|
72
72
|
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
73
73
|
int requested_port);
|
74
74
|
|
@@ -79,6 +79,7 @@ absl::StatusOr<int> ListenerContainerAddWildcardAddresses(
|
|
79
79
|
// every socket. If set to 0, a random port will be used for every socket.
|
80
80
|
// The function returns the chosen port number for all created sockets.
|
81
81
|
absl::StatusOr<int> ListenerContainerAddAllLocalAddresses(
|
82
|
+
EventEnginePosixInterface* posix_interface,
|
82
83
|
ListenerSocketsContainer& listener_sockets, const PosixTcpOptions& options,
|
83
84
|
int requested_port);
|
84
85
|
|
@@ -0,0 +1,211 @@
|
|
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_POSIX_INTERFACE_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_INTERFACE_H
|
17
|
+
|
18
|
+
#include <grpc/event_engine/event_engine.h>
|
19
|
+
|
20
|
+
#include <cerrno>
|
21
|
+
#include <cstdint>
|
22
|
+
#include <functional>
|
23
|
+
#include <string>
|
24
|
+
#include <utility>
|
25
|
+
|
26
|
+
#include "absl/log/check.h"
|
27
|
+
#include "absl/status/status.h"
|
28
|
+
#include "src/core/lib/event_engine/posix_engine/file_descriptor_collection.h"
|
29
|
+
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
30
|
+
|
31
|
+
namespace grpc_event_engine::experimental {
|
32
|
+
|
33
|
+
class EventEnginePosixInterface {
|
34
|
+
public:
|
35
|
+
// An enum to keep track of IPv4/IPv6 socket modes.
|
36
|
+
//
|
37
|
+
// Currently, this information is only used when a socket is first created,
|
38
|
+
// but in the future we may wish to store it alongside the fd. This would let
|
39
|
+
// calls like sendto() know which family to use without asking the kernel
|
40
|
+
// first.
|
41
|
+
enum DSMode {
|
42
|
+
// Uninitialized, or a non-IP socket.
|
43
|
+
DSMODE_NONE,
|
44
|
+
// AF_INET only.
|
45
|
+
DSMODE_IPV4,
|
46
|
+
// AF_INET6 only, because IPV6_V6ONLY could not be cleared.
|
47
|
+
DSMODE_IPV6,
|
48
|
+
// AF_INET6, which also supports ::ffff-mapped IPv4 addresses.
|
49
|
+
DSMODE_DUALSTACK
|
50
|
+
};
|
51
|
+
|
52
|
+
EventEnginePosixInterface() : descriptors_(1) {}
|
53
|
+
EventEnginePosixInterface(const EventEnginePosixInterface& other) = delete;
|
54
|
+
EventEnginePosixInterface(EventEnginePosixInterface&& other) = delete;
|
55
|
+
|
56
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
57
|
+
// ---- Fork generation management ----
|
58
|
+
// Advances the internal generation counter, potentially invalidating old
|
59
|
+
// descriptors.
|
60
|
+
void AdvanceGeneration();
|
61
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
62
|
+
int generation() const { return descriptors_.generation(); }
|
63
|
+
|
64
|
+
// ---- File Descriptor Management ----
|
65
|
+
// Adopts an existing POSIX file descriptor, returning a managed
|
66
|
+
// FileDescriptor object.
|
67
|
+
FileDescriptor Adopt(int fd);
|
68
|
+
void Close(const FileDescriptor& fd);
|
69
|
+
// Retrieves the raw POSIX file descriptor, if valid for the current
|
70
|
+
// generation.
|
71
|
+
PosixErrorOr<int> GetFd(const FileDescriptor& fd);
|
72
|
+
|
73
|
+
// ---- Socket/FD Creation Factories ----
|
74
|
+
struct PosixSocketCreateResult {
|
75
|
+
FileDescriptor sock;
|
76
|
+
EventEngine::ResolvedAddress mapped_target_addr;
|
77
|
+
};
|
78
|
+
// Return a PosixSocketCreateResult which manages a configured, unbound,
|
79
|
+
// unconnected TCP client fd.
|
80
|
+
// options: may contain custom tcp settings for the fd.
|
81
|
+
// target_addr: the destination address.
|
82
|
+
//
|
83
|
+
// Returns: Not-OK status on error. Otherwise it returns a
|
84
|
+
// PosixSocketWrapper::PosixSocketCreateResult type which includes a sock
|
85
|
+
// of type PosixSocketWrapper and a mapped_target_addr which is
|
86
|
+
// target_addr mapped to an address appropriate to the type of socket FD
|
87
|
+
// created. For example, if target_addr is IPv4 and dual stack sockets are
|
88
|
+
// available, mapped_target_addr will be an IPv4-mapped IPv6 address.
|
89
|
+
//
|
90
|
+
absl::StatusOr<PosixSocketCreateResult> CreateAndPrepareTcpClientSocket(
|
91
|
+
const PosixTcpOptions& options,
|
92
|
+
const EventEngine::ResolvedAddress& target_addr);
|
93
|
+
// Creates a new socket for connecting to (or listening on) an address.
|
94
|
+
//
|
95
|
+
// If addr is AF_INET6, this creates an IPv6 socket first. If that fails,
|
96
|
+
// and addr is within ::ffff:0.0.0.0/96, then it automatically falls back
|
97
|
+
// to an IPv4 socket.
|
98
|
+
//
|
99
|
+
// If addr is AF_INET, AF_UNIX, or anything else, then this is similar to
|
100
|
+
// calling socket() directly.
|
101
|
+
//
|
102
|
+
// Returns a FileDescriptor on success, otherwise returns a not-OK
|
103
|
+
// absl::Status
|
104
|
+
//
|
105
|
+
// The dsmode output indicates which address family was actually created.
|
106
|
+
absl::StatusOr<FileDescriptor> CreateDualStackSocket(
|
107
|
+
std::function<int(int, int, int)> socket_factory,
|
108
|
+
const experimental::EventEngine::ResolvedAddress& addr, int type,
|
109
|
+
int protocol, DSMode& dsmode);
|
110
|
+
PosixErrorOr<FileDescriptor> EpollCreateAndCloexec();
|
111
|
+
PosixErrorOr<FileDescriptor> EventFd(int initval, int flags);
|
112
|
+
absl::StatusOr<std::pair<FileDescriptor, FileDescriptor>> Pipe();
|
113
|
+
PosixErrorOr<FileDescriptor> Socket(int domain, int type, int protocol);
|
114
|
+
|
115
|
+
// ---- Socket Operations (General POSIX) ----
|
116
|
+
PosixErrorOr<FileDescriptor> Accept(const FileDescriptor& sockfd,
|
117
|
+
struct sockaddr* addr,
|
118
|
+
socklen_t* addrlen);
|
119
|
+
PosixErrorOr<FileDescriptor> Accept4(const FileDescriptor& sockfd,
|
120
|
+
EventEngine::ResolvedAddress& addr,
|
121
|
+
int nonblock, int cloexec);
|
122
|
+
PosixError Connect(const FileDescriptor& sockfd, const struct sockaddr* addr,
|
123
|
+
socklen_t addrlen);
|
124
|
+
PosixErrorOr<int64_t> Read(const FileDescriptor& fd, absl::Span<char> buffer);
|
125
|
+
PosixErrorOr<int64_t> RecvMsg(const FileDescriptor& fd,
|
126
|
+
struct msghdr* message, int flags);
|
127
|
+
PosixErrorOr<int64_t> SendMsg(const FileDescriptor& fd,
|
128
|
+
const struct msghdr* message, int flags);
|
129
|
+
PosixError Shutdown(const FileDescriptor& fd, int how);
|
130
|
+
PosixErrorOr<int64_t> Write(const FileDescriptor& fd,
|
131
|
+
absl::Span<char> buffer);
|
132
|
+
|
133
|
+
// ---- Socket Configuration & Querying ----
|
134
|
+
// Applies socket mutator options defined within PosixTcpOptions to a file
|
135
|
+
// descriptor.
|
136
|
+
absl::Status ApplySocketMutatorInOptions(const FileDescriptor& fd,
|
137
|
+
grpc_fd_usage usage,
|
138
|
+
const PosixTcpOptions& options);
|
139
|
+
// Configures the default TCP_USER_TIMEOUT socket option for future sockets
|
140
|
+
// (static).
|
141
|
+
static void ConfigureDefaultTcpUserTimeout(bool enable, int timeout,
|
142
|
+
bool is_client);
|
143
|
+
// Applies standard configuration to a socket based on its type. Returns zero
|
144
|
+
// to indicate a success or a negative value to indicate an error
|
145
|
+
int ConfigureSocket(const FileDescriptor& fd, int type);
|
146
|
+
// Gets a socket option value (getsockopt wrapper).
|
147
|
+
PosixError GetSockOpt(const FileDescriptor& fd, int level, int optname,
|
148
|
+
void* optval, void* optlen);
|
149
|
+
// Finds and returns an unused network port.
|
150
|
+
absl::StatusOr<int> GetUnusedPort();
|
151
|
+
// Performs an ioctl operation on a file descriptor.
|
152
|
+
PosixError Ioctl(const FileDescriptor& fd, int op, void* arg);
|
153
|
+
// Retrieves the local address of a socket as an EventEngine::ResolvedAddress.
|
154
|
+
absl::StatusOr<EventEngine::ResolvedAddress> LocalAddress(
|
155
|
+
const FileDescriptor& fd);
|
156
|
+
// Retrieves the local address of a socket as a string.
|
157
|
+
absl::StatusOr<std::string> LocalAddressString(const FileDescriptor& fd);
|
158
|
+
// Retrieves the peer address of a connected socket as an
|
159
|
+
// EventEngine::ResolvedAddress.
|
160
|
+
absl::StatusOr<EventEngine::ResolvedAddress> PeerAddress(
|
161
|
+
const FileDescriptor& fd);
|
162
|
+
// Retrieves the peer address of a connected socket as a string.
|
163
|
+
absl::StatusOr<std::string> PeerAddressString(const FileDescriptor& fd);
|
164
|
+
// Prepares a listener socket with specified options and address binding.
|
165
|
+
absl::StatusOr<EventEngine::ResolvedAddress> PrepareListenerSocket(
|
166
|
+
const FileDescriptor& fd, const PosixTcpOptions& options,
|
167
|
+
const EventEngine::ResolvedAddress& address);
|
168
|
+
// Applies a grpc_socket_mutator function to configure a socket.
|
169
|
+
absl::Status SetSocketMutator(const FileDescriptor& fd, grpc_fd_usage usage,
|
170
|
+
grpc_socket_mutator* mutator);
|
171
|
+
// Tries to set the SO_NOSIGPIPE option on a socket if the platform supports
|
172
|
+
// it.
|
173
|
+
absl::Status SetSocketNoSigpipeIfPossible(const FileDescriptor& fd);
|
174
|
+
// Sets a socket option value (setsockopt wrapper).
|
175
|
+
PosixErrorOr<int64_t> SetSockOpt(const FileDescriptor& fd, int level,
|
176
|
+
int optname, uint32_t optval);
|
177
|
+
|
178
|
+
// Epoll
|
179
|
+
#ifdef GRPC_LINUX_EPOLL
|
180
|
+
PosixError EpollCtlAdd(const FileDescriptor& epfd, bool writable,
|
181
|
+
const FileDescriptor& fd, void* data);
|
182
|
+
PosixError EpollCtlDel(const FileDescriptor& epfd, const FileDescriptor& fd);
|
183
|
+
#endif // GRPC_LINUX_EPOLL
|
184
|
+
|
185
|
+
PosixError EventFdRead(const FileDescriptor& fd);
|
186
|
+
PosixError EventFdWrite(const FileDescriptor& fd);
|
187
|
+
|
188
|
+
private:
|
189
|
+
static bool IsEventEngineForkEnabled() {
|
190
|
+
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
191
|
+
return grpc_core::IsEventEngineForkEnabled();
|
192
|
+
#else // GRPC_ENABLE_FORK_SUPPORT
|
193
|
+
return false;
|
194
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
195
|
+
}
|
196
|
+
|
197
|
+
absl::Status PrepareTcpClientSocket(int fd,
|
198
|
+
const EventEngine::ResolvedAddress& addr,
|
199
|
+
const PosixTcpOptions& options);
|
200
|
+
PosixError PosixResultWrap(
|
201
|
+
const FileDescriptor& wrapped,
|
202
|
+
const absl::AnyInvocable<int(int) const>& fn) const;
|
203
|
+
bool IsCorrectGeneration(const FileDescriptor& fd) const;
|
204
|
+
PosixErrorOr<FileDescriptor> RegisterPosixResult(int result);
|
205
|
+
|
206
|
+
FileDescriptorCollection descriptors_;
|
207
|
+
};
|
208
|
+
|
209
|
+
} // namespace grpc_event_engine::experimental
|
210
|
+
|
211
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_INTERFACE_H
|