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
@@ -21,13 +21,8 @@
|
|
21
21
|
#include <grpc/grpc.h>
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <functional>
|
25
|
-
#include <string>
|
26
24
|
#include <utility>
|
27
25
|
|
28
|
-
#include "absl/log/check.h"
|
29
|
-
#include "absl/status/status.h"
|
30
|
-
#include "absl/status/statusor.h"
|
31
26
|
#include "src/core/lib/iomgr/port.h"
|
32
27
|
#include "src/core/lib/iomgr/socket_mutator.h"
|
33
28
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
@@ -148,177 +143,22 @@ struct PosixTcpOptions {
|
|
148
143
|
PosixTcpOptions TcpOptionsFromEndpointConfig(
|
149
144
|
const grpc_event_engine::experimental::EndpointConfig& config);
|
150
145
|
|
151
|
-
// a wrapper for accept or accept4
|
152
|
-
int Accept4(int sockfd,
|
153
|
-
grpc_event_engine::experimental::EventEngine::ResolvedAddress& addr,
|
154
|
-
int nonblock, int cloexec);
|
155
|
-
|
156
146
|
// Unlink the path pointed to by the given address if it refers to UDS path.
|
157
147
|
void UnlinkIfUnixDomainSocket(
|
158
148
|
const EventEngine::ResolvedAddress& resolved_addr);
|
159
149
|
|
160
|
-
|
161
|
-
|
162
|
-
explicit PosixSocketWrapper(int fd) : fd_(fd) { CHECK_GT(fd_, 0); }
|
163
|
-
|
164
|
-
PosixSocketWrapper() : fd_(-1) {};
|
165
|
-
|
166
|
-
~PosixSocketWrapper() = default;
|
167
|
-
|
168
|
-
// Instruct the kernel to wait for specified number of bytes to be received on
|
169
|
-
// the socket before generating an interrupt for packet receive. If the call
|
170
|
-
// succeeds, it returns the number of bytes (wait threshold) that was actually
|
171
|
-
// set.
|
172
|
-
absl::StatusOr<int> SetSocketRcvLowat(int bytes);
|
173
|
-
|
174
|
-
// Set socket to use zerocopy
|
175
|
-
absl::Status SetSocketZeroCopy();
|
176
|
-
|
177
|
-
// Set socket to non blocking mode
|
178
|
-
absl::Status SetSocketNonBlocking(int non_blocking);
|
179
|
-
|
180
|
-
// Set socket to close on exec
|
181
|
-
absl::Status SetSocketCloexec(int close_on_exec);
|
182
|
-
|
183
|
-
// Set socket to reuse old addresses
|
184
|
-
absl::Status SetSocketReuseAddr(int reuse);
|
185
|
-
|
186
|
-
// Disable nagle algorithm
|
187
|
-
absl::Status SetSocketLowLatency(int low_latency);
|
188
|
-
|
189
|
-
// Set SO_REUSEPORT
|
190
|
-
absl::Status SetSocketReusePort(int reuse);
|
191
|
-
|
192
|
-
// Set Differentiated Services Code Point (DSCP)
|
193
|
-
absl::Status SetSocketDscp(int dscp);
|
194
|
-
|
195
|
-
// Override default Tcp user timeout values if necessary.
|
196
|
-
void TrySetSocketTcpUserTimeout(const PosixTcpOptions& options,
|
197
|
-
bool is_client);
|
198
|
-
|
199
|
-
// Tries to set SO_NOSIGPIPE if available on this platform.
|
200
|
-
// If SO_NO_SIGPIPE is not available, returns not OK status.
|
201
|
-
absl::Status SetSocketNoSigpipeIfPossible();
|
202
|
-
|
203
|
-
// Tries to set IP_PKTINFO if available on this platform. If IP_PKTINFO is not
|
204
|
-
// available, returns not OK status.
|
205
|
-
absl::Status SetSocketIpPktInfoIfPossible();
|
206
|
-
|
207
|
-
// Tries to set IPV6_RECVPKTINFO if available on this platform. If
|
208
|
-
// IPV6_RECVPKTINFO is not available, returns not OK status.
|
209
|
-
absl::Status SetSocketIpv6RecvPktInfoIfPossible();
|
210
|
-
|
211
|
-
// Tries to set the socket's send buffer to given size.
|
212
|
-
absl::Status SetSocketSndBuf(int buffer_size_bytes);
|
213
|
-
|
214
|
-
// Tries to set the socket's receive buffer to given size.
|
215
|
-
absl::Status SetSocketRcvBuf(int buffer_size_bytes);
|
216
|
-
|
217
|
-
// Tries to set the socket using a grpc_socket_mutator
|
218
|
-
absl::Status SetSocketMutator(grpc_fd_usage usage,
|
219
|
-
grpc_socket_mutator* mutator);
|
220
|
-
|
221
|
-
// Extracts the first socket mutator from config if any and applies on the fd.
|
222
|
-
absl::Status ApplySocketMutatorInOptions(grpc_fd_usage usage,
|
223
|
-
const PosixTcpOptions& options);
|
224
|
-
|
225
|
-
// Return LocalAddress as EventEngine::ResolvedAddress
|
226
|
-
absl::StatusOr<EventEngine::ResolvedAddress> LocalAddress();
|
150
|
+
// Returns true if this system can create AF_INET6 sockets bound to ::1.
|
151
|
+
// The value is probed once, and cached for the life of the process.
|
227
152
|
|
228
|
-
|
229
|
-
|
153
|
+
// This is more restrictive than checking for socket(AF_INET6) to succeed,
|
154
|
+
// because Linux with "net.ipv6.conf.all.disable_ipv6 = 1" is able to create
|
155
|
+
// and bind IPv6 sockets, but cannot connect to a getsockname() of [::]:port
|
156
|
+
// without a valid loopback interface. Rather than expose this half-broken
|
157
|
+
// state to library users, we turn off IPv6 sockets.
|
158
|
+
bool IsIpv6LoopbackAvailable();
|
230
159
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
// Return PeerAddress as string
|
235
|
-
absl::StatusOr<std::string> PeerAddressString();
|
236
|
-
|
237
|
-
// An enum to keep track of IPv4/IPv6 socket modes.
|
238
|
-
|
239
|
-
// Currently, this information is only used when a socket is first created,
|
240
|
-
// but in the future we may wish to store it alongside the fd. This would let
|
241
|
-
// calls like sendto() know which family to use without asking the kernel
|
242
|
-
// first.
|
243
|
-
enum DSMode {
|
244
|
-
// Uninitialized, or a non-IP socket.
|
245
|
-
DSMODE_NONE,
|
246
|
-
// AF_INET only.
|
247
|
-
DSMODE_IPV4,
|
248
|
-
// AF_INET6 only, because IPV6_V6ONLY could not be cleared.
|
249
|
-
DSMODE_IPV6,
|
250
|
-
// AF_INET6, which also supports ::ffff-mapped IPv4 addresses.
|
251
|
-
DSMODE_DUALSTACK
|
252
|
-
};
|
253
|
-
|
254
|
-
// Returns the underlying file-descriptor.
|
255
|
-
int Fd() const { return fd_; }
|
256
|
-
|
257
|
-
// Static methods
|
258
|
-
|
259
|
-
// Configure default values for tcp user timeout to be used by client
|
260
|
-
// and server side sockets.
|
261
|
-
static void ConfigureDefaultTcpUserTimeout(bool enable, int timeout,
|
262
|
-
bool is_client);
|
263
|
-
|
264
|
-
// Return true if SO_REUSEPORT is supported
|
265
|
-
static bool IsSocketReusePortSupported();
|
266
|
-
|
267
|
-
// Returns true if this system can create AF_INET6 sockets bound to ::1.
|
268
|
-
// The value is probed once, and cached for the life of the process.
|
269
|
-
|
270
|
-
// This is more restrictive than checking for socket(AF_INET6) to succeed,
|
271
|
-
// because Linux with "net.ipv6.conf.all.disable_ipv6 = 1" is able to create
|
272
|
-
// and bind IPv6 sockets, but cannot connect to a getsockname() of [::]:port
|
273
|
-
// without a valid loopback interface. Rather than expose this half-broken
|
274
|
-
// state to library users, we turn off IPv6 sockets.
|
275
|
-
static bool IsIpv6LoopbackAvailable();
|
276
|
-
|
277
|
-
// Creates a new socket for connecting to (or listening on) an address.
|
278
|
-
|
279
|
-
// If addr is AF_INET6, this creates an IPv6 socket first. If that fails,
|
280
|
-
// and addr is within ::ffff:0.0.0.0/96, then it automatically falls back to
|
281
|
-
// an IPv4 socket.
|
282
|
-
|
283
|
-
// If addr is AF_INET, AF_UNIX, or anything else, then this is similar to
|
284
|
-
// calling socket() directly.
|
285
|
-
|
286
|
-
// Returns an PosixSocketWrapper on success, otherwise returns a not-OK
|
287
|
-
// absl::Status
|
288
|
-
|
289
|
-
// The dsmode output indicates which address family was actually created.
|
290
|
-
static absl::StatusOr<PosixSocketWrapper> CreateDualStackSocket(
|
291
|
-
std::function<int(int /*domain*/, int /*type*/, int /*protocol*/)>
|
292
|
-
socket_factory,
|
293
|
-
const experimental::EventEngine::ResolvedAddress& addr, int type,
|
294
|
-
int protocol, DSMode& dsmode);
|
295
|
-
|
296
|
-
struct PosixSocketCreateResult;
|
297
|
-
// Return a PosixSocketCreateResult which manages a configured, unbound,
|
298
|
-
// unconnected TCP client fd.
|
299
|
-
// options: may contain custom tcp settings for the fd.
|
300
|
-
// target_addr: the destination address.
|
301
|
-
//
|
302
|
-
// Returns: Not-OK status on error. Otherwise it returns a
|
303
|
-
// PosixSocketWrapper::PosixSocketCreateResult type which includes a sock
|
304
|
-
// of type PosixSocketWrapper and a mapped_target_addr which is
|
305
|
-
// target_addr mapped to an address appropriate to the type of socket FD
|
306
|
-
// created. For example, if target_addr is IPv4 and dual stack sockets are
|
307
|
-
// available, mapped_target_addr will be an IPv4-mapped IPv6 address.
|
308
|
-
//
|
309
|
-
static absl::StatusOr<PosixSocketCreateResult>
|
310
|
-
CreateAndPrepareTcpClientSocket(
|
311
|
-
const PosixTcpOptions& options,
|
312
|
-
const EventEngine::ResolvedAddress& target_addr);
|
313
|
-
|
314
|
-
private:
|
315
|
-
int fd_;
|
316
|
-
};
|
317
|
-
|
318
|
-
struct PosixSocketWrapper::PosixSocketCreateResult {
|
319
|
-
PosixSocketWrapper sock;
|
320
|
-
EventEngine::ResolvedAddress mapped_target_addr;
|
321
|
-
};
|
160
|
+
// Return true if SO_REUSEPORT is supported
|
161
|
+
bool IsSocketReusePortSupported();
|
322
162
|
|
323
163
|
bool SetSocketDualStack(int fd);
|
324
164
|
|
@@ -46,7 +46,7 @@ void TimerManager::RunSomeTimers(
|
|
46
46
|
// shutdown)
|
47
47
|
bool TimerManager::WaitUntil(grpc_core::Timestamp next) {
|
48
48
|
grpc_core::MutexLock lock(&mu_);
|
49
|
-
if (
|
49
|
+
if (state_ != TimerManager::State::kRunning) return false;
|
50
50
|
// If kicked_ is true at this point, it means there was a kick from the timer
|
51
51
|
// system that the timer-manager threads here missed. We cannot trust 'next'
|
52
52
|
// here any longer (since there might be an earlier deadline). So if kicked_
|
@@ -99,7 +99,7 @@ void TimerManager::TimerInit(Timer* timer, grpc_core::Timestamp deadline,
|
|
99
99
|
experimental::EventEngine::Closure* closure) {
|
100
100
|
if (GRPC_TRACE_FLAG_ENABLED(timer)) {
|
101
101
|
grpc_core::MutexLock lock(&mu_);
|
102
|
-
if (
|
102
|
+
if (state_ != TimerManager::State::kRunning) {
|
103
103
|
LOG(ERROR) << "WARNING: TimerManager::" << this
|
104
104
|
<< ": scheduling Closure::" << closure
|
105
105
|
<< " after TimerManager has been shut down.";
|
@@ -112,18 +112,7 @@ bool TimerManager::TimerCancel(Timer* timer) {
|
|
112
112
|
return timer_list_->TimerCancel(timer);
|
113
113
|
}
|
114
114
|
|
115
|
-
void TimerManager::Shutdown() {
|
116
|
-
{
|
117
|
-
grpc_core::MutexLock lock(&mu_);
|
118
|
-
if (shutdown_) return;
|
119
|
-
GRPC_TRACE_VLOG(timer, 2) << "TimerManager::" << this << " shutting down";
|
120
|
-
shutdown_ = true;
|
121
|
-
// Wait on the main loop to exit.
|
122
|
-
cv_wait_.Signal();
|
123
|
-
}
|
124
|
-
main_loop_exit_signal_->WaitForNotification();
|
125
|
-
GRPC_TRACE_VLOG(timer, 2) << "TimerManager::" << this << " shutdown complete";
|
126
|
-
}
|
115
|
+
void TimerManager::Shutdown() { SuspendOrShutdown(true); }
|
127
116
|
|
128
117
|
TimerManager::~TimerManager() { Shutdown(); }
|
129
118
|
|
@@ -137,16 +126,38 @@ void TimerManager::Kick() {
|
|
137
126
|
|
138
127
|
void TimerManager::RestartPostFork() {
|
139
128
|
grpc_core::MutexLock lock(&mu_);
|
140
|
-
CHECK(
|
129
|
+
CHECK(state_ != TimerManager::State::kRunning);
|
141
130
|
GRPC_TRACE_VLOG(timer, 2)
|
142
|
-
<< "TimerManager::" << this << " restarting after
|
143
|
-
|
144
|
-
|
145
|
-
|
131
|
+
<< "TimerManager::" << this << " restarting after suspend";
|
132
|
+
if (state_ == TimerManager::State::kSuspended) {
|
133
|
+
state_ = TimerManager::State::kRunning;
|
134
|
+
main_loop_exit_signal_.emplace();
|
135
|
+
thread_pool_->Run([this]() { MainLoop(); });
|
136
|
+
}
|
146
137
|
}
|
147
138
|
|
148
|
-
void TimerManager::PrepareFork() {
|
149
|
-
|
150
|
-
void TimerManager::
|
139
|
+
void TimerManager::PrepareFork() { SuspendOrShutdown(false); }
|
140
|
+
|
141
|
+
void TimerManager::PostFork() { RestartPostFork(); }
|
142
|
+
|
143
|
+
void TimerManager::SuspendOrShutdown(bool shutdown) {
|
144
|
+
{
|
145
|
+
grpc_core::MutexLock lock(&mu_);
|
146
|
+
if (shutdown) {
|
147
|
+
// Pool will become shut down whether it was running or suspended
|
148
|
+
state_ = TimerManager::State::kShutdown;
|
149
|
+
} else if (state_ == TimerManager::State::kRunning) {
|
150
|
+
state_ = TimerManager::State::kSuspended;
|
151
|
+
}
|
152
|
+
GRPC_TRACE_VLOG(timer, 2) << "TimerManager::" << this
|
153
|
+
<< (shutdown ? " shutting down" : " suspending");
|
154
|
+
// Wait on the main loop to exit.
|
155
|
+
cv_wait_.Signal();
|
156
|
+
}
|
157
|
+
main_loop_exit_signal_->WaitForNotification();
|
158
|
+
GRPC_TRACE_VLOG(timer, 2)
|
159
|
+
<< "TimerManager::" << this
|
160
|
+
<< (shutdown ? " shutdown complete" : " suspend complete");
|
161
|
+
}
|
151
162
|
|
152
163
|
} // namespace grpc_event_engine::experimental
|
@@ -28,7 +28,6 @@
|
|
28
28
|
#include <vector>
|
29
29
|
|
30
30
|
#include "absl/base/thread_annotations.h"
|
31
|
-
#include "src/core/lib/event_engine/forkable.h"
|
32
31
|
#include "src/core/lib/event_engine/posix_engine/timer.h"
|
33
32
|
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
34
33
|
#include "src/core/util/notification.h"
|
@@ -41,11 +40,11 @@ namespace grpc_event_engine::experimental {
|
|
41
40
|
// all times, and thus effectively preventing the thundering herd problem.
|
42
41
|
// TODO(ctiller): consider unifying this thread pool and the one in
|
43
42
|
// thread_pool.{h,cc}.
|
44
|
-
class TimerManager final
|
43
|
+
class TimerManager final {
|
45
44
|
public:
|
46
45
|
explicit TimerManager(
|
47
46
|
std::shared_ptr<grpc_event_engine::experimental::ThreadPool> thread_pool);
|
48
|
-
~TimerManager()
|
47
|
+
~TimerManager();
|
49
48
|
|
50
49
|
grpc_core::Timestamp Now() { return host_.Now(); }
|
51
50
|
|
@@ -58,9 +57,8 @@ class TimerManager final : public grpc_event_engine::experimental::Forkable {
|
|
58
57
|
// Called on destruction, prefork, and manually when needed.
|
59
58
|
void Shutdown();
|
60
59
|
|
61
|
-
void PrepareFork()
|
62
|
-
void
|
63
|
-
void PostforkChild() override;
|
60
|
+
void PrepareFork();
|
61
|
+
void PostFork();
|
64
62
|
|
65
63
|
private:
|
66
64
|
class Host final : public TimerListHost {
|
@@ -75,12 +73,20 @@ class TimerManager final : public grpc_event_engine::experimental::Forkable {
|
|
75
73
|
TimerManager* const timer_manager_;
|
76
74
|
};
|
77
75
|
|
76
|
+
enum class State {
|
77
|
+
kRunning, // processing timers
|
78
|
+
kShutdown, // Shutdown
|
79
|
+
kSuspended // Temporarily suspended, e.g. on fork
|
80
|
+
};
|
81
|
+
|
78
82
|
void RestartPostFork();
|
79
83
|
void MainLoop();
|
80
84
|
void RunSomeTimers(std::vector<experimental::EventEngine::Closure*> timers);
|
81
85
|
bool WaitUntil(grpc_core::Timestamp next);
|
82
86
|
void Kick();
|
83
87
|
|
88
|
+
void SuspendOrShutdown(bool shutdown);
|
89
|
+
|
84
90
|
grpc_core::Mutex mu_;
|
85
91
|
// Condvar associated with the main thread waiting to wakeup and work.
|
86
92
|
// Threads wait on this until either a timeout is reached or the timer manager
|
@@ -89,13 +95,9 @@ class TimerManager final : public grpc_event_engine::experimental::Forkable {
|
|
89
95
|
// thread.
|
90
96
|
grpc_core::CondVar cv_wait_;
|
91
97
|
Host host_;
|
92
|
-
|
93
|
-
bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
|
94
|
-
// are we shutting down?
|
98
|
+
State state_ ABSL_GUARDED_BY(mu_) = State::kRunning;
|
95
99
|
bool kicked_ ABSL_GUARDED_BY(mu_) = false;
|
96
|
-
// number of timer wakeups
|
97
100
|
uint64_t wakeups_ ABSL_GUARDED_BY(mu_) = false;
|
98
|
-
// actual timer implementation
|
99
101
|
std::unique_ptr<TimerList> timer_list_;
|
100
102
|
std::shared_ptr<grpc_event_engine::experimental::ThreadPool> thread_pool_;
|
101
103
|
std::optional<grpc_core::Notification> main_loop_exit_signal_;
|