grpc 1.74.1 → 1.75.0.pre1
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 +83 -41
- data/include/grpc/credentials.h +7 -1
- data/src/core/call/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channelz.cc +10 -17
- data/src/core/channelz/channelz.h +58 -19
- data/src/core/channelz/channelz_registry.cc +0 -162
- data/src/core/channelz/channelz_registry.h +14 -7
- data/src/core/channelz/property_list.cc +19 -23
- data/src/core/channelz/property_list.h +3 -1
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -0
- data/src/core/client_channel/client_channel_filter.cc +5 -4
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
- data/src/core/client_channel/subchannel.cc +14 -6
- data/src/core/client_channel/subchannel.h +2 -0
- data/src/core/config/core_configuration.cc +3 -1
- data/src/core/config/core_configuration.h +12 -0
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
- data/src/core/filter/auth/auth_filters.h +2 -2
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +28 -13
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- data/src/core/lib/channel/promise_based_filter.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +6 -5
- data/src/core/lib/event_engine/ares_resolver.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
- data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
- data/src/core/lib/experiments/experiments.cc +120 -6
- data/src/core/lib/experiments/experiments.h +46 -3
- data/src/core/lib/iomgr/combiner.cc +1 -1
- data/src/core/lib/iomgr/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +3 -3
- data/src/core/lib/promise/activity.h +2 -2
- data/src/core/lib/promise/mpsc.cc +8 -8
- data/src/core/lib/promise/party.cc +7 -7
- data/src/core/lib/promise/party.h +4 -4
- data/src/core/lib/promise/poll.h +10 -0
- data/src/core/lib/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- data/src/core/lib/surface/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.h +3 -3
- data/src/core/load_balancing/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
- data/src/core/server/server.cc +1 -1
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +151 -151
- data/src/core/telemetry/stats_data.h +87 -87
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- data/src/core/tsi/ssl_transport_security.cc +202 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -0
- data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +245 -188
- data/src/core/util/single_set_ptr.h +5 -2
- data/src/core/util/useful.h +91 -0
- data/src/core/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +121 -49
- data/src/core/util/ring_buffer.h +0 -122
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -0,0 +1,107 @@
|
|
1
|
+
// Copyright 2025 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_CF_ENGINE_CFSOCKET_LISTENER_H
|
15
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_CF_ENGINE_CFSOCKET_LISTENER_H
|
16
|
+
#include <grpc/support/port_platform.h>
|
17
|
+
|
18
|
+
#ifdef GPR_APPLE
|
19
|
+
#include <AvailabilityMacros.h>
|
20
|
+
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
|
21
|
+
|
22
|
+
#include <CoreFoundation/CoreFoundation.h>
|
23
|
+
#include <grpc/event_engine/event_engine.h>
|
24
|
+
|
25
|
+
#include "src/core/lib/event_engine/cf_engine/cf_engine.h"
|
26
|
+
#include "src/core/lib/event_engine/cf_engine/cftype_unique_ref.h"
|
27
|
+
#include "src/core/util/ref_counted.h"
|
28
|
+
#include "src/core/util/ref_counted_ptr.h"
|
29
|
+
#include "src/core/util/sync.h"
|
30
|
+
|
31
|
+
namespace grpc_event_engine::experimental {
|
32
|
+
|
33
|
+
class CFSocketListenerImpl
|
34
|
+
: public grpc_core::RefCounted<CFSocketListenerImpl> {
|
35
|
+
public:
|
36
|
+
CFSocketListenerImpl(
|
37
|
+
std::shared_ptr<CFEventEngine> engine,
|
38
|
+
EventEngine::Listener::AcceptCallback on_accept,
|
39
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
40
|
+
const EndpointConfig& config,
|
41
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory);
|
42
|
+
~CFSocketListenerImpl();
|
43
|
+
|
44
|
+
absl::StatusOr<int> Bind(const EventEngine::ResolvedAddress& addr);
|
45
|
+
absl::Status Start();
|
46
|
+
|
47
|
+
void Shutdown();
|
48
|
+
|
49
|
+
private:
|
50
|
+
static const void* Retain(const void* info) {
|
51
|
+
auto that = static_cast<const CFSocketListenerImpl*>(info);
|
52
|
+
return that->Ref().release();
|
53
|
+
}
|
54
|
+
|
55
|
+
static void Release(const void* info) {
|
56
|
+
auto that = static_cast<const CFSocketListenerImpl*>(info);
|
57
|
+
that->Unref();
|
58
|
+
}
|
59
|
+
|
60
|
+
static void handleConnect(CFSocketRef s, CFSocketCallBackType type,
|
61
|
+
CFDataRef address, const void* data, void* info);
|
62
|
+
|
63
|
+
private:
|
64
|
+
std::shared_ptr<CFEventEngine> engine_;
|
65
|
+
dispatch_queue_t queue_ = dispatch_queue_create("cfsocket_listener", nullptr);
|
66
|
+
|
67
|
+
grpc_core::Mutex mu_;
|
68
|
+
bool started_ ABSL_GUARDED_BY(mu_) = false;
|
69
|
+
bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
|
70
|
+
std::vector<std::tuple<CFTypeUniqueRef<CFSocketRef>>> ipv6cfsocks_
|
71
|
+
ABSL_GUARDED_BY(mu_);
|
72
|
+
CFRunLoopRef runloop_ ABSL_GUARDED_BY(mu_);
|
73
|
+
|
74
|
+
EventEngine::Listener::AcceptCallback on_accept_;
|
75
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown_;
|
76
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory_;
|
77
|
+
};
|
78
|
+
|
79
|
+
class CFSocketListener : public EventEngine::Listener {
|
80
|
+
public:
|
81
|
+
CFSocketListener(
|
82
|
+
std::shared_ptr<CFEventEngine> engine, Listener::AcceptCallback on_accept,
|
83
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
84
|
+
const EndpointConfig& config,
|
85
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory)
|
86
|
+
: impl_(grpc_core::MakeRefCounted<CFSocketListenerImpl>(
|
87
|
+
std::move(engine), std::move(on_accept), std::move(on_shutdown),
|
88
|
+
config, std::move(memory_allocator_factory))) {}
|
89
|
+
|
90
|
+
~CFSocketListener() override { impl_->Shutdown(); }
|
91
|
+
|
92
|
+
absl::StatusOr<int> Bind(const EventEngine::ResolvedAddress& addr) override {
|
93
|
+
return impl_->Bind(addr);
|
94
|
+
};
|
95
|
+
|
96
|
+
absl::Status Start() override { return impl_->Start(); };
|
97
|
+
|
98
|
+
private:
|
99
|
+
grpc_core::RefCountedPtr<CFSocketListenerImpl> impl_;
|
100
|
+
};
|
101
|
+
|
102
|
+
} // namespace grpc_event_engine::experimental
|
103
|
+
|
104
|
+
#endif // AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
|
105
|
+
#endif // GPR_APPLE
|
106
|
+
|
107
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_CF_ENGINE_CFSOCKET_LISTENER_H
|
@@ -72,6 +72,26 @@ bool CFStreamEndpointImpl::CancelConnect(absl::Status status) {
|
|
72
72
|
return open_event_.SetShutdown(std::move(status));
|
73
73
|
}
|
74
74
|
|
75
|
+
void CFStreamEndpointImpl::AcceptSocket(
|
76
|
+
absl::AnyInvocable<void(absl::Status)> on_connect,
|
77
|
+
CFSocketNativeHandle sock, const EventEngine::ResolvedAddress& addr) {
|
78
|
+
peer_address_ = addr;
|
79
|
+
auto host_port = ResolvedAddressToNormalizedString(peer_address_);
|
80
|
+
if (!host_port.ok()) {
|
81
|
+
on_connect(std::move(host_port).status());
|
82
|
+
return;
|
83
|
+
}
|
84
|
+
|
85
|
+
peer_address_string_ = host_port.value();
|
86
|
+
GRPC_TRACE_LOG(event_engine_endpoint, INFO)
|
87
|
+
<< "CFStreamEndpointImpl::AcceptSocket, host_port: "
|
88
|
+
<< peer_address_string_;
|
89
|
+
|
90
|
+
CFStreamCreatePairWithSocket(nullptr, sock, &cf_read_stream_,
|
91
|
+
&cf_write_stream_);
|
92
|
+
SetupStreams(std::move(on_connect));
|
93
|
+
}
|
94
|
+
|
75
95
|
void CFStreamEndpointImpl::Connect(
|
76
96
|
absl::AnyInvocable<void(absl::Status)> on_connect,
|
77
97
|
EventEngine::ResolvedAddress addr) {
|
@@ -105,6 +125,11 @@ void CFStreamEndpointImpl::Connect(
|
|
105
125
|
CFStreamCreatePairWithSocketToHost(NULL, host, port, &cf_read_stream_,
|
106
126
|
&cf_write_stream_);
|
107
127
|
|
128
|
+
SetupStreams(std::move(on_connect));
|
129
|
+
}
|
130
|
+
|
131
|
+
void CFStreamEndpointImpl::SetupStreams(
|
132
|
+
absl::AnyInvocable<void(absl::Status)> on_connect) {
|
108
133
|
CFStreamClientContext cf_context = {0, this, Retain, Release, nullptr};
|
109
134
|
CFReadStreamSetClient(
|
110
135
|
cf_read_stream_,
|
@@ -223,9 +248,9 @@ CFStreamEndpointImpl::CFStreamEndpointImpl(
|
|
223
248
|
std::shared_ptr<CFEventEngine> engine, MemoryAllocator memory_allocator)
|
224
249
|
: engine_(std::move(engine)),
|
225
250
|
memory_allocator_(std::move(memory_allocator)),
|
226
|
-
open_event_(engine_
|
227
|
-
read_event_(engine_
|
228
|
-
write_event_(engine_
|
251
|
+
open_event_(engine_->thread_pool()),
|
252
|
+
read_event_(engine_->thread_pool()),
|
253
|
+
write_event_(engine_->thread_pool()) {
|
229
254
|
open_event_.InitEvent();
|
230
255
|
read_event_.InitEvent();
|
231
256
|
write_event_.InitEvent();
|
@@ -235,6 +260,9 @@ CFStreamEndpointImpl::~CFStreamEndpointImpl() {
|
|
235
260
|
open_event_.DestroyEvent();
|
236
261
|
read_event_.DestroyEvent();
|
237
262
|
write_event_.DestroyEvent();
|
263
|
+
|
264
|
+
GRPC_TRACE_LOG(event_engine_endpoint, INFO)
|
265
|
+
<< "CFStreamEndpointImpl::~CFStreamEndpointImpl: this: " << this;
|
238
266
|
}
|
239
267
|
|
240
268
|
void CFStreamEndpointImpl::Shutdown() {
|
@@ -60,7 +60,13 @@ class CFStreamEndpointImpl
|
|
60
60
|
EventEngine::ResolvedAddress addr);
|
61
61
|
bool CancelConnect(absl::Status status);
|
62
62
|
|
63
|
+
void AcceptSocket(absl::AnyInvocable<void(absl::Status)> on_connect,
|
64
|
+
CFSocketNativeHandle sock,
|
65
|
+
const EventEngine::ResolvedAddress& addr);
|
66
|
+
|
63
67
|
private:
|
68
|
+
void SetupStreams(absl::AnyInvocable<void(absl::Status)> on_connect);
|
69
|
+
|
64
70
|
void DoWrite(absl::AnyInvocable<void(absl::Status)> on_writable,
|
65
71
|
SliceBuffer* data);
|
66
72
|
void DoRead(absl::AnyInvocable<void(absl::Status)> on_read,
|
@@ -137,6 +143,12 @@ class CFStreamEndpoint : public EventEngine::Endpoint {
|
|
137
143
|
return impl_->CancelConnect(std::move(status));
|
138
144
|
}
|
139
145
|
|
146
|
+
void AcceptSocket(absl::AnyInvocable<void(absl::Status)> on_connect,
|
147
|
+
CFSocketNativeHandle sock,
|
148
|
+
const EventEngine::ResolvedAddress& addr) {
|
149
|
+
return impl_->AcceptSocket(std::move(on_connect), sock, addr);
|
150
|
+
}
|
151
|
+
|
140
152
|
private:
|
141
153
|
grpc_core::RefCountedPtr<CFStreamEndpointImpl> impl_;
|
142
154
|
};
|
@@ -60,9 +60,9 @@ class Epoll1EventHandle : public EventHandle {
|
|
60
60
|
Epoll1EventHandle(const FileDescriptor& fd, Epoll1Poller* poller)
|
61
61
|
: fd_(fd),
|
62
62
|
poller_(poller),
|
63
|
-
read_closure_(poller->
|
64
|
-
write_closure_(poller->
|
65
|
-
error_closure_(poller->
|
63
|
+
read_closure_(poller->GetThreadPool()),
|
64
|
+
write_closure_(poller->GetThreadPool()),
|
65
|
+
error_closure_(poller->GetThreadPool()) {
|
66
66
|
read_closure_.InitEvent();
|
67
67
|
write_closure_.InitEvent();
|
68
68
|
error_closure_.InitEvent();
|
@@ -217,7 +217,7 @@ void Epoll1EventHandle::OrphanHandle(PosixEngineClosure* on_done,
|
|
217
217
|
}
|
218
218
|
if (on_done != nullptr) {
|
219
219
|
on_done->SetStatus(absl::OkStatus());
|
220
|
-
poller_->
|
220
|
+
poller_->GetThreadPool()->Run(on_done);
|
221
221
|
}
|
222
222
|
}
|
223
223
|
|
@@ -243,8 +243,8 @@ void Epoll1EventHandle::HandleShutdownInternal(absl::Status why,
|
|
243
243
|
}
|
244
244
|
}
|
245
245
|
|
246
|
-
Epoll1Poller::Epoll1Poller(
|
247
|
-
:
|
246
|
+
Epoll1Poller::Epoll1Poller(std::shared_ptr<ThreadPool> thread_pool)
|
247
|
+
: thread_pool_(thread_pool), was_kicked_(false), closed_(false) {
|
248
248
|
g_epoll_set_.epfd = posix_interface().EpollCreateAndCloexec().value();
|
249
249
|
wakeup_fd_ = CreateWakeupFd(&posix_interface()).value();
|
250
250
|
CHECK(wakeup_fd_ != nullptr);
|
@@ -493,10 +493,11 @@ void Epoll1Poller::ResetKickState() {
|
|
493
493
|
was_kicked_ = false;
|
494
494
|
}
|
495
495
|
|
496
|
-
std::shared_ptr<Epoll1Poller> MakeEpoll1Poller(
|
496
|
+
std::shared_ptr<Epoll1Poller> MakeEpoll1Poller(
|
497
|
+
std::shared_ptr<ThreadPool> thread_pool) {
|
497
498
|
static bool kEpoll1PollerSupported = InitEpoll1PollerLinux();
|
498
499
|
if (kEpoll1PollerSupported) {
|
499
|
-
return std::make_shared<Epoll1Poller>(
|
500
|
+
return std::make_shared<Epoll1Poller>(std::move(thread_pool));
|
500
501
|
}
|
501
502
|
return nullptr;
|
502
503
|
}
|
@@ -511,7 +512,7 @@ namespace grpc_event_engine::experimental {
|
|
511
512
|
using ::grpc_event_engine::experimental::EventEngine;
|
512
513
|
using ::grpc_event_engine::experimental::Poller;
|
513
514
|
|
514
|
-
Epoll1Poller::Epoll1Poller(
|
515
|
+
Epoll1Poller::Epoll1Poller(std::shared_ptr<ThreadPool> /* thread_pool */) {
|
515
516
|
grpc_core::Crash("unimplemented");
|
516
517
|
}
|
517
518
|
|
@@ -548,7 +549,8 @@ void Epoll1Poller::ResetKickState() { grpc_core::Crash("unimplemented"); }
|
|
548
549
|
|
549
550
|
// If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
|
550
551
|
// nullptr.
|
551
|
-
std::shared_ptr<Epoll1Poller> MakeEpoll1Poller(
|
552
|
+
std::shared_ptr<Epoll1Poller> MakeEpoll1Poller(
|
553
|
+
std::shared_ptr<ThreadPool> /*thread_pool*/) {
|
552
554
|
return nullptr;
|
553
555
|
}
|
554
556
|
|
@@ -30,6 +30,7 @@
|
|
30
30
|
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
31
31
|
#include "src/core/lib/event_engine/posix_engine/internal_errqueue.h"
|
32
32
|
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
33
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
33
34
|
#include "src/core/lib/iomgr/port.h"
|
34
35
|
#include "src/core/util/sync.h"
|
35
36
|
|
@@ -46,7 +47,7 @@ class Epoll1EventHandle;
|
|
46
47
|
// Definition of epoll1 based poller.
|
47
48
|
class Epoll1Poller : public PosixEventPoller {
|
48
49
|
public:
|
49
|
-
explicit Epoll1Poller(
|
50
|
+
explicit Epoll1Poller(std::shared_ptr<ThreadPool> thread_pool);
|
50
51
|
EventHandle* CreateHandle(FileDescriptor fd, absl::string_view name,
|
51
52
|
bool track_err) override;
|
52
53
|
Poller::WorkResult Work(
|
@@ -54,7 +55,7 @@ class Epoll1Poller : public PosixEventPoller {
|
|
54
55
|
absl::FunctionRef<void()> schedule_poll_again) override;
|
55
56
|
std::string Name() override { return "epoll1"; }
|
56
57
|
void Kick() override;
|
57
|
-
|
58
|
+
ThreadPool* GetThreadPool() { return thread_pool_.get(); }
|
58
59
|
bool CanTrackErrors() const override {
|
59
60
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
60
61
|
return KernelSupportsErrqueue();
|
@@ -109,7 +110,7 @@ class Epoll1Poller : public PosixEventPoller {
|
|
109
110
|
struct EpollSet {};
|
110
111
|
#endif
|
111
112
|
grpc_core::Mutex mu_;
|
112
|
-
|
113
|
+
std::shared_ptr<ThreadPool> thread_pool_;
|
113
114
|
// A singleton epoll set
|
114
115
|
EpollSet g_epoll_set_;
|
115
116
|
bool was_kicked_ ABSL_GUARDED_BY(mu_);
|
@@ -123,7 +124,8 @@ class Epoll1Poller : public PosixEventPoller {
|
|
123
124
|
|
124
125
|
// Return an instance of a epoll1 based poller tied to the specified event
|
125
126
|
// engine.
|
126
|
-
std::shared_ptr<Epoll1Poller> MakeEpoll1Poller(
|
127
|
+
std::shared_ptr<Epoll1Poller> MakeEpoll1Poller(
|
128
|
+
std::shared_ptr<ThreadPool> thread_pool);
|
127
129
|
|
128
130
|
} // namespace grpc_event_engine::experimental
|
129
131
|
|
@@ -72,7 +72,7 @@ class PollEventHandle : public EventHandle {
|
|
72
72
|
: fd_(fd),
|
73
73
|
pending_actions_(0),
|
74
74
|
poller_handles_list_(this),
|
75
|
-
|
75
|
+
thread_pool_(poller->GetThreadPool()),
|
76
76
|
poller_(std::move(poller)),
|
77
77
|
is_orphaned_(false),
|
78
78
|
is_shutdown_(false),
|
@@ -175,7 +175,7 @@ class PollEventHandle : public EventHandle {
|
|
175
175
|
void Unref() {
|
176
176
|
if (ref_count_.fetch_sub(1, std::memory_order_acq_rel) == 1) {
|
177
177
|
if (on_done_ != nullptr) {
|
178
|
-
|
178
|
+
thread_pool_->Run(on_done_);
|
179
179
|
}
|
180
180
|
delete this;
|
181
181
|
}
|
@@ -200,7 +200,7 @@ class PollEventHandle : public EventHandle {
|
|
200
200
|
FileDescriptor fd_;
|
201
201
|
int pending_actions_;
|
202
202
|
PollPoller::HandlesList poller_handles_list_;
|
203
|
-
|
203
|
+
ThreadPool* thread_pool_;
|
204
204
|
std::shared_ptr<PollPoller> poller_;
|
205
205
|
bool is_orphaned_;
|
206
206
|
bool is_shutdown_;
|
@@ -293,7 +293,7 @@ int PollEventHandle::NotifyOnLocked(PosixEngineClosure** st,
|
|
293
293
|
PosixEngineClosure* closure) {
|
294
294
|
if (is_shutdown_ || pollhup_) {
|
295
295
|
closure->SetStatus(shutdown_error_);
|
296
|
-
|
296
|
+
thread_pool_->Run(closure);
|
297
297
|
} else if (*st == reinterpret_cast<PosixEngineClosure*>(kClosureNotReady)) {
|
298
298
|
// not ready ==> switch to a waiting state by setting the closure
|
299
299
|
*st = closure;
|
@@ -302,7 +302,7 @@ int PollEventHandle::NotifyOnLocked(PosixEngineClosure** st,
|
|
302
302
|
// already ready ==> queue the closure to run immediately
|
303
303
|
*st = reinterpret_cast<PosixEngineClosure*>(kClosureNotReady);
|
304
304
|
closure->SetStatus(shutdown_error_);
|
305
|
-
|
305
|
+
thread_pool_->Run(closure);
|
306
306
|
return 1;
|
307
307
|
} else {
|
308
308
|
// upcallptr was set to a different closure. This is an error!
|
@@ -327,7 +327,7 @@ int PollEventHandle::SetReadyLocked(PosixEngineClosure** st) {
|
|
327
327
|
PosixEngineClosure* closure = *st;
|
328
328
|
*st = reinterpret_cast<PosixEngineClosure*>(kClosureNotReady);
|
329
329
|
closure->SetStatus(shutdown_error_);
|
330
|
-
|
330
|
+
thread_pool_->Run(closure);
|
331
331
|
return 1;
|
332
332
|
}
|
333
333
|
}
|
@@ -402,7 +402,7 @@ void PollEventHandle::NotifyOnError(PosixEngineClosure* on_error) {
|
|
402
402
|
on_error->SetStatus(
|
403
403
|
absl::Status(absl::StatusCode::kCancelled,
|
404
404
|
"Polling engine does not support tracking errors"));
|
405
|
-
|
405
|
+
thread_pool_->Run(on_error);
|
406
406
|
}
|
407
407
|
|
408
408
|
void PollEventHandle::SetReadable() {
|
@@ -503,8 +503,9 @@ void PollPoller::PollerHandlesListRemoveHandle(PollEventHandle* handle) {
|
|
503
503
|
--num_poll_handles_;
|
504
504
|
}
|
505
505
|
|
506
|
-
PollPoller::PollPoller(
|
507
|
-
|
506
|
+
PollPoller::PollPoller(std::shared_ptr<ThreadPool> thread_pool,
|
507
|
+
bool use_phony_poll)
|
508
|
+
: thread_pool_(std::move(thread_pool)),
|
508
509
|
use_phony_poll_(use_phony_poll),
|
509
510
|
was_kicked_(false),
|
510
511
|
was_kicked_ext_(false),
|
@@ -752,12 +753,12 @@ void PollPoller::ResetKickState() {
|
|
752
753
|
was_kicked_ext_ = false;
|
753
754
|
}
|
754
755
|
|
755
|
-
std::shared_ptr<PollPoller> MakePollPoller(
|
756
|
-
|
756
|
+
std::shared_ptr<PollPoller> MakePollPoller(
|
757
|
+
std::shared_ptr<ThreadPool> thread_pool, bool use_phony_poll) {
|
757
758
|
static bool kPollPollerSupported =
|
758
759
|
grpc_event_engine::experimental::SupportsWakeupFd();
|
759
760
|
if (kPollPollerSupported) {
|
760
|
-
return std::make_shared<PollPoller>(
|
761
|
+
return std::make_shared<PollPoller>(std::move(thread_pool), use_phony_poll);
|
761
762
|
}
|
762
763
|
return nullptr;
|
763
764
|
}
|
@@ -788,8 +789,8 @@ void PollPoller::Kick() { grpc_core::Crash("unimplemented"); }
|
|
788
789
|
|
789
790
|
// If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
|
790
791
|
// nullptr.
|
791
|
-
std::shared_ptr<PollPoller> MakePollPoller(
|
792
|
-
|
792
|
+
std::shared_ptr<PollPoller> MakePollPoller(
|
793
|
+
std::shared_ptr<ThreadPool> /*thread_pool*/, bool /* use_phony_poll */) {
|
793
794
|
return nullptr;
|
794
795
|
}
|
795
796
|
|
@@ -27,6 +27,7 @@
|
|
27
27
|
#include "src/core/lib/event_engine/poller.h"
|
28
28
|
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
|
29
29
|
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
|
30
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
30
31
|
#include "src/core/util/sync.h"
|
31
32
|
|
32
33
|
namespace grpc_event_engine::experimental {
|
@@ -37,7 +38,8 @@ class PollEventHandle;
|
|
37
38
|
class PollPoller : public PosixEventPoller,
|
38
39
|
public std::enable_shared_from_this<PollPoller> {
|
39
40
|
public:
|
40
|
-
explicit PollPoller(
|
41
|
+
explicit PollPoller(std::shared_ptr<ThreadPool> thread_pool,
|
42
|
+
bool use_phony_poll = false);
|
41
43
|
EventHandle* CreateHandle(FileDescriptor fd, absl::string_view name,
|
42
44
|
bool track_err) override;
|
43
45
|
Poller::WorkResult Work(
|
@@ -45,7 +47,7 @@ class PollPoller : public PosixEventPoller,
|
|
45
47
|
absl::FunctionRef<void()> schedule_poll_again) override;
|
46
48
|
std::string Name() override { return "poll"; }
|
47
49
|
void Kick() override;
|
48
|
-
|
50
|
+
ThreadPool* GetThreadPool() { return thread_pool_.get(); }
|
49
51
|
bool CanTrackErrors() const override { return false; }
|
50
52
|
~PollPoller() override;
|
51
53
|
|
@@ -71,7 +73,7 @@ class PollPoller : public PosixEventPoller,
|
|
71
73
|
PollEventHandle* prev = nullptr;
|
72
74
|
};
|
73
75
|
grpc_core::Mutex mu_;
|
74
|
-
|
76
|
+
std::shared_ptr<ThreadPool> thread_pool_;
|
75
77
|
bool use_phony_poll_;
|
76
78
|
bool was_kicked_ ABSL_GUARDED_BY(mu_);
|
77
79
|
bool was_kicked_ext_ ABSL_GUARDED_BY(mu_);
|
@@ -85,8 +87,8 @@ class PollPoller : public PosixEventPoller,
|
|
85
87
|
// It use_phony_poll is true, it implies that the poller is declared
|
86
88
|
// non-polling and any attempt to schedule a blocking poll will result in a
|
87
89
|
// crash failure.
|
88
|
-
std::shared_ptr<PollPoller> MakePollPoller(
|
89
|
-
|
90
|
+
std::shared_ptr<PollPoller> MakePollPoller(
|
91
|
+
std::shared_ptr<ThreadPool> thread_pool, bool use_phony_poll);
|
90
92
|
|
91
93
|
} // namespace grpc_event_engine::experimental
|
92
94
|
|
@@ -19,7 +19,6 @@
|
|
19
19
|
|
20
20
|
#include <string>
|
21
21
|
|
22
|
-
#include "absl/functional/any_invocable.h"
|
23
22
|
#include "absl/status/status.h"
|
24
23
|
#include "absl/strings/string_view.h"
|
25
24
|
#include "src/core/lib/event_engine/poller.h"
|
@@ -28,13 +27,6 @@
|
|
28
27
|
|
29
28
|
namespace grpc_event_engine::experimental {
|
30
29
|
|
31
|
-
class Scheduler {
|
32
|
-
public:
|
33
|
-
virtual void Run(experimental::EventEngine::Closure* closure) = 0;
|
34
|
-
virtual void Run(absl::AnyInvocable<void()>) = 0;
|
35
|
-
virtual ~Scheduler() = default;
|
36
|
-
};
|
37
|
-
|
38
30
|
class PosixEventPoller;
|
39
31
|
|
40
32
|
class EventHandle {
|
@@ -15,6 +15,7 @@
|
|
15
15
|
#include <grpc/support/port_platform.h>
|
16
16
|
|
17
17
|
#include <memory>
|
18
|
+
#include <utility>
|
18
19
|
|
19
20
|
#include "absl/strings/str_split.h"
|
20
21
|
#include "absl/strings/string_view.h"
|
@@ -34,22 +35,26 @@ bool PollStrategyMatches(absl::string_view strategy, absl::string_view want) {
|
|
34
35
|
}
|
35
36
|
} // namespace
|
36
37
|
|
37
|
-
std::shared_ptr<PosixEventPoller> MakeDefaultPoller(
|
38
|
+
std::shared_ptr<PosixEventPoller> MakeDefaultPoller(
|
39
|
+
std::shared_ptr<ThreadPool> thread_pool) {
|
40
|
+
// Note that Make*Poller are allowed to return nullptr - e.g. MakeEpoll1Poller
|
41
|
+
// would return nullptr if an epoll poller is requested on unsupported
|
42
|
+
// platform.
|
38
43
|
std::shared_ptr<PosixEventPoller> poller;
|
39
44
|
auto strings =
|
40
45
|
absl::StrSplit(grpc_core::ConfigVars::Get().PollStrategy(), ',');
|
41
46
|
for (auto it = strings.begin(); it != strings.end() && poller == nullptr;
|
42
47
|
it++) {
|
43
48
|
if (PollStrategyMatches(*it, "epoll1")) {
|
44
|
-
poller = MakeEpoll1Poller(
|
49
|
+
poller = MakeEpoll1Poller(thread_pool);
|
45
50
|
}
|
46
51
|
if (poller == nullptr && PollStrategyMatches(*it, "poll")) {
|
47
52
|
// If epoll1 fails and if poll strategy matches "poll", use Poll poller
|
48
|
-
poller = MakePollPoller(
|
53
|
+
poller = MakePollPoller(thread_pool, /*use_phony_poll=*/false);
|
49
54
|
} else if (poller == nullptr && PollStrategyMatches(*it, "none")) {
|
50
55
|
// If epoll1 fails and if poll strategy matches "none", use phony poll
|
51
56
|
// poller.
|
52
|
-
poller = MakePollPoller(
|
57
|
+
poller = MakePollPoller(thread_pool, /*use_phony_poll=*/true);
|
53
58
|
}
|
54
59
|
}
|
55
60
|
return poller;
|
@@ -57,7 +62,8 @@ std::shared_ptr<PosixEventPoller> MakeDefaultPoller(Scheduler* scheduler) {
|
|
57
62
|
|
58
63
|
#else // GRPC_POSIX_SOCKET_TCP
|
59
64
|
|
60
|
-
std::shared_ptr<PosixEventPoller> MakeDefaultPoller(
|
65
|
+
std::shared_ptr<PosixEventPoller> MakeDefaultPoller(
|
66
|
+
std::shared_ptr<ThreadPool> /*thread_pool*/) {
|
61
67
|
return nullptr;
|
62
68
|
}
|
63
69
|
|
@@ -22,11 +22,12 @@
|
|
22
22
|
namespace grpc_event_engine::experimental {
|
23
23
|
|
24
24
|
class PosixEventPoller;
|
25
|
-
class
|
25
|
+
class ThreadPool;
|
26
26
|
|
27
27
|
// Return an instance of an event poller which is tied to the specified
|
28
28
|
// scheduler.
|
29
|
-
std::shared_ptr<PosixEventPoller> MakeDefaultPoller(
|
29
|
+
std::shared_ptr<PosixEventPoller> MakeDefaultPoller(
|
30
|
+
std::shared_ptr<ThreadPool> thread_pool);
|
30
31
|
|
31
32
|
} // namespace grpc_event_engine::experimental
|
32
33
|
|
@@ -118,6 +118,7 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
118
118
|
ares_socket_t as) override {
|
119
119
|
grpc_core::MutexLock lock(&mu_);
|
120
120
|
owned_fds_.insert(as);
|
121
|
+
CHECK_NE(poller_, nullptr);
|
121
122
|
FileDescriptor fd(as, poller_->posix_interface().generation());
|
122
123
|
return std::make_unique<GrpcPolledFdPosix>(
|
123
124
|
as,
|
@@ -117,7 +117,7 @@ void LockfreeEvent::NotifyOn(PosixEngineClosure* closure) {
|
|
117
117
|
if (state_.compare_exchange_strong(curr, kClosureNotReady,
|
118
118
|
std::memory_order_acq_rel,
|
119
119
|
std::memory_order_acquire)) {
|
120
|
-
|
120
|
+
thread_pool_->Run(closure);
|
121
121
|
return; // Successful. Return.
|
122
122
|
}
|
123
123
|
break; // retry
|
@@ -131,7 +131,7 @@ void LockfreeEvent::NotifyOn(PosixEngineClosure* closure) {
|
|
131
131
|
absl::Status shutdown_err =
|
132
132
|
grpc_core::internal::StatusGetFromHeapPtr(curr & ~kShutdownBit);
|
133
133
|
closure->SetStatus(shutdown_err);
|
134
|
-
|
134
|
+
thread_pool_->Run(closure);
|
135
135
|
return;
|
136
136
|
}
|
137
137
|
|
@@ -187,7 +187,7 @@ bool LockfreeEvent::SetShutdown(absl::Status shutdown_error) {
|
|
187
187
|
std::memory_order_acquire)) {
|
188
188
|
auto closure = reinterpret_cast<PosixEngineClosure*>(curr);
|
189
189
|
closure->SetStatus(shutdown_error);
|
190
|
-
|
190
|
+
thread_pool_->Run(closure);
|
191
191
|
return true;
|
192
192
|
}
|
193
193
|
// 'curr' was a closure but now changed to a different state. We will
|
@@ -234,7 +234,7 @@ void LockfreeEvent::SetReady() {
|
|
234
234
|
// notify_on (or set_shutdown)
|
235
235
|
auto closure = reinterpret_cast<PosixEngineClosure*>(curr);
|
236
236
|
closure->SetStatus(absl::OkStatus());
|
237
|
-
|
237
|
+
thread_pool_->Run(closure);
|
238
238
|
return;
|
239
239
|
}
|
240
240
|
// else the state changed again (only possible by either a racing
|
@@ -21,14 +21,13 @@
|
|
21
21
|
|
22
22
|
#include "absl/status/status.h"
|
23
23
|
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
|
24
|
+
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
24
25
|
|
25
26
|
namespace grpc_event_engine::experimental {
|
26
27
|
|
27
|
-
class Scheduler;
|
28
|
-
|
29
28
|
class LockfreeEvent {
|
30
29
|
public:
|
31
|
-
explicit LockfreeEvent(
|
30
|
+
explicit LockfreeEvent(ThreadPool* thread_pool) : thread_pool_(thread_pool) {}
|
32
31
|
|
33
32
|
LockfreeEvent(const LockfreeEvent&) = delete;
|
34
33
|
LockfreeEvent& operator=(const LockfreeEvent&) = delete;
|
@@ -62,7 +61,7 @@ class LockfreeEvent {
|
|
62
61
|
enum State { kClosureNotReady = 0, kClosureReady = 2, kShutdownBit = 1 };
|
63
62
|
|
64
63
|
std::atomic<intptr_t> state_;
|
65
|
-
|
64
|
+
ThreadPool* thread_pool_;
|
66
65
|
};
|
67
66
|
|
68
67
|
} // namespace grpc_event_engine::experimental
|
@@ -99,7 +99,7 @@ PosixErrorOr<int64_t> TcpSend(EventEnginePosixInterface* posix_interface,
|
|
99
99
|
const FileDescriptor& fd,
|
100
100
|
const struct msghdr* msg, int* saved_errno,
|
101
101
|
int additional_flags = 0) {
|
102
|
-
|
102
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("TcpSend");
|
103
103
|
PosixErrorOr<int64_t> send_result;
|
104
104
|
do {
|
105
105
|
grpc_core::global_stats().IncrementSyscallWrite();
|
@@ -290,7 +290,7 @@ absl::Status PosixEndpointImpl::TcpAnnotateError(absl::Status src_error) const {
|
|
290
290
|
|
291
291
|
// Returns true if data available to read or error other than EAGAIN.
|
292
292
|
bool PosixEndpointImpl::TcpDoRead(absl::Status& status) {
|
293
|
-
|
293
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("TcpDoRead");
|
294
294
|
|
295
295
|
struct msghdr msg;
|
296
296
|
struct iovec iov[MAX_READ_IOVEC];
|