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,254 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2025 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_WRITABLE_STREAMS_H
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_WRITABLE_STREAMS_H
|
21
|
+
|
22
|
+
#include <queue>
|
23
|
+
|
24
|
+
#include "absl/log/check.h"
|
25
|
+
#include "absl/log/log.h"
|
26
|
+
#include "src/core/lib/promise/if.h"
|
27
|
+
#include "src/core/lib/promise/mpsc.h"
|
28
|
+
#include "src/core/lib/promise/race.h"
|
29
|
+
#include "src/core/lib/promise/try_seq.h"
|
30
|
+
|
31
|
+
namespace grpc_core {
|
32
|
+
namespace http2 {
|
33
|
+
|
34
|
+
#define GRPC_WRITABLE_STREAMS_DEBUG VLOG(2)
|
35
|
+
|
36
|
+
class WritableStreams {
|
37
|
+
public:
|
38
|
+
enum class StreamPriority : uint8_t {
|
39
|
+
// Highest priority
|
40
|
+
kStreamClosed = 0,
|
41
|
+
kWaitForTransportFlowControl,
|
42
|
+
// Lowest Priority
|
43
|
+
kDefault,
|
44
|
+
kLastPriority
|
45
|
+
};
|
46
|
+
explicit WritableStreams(
|
47
|
+
const uint32_t max_queue_size = std::numeric_limits<uint32_t>::max())
|
48
|
+
: queue_(max_queue_size), sender_(queue_.MakeSender()) {}
|
49
|
+
|
50
|
+
// WritableStreams is neither copyable nor movable.
|
51
|
+
WritableStreams(const WritableStreams&) = delete;
|
52
|
+
WritableStreams& operator=(const WritableStreams&) = delete;
|
53
|
+
WritableStreams(WritableStreams&&) = delete;
|
54
|
+
WritableStreams& operator=(WritableStreams&&) = delete;
|
55
|
+
|
56
|
+
// Enqueues a stream id with the given priority.
|
57
|
+
// If this returns error, transport MUST be closed.
|
58
|
+
absl::Status Enqueue(const uint32_t stream_id,
|
59
|
+
const StreamPriority priority) {
|
60
|
+
// Streams waiting for transport flow control MUST not be added to list of
|
61
|
+
// writable streams via this API, instead they MUST be added via
|
62
|
+
// BlockedOnTransportFlowControl. The reason being there is no merit in
|
63
|
+
// re-adding the stream to mpsc queue while it can be immediately enqueued
|
64
|
+
// to the prioritized queue.
|
65
|
+
DCHECK(priority != StreamPriority::kWaitForTransportFlowControl);
|
66
|
+
StatusFlag status = sender_.UnbufferedImmediateSend(
|
67
|
+
StreamIDAndPriority{stream_id, priority}, /*tokens*/ 1);
|
68
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "UnbufferedImmediateEnqueue stream id "
|
69
|
+
<< stream_id << " with priority "
|
70
|
+
<< GetPriorityString(priority) << " status "
|
71
|
+
<< status;
|
72
|
+
return (status.ok()) ? absl::OkStatus()
|
73
|
+
: absl::InternalError(absl::StrCat(
|
74
|
+
"Failed to enqueue stream id ", stream_id));
|
75
|
+
}
|
76
|
+
|
77
|
+
// A synchronous function to add a stream id to the transport flow control
|
78
|
+
// wait list.
|
79
|
+
absl::Status BlockedOnTransportFlowControl(const uint32_t stream_id) {
|
80
|
+
prioritized_queue_.Push(stream_id,
|
81
|
+
StreamPriority::kWaitForTransportFlowControl);
|
82
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "BlockedOnTransportFlowControl stream id "
|
83
|
+
<< stream_id;
|
84
|
+
return absl::OkStatus();
|
85
|
+
}
|
86
|
+
|
87
|
+
// Dequeues a single stream id from the queue.
|
88
|
+
// Returns a promise that resolves to the next stream id or an error if the
|
89
|
+
// dequeue fails. High level flow:
|
90
|
+
// 1. Synchronous dequeue from the mpsc queue to get a batch of stream ids.
|
91
|
+
// 2. If the batch is non-empty, the stream ids are pushed to the prioritized
|
92
|
+
// queue.
|
93
|
+
// 3. If the prioritized queue is non-empty, the stream with the highest
|
94
|
+
// priority is popped. If there are multiple stream ids with the same
|
95
|
+
// priority, the stream enqueued first is popped first.
|
96
|
+
// 4. If the prioritized queue is empty, the mpsc queue is queried again for
|
97
|
+
// a batch of stream ids. If the mpsc queue is empty, we block until a
|
98
|
+
// stream id is enqueued.
|
99
|
+
// 5. Once mpsc dequeue promise is resolved, the stream ids are pushed to the
|
100
|
+
// prioritized queue.
|
101
|
+
// 6. Return the stream id with the highest priority.
|
102
|
+
// If this returns error, transport MUST be closed.
|
103
|
+
auto Next(const bool transport_tokens_available) {
|
104
|
+
// TODO(akshitpatel) : [PH2][P2] - Need to add an immediate dequeue option
|
105
|
+
// for the mpsc queue in favor of the race.
|
106
|
+
|
107
|
+
return AssertResultType<absl::StatusOr<uint32_t>>(TrySeq(
|
108
|
+
// The current MPSC queue does not have a version of NextBatch that
|
109
|
+
// resolves immediately. So we made this Race to ensure that the
|
110
|
+
// "Dequeue" from the mpsc resolves immediately - Either with data , or
|
111
|
+
// empty.
|
112
|
+
Race(queue_.NextBatch(kMaxBatchSize),
|
113
|
+
Immediate(ValueOrFailure<std::vector<StreamIDAndPriority>>(
|
114
|
+
std::vector<StreamIDAndPriority>()))),
|
115
|
+
[this,
|
116
|
+
transport_tokens_available](std::vector<StreamIDAndPriority> batch) {
|
117
|
+
AddToPrioritizedQueue(batch);
|
118
|
+
std::optional<uint32_t> stream_id =
|
119
|
+
prioritized_queue_.Pop(transport_tokens_available);
|
120
|
+
return If(
|
121
|
+
stream_id.has_value(),
|
122
|
+
[stream_id]() -> absl::StatusOr<uint32_t> {
|
123
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Next stream id "
|
124
|
+
<< stream_id.value();
|
125
|
+
return stream_id.value();
|
126
|
+
},
|
127
|
+
[this, transport_tokens_available] {
|
128
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Query queue for next batch";
|
129
|
+
return Map(
|
130
|
+
// PrioritizedQueue is empty at this point. Hence we block
|
131
|
+
// on mpsc queue to get a new batch of stream ids.
|
132
|
+
queue_.NextBatch(kMaxBatchSize),
|
133
|
+
[this, transport_tokens_available](
|
134
|
+
ValueOrFailure<std::vector<StreamIDAndPriority>> batch)
|
135
|
+
-> absl::StatusOr<uint32_t> {
|
136
|
+
if (batch.ok()) {
|
137
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Next batch size "
|
138
|
+
<< batch.value().size();
|
139
|
+
AddToPrioritizedQueue(batch.value());
|
140
|
+
std::optional<uint32_t> stream_id =
|
141
|
+
prioritized_queue_.Pop(transport_tokens_available);
|
142
|
+
// TODO(akshitpatel) : [PH2][P4] - This DCHECK should
|
143
|
+
// ideally be fine. But in case if queue_.NextBatch
|
144
|
+
// spuriously returns an empty batch, move to a Loop
|
145
|
+
// to avoid this.
|
146
|
+
DCHECK(stream_id.has_value());
|
147
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Next stream id "
|
148
|
+
<< stream_id.value();
|
149
|
+
return stream_id.value();
|
150
|
+
}
|
151
|
+
return absl::InternalError("Failed to read from queue");
|
152
|
+
});
|
153
|
+
});
|
154
|
+
}));
|
155
|
+
}
|
156
|
+
|
157
|
+
// Debug helper function to convert a StreamPriority to a string.
|
158
|
+
static inline std::string GetPriorityString(const StreamPriority priority) {
|
159
|
+
switch (priority) {
|
160
|
+
case StreamPriority::kStreamClosed:
|
161
|
+
return "StreamClosed";
|
162
|
+
case StreamPriority::kWaitForTransportFlowControl:
|
163
|
+
return "WaitForTransportFlowControl";
|
164
|
+
case StreamPriority::kDefault:
|
165
|
+
return "Default";
|
166
|
+
default:
|
167
|
+
return "unknown";
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
private:
|
172
|
+
class PrioritizedQueue {
|
173
|
+
public:
|
174
|
+
PrioritizedQueue() : buckets_(kLastPriority) {}
|
175
|
+
|
176
|
+
// Pushes a stream id with the given priority to the queue. Sorting is done
|
177
|
+
// based on the priority. If the priority is higher than the max priority,
|
178
|
+
// it will be set to the default priority.
|
179
|
+
void Push(const uint32_t stream_id, StreamPriority priority) {
|
180
|
+
if (priority >= StreamPriority::kLastPriority) {
|
181
|
+
priority = StreamPriority::kDefault;
|
182
|
+
}
|
183
|
+
|
184
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Pushing stream id " << stream_id
|
185
|
+
<< " with priority "
|
186
|
+
<< GetPriorityString(priority);
|
187
|
+
buckets_[static_cast<uint8_t>(priority)].push(stream_id);
|
188
|
+
}
|
189
|
+
|
190
|
+
// Pops a stream id from the queue based on the priority. If the priority is
|
191
|
+
// kWaitForTransportFlowControl, transport_tokens_available is checked to
|
192
|
+
// see if the stream id can be popped.
|
193
|
+
std::optional<uint32_t> Pop(const bool transport_tokens_available) {
|
194
|
+
for (uint8_t i = 0; i < buckets_.size(); ++i) {
|
195
|
+
auto& bucket = buckets_[i];
|
196
|
+
if (!bucket.empty()) {
|
197
|
+
if (i == kWaitForTransportFlowControlIndex &&
|
198
|
+
!transport_tokens_available) {
|
199
|
+
GRPC_WRITABLE_STREAMS_DEBUG
|
200
|
+
<< "Transport tokens unavailable, skipping "
|
201
|
+
"transport flow control wait list";
|
202
|
+
continue;
|
203
|
+
}
|
204
|
+
|
205
|
+
uint32_t stream_id = bucket.front();
|
206
|
+
bucket.pop();
|
207
|
+
GRPC_WRITABLE_STREAMS_DEBUG
|
208
|
+
<< "Popping stream id " << stream_id << " from priority "
|
209
|
+
<< GetPriorityString(static_cast<StreamPriority>(i));
|
210
|
+
return stream_id;
|
211
|
+
}
|
212
|
+
}
|
213
|
+
return std::nullopt;
|
214
|
+
}
|
215
|
+
|
216
|
+
static constexpr uint8_t kLastPriority =
|
217
|
+
static_cast<uint8_t>(StreamPriority::kLastPriority);
|
218
|
+
static constexpr uint8_t kWaitForTransportFlowControlIndex =
|
219
|
+
static_cast<uint8_t>(StreamPriority::kWaitForTransportFlowControl);
|
220
|
+
std::vector<std::queue<uint32_t>> buckets_;
|
221
|
+
};
|
222
|
+
|
223
|
+
struct StreamIDAndPriority {
|
224
|
+
const uint32_t stream_id;
|
225
|
+
const StreamPriority priority;
|
226
|
+
};
|
227
|
+
|
228
|
+
void AddToPrioritizedQueue(const std::vector<StreamIDAndPriority>& batch) {
|
229
|
+
for (auto stream_id_priority : batch) {
|
230
|
+
prioritized_queue_.Push(stream_id_priority.stream_id,
|
231
|
+
stream_id_priority.priority);
|
232
|
+
}
|
233
|
+
}
|
234
|
+
|
235
|
+
// TODO(akshitpatel) : [PH2][P4] - Verify if this works for large number of
|
236
|
+
// active streams based on the load tests. The reasoning to use max uint32_t
|
237
|
+
// is that even when the streams are dequeued from the queue, the streams
|
238
|
+
// will only be marked as non-writable after stream data queue dequeue
|
239
|
+
// happens. With this said, it should not matter whether the streams are
|
240
|
+
// kept in mpsc queue or in the PriorityQueue. Additionally, having all
|
241
|
+
// the writable streams in the PriorityQueue will return streams based on
|
242
|
+
// a more recent enqueue snapshot.
|
243
|
+
static constexpr uint32_t kMaxBatchSize =
|
244
|
+
std::numeric_limits<uint32_t>::max();
|
245
|
+
|
246
|
+
MpscReceiver<StreamIDAndPriority> queue_;
|
247
|
+
MpscSender<StreamIDAndPriority> sender_;
|
248
|
+
PrioritizedQueue prioritized_queue_;
|
249
|
+
};
|
250
|
+
|
251
|
+
} // namespace http2
|
252
|
+
} // namespace grpc_core
|
253
|
+
|
254
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_WRITABLE_STREAMS_H
|
@@ -693,7 +693,7 @@ class StreamWriteContext {
|
|
693
693
|
|
694
694
|
grpc_chttp2_begin_write_result grpc_chttp2_begin_write(
|
695
695
|
grpc_chttp2_transport* t) {
|
696
|
-
|
696
|
+
GRPC_LATENT_SEE_SCOPE("grpc_chttp2_begin_write");
|
697
697
|
|
698
698
|
int64_t outbuf_relative_start_pos = 0;
|
699
699
|
WriteContext ctx(t);
|
@@ -738,8 +738,10 @@ grpc_chttp2_begin_write_result grpc_chttp2_begin_write(
|
|
738
738
|
grpc_event_engine::experimental::
|
739
739
|
grpc_is_event_engine_endpoint(t->ep.get())) {
|
740
740
|
// New way of collecting TCP traces
|
741
|
-
|
742
|
-
|
741
|
+
auto tcp_call_tracer = s->call_tracer->StartNewTcpTrace();
|
742
|
+
if (tcp_call_tracer != nullptr) {
|
743
|
+
ctx.AddTcpCallTracer(std::move(tcp_call_tracer), s->byte_counter);
|
744
|
+
}
|
743
745
|
}
|
744
746
|
}
|
745
747
|
outbuf_relative_start_pos += num_stream_bytes;
|
@@ -766,7 +768,7 @@ grpc_chttp2_begin_write_result grpc_chttp2_begin_write(
|
|
766
768
|
}
|
767
769
|
|
768
770
|
void grpc_chttp2_end_write(grpc_chttp2_transport* t, grpc_error_handle error) {
|
769
|
-
|
771
|
+
GRPC_LATENT_SEE_SCOPE("grpc_chttp2_end_write");
|
770
772
|
grpc_chttp2_stream* s;
|
771
773
|
|
772
774
|
t->write_flow.End();
|