grpc 1.73.0 → 1.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -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,22 @@ 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
|
+
FileDescriptor fd(as, poller_->posix_interface().generation());
|
114
122
|
return std::make_unique<GrpcPolledFdPosix>(
|
115
123
|
as,
|
116
|
-
poller_->CreateHandle(
|
124
|
+
poller_->CreateHandle(fd, "c-ares socket", poller_->CanTrackErrors()));
|
117
125
|
}
|
118
126
|
|
119
127
|
void ConfigureAresChannelLocked(ares_channel channel) override {
|
120
128
|
ares_set_socket_functions(channel, &kSockFuncs, this);
|
121
129
|
ares_set_socket_configure_callback(
|
122
|
-
channel, &GrpcPolledFdFactoryPosix::ConfigureSocket,
|
130
|
+
channel, &GrpcPolledFdFactoryPosix::ConfigureSocket, this);
|
131
|
+
}
|
132
|
+
|
133
|
+
std::unique_ptr<GrpcPolledFdFactory> NewEmptyInstance() const override {
|
134
|
+
return std::make_unique<GrpcPolledFdFactoryPosix>(poller_);
|
123
135
|
}
|
124
136
|
|
125
137
|
private:
|
@@ -152,6 +164,7 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
152
164
|
static int Close(ares_socket_t as, void* user_data) {
|
153
165
|
GrpcPolledFdFactoryPosix* self =
|
154
166
|
static_cast<GrpcPolledFdFactoryPosix*>(user_data);
|
167
|
+
grpc_core::MutexLock lock(&self->mu_);
|
155
168
|
if (self->owned_fds_.find(as) == self->owned_fds_.end()) {
|
156
169
|
// c-ares owns this fd, grpc has never seen it
|
157
170
|
return close(as);
|
@@ -167,17 +180,13 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
167
180
|
/// - non-blocking
|
168
181
|
/// - cloexec flag
|
169
182
|
/// - 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;
|
183
|
+
static int ConfigureSocket(ares_socket_t as, int type,
|
184
|
+
void* polled_fd_factory) {
|
185
|
+
auto& posix_interface =
|
186
|
+
static_cast<GrpcPolledFdFactoryPosix*>(polled_fd_factory)
|
187
|
+
->poller_->posix_interface();
|
188
|
+
return posix_interface.ConfigureSocket({as, posix_interface.generation()},
|
189
|
+
type);
|
181
190
|
}
|
182
191
|
|
183
192
|
const struct ares_socket_functions kSockFuncs = {
|
@@ -189,9 +198,10 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
189
198
|
};
|
190
199
|
|
191
200
|
PosixEventPoller* poller_;
|
201
|
+
grpc_core::Mutex mu_;
|
192
202
|
// fds that are used/owned by grpc - we (grpc) will close them rather than
|
193
203
|
// c-ares
|
194
|
-
std::unordered_set<ares_socket_t> owned_fds_;
|
204
|
+
std::unordered_set<ares_socket_t> owned_fds_ ABSL_GUARDED_BY(mu_);
|
195
205
|
};
|
196
206
|
|
197
207
|
} // 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
|
|