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
@@ -70,13 +70,6 @@
|
|
70
70
|
|
71
71
|
// IWYU pragma: no_include <ratio>
|
72
72
|
|
73
|
-
#if defined(GRPC_POSIX_SOCKET_TCP) && \
|
74
|
-
!defined(GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER)
|
75
|
-
#define GRPC_PLATFORM_SUPPORTS_POSIX_POLLING true
|
76
|
-
#else
|
77
|
-
#define GRPC_PLATFORM_SUPPORTS_POSIX_POLLING false
|
78
|
-
#endif
|
79
|
-
|
80
73
|
using namespace std::chrono_literals;
|
81
74
|
|
82
75
|
namespace grpc_event_engine::experimental {
|
@@ -184,8 +177,7 @@ void RegisterEventEngineForFork(
|
|
184
177
|
ptr.executor.expired();
|
185
178
|
}),
|
186
179
|
fork_handlers->end());
|
187
|
-
fork_handlers->emplace_back(
|
188
|
-
std::move(timer_manager));
|
180
|
+
fork_handlers->emplace_back(posix_engine, executor, timer_manager);
|
189
181
|
static bool handlers_installed = false;
|
190
182
|
if (!handlers_installed) {
|
191
183
|
pthread_atfork(PrepareFork, PostForkInParent, PostForkInChild);
|
@@ -193,27 +185,6 @@ void RegisterEventEngineForFork(
|
|
193
185
|
}
|
194
186
|
}
|
195
187
|
|
196
|
-
#if GRPC_ARES && GRPC_POSIX_SOCKET_ARES_EV_DRIVER && \
|
197
|
-
GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
198
|
-
|
199
|
-
void RegisterResolver(
|
200
|
-
absl::InlinedVector<std::weak_ptr<AresResolver::ReinitHandle>, 16>*
|
201
|
-
resolver_handles,
|
202
|
-
std::weak_ptr<AresResolver::ReinitHandle> resolver_handle) {
|
203
|
-
resolver_handles->emplace_back(std::move(resolver_handle));
|
204
|
-
// Cleanup in case we have expired callbacks, prevents the list from
|
205
|
-
// growing indefinitely
|
206
|
-
auto new_end = std::remove_if(
|
207
|
-
resolver_handles->begin(), resolver_handles->end(),
|
208
|
-
+[](const std::weak_ptr<AresResolver::ReinitHandle>& callback) {
|
209
|
-
return callback.expired();
|
210
|
-
});
|
211
|
-
resolver_handles->erase(new_end, resolver_handles->end());
|
212
|
-
}
|
213
|
-
|
214
|
-
#endif // GRPC_ARES && GRPC_POSIX_SOCKET_ARES_EV_DRIVER
|
215
|
-
// && GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
216
|
-
|
217
188
|
#else // GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
218
189
|
|
219
190
|
void RegisterEventEngineForFork(
|
@@ -230,17 +201,18 @@ void RegisterEventEngineForFork(
|
|
230
201
|
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
231
202
|
|
232
203
|
PosixEventEngine::PollingCycle::PollingCycle(
|
233
|
-
|
234
|
-
|
235
|
-
|
204
|
+
std::shared_ptr<ThreadPool> executor,
|
205
|
+
std::shared_ptr<PosixEventPoller> poller)
|
206
|
+
: executor_(std::move(executor)),
|
207
|
+
poller_(std::move(poller)),
|
208
|
+
is_scheduled_(1) {
|
209
|
+
CHECK_NE(poller_, nullptr);
|
210
|
+
executor_->Run([this]() { PollerWorkInternal(); });
|
236
211
|
}
|
237
212
|
|
238
213
|
PosixEventEngine::PollingCycle::~PollingCycle() {
|
239
214
|
done_ = true;
|
240
|
-
|
241
|
-
if (poller != nullptr) {
|
242
|
-
poller->Kick();
|
243
|
-
}
|
215
|
+
poller_->Kick();
|
244
216
|
grpc_core::MutexLock lock(&mu_);
|
245
217
|
while (is_scheduled_ > 0) {
|
246
218
|
cond_.Wait(&mu_);
|
@@ -255,15 +227,14 @@ void PosixEventEngine::PollingCycle::PollerWorkInternal() {
|
|
255
227
|
// TODO(vigneshbabu): The timeout specified here is arbitrary. For
|
256
228
|
// instance, this can be improved by setting the timeout to the next
|
257
229
|
// expiring timer.
|
258
|
-
|
259
|
-
auto result = poller->Work(24h, [&]() { again = true; });
|
230
|
+
auto result = poller_->Work(24h, [&]() { again = true; });
|
260
231
|
if (result == Poller::WorkResult::kDeadlineExceeded) {
|
261
232
|
// The EventEngine is not shutting down but the next asynchronous
|
262
233
|
// PollerWorkInternal did not get scheduled. Schedule it now.
|
263
234
|
again = true;
|
264
235
|
}
|
265
236
|
if (!done_ && again) {
|
266
|
-
|
237
|
+
executor_->Run([this]() { PollerWorkInternal(); });
|
267
238
|
++is_scheduled_;
|
268
239
|
}
|
269
240
|
cond_.SignalAll();
|
@@ -428,9 +399,9 @@ PosixEventEngine::CreateEndpointFromUnconnectedFdInternal(
|
|
428
399
|
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
429
400
|
PosixError err;
|
430
401
|
int connect_errno;
|
402
|
+
PosixEventPoller* poller = poller_.get();
|
431
403
|
do {
|
432
|
-
err =
|
433
|
-
fd, addr.address(), addr.size());
|
404
|
+
err = poller->posix_interface().Connect(fd, addr.address(), addr.size());
|
434
405
|
} while (err.IsPosixError(EINTR));
|
435
406
|
if (err.IsWrongGenerationError()) {
|
436
407
|
Run([on_connect = std::move(on_connect),
|
@@ -452,7 +423,6 @@ PosixEventEngine::CreateEndpointFromUnconnectedFdInternal(
|
|
452
423
|
}
|
453
424
|
|
454
425
|
std::string name = absl::StrCat("tcp-client:", addr_uri.value());
|
455
|
-
PosixEventPoller* poller = poller_manager_.Poller();
|
456
426
|
EventHandle* handle =
|
457
427
|
poller->CreateHandle(fd, name, poller->CanTrackErrors());
|
458
428
|
|
@@ -507,47 +477,6 @@ void PosixEventEngine::OnConnectFinishInternal(int connection_handle) {
|
|
507
477
|
}
|
508
478
|
}
|
509
479
|
|
510
|
-
PosixEnginePollerManager::PosixEnginePollerManager(
|
511
|
-
std::shared_ptr<ThreadPool> executor)
|
512
|
-
: poller_(grpc_event_engine::experimental::MakeDefaultPoller(this)),
|
513
|
-
executor_(std::move(executor)),
|
514
|
-
trigger_shutdown_called_(false) {}
|
515
|
-
|
516
|
-
PosixEnginePollerManager::PosixEnginePollerManager(
|
517
|
-
std::shared_ptr<PosixEventPoller> poller)
|
518
|
-
: poller_(std::move(poller)),
|
519
|
-
poller_state_(PollerState::kExternal),
|
520
|
-
executor_(nullptr),
|
521
|
-
trigger_shutdown_called_(false) {
|
522
|
-
DCHECK_NE(poller_, nullptr);
|
523
|
-
}
|
524
|
-
|
525
|
-
void PosixEnginePollerManager::Run(
|
526
|
-
experimental::EventEngine::Closure* closure) {
|
527
|
-
if (executor_ != nullptr) {
|
528
|
-
executor_->Run(closure);
|
529
|
-
}
|
530
|
-
}
|
531
|
-
|
532
|
-
void PosixEnginePollerManager::Run(absl::AnyInvocable<void()> cb) {
|
533
|
-
if (executor_ != nullptr) {
|
534
|
-
executor_->Run(std::move(cb));
|
535
|
-
}
|
536
|
-
}
|
537
|
-
|
538
|
-
void PosixEnginePollerManager::TriggerShutdown() {
|
539
|
-
DCHECK(trigger_shutdown_called_ == false);
|
540
|
-
trigger_shutdown_called_ = true;
|
541
|
-
// If the poller is external, dont try to shut it down. Otherwise
|
542
|
-
// set poller state to PollerState::kShuttingDown.
|
543
|
-
if (poller_state_.exchange(PollerState::kShuttingDown) ==
|
544
|
-
PollerState::kExternal) {
|
545
|
-
poller_ = nullptr;
|
546
|
-
return;
|
547
|
-
}
|
548
|
-
poller_->Kick();
|
549
|
-
}
|
550
|
-
|
551
480
|
std::shared_ptr<PosixEventEngine> PosixEventEngine::MakePosixEventEngine() {
|
552
481
|
// Can't use make_shared as ctor is private
|
553
482
|
std::shared_ptr<PosixEventEngine> engine(new PosixEventEngine());
|
@@ -555,6 +484,8 @@ std::shared_ptr<PosixEventEngine> PosixEventEngine::MakePosixEventEngine() {
|
|
555
484
|
return engine;
|
556
485
|
}
|
557
486
|
|
487
|
+
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
488
|
+
|
558
489
|
std::shared_ptr<PosixEventEngine>
|
559
490
|
PosixEventEngine::MakeTestOnlyPosixEventEngine(
|
560
491
|
std::shared_ptr<grpc_event_engine::experimental::PosixEventPoller>
|
@@ -568,24 +499,35 @@ PosixEventEngine::MakeTestOnlyPosixEventEngine(
|
|
568
499
|
PosixEventEngine::PosixEventEngine(std::shared_ptr<PosixEventPoller> poller)
|
569
500
|
: connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
|
570
501
|
executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
|
571
|
-
|
572
|
-
|
573
|
-
#endif
|
574
|
-
timer_manager_(std::make_shared<TimerManager>(executor_)) {
|
575
|
-
}
|
502
|
+
poller_(std::move(poller)),
|
503
|
+
timer_manager_(std::make_shared<TimerManager>(executor_)) {}
|
576
504
|
|
577
505
|
PosixEventEngine::PosixEventEngine()
|
578
506
|
: connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
|
579
507
|
executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
|
580
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
581
|
-
poller_manager_(executor_),
|
582
508
|
timer_manager_(std::make_shared<TimerManager>(executor_)) {
|
509
|
+
poller_ = grpc_event_engine::experimental::MakeDefaultPoller(executor_);
|
583
510
|
SchedulePoller();
|
584
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
585
|
-
timer_manager_(std::make_shared<TimerManager>(executor_)) {
|
586
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
587
511
|
}
|
588
512
|
|
513
|
+
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
514
|
+
|
515
|
+
std::shared_ptr<PosixEventEngine>
|
516
|
+
PosixEventEngine::MakeTestOnlyPosixEventEngine(
|
517
|
+
std::shared_ptr<grpc_event_engine::experimental::PosixEventPoller>
|
518
|
+
test_only_poller) {
|
519
|
+
grpc_core::Crash(
|
520
|
+
"PosixEventEngine::MakeTestOnlyPosixEventEngine not available on this "
|
521
|
+
"platform");
|
522
|
+
}
|
523
|
+
|
524
|
+
PosixEventEngine::PosixEventEngine()
|
525
|
+
: connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
|
526
|
+
executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
|
527
|
+
timer_manager_(std::make_shared<TimerManager>(executor_)) {}
|
528
|
+
|
529
|
+
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
530
|
+
|
589
531
|
#endif // GRPC_POSIX_SOCKET_TCP
|
590
532
|
|
591
533
|
struct PosixEventEngine::ClosureData final : public EventEngine::Closure {
|
@@ -620,7 +562,6 @@ PosixEventEngine::~PosixEventEngine() {
|
|
620
562
|
}
|
621
563
|
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
622
564
|
polling_cycle_.reset();
|
623
|
-
poller_manager_.TriggerShutdown();
|
624
565
|
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
625
566
|
timer_manager_->Shutdown();
|
626
567
|
executor_->Quiesce();
|
@@ -695,50 +636,95 @@ void PosixEventEngine::PosixDNSResolver::LookupTXT(LookupTXTCallback on_resolve,
|
|
695
636
|
dns_resolver_->LookupTXT(std::move(on_resolve), name);
|
696
637
|
}
|
697
638
|
|
639
|
+
#ifdef GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
640
|
+
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
641
|
+
|
642
|
+
void PosixEventEngine::RegisterAresResolverForFork(
|
643
|
+
GRPC_UNUSED AresResolver* resolver) {
|
644
|
+
#if GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
645
|
+
grpc_core::MutexLock lock(&resolver_handles_mu_);
|
646
|
+
resolver_handles_.emplace_back(resolver->GetReinitHandle());
|
647
|
+
// Cleanup in case we have expired callbacks, prevents the list from
|
648
|
+
// growing indefinitely
|
649
|
+
auto new_end = std::remove_if(
|
650
|
+
resolver_handles_.begin(), resolver_handles_.end(),
|
651
|
+
+[](const std::weak_ptr<AresResolver::ReinitHandle>& callback) {
|
652
|
+
return callback.expired();
|
653
|
+
});
|
654
|
+
resolver_handles_.erase(new_end, resolver_handles_.end());
|
655
|
+
#endif // GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
656
|
+
}
|
657
|
+
|
698
658
|
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
|
699
659
|
PosixEventEngine::GetDNSResolver(
|
700
660
|
GRPC_UNUSED const EventEngine::DNSResolver::ResolverOptions& options) {
|
701
|
-
#ifndef GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
702
|
-
grpc_core::Crash("Unable to get DNS resolver for this platform.");
|
703
|
-
#else // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
704
661
|
// If c-ares is supported on the platform, build according to user's
|
705
662
|
// configuration.
|
706
|
-
if (ShouldUseAresDnsResolver()) {
|
707
|
-
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
708
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
663
|
+
if (!ShouldUseAresDnsResolver()) {
|
709
664
|
GRPC_TRACE_LOG(event_engine_dns, INFO)
|
710
|
-
<< "PosixEventEngine::" << this << " creating
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
std::move(*ares_resolver));
|
665
|
+
<< "PosixEventEngine::" << this << " creating NativePosixDNSResolver";
|
666
|
+
return std::make_unique<NativePosixDNSResolver>(shared_from_this());
|
667
|
+
}
|
668
|
+
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
669
|
+
GRPC_TRACE_LOG(event_engine_dns, INFO)
|
670
|
+
<< "PosixEventEngine::" << this << " creating AresResolver";
|
671
|
+
auto ares_resolver = AresResolver::CreateAresResolver(
|
672
|
+
options.dns_server,
|
673
|
+
std::make_unique<GrpcPolledFdFactoryPosix>(poller_.get()),
|
674
|
+
shared_from_this());
|
675
|
+
if (!ares_resolver.ok()) {
|
676
|
+
return ares_resolver.status();
|
677
|
+
}
|
678
|
+
RegisterAresResolverForFork(ares_resolver->get());
|
679
|
+
return std::make_unique<PosixEventEngine::PosixDNSResolver>(
|
680
|
+
std::move(*ares_resolver));
|
727
681
|
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
728
|
-
|
682
|
+
grpc_core::Crash("Can not create CAres resolver with disabled poller");
|
729
683
|
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
730
|
-
|
731
|
-
|
684
|
+
}
|
685
|
+
|
686
|
+
#else // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
687
|
+
|
688
|
+
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
|
689
|
+
PosixEventEngine::GetDNSResolver(
|
690
|
+
GRPC_UNUSED const EventEngine::DNSResolver::ResolverOptions& options) {
|
732
691
|
GRPC_TRACE_LOG(event_engine_dns, INFO)
|
733
692
|
<< "PosixEventEngine::" << this << " creating NativePosixDNSResolver";
|
734
693
|
return std::make_unique<NativePosixDNSResolver>(shared_from_this());
|
735
|
-
#endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
736
694
|
}
|
737
695
|
|
696
|
+
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
697
|
+
#else // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
698
|
+
|
699
|
+
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
|
700
|
+
PosixEventEngine::GetDNSResolver(
|
701
|
+
GRPC_UNUSED const EventEngine::DNSResolver::ResolverOptions& options) {
|
702
|
+
grpc_core::Crash("Unable to get DNS resolver for this platform.");
|
703
|
+
}
|
704
|
+
|
705
|
+
#endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
706
|
+
|
738
707
|
bool PosixEventEngine::IsWorkerThread() { grpc_core::Crash("unimplemented"); }
|
739
708
|
|
740
|
-
|
709
|
+
std::unique_ptr<EventEngine::Endpoint> PosixEventEngine::CreateEndpointFromFd(
|
710
|
+
int fd, const EndpointConfig& config) {
|
711
|
+
auto options = TcpOptionsFromEndpointConfig(config);
|
712
|
+
MemoryAllocator allocator;
|
713
|
+
if (options.memory_allocator_factory != nullptr) {
|
714
|
+
return CreatePosixEndpointFromFd(
|
715
|
+
fd, config,
|
716
|
+
options.memory_allocator_factory->CreateMemoryAllocator(
|
717
|
+
absl::StrCat("allocator:", fd)));
|
718
|
+
}
|
719
|
+
return CreatePosixEndpointFromFd(
|
720
|
+
fd, config,
|
721
|
+
options.resource_quota->memory_quota()->CreateMemoryAllocator(
|
722
|
+
absl::StrCat("allocator:", fd)));
|
723
|
+
}
|
724
|
+
|
741
725
|
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
726
|
+
|
727
|
+
bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
|
742
728
|
int connection_handle = handle.keys[0];
|
743
729
|
if (connection_handle <= 0) {
|
744
730
|
return false;
|
@@ -787,22 +773,16 @@ bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
|
|
787
773
|
delete ac;
|
788
774
|
}
|
789
775
|
return connection_cancel_success;
|
790
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
791
|
-
grpc_core::Crash(
|
792
|
-
"EventEngine::CancelConnect is not supported on this platform");
|
793
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
794
776
|
}
|
795
777
|
|
796
778
|
EventEngine::ConnectionHandle PosixEventEngine::Connect(
|
797
779
|
OnConnectCallback on_connect, const ResolvedAddress& addr,
|
798
780
|
const EndpointConfig& args, MemoryAllocator memory_allocator,
|
799
781
|
Duration timeout) {
|
800
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
801
782
|
PosixTcpOptions options = TcpOptionsFromEndpointConfig(args);
|
802
783
|
absl::StatusOr<EventEnginePosixInterface::PosixSocketCreateResult> socket =
|
803
|
-
|
804
|
-
|
805
|
-
.CreateAndPrepareTcpClientSocket(options, addr);
|
784
|
+
GetPollerChecked()->posix_interface().CreateAndPrepareTcpClientSocket(
|
785
|
+
options, addr);
|
806
786
|
if (!socket.ok()) {
|
807
787
|
Run([on_connect = std::move(on_connect),
|
808
788
|
status = socket.status()]() mutable { on_connect(status); });
|
@@ -811,62 +791,30 @@ EventEngine::ConnectionHandle PosixEventEngine::Connect(
|
|
811
791
|
return CreateEndpointFromUnconnectedFdInternal(
|
812
792
|
(*socket).sock, std::move(on_connect), (*socket).mapped_target_addr,
|
813
793
|
options, std::move(memory_allocator), timeout);
|
814
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
815
|
-
grpc_core::Crash("EventEngine::Connect is not supported on this platform");
|
816
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
817
794
|
}
|
818
795
|
|
819
796
|
EventEngine::ConnectionHandle PosixEventEngine::CreateEndpointFromUnconnectedFd(
|
820
797
|
int fd, EventEngine::OnConnectCallback on_connect,
|
821
798
|
const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
|
822
799
|
MemoryAllocator memory_allocator, EventEngine::Duration timeout) {
|
823
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
824
800
|
return CreateEndpointFromUnconnectedFdInternal(
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
829
|
-
grpc_core::Crash(
|
830
|
-
"EventEngine::CreateEndpointFromUnconnectedFd is not supported on this "
|
831
|
-
"platform");
|
832
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
801
|
+
GetPollerChecked()->posix_interface().Adopt(fd), std::move(on_connect),
|
802
|
+
addr, TcpOptionsFromEndpointConfig(config), std::move(memory_allocator),
|
803
|
+
timeout);
|
833
804
|
}
|
834
805
|
|
835
806
|
std::unique_ptr<EventEngine::Endpoint>
|
836
807
|
PosixEventEngine::CreatePosixEndpointFromFd(int fd,
|
837
808
|
const EndpointConfig& config,
|
838
809
|
MemoryAllocator memory_allocator) {
|
839
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
840
810
|
DCHECK_GT(fd, 0);
|
841
|
-
PosixEventPoller* poller =
|
842
|
-
DCHECK_NE(poller, nullptr);
|
811
|
+
PosixEventPoller* poller = GetPollerChecked();
|
843
812
|
EventHandle* handle =
|
844
813
|
poller->CreateHandle(poller->posix_interface().Adopt(fd), "tcp-client",
|
845
814
|
poller->CanTrackErrors());
|
846
815
|
return CreatePosixEndpoint(handle, nullptr, shared_from_this(),
|
847
816
|
std::move(memory_allocator),
|
848
817
|
TcpOptionsFromEndpointConfig(config));
|
849
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
850
|
-
grpc_core::Crash(
|
851
|
-
"PosixEventEngine::CreatePosixEndpointFromFd is not supported on "
|
852
|
-
"this platform");
|
853
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
854
|
-
}
|
855
|
-
|
856
|
-
std::unique_ptr<EventEngine::Endpoint> PosixEventEngine::CreateEndpointFromFd(
|
857
|
-
int fd, const EndpointConfig& config) {
|
858
|
-
auto options = TcpOptionsFromEndpointConfig(config);
|
859
|
-
MemoryAllocator allocator;
|
860
|
-
if (options.memory_allocator_factory != nullptr) {
|
861
|
-
return CreatePosixEndpointFromFd(
|
862
|
-
fd, config,
|
863
|
-
options.memory_allocator_factory->CreateMemoryAllocator(
|
864
|
-
absl::StrCat("allocator:", fd)));
|
865
|
-
}
|
866
|
-
return CreatePosixEndpointFromFd(
|
867
|
-
fd, config,
|
868
|
-
options.resource_quota->memory_quota()->CreateMemoryAllocator(
|
869
|
-
absl::StrCat("allocator:", fd)));
|
870
818
|
}
|
871
819
|
|
872
820
|
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
|
@@ -875,7 +823,6 @@ PosixEventEngine::CreateListener(
|
|
875
823
|
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
876
824
|
const EndpointConfig& config,
|
877
825
|
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
|
878
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
879
826
|
PosixEventEngineWithFdSupport::PosixAcceptCallback posix_on_accept =
|
880
827
|
[on_accept_cb = std::move(on_accept)](
|
881
828
|
int /*listener_fd*/, std::unique_ptr<EventEngine::Endpoint> ep,
|
@@ -885,12 +832,7 @@ PosixEventEngine::CreateListener(
|
|
885
832
|
};
|
886
833
|
return std::make_unique<PosixEngineListener>(
|
887
834
|
std::move(posix_on_accept), std::move(on_shutdown), config,
|
888
|
-
std::move(memory_allocator_factory),
|
889
|
-
shared_from_this());
|
890
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
891
|
-
grpc_core::Crash(
|
892
|
-
"EventEngine::CreateListener is not supported on this platform");
|
893
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
835
|
+
std::move(memory_allocator_factory), poller_.get(), shared_from_this());
|
894
836
|
}
|
895
837
|
|
896
838
|
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
|
@@ -899,32 +841,96 @@ PosixEventEngine::CreatePosixListener(
|
|
899
841
|
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
900
842
|
const EndpointConfig& config,
|
901
843
|
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
|
902
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
903
844
|
return std::make_unique<PosixEngineListener>(
|
904
845
|
std::move(on_accept), std::move(on_shutdown), config,
|
905
|
-
std::move(memory_allocator_factory),
|
906
|
-
|
907
|
-
|
846
|
+
std::move(memory_allocator_factory), poller_.get(), shared_from_this());
|
847
|
+
}
|
848
|
+
|
849
|
+
void PosixEventEngine::SchedulePoller() {
|
850
|
+
if (poller_ != nullptr) {
|
851
|
+
grpc_core::MutexLock lock(&mu_);
|
852
|
+
CHECK(!polling_cycle_.has_value());
|
853
|
+
polling_cycle_.emplace(executor_, poller_);
|
854
|
+
}
|
855
|
+
}
|
856
|
+
|
857
|
+
void PosixEventEngine::ResetPollCycle() {
|
858
|
+
grpc_core::MutexLock lock(&mu_);
|
859
|
+
polling_cycle_.reset();
|
860
|
+
}
|
861
|
+
|
862
|
+
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
863
|
+
|
864
|
+
bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
|
865
|
+
grpc_core::Crash(
|
866
|
+
"EventEngine::CancelConnect is not supported on this platform");
|
867
|
+
}
|
868
|
+
|
869
|
+
EventEngine::ConnectionHandle PosixEventEngine::Connect(
|
870
|
+
OnConnectCallback on_connect, const ResolvedAddress& addr,
|
871
|
+
const EndpointConfig& args, MemoryAllocator memory_allocator,
|
872
|
+
Duration timeout) {
|
873
|
+
grpc_core::Crash("EventEngine::Connect is not supported on this platform");
|
874
|
+
}
|
875
|
+
|
876
|
+
EventEngine::ConnectionHandle PosixEventEngine::CreateEndpointFromUnconnectedFd(
|
877
|
+
int fd, EventEngine::OnConnectCallback on_connect,
|
878
|
+
const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
|
879
|
+
MemoryAllocator memory_allocator, EventEngine::Duration timeout) {
|
880
|
+
grpc_core::Crash(
|
881
|
+
"EventEngine::CreateEndpointFromUnconnectedFd is not supported on this "
|
882
|
+
"platform");
|
883
|
+
}
|
884
|
+
|
885
|
+
std::unique_ptr<EventEngine::Endpoint>
|
886
|
+
PosixEventEngine::CreatePosixEndpointFromFd(int fd,
|
887
|
+
const EndpointConfig& config,
|
888
|
+
MemoryAllocator memory_allocator) {
|
889
|
+
grpc_core::Crash(
|
890
|
+
"PosixEventEngine::CreatePosixEndpointFromFd is not supported on "
|
891
|
+
"this platform");
|
892
|
+
}
|
893
|
+
|
894
|
+
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
|
895
|
+
PosixEventEngine::CreateListener(
|
896
|
+
Listener::AcceptCallback on_accept,
|
897
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
898
|
+
const EndpointConfig& config,
|
899
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
|
908
900
|
grpc_core::Crash(
|
909
901
|
"EventEngine::CreateListener is not supported on this platform");
|
910
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
911
902
|
}
|
912
903
|
|
904
|
+
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
|
905
|
+
PosixEventEngine::CreatePosixListener(
|
906
|
+
PosixEventEngineWithFdSupport::PosixAcceptCallback on_accept,
|
907
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
908
|
+
const EndpointConfig& config,
|
909
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
|
910
|
+
grpc_core::Crash(
|
911
|
+
"EventEngine::CreateListener is not supported on this platform");
|
912
|
+
}
|
913
|
+
|
914
|
+
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
915
|
+
|
913
916
|
#if GRPC_POSIX_SOCKET_TCP && GRPC_ENABLE_FORK_SUPPORT && \
|
914
917
|
GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
915
918
|
|
916
919
|
void PosixEventEngine::AfterFork(OnForkRole on_fork_role) {
|
920
|
+
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
921
|
+
PosixEventPoller* poller = GetPollerChecked();
|
922
|
+
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
917
923
|
if (on_fork_role == OnForkRole::kChild) {
|
918
924
|
if (grpc_core::IsEventEngineForkEnabled()) {
|
919
925
|
AfterForkInChild();
|
920
926
|
} else {
|
921
927
|
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
922
|
-
|
928
|
+
poller->HandleForkInChild();
|
923
929
|
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
924
930
|
}
|
925
931
|
}
|
926
932
|
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
927
|
-
|
933
|
+
poller->ResetKickState();
|
928
934
|
SchedulePoller();
|
929
935
|
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
930
936
|
}
|
@@ -946,7 +952,7 @@ void PosixEventEngine::AfterForkInChild() {
|
|
946
952
|
}
|
947
953
|
#endif
|
948
954
|
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
949
|
-
|
955
|
+
GetPollerChecked()->HandleForkInChild();
|
950
956
|
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
951
957
|
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
952
958
|
for (const auto& cb : resolver_handles_) {
|
@@ -961,21 +967,4 @@ void PosixEventEngine::AfterForkInChild() {
|
|
961
967
|
#endif // GRPC_POSIX_SOCKET_TCP && GRPC_ENABLE_FORK_SUPPORT &&
|
962
968
|
// GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
963
969
|
|
964
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
965
|
-
|
966
|
-
void PosixEventEngine::SchedulePoller() {
|
967
|
-
if (poller_manager_.Poller() != nullptr) {
|
968
|
-
grpc_core::MutexLock lock(&mu_);
|
969
|
-
CHECK(!polling_cycle_.has_value());
|
970
|
-
polling_cycle_.emplace(&poller_manager_);
|
971
|
-
}
|
972
|
-
}
|
973
|
-
|
974
|
-
void PosixEventEngine::ResetPollCycle() {
|
975
|
-
grpc_core::MutexLock lock(&mu_);
|
976
|
-
polling_cycle_.reset();
|
977
|
-
}
|
978
|
-
|
979
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
980
|
-
|
981
970
|
} // namespace grpc_event_engine::experimental
|