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
@@ -17,6 +17,7 @@
|
|
17
17
|
#include <utility>
|
18
18
|
|
19
19
|
#include "absl/strings/str_cat.h"
|
20
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
20
21
|
#include "src/core/lib/iomgr/port.h"
|
21
22
|
#include "src/core/util/crash.h" // IWYU pragma: keep
|
22
23
|
|
@@ -37,59 +38,58 @@ namespace grpc_event_engine::experimental {
|
|
37
38
|
#ifdef GRPC_LINUX_EVENTFD
|
38
39
|
|
39
40
|
absl::Status EventFdWakeupFd::Init() {
|
40
|
-
|
41
|
-
|
42
|
-
if (read_fd < 0) {
|
41
|
+
auto read_fd = posix_interface_->EventFd(0, EFD_NONBLOCK | EFD_CLOEXEC);
|
42
|
+
if (!read_fd.ok()) {
|
43
43
|
return absl::Status(absl::StatusCode::kInternal,
|
44
44
|
absl::StrCat("eventfd: ", grpc_core::StrError(errno)));
|
45
45
|
}
|
46
|
-
SetWakeupFds(read_fd,
|
46
|
+
SetWakeupFds(read_fd.value(), FileDescriptor::Invalid());
|
47
47
|
return absl::OkStatus();
|
48
48
|
}
|
49
49
|
|
50
50
|
absl::Status EventFdWakeupFd::ConsumeWakeup() {
|
51
|
-
|
52
|
-
int err;
|
51
|
+
PosixError err;
|
53
52
|
do {
|
54
|
-
err =
|
55
|
-
} while (err
|
56
|
-
if (err
|
57
|
-
return absl::Status(
|
58
|
-
|
59
|
-
absl::StrCat("eventfd_read: ", grpc_core::StrError(errno)));
|
53
|
+
err = posix_interface_->EventFdRead(ReadFd());
|
54
|
+
} while (err.IsPosixError(EINTR));
|
55
|
+
if (!err.ok() && !err.IsPosixError(EAGAIN)) {
|
56
|
+
return absl::Status(absl::StatusCode::kInternal,
|
57
|
+
absl::StrCat("eventfd_read: ", err.StrError()));
|
60
58
|
}
|
61
59
|
return absl::OkStatus();
|
62
60
|
}
|
63
61
|
|
64
62
|
absl::Status EventFdWakeupFd::Wakeup() {
|
65
|
-
|
63
|
+
PosixError err;
|
66
64
|
do {
|
67
|
-
err =
|
68
|
-
} while (err
|
69
|
-
if (err
|
70
|
-
return absl::Status(
|
71
|
-
|
72
|
-
absl::StrCat("eventfd_write: ", grpc_core::StrError(errno)));
|
65
|
+
err = posix_interface_->EventFdWrite(ReadFd());
|
66
|
+
} while (err.IsPosixError(EINTR));
|
67
|
+
if (!err.ok()) {
|
68
|
+
return absl::Status(absl::StatusCode::kInternal,
|
69
|
+
absl::StrCat("eventfd_write: ", err.StrError()));
|
73
70
|
}
|
74
71
|
return absl::OkStatus();
|
75
72
|
}
|
76
73
|
|
77
74
|
EventFdWakeupFd::~EventFdWakeupFd() {
|
78
|
-
if (ReadFd()
|
79
|
-
|
75
|
+
if (ReadFd().ready()) {
|
76
|
+
posix_interface_->Close(ReadFd());
|
80
77
|
}
|
81
78
|
}
|
82
79
|
|
83
80
|
bool EventFdWakeupFd::IsSupported() {
|
84
|
-
|
81
|
+
EventEnginePosixInterface posix_interface;
|
82
|
+
EventFdWakeupFd event_fd_wakeup_fd(&posix_interface);
|
85
83
|
return event_fd_wakeup_fd.Init().ok();
|
86
84
|
}
|
87
85
|
|
88
86
|
absl::StatusOr<std::unique_ptr<WakeupFd>>
|
89
|
-
EventFdWakeupFd::CreateEventFdWakeupFd(
|
87
|
+
EventFdWakeupFd::CreateEventFdWakeupFd(
|
88
|
+
EventEnginePosixInterface* posix_interface) {
|
90
89
|
static bool kIsEventFdWakeupFdSupported = EventFdWakeupFd::IsSupported();
|
91
90
|
if (kIsEventFdWakeupFdSupported) {
|
92
|
-
auto event_fd_wakeup_fd =
|
91
|
+
auto event_fd_wakeup_fd =
|
92
|
+
std::make_unique<EventFdWakeupFd>(posix_interface);
|
93
93
|
auto status = event_fd_wakeup_fd->Init();
|
94
94
|
if (status.ok()) {
|
95
95
|
return std::unique_ptr<WakeupFd>(std::move(event_fd_wakeup_fd));
|
@@ -114,7 +114,8 @@ absl::Status EventFdWakeupFd::Wakeup() { grpc_core::Crash("unimplemented"); }
|
|
114
114
|
bool EventFdWakeupFd::IsSupported() { return false; }
|
115
115
|
|
116
116
|
absl::StatusOr<std::unique_ptr<WakeupFd>>
|
117
|
-
EventFdWakeupFd::CreateEventFdWakeupFd(
|
117
|
+
EventFdWakeupFd::CreateEventFdWakeupFd(
|
118
|
+
EventEnginePosixInterface* posix_interface) {
|
118
119
|
return absl::NotFoundError("Eventfd wakeup fd is not supported");
|
119
120
|
}
|
120
121
|
|
@@ -20,21 +20,25 @@
|
|
20
20
|
|
21
21
|
#include "absl/status/status.h"
|
22
22
|
#include "absl/status/statusor.h"
|
23
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
23
24
|
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
24
25
|
|
25
26
|
namespace grpc_event_engine::experimental {
|
26
27
|
|
27
28
|
class EventFdWakeupFd : public WakeupFd {
|
28
29
|
public:
|
29
|
-
EventFdWakeupFd(
|
30
|
+
explicit EventFdWakeupFd(EventEnginePosixInterface* posix_interface)
|
31
|
+
: WakeupFd(), posix_interface_(posix_interface) {}
|
30
32
|
~EventFdWakeupFd() override;
|
31
33
|
absl::Status ConsumeWakeup() override;
|
32
34
|
absl::Status Wakeup() override;
|
33
|
-
static absl::StatusOr<std::unique_ptr<WakeupFd>> CreateEventFdWakeupFd(
|
35
|
+
static absl::StatusOr<std::unique_ptr<WakeupFd>> CreateEventFdWakeupFd(
|
36
|
+
EventEnginePosixInterface* posix_interface);
|
34
37
|
static bool IsSupported();
|
35
38
|
|
36
39
|
private:
|
37
40
|
absl::Status Init();
|
41
|
+
EventEnginePosixInterface* posix_interface_;
|
38
42
|
};
|
39
43
|
|
40
44
|
} // namespace grpc_event_engine::experimental
|
@@ -18,6 +18,7 @@
|
|
18
18
|
#include <utility>
|
19
19
|
|
20
20
|
#include "absl/strings/str_cat.h"
|
21
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
21
22
|
#include "src/core/lib/iomgr/port.h"
|
22
23
|
#include "src/core/util/crash.h" // IWYU pragma: keep
|
23
24
|
|
@@ -36,94 +37,66 @@ namespace grpc_event_engine::experimental {
|
|
36
37
|
|
37
38
|
#ifdef GRPC_POSIX_WAKEUP_FD
|
38
39
|
|
39
|
-
namespace {
|
40
|
-
|
41
|
-
absl::Status SetSocketNonBlocking(int fd) {
|
42
|
-
int oldflags = fcntl(fd, F_GETFL, 0);
|
43
|
-
if (oldflags < 0) {
|
44
|
-
return absl::Status(absl::StatusCode::kInternal,
|
45
|
-
absl::StrCat("fcntl: ", grpc_core::StrError(errno)));
|
46
|
-
}
|
47
|
-
|
48
|
-
oldflags |= O_NONBLOCK;
|
49
|
-
|
50
|
-
if (fcntl(fd, F_SETFL, oldflags) != 0) {
|
51
|
-
return absl::Status(absl::StatusCode::kInternal,
|
52
|
-
absl::StrCat("fcntl: ", grpc_core::StrError(errno)));
|
53
|
-
}
|
54
|
-
|
55
|
-
return absl::OkStatus();
|
56
|
-
}
|
57
|
-
} // namespace
|
58
|
-
|
59
40
|
absl::Status PipeWakeupFd::Init() {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
return absl::Status(absl::StatusCode::kInternal,
|
64
|
-
absl::StrCat("pipe: ", grpc_core::StrError(errno)));
|
65
|
-
}
|
66
|
-
auto status = SetSocketNonBlocking(pipefd[0]);
|
67
|
-
if (!status.ok()) {
|
68
|
-
close(pipefd[0]);
|
69
|
-
close(pipefd[1]);
|
70
|
-
return status;
|
71
|
-
}
|
72
|
-
status = SetSocketNonBlocking(pipefd[1]);
|
73
|
-
if (!status.ok()) {
|
74
|
-
close(pipefd[0]);
|
75
|
-
close(pipefd[1]);
|
76
|
-
return status;
|
77
|
-
}
|
78
|
-
SetWakeupFds(pipefd[0], pipefd[1]);
|
41
|
+
auto pipe_ends = posix_interface_->Pipe();
|
42
|
+
if (!pipe_ends.ok()) return std::move(pipe_ends).status();
|
43
|
+
SetWakeupFds(pipe_ends->first, pipe_ends->second);
|
79
44
|
return absl::OkStatus();
|
80
45
|
}
|
81
46
|
|
82
47
|
absl::Status PipeWakeupFd::ConsumeWakeup() {
|
83
|
-
char buf
|
84
|
-
ssize_t r;
|
85
|
-
|
48
|
+
std::array<char, 128> buf;
|
86
49
|
for (;;) {
|
87
|
-
r =
|
88
|
-
if (r
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
50
|
+
auto r = posix_interface_->Read(ReadFd(), absl::Span<char>(buf));
|
51
|
+
if (r.ok()) {
|
52
|
+
if (*r > 0) continue;
|
53
|
+
if (*r == 0) return absl::OkStatus();
|
54
|
+
} else if (r.IsWrongGenerationError()) {
|
55
|
+
return absl::Status(absl::StatusCode::kInternal,
|
56
|
+
absl::StrCat("read: wrong fd generation"));
|
57
|
+
} else {
|
58
|
+
switch (*r.errno_value()) {
|
59
|
+
case EAGAIN:
|
60
|
+
return absl::OkStatus();
|
61
|
+
case EINTR:
|
62
|
+
continue;
|
63
|
+
default:
|
64
|
+
return absl::Status(
|
65
|
+
absl::StatusCode::kInternal,
|
66
|
+
absl::StrCat("read: ", grpc_core::StrError(errno)));
|
67
|
+
}
|
98
68
|
}
|
99
69
|
}
|
100
70
|
}
|
101
71
|
|
102
72
|
absl::Status PipeWakeupFd::Wakeup() {
|
103
73
|
char c = 0;
|
104
|
-
while (
|
74
|
+
while (posix_interface_->Write(WriteFd(), absl::Span<char>(&c, 1))
|
75
|
+
.IsPosixError(EINTR)) {
|
105
76
|
}
|
106
77
|
return absl::OkStatus();
|
107
78
|
}
|
108
79
|
|
109
80
|
PipeWakeupFd::~PipeWakeupFd() {
|
110
|
-
if (ReadFd()
|
111
|
-
|
81
|
+
if (ReadFd().ready()) {
|
82
|
+
posix_interface_->Close(ReadFd());
|
112
83
|
}
|
113
|
-
if (WriteFd()
|
114
|
-
|
84
|
+
if (WriteFd().ready()) {
|
85
|
+
posix_interface_->Close(WriteFd());
|
115
86
|
}
|
116
87
|
}
|
117
88
|
|
118
89
|
bool PipeWakeupFd::IsSupported() {
|
119
|
-
|
90
|
+
EventEnginePosixInterface posix_interface;
|
91
|
+
PipeWakeupFd pipe_wakeup_fd(&posix_interface);
|
120
92
|
return pipe_wakeup_fd.Init().ok();
|
121
93
|
}
|
122
94
|
|
123
|
-
absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd(
|
95
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd(
|
96
|
+
EventEnginePosixInterface* posix_interface) {
|
124
97
|
static bool kIsPipeWakeupFdSupported = PipeWakeupFd::IsSupported();
|
125
98
|
if (kIsPipeWakeupFdSupported) {
|
126
|
-
auto pipe_wakeup_fd = std::make_unique<PipeWakeupFd>();
|
99
|
+
auto pipe_wakeup_fd = std::make_unique<PipeWakeupFd>(posix_interface);
|
127
100
|
auto status = pipe_wakeup_fd->Init();
|
128
101
|
if (status.ok()) {
|
129
102
|
return std::unique_ptr<WakeupFd>(std::move(pipe_wakeup_fd));
|
@@ -145,7 +118,8 @@ absl::Status PipeWakeupFd::Wakeup() { grpc_core::Crash("unimplemented"); }
|
|
145
118
|
|
146
119
|
bool PipeWakeupFd::IsSupported() { return false; }
|
147
120
|
|
148
|
-
absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd(
|
121
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd(
|
122
|
+
EventEnginePosixInterface* posix_interface) {
|
149
123
|
return absl::NotFoundError("Pipe wakeup fd is not supported");
|
150
124
|
}
|
151
125
|
|
@@ -20,21 +20,25 @@
|
|
20
20
|
|
21
21
|
#include "absl/status/status.h"
|
22
22
|
#include "absl/status/statusor.h"
|
23
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
23
24
|
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
24
25
|
|
25
26
|
namespace grpc_event_engine::experimental {
|
26
27
|
|
27
28
|
class PipeWakeupFd : public WakeupFd {
|
28
29
|
public:
|
29
|
-
PipeWakeupFd(
|
30
|
+
explicit PipeWakeupFd(EventEnginePosixInterface* posix_interface)
|
31
|
+
: WakeupFd(), posix_interface_(posix_interface) {}
|
30
32
|
~PipeWakeupFd() override;
|
31
33
|
absl::Status ConsumeWakeup() override;
|
32
34
|
absl::Status Wakeup() override;
|
33
|
-
static absl::StatusOr<std::unique_ptr<WakeupFd>> CreatePipeWakeupFd(
|
35
|
+
static absl::StatusOr<std::unique_ptr<WakeupFd>> CreatePipeWakeupFd(
|
36
|
+
EventEnginePosixInterface* posix_interface);
|
34
37
|
static bool IsSupported();
|
35
38
|
|
36
39
|
private:
|
37
40
|
absl::Status Init();
|
41
|
+
EventEnginePosixInterface* posix_interface_;
|
38
42
|
};
|
39
43
|
|
40
44
|
} // namespace grpc_event_engine::experimental
|
@@ -45,6 +45,7 @@
|
|
45
45
|
#include <grpc/support/port_platform.h>
|
46
46
|
|
47
47
|
#include "absl/status/status.h"
|
48
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
48
49
|
|
49
50
|
namespace grpc_event_engine::experimental {
|
50
51
|
|
@@ -54,19 +55,19 @@ class WakeupFd {
|
|
54
55
|
virtual absl::Status Wakeup() = 0;
|
55
56
|
virtual ~WakeupFd() = default;
|
56
57
|
|
57
|
-
|
58
|
-
|
58
|
+
FileDescriptor ReadFd() { return read_fd_; }
|
59
|
+
FileDescriptor WriteFd() { return write_fd_; }
|
59
60
|
|
60
61
|
protected:
|
61
|
-
WakeupFd()
|
62
|
-
void SetWakeupFds(
|
62
|
+
WakeupFd() {}
|
63
|
+
void SetWakeupFds(FileDescriptor read_fd, FileDescriptor write_fd) {
|
63
64
|
read_fd_ = read_fd;
|
64
65
|
write_fd_ = write_fd;
|
65
66
|
}
|
66
67
|
|
67
68
|
private:
|
68
|
-
|
69
|
-
|
69
|
+
FileDescriptor read_fd_;
|
70
|
+
FileDescriptor write_fd_;
|
70
71
|
};
|
71
72
|
|
72
73
|
} // namespace grpc_event_engine::experimental
|
@@ -17,6 +17,7 @@
|
|
17
17
|
|
18
18
|
#include "absl/status/status.h"
|
19
19
|
#include "absl/status/statusor.h"
|
20
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
20
21
|
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h"
|
21
22
|
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h"
|
22
23
|
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
@@ -26,13 +27,16 @@ namespace grpc_event_engine::experimental {
|
|
26
27
|
|
27
28
|
#ifdef GRPC_POSIX_WAKEUP_FD
|
28
29
|
|
29
|
-
absl::StatusOr<std::unique_ptr<WakeupFd>> NotSupported(
|
30
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>> NotSupported(
|
31
|
+
EventEnginePosixInterface* /* unused */) {
|
30
32
|
return absl::NotFoundError("Wakeup-fd is not supported on this system");
|
31
33
|
}
|
32
34
|
|
33
35
|
namespace {
|
34
|
-
absl::StatusOr<std::unique_ptr<WakeupFd>> (*g_wakeup_fd_fn)(
|
35
|
-
|
36
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>> (*g_wakeup_fd_fn)(
|
37
|
+
EventEnginePosixInterface* posix_interface) =
|
38
|
+
[]() -> absl::StatusOr<std::unique_ptr<WakeupFd>> (*)(
|
39
|
+
EventEnginePosixInterface* posix_interface) {
|
36
40
|
#ifndef GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
|
37
41
|
if (EventFdWakeupFd::IsSupported()) {
|
38
42
|
return &EventFdWakeupFd::CreateEventFdWakeupFd;
|
@@ -47,15 +51,17 @@ absl::StatusOr<std::unique_ptr<WakeupFd>> (*g_wakeup_fd_fn)() =
|
|
47
51
|
|
48
52
|
bool SupportsWakeupFd() { return g_wakeup_fd_fn != NotSupported; }
|
49
53
|
|
50
|
-
absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
|
51
|
-
|
54
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
|
55
|
+
EventEnginePosixInterface* posix_interface) {
|
56
|
+
return g_wakeup_fd_fn(posix_interface);
|
52
57
|
}
|
53
58
|
|
54
59
|
#else // GRPC_POSIX_WAKEUP_FD
|
55
60
|
|
56
61
|
bool SupportsWakeupFd() { return false; }
|
57
62
|
|
58
|
-
absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
|
63
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
|
64
|
+
EventEnginePosixInterface* /* unused */) {
|
59
65
|
return absl::NotFoundError("Wakeup-fd is not supported on this system");
|
60
66
|
}
|
61
67
|
|
@@ -19,6 +19,7 @@
|
|
19
19
|
#include <memory>
|
20
20
|
|
21
21
|
#include "absl/status/statusor.h"
|
22
|
+
#include "src/core/lib/event_engine/posix_engine/posix_interface.h"
|
22
23
|
|
23
24
|
namespace grpc_event_engine::experimental {
|
24
25
|
|
@@ -28,7 +29,8 @@ class WakeupFd;
|
|
28
29
|
bool SupportsWakeupFd();
|
29
30
|
|
30
31
|
// Create and return an initialized WakeupFd instance if supported.
|
31
|
-
absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
|
32
|
+
absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
|
33
|
+
EventEnginePosixInterface* posix_interface);
|
32
34
|
|
33
35
|
} // namespace grpc_event_engine::experimental
|
34
36
|
|
@@ -40,4 +40,13 @@ bool UsePollsetAlternative() {
|
|
40
40
|
grpc_core::IsPollsetAlternativeEnabled();
|
41
41
|
}
|
42
42
|
|
43
|
+
// Returns true if GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER is defined.
|
44
|
+
bool EventEngineExperimentDisabledForPython() {
|
45
|
+
#ifdef GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER
|
46
|
+
return true;
|
47
|
+
#else
|
48
|
+
return false;
|
49
|
+
#endif
|
50
|
+
}
|
51
|
+
|
43
52
|
} // namespace grpc_event_engine::experimental
|
@@ -35,6 +35,9 @@ bool UseEventEngineListener();
|
|
35
35
|
// may disable the poller in some builds.
|
36
36
|
bool UsePollsetAlternative();
|
37
37
|
|
38
|
+
// Returns true if GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER is defined.
|
39
|
+
bool EventEngineExperimentDisabledForPython();
|
40
|
+
|
38
41
|
} // namespace grpc_event_engine::experimental
|
39
42
|
|
40
43
|
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_SHIM_H
|
@@ -20,21 +20,25 @@
|
|
20
20
|
#include <memory>
|
21
21
|
|
22
22
|
#include "absl/functional/any_invocable.h"
|
23
|
-
#include "src/core/lib/event_engine/forkable.h"
|
24
23
|
|
25
24
|
namespace grpc_event_engine::experimental {
|
26
25
|
|
27
26
|
// Interface for all EventEngine ThreadPool implementations
|
28
|
-
class ThreadPool
|
27
|
+
class ThreadPool {
|
29
28
|
public:
|
30
29
|
// Asserts Quiesce was called.
|
31
|
-
~ThreadPool()
|
30
|
+
virtual ~ThreadPool() = default;
|
32
31
|
// Shut down the pool, and wait for all threads to exit.
|
33
32
|
// This method is safe to call from within a ThreadPool thread.
|
34
33
|
virtual void Quiesce() = 0;
|
35
34
|
// Run must not be called after Quiesce completes
|
36
35
|
virtual void Run(absl::AnyInvocable<void()> callback) = 0;
|
37
36
|
virtual void Run(EventEngine::Closure* closure) = 0;
|
37
|
+
|
38
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
39
|
+
virtual void PrepareFork() = 0;
|
40
|
+
virtual void PostFork() = 0;
|
41
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
38
42
|
};
|
39
43
|
|
40
44
|
// Creates a default thread pool.
|
@@ -16,30 +16,13 @@
|
|
16
16
|
|
17
17
|
#include <memory>
|
18
18
|
|
19
|
-
#include "src/core/lib/event_engine/forkable.h"
|
20
19
|
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
21
20
|
#include "src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h"
|
22
|
-
#include "src/core/util/no_destruct.h"
|
23
21
|
|
24
22
|
namespace grpc_event_engine::experimental {
|
25
23
|
|
26
|
-
namespace {
|
27
|
-
grpc_core::NoDestruct<ObjectGroupForkHandler> g_thread_pool_fork_manager;
|
28
|
-
|
29
|
-
class ThreadPoolForkCallbackMethods {
|
30
|
-
public:
|
31
|
-
static void Prefork() { g_thread_pool_fork_manager->Prefork(); }
|
32
|
-
static void PostforkParent() { g_thread_pool_fork_manager->PostforkParent(); }
|
33
|
-
static void PostforkChild() { g_thread_pool_fork_manager->PostforkChild(); }
|
34
|
-
};
|
35
|
-
} // namespace
|
36
|
-
|
37
24
|
std::shared_ptr<ThreadPool> MakeThreadPool(size_t reserve_threads) {
|
38
25
|
auto thread_pool = std::make_shared<WorkStealingThreadPool>(reserve_threads);
|
39
|
-
g_thread_pool_fork_manager->RegisterForkable(
|
40
|
-
thread_pool, ThreadPoolForkCallbackMethods::Prefork,
|
41
|
-
ThreadPoolForkCallbackMethods::PostforkParent,
|
42
|
-
ThreadPoolForkCallbackMethods::PostforkChild);
|
43
26
|
return thread_pool;
|
44
27
|
}
|
45
28
|
|
@@ -213,11 +213,13 @@ EventEngine::Closure* WorkStealingThreadPool::TheftRegistry::StealOne() {
|
|
213
213
|
return nullptr;
|
214
214
|
}
|
215
215
|
|
216
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
217
|
+
|
216
218
|
void WorkStealingThreadPool::PrepareFork() { pool_->PrepareFork(); }
|
217
219
|
|
218
|
-
void WorkStealingThreadPool::
|
220
|
+
void WorkStealingThreadPool::PostFork() { pool_->Postfork(); }
|
219
221
|
|
220
|
-
|
222
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
221
223
|
|
222
224
|
// -------- WorkStealingThreadPool::WorkStealingThreadPoolImpl --------
|
223
225
|
|
@@ -53,11 +53,12 @@ class WorkStealingThreadPool final : public ThreadPool {
|
|
53
53
|
void Run(absl::AnyInvocable<void()> callback) override;
|
54
54
|
void Run(EventEngine::Closure* closure) override;
|
55
55
|
|
56
|
+
#if GRPC_ENABLE_FORK_SUPPORT
|
56
57
|
// Forkable
|
57
58
|
// These methods are exposed on the public object to allow for testing.
|
58
59
|
void PrepareFork() override;
|
59
|
-
void
|
60
|
-
|
60
|
+
void PostFork() override;
|
61
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT
|
61
62
|
|
62
63
|
private:
|
63
64
|
// A basic communication mechanism to signal waiting threads that work is
|
@@ -267,6 +267,8 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
|
|
267
267
|
}
|
268
268
|
}
|
269
269
|
|
270
|
+
bool IsCurrent() const override { return true; }
|
271
|
+
|
270
272
|
private:
|
271
273
|
enum WriteState {
|
272
274
|
WRITE_IDLE,
|
@@ -809,6 +811,8 @@ class GrpcPolledFdWrapper : public GrpcPolledFd {
|
|
809
811
|
|
810
812
|
const char* GetName() const override { return polled_fd_->GetName(); }
|
811
813
|
|
814
|
+
bool IsCurrent() const override { return true; }
|
815
|
+
|
812
816
|
private:
|
813
817
|
GrpcPolledFdWindows* polled_fd_;
|
814
818
|
};
|
@@ -50,6 +50,10 @@ class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
|
|
50
50
|
ares_socket_t as) override;
|
51
51
|
void ConfigureAresChannelLocked(ares_channel channel) override;
|
52
52
|
|
53
|
+
std::unique_ptr<GrpcPolledFdFactory> NewEmptyInstance() const override {
|
54
|
+
return std::make_unique<GrpcPolledFdFactoryWindows>(iocp_);
|
55
|
+
}
|
56
|
+
|
53
57
|
private:
|
54
58
|
friend class CustomSockFuncs;
|
55
59
|
|
@@ -37,12 +37,8 @@ class WindowsEndpoint : public EventEngine::Endpoint {
|
|
37
37
|
SliceBuffer* data, WriteArgs args) override;
|
38
38
|
const EventEngine::ResolvedAddress& GetPeerAddress() const override;
|
39
39
|
const EventEngine::ResolvedAddress& GetLocalAddress() const override;
|
40
|
-
std::
|
41
|
-
|
42
|
-
return std::nullopt;
|
43
|
-
}
|
44
|
-
std::optional<size_t> GetMetricKey(absl::string_view) override {
|
45
|
-
return std::nullopt;
|
40
|
+
std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const override {
|
41
|
+
return nullptr;
|
46
42
|
}
|
47
43
|
|
48
44
|
private:
|
@@ -44,7 +44,6 @@
|
|
44
44
|
#include "src/core/lib/event_engine/windows/windows_listener.h"
|
45
45
|
#include "src/core/lib/iomgr/error.h"
|
46
46
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
47
|
-
#include "src/core/lib/surface/init_internally.h"
|
48
47
|
#include "src/core/util/crash.h"
|
49
48
|
#include "src/core/util/dump_args.h"
|
50
49
|
#include "src/core/util/sync.h"
|
@@ -38,15 +38,13 @@
|
|
38
38
|
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
39
39
|
#include "src/core/lib/event_engine/windows/iocp.h"
|
40
40
|
#include "src/core/lib/event_engine/windows/windows_endpoint.h"
|
41
|
-
#include "src/core/lib/surface/init_internally.h"
|
42
41
|
#include "src/core/util/sync.h"
|
43
42
|
#include "src/core/util/time.h"
|
44
43
|
|
45
44
|
namespace grpc_event_engine::experimental {
|
46
45
|
|
47
46
|
class WindowsEventEngine
|
48
|
-
: public
|
49
|
-
public ExtendedType<EventEngine, EventEngineWindowsSocketSupport> {
|
47
|
+
: public ExtendedType<EventEngine, EventEngineWindowsSocketSupport> {
|
50
48
|
public:
|
51
49
|
class WindowsDNSResolver : public EventEngine::DNSResolver {
|
52
50
|
public:
|
@@ -80,15 +80,27 @@ void UnlinkIfUnixDomainSocket(
|
|
80
80
|
if (un->sun_path[0] == '\0' && un->sun_path[1] != '\0') {
|
81
81
|
return;
|
82
82
|
}
|
83
|
+
// Convert UTF-8 path to Unicode.
|
84
|
+
std::wstring wide_path;
|
85
|
+
int needed = MultiByteToWideChar(CP_UTF8, 0, un->sun_path, -1, NULL, 0);
|
86
|
+
if (needed <= 0) {
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
wide_path.resize(needed, L'\0');
|
90
|
+
if (MultiByteToWideChar(CP_UTF8, 0, un->sun_path, -1, wide_path.data(),
|
91
|
+
needed) == 0) {
|
92
|
+
// Failed to convert UTF-8 path to wide char.
|
93
|
+
return;
|
94
|
+
}
|
83
95
|
// For windows we need to remove the file instead of unlink.
|
84
|
-
DWORD attr = ::
|
96
|
+
DWORD attr = ::GetFileAttributesW(wide_path.data());
|
85
97
|
if (attr == INVALID_FILE_ATTRIBUTES) {
|
86
98
|
return;
|
87
99
|
}
|
88
100
|
if (attr & FILE_ATTRIBUTE_DIRECTORY || attr & FILE_ATTRIBUTE_READONLY) {
|
89
101
|
return;
|
90
102
|
}
|
91
|
-
::
|
103
|
+
::DeleteFileW(wide_path.data());
|
92
104
|
#else
|
93
105
|
(void)resolved_addr;
|
94
106
|
#endif
|