grpc 1.83.1 → 1.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +21 -17
- data/include/grpc/credentials.h +10 -0
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +9 -0
- data/src/core/call/call_filters.h +4 -2
- data/src/core/call/client_call.cc +20 -8
- data/src/core/call/client_call.h +4 -0
- data/src/core/call/interception_chain.cc +2 -0
- data/src/core/call/interception_chain.h +14 -1
- data/src/core/call/metadata.cc +1 -3
- data/src/core/call/metadata_batch.h +13 -5
- data/src/core/call/server_call.cc +31 -14
- data/src/core/call/server_call.h +4 -0
- data/src/core/channelz/text_encode.cc +9 -4
- data/src/core/channelz/v2tov1/convert.cc +2 -2
- data/src/core/client_channel/backup_poller.cc +1 -2
- data/src/core/client_channel/client_channel.cc +6 -33
- data/src/core/client_channel/client_channel_filter.cc +22 -55
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_service_config.cc +3 -19
- data/src/core/client_channel/direct_channel.cc +7 -1
- data/src/core/client_channel/direct_channel.h +2 -2
- data/src/core/client_channel/load_balanced_call_destination.cc +5 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -12
- data/src/core/client_channel/subchannel.cc +310 -1058
- data/src/core/client_channel/subchannel.h +44 -329
- data/src/core/client_channel/subchannel_metrics.cc +48 -0
- data/src/core/client_channel/subchannel_metrics.h +60 -0
- data/src/core/credentials/call/external/file_external_account_credentials.cc +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -3
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +8 -24
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +3 -6
- data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.cc +525 -0
- data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.h +138 -0
- data/src/core/credentials/call/json_util.h +1 -0
- data/src/core/credentials/call/jwt/json_token.cc +10 -2
- data/src/core/credentials/call/jwt/jwt_verifier.cc +15 -1
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +1 -1
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +42 -79
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +2 -5
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +52 -31
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +21 -8
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +59 -72
- data/src/core/credentials/transport/ssl/ssl_credentials.h +9 -8
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +12 -6
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -4
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -18
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +9 -6
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +45 -56
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -4
- data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +26 -0
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +1 -1
- data/src/core/credentials/transport/tls/load_system_roots.h +2 -6
- data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +2 -4
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +13 -15
- data/src/core/credentials/transport/tls/load_system_roots_supported.h +3 -2
- data/src/core/credentials/transport/tls/load_system_roots_windows.cc +5 -8
- data/src/core/credentials/transport/tls/spiffe_utils.cc +1 -1
- data/src/core/credentials/transport/tls/ssl_utils.cc +39 -28
- data/src/core/credentials/transport/tls/ssl_utils.h +12 -49
- data/src/core/credentials/transport/tls/tls_security_connector.cc +48 -33
- data/src/core/credentials/transport/tls/tls_security_connector.h +31 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +15 -11
- data/src/core/ext/filters/http/http_filters_plugin.cc +20 -9
- data/src/core/ext/filters/rbac/rbac_filter.cc +43 -21
- data/src/core/ext/filters/rbac/rbac_filter.h +21 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +32 -67
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/goaway.h +7 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +5 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +141 -130
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +22 -22
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +402 -269
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +80 -49
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +1 -2
- data/src/core/ext/transport/chttp2/transport/http2_status.h +38 -37
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +178 -5
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +345 -5
- data/src/core/ext/transport/chttp2/transport/parsing.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +25 -5
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/read_context.h +30 -3
- data/src/core/ext/transport/chttp2/transport/stream.h +65 -23
- data/src/core/ext/transport/chttp2/transport/writing.cc +0 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -5
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +4 -17
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb.h +1912 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.c +300 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.h +37 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb.h +187 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.c +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.h +31 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb.h +2362 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.c +556 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.h +47 -0
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.h +5 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.c +453 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.h +67 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.h +37 -0
- data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +715 -0
- data/src/core/ext/upbdefs-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upbdefs.h +44 -44
- data/src/core/filter/auth/server_auth_filter.cc +2 -3
- data/src/core/filter/composite/composite_filter.cc +45 -33
- data/src/core/filter/composite/composite_filter.h +5 -4
- data/src/core/filter/ext_proc/ext_proc_filter.cc +224 -0
- data/src/core/filter/ext_proc/ext_proc_filter.h +155 -0
- data/src/core/filter/ext_proc/ext_proc_messages.cc +701 -0
- data/src/core/filter/ext_proc/ext_proc_messages.h +297 -0
- data/src/core/filter/filter_args.h +13 -2
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -3
- data/src/core/handshaker/security/security_handshaker.cc +9 -6
- data/src/core/lib/channel/channel_stack.cc +3 -0
- data/src/core/lib/channel/channel_stack.h +2 -0
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -2
- data/src/core/lib/channel/promise_based_filter.cc +132 -20
- data/src/core/lib/channel/promise_based_filter.h +42 -12
- data/src/core/lib/compression/compression_internal.cc +4 -5
- data/src/core/lib/debug/trace_flags.cc +8 -0
- data/src/core/lib/debug/trace_flags.h +3 -0
- data/src/core/lib/event_engine/ares_resolver.cc +54 -50
- data/src/core/lib/event_engine/ares_resolver.h +3 -2
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -10
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +74 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +1 -3
- data/src/core/lib/experiments/experiments.cc +60 -96
- data/src/core/lib/experiments/experiments.h +34 -50
- data/src/core/lib/iomgr/cfstream_handle.cc +2 -6
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -10
- data/src/core/lib/iomgr/error.cc +2 -6
- data/src/core/lib/iomgr/error_cfstream.cc +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +5 -9
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -1
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -2
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
- data/src/core/lib/iomgr/iomgr_posix.cc +0 -4
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -4
- data/src/core/lib/iomgr/iomgr_windows.cc +0 -4
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/systemd_utils.cc +0 -1
- data/src/core/lib/iomgr/tcp_client.h +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +23 -15
- data/src/core/lib/iomgr/tcp_server.h +1 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_windows.cc +5 -10
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/vsock.h +3 -1
- data/src/core/lib/resource_quota/memory_quota.cc +1 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +139 -56
- data/src/core/lib/security/authorization/rbac_policy.h +21 -3
- data/src/core/lib/surface/call.cc +3 -9
- data/src/core/lib/surface/call_utils.h +113 -0
- data/src/core/lib/surface/channel_create.cc +1 -1
- data/src/core/lib/surface/channel_create.h +0 -2
- data/src/core/lib/surface/channel_init.cc +77 -38
- data/src/core/lib/surface/channel_init.h +30 -16
- data/src/core/lib/surface/filter_stack_call.cc +5 -10
- data/src/core/lib/surface/init.cc +13 -27
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +0 -27
- data/src/core/lib/transport/error_utils.h +0 -16
- data/src/core/lib/transport/transport.h +7 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +2 -0
- data/src/core/load_balancing/rls/rls.cc +28 -11
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -42
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +0 -2
- data/src/core/load_balancing/xds/cds.cc +3 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +0 -1
- data/src/core/mitigation_engine/mitigation.h +14 -5
- data/src/core/mitigation_engine/mitigation_engine.h +7 -3
- data/src/core/mitigation_engine/mitigation_provider.h +2 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +39 -8
- data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc} +42 -41
- data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h} +8 -5
- data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc} +1 -1
- data/src/core/resolver/dns/{event_engine/service_config_helper.h → service_config_helper.h} +3 -3
- data/src/core/resolver/endpoint_addresses.h +3 -0
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +35 -9
- data/src/core/server/server.cc +2 -6
- data/src/core/server/server_config_selector.h +18 -3
- data/src/core/server/server_config_selector_filter.cc +178 -91
- data/src/core/server/server_config_selector_filter.h +58 -3
- data/src/core/server/xds_server_config_fetcher.cc +196 -129
- data/src/core/server/xds_server_config_fetcher.h +49 -0
- data/src/core/server/xds_server_config_fetcher_legacy.cc +41 -37
- data/src/core/telemetry/histogram.h +94 -14
- data/src/core/telemetry/instrument.cc +179 -74
- data/src/core/telemetry/instrument.h +78 -30
- data/src/core/telemetry/metrics.h +5 -0
- data/src/core/{resolver/dns/dns_resolver_plugin.h → telemetry/telemetry_label.h} +12 -8
- data/src/core/tsi/alts/crypt/aes_gcm.cc +10 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -1
- data/src/core/tsi/ssl_telemetry_utils.cc +216 -259
- data/src/core/tsi/ssl_telemetry_utils.h +12 -2
- data/src/core/tsi/ssl_transport_security.cc +238 -80
- data/src/core/tsi/ssl_transport_security.h +63 -33
- data/src/core/tsi/tls_telemetry.cc +31 -0
- data/src/core/tsi/tls_telemetry.h +47 -0
- data/src/core/tsi/transport_security.cc +2 -2
- data/src/core/tsi/transport_security.h +1 -1
- data/src/core/tsi/transport_security_interface.h +1 -1
- data/src/core/{resolver/dns/native/dns_resolver.h → util/address_sorting_init.cc} +21 -8
- data/src/core/{resolver/dns/c_ares/grpc_ares_wrapper_posix.cc → util/address_sorting_init.h} +7 -8
- data/src/core/util/http_client/httpcli.cc +16 -53
- data/src/core/util/http_client/httpcli.h +0 -7
- data/src/core/util/http_client/httpcli_security_connector.cc +13 -8
- data/src/core/util/linux/cpu.cc +1 -1
- data/src/core/util/load_file.cc +3 -9
- data/src/core/util/load_file.h +3 -4
- data/src/core/util/matchers.h +8 -0
- data/src/core/util/posix/cpu.cc +1 -1
- data/src/core/util/status_helper.cc +0 -20
- data/src/core/util/status_helper.h +3 -14
- data/src/core/xds/grpc/xds_audit_logger_registry.cc +51 -31
- data/src/core/xds/grpc/xds_audit_logger_registry.h +17 -3
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -10
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -6
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +488 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.h +97 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +7 -7
- data/src/core/xds/grpc/xds_client_grpc.cc +4 -8
- data/src/core/xds/grpc/xds_client_grpc.h +0 -4
- data/src/core/xds/grpc/xds_cluster.h +1 -0
- data/src/core/xds/grpc/xds_cluster_parser.cc +1 -5
- data/src/core/xds/grpc/xds_cluster_parser.h +0 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +0 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +0 -2
- data/src/core/xds/grpc/xds_common_types.cc +0 -91
- data/src/core/xds/grpc/xds_common_types.h +1 -47
- data/src/core/xds/grpc/xds_common_types_parser.cc +84 -378
- data/src/core/xds/grpc/xds_common_types_parser.h +9 -11
- data/src/core/xds/grpc/xds_endpoint_parser.cc +0 -2
- data/src/core/xds/grpc/xds_grpc_service_parser.cc +177 -0
- data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → xds/grpc/xds_grpc_service_parser.h} +14 -9
- data/src/core/xds/grpc/xds_http_composite_filter.cc +26 -21
- data/src/core/xds/grpc/xds_http_composite_filter.h +4 -3
- data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +418 -0
- data/src/core/xds/grpc/xds_http_ext_proc_filter.h +89 -0
- data/src/core/xds/grpc/xds_http_fault_filter.cc +9 -12
- data/src/core/xds/grpc/xds_http_fault_filter.h +1 -4
- data/src/core/xds/grpc/xds_http_filter.cc +2 -1
- data/src/core/xds/grpc/xds_http_filter.h +6 -5
- data/src/core/xds/grpc/xds_http_filter_registry.cc +10 -127
- data/src/core/xds/grpc/xds_http_filter_registry.h +7 -59
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +13 -14
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +403 -25
- data/src/core/xds/grpc/xds_http_rbac_filter.h +1 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +8 -13
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +1 -4
- data/src/core/xds/grpc/xds_lb_policy_registry.cc +0 -292
- data/src/core/xds/grpc/xds_lb_policy_registry.h +7 -3
- data/src/core/xds/grpc/xds_listener.cc +2 -0
- data/src/core/xds/grpc/xds_listener.h +5 -0
- data/src/core/xds/grpc/xds_listener_parser.cc +16 -11
- data/src/core/xds/grpc/xds_matcher_parse.h +3 -1
- data/src/core/xds/grpc/xds_metadata_parser.cc +6 -1
- data/src/core/xds/grpc/xds_metadata_parser.h +2 -0
- data/src/core/xds/grpc/xds_route_config.cc +2 -0
- data/src/core/xds/grpc/xds_route_config.h +3 -1
- data/src/core/xds/grpc/xds_route_config_parser.cc +13 -79
- data/src/core/xds/grpc/xds_route_config_parser.h +0 -3
- data/src/core/xds/grpc/xds_routing.cc +116 -69
- data/src/core/xds/grpc/xds_routing.h +19 -8
- data/src/core/xds/grpc/xds_tls_context.cc +117 -0
- data/src/core/xds/grpc/xds_tls_context.h +76 -0
- data/src/core/xds/grpc/xds_tls_context_parser.cc +275 -0
- data/src/core/xds/grpc/xds_tls_context_parser.h +35 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +41 -38
- data/src/core/xds/grpc/xds_transport_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_call.c +26 -15
- data/src/ruby/ext/grpc/rb_completion_queue.c +6 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +5 -4
- data/src/ruby/spec/call_spec.rb +14 -0
- data/src/ruby/spec/generic/server_interceptors_spec.rb +3 -6
- metadata +50 -35
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +0 -716
- data/src/core/lib/iomgr/resolve_address.cc +0 -59
- data/src/core/lib/iomgr/resolve_address.h +0 -125
- data/src/core/lib/iomgr/resolve_address_impl.h +0 -58
- data/src/core/lib/iomgr/resolve_address_posix.cc +0 -184
- data/src/core/lib/iomgr/resolve_address_posix.h +0 -78
- data/src/core/lib/iomgr/resolve_address_windows.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_windows.h +0 -76
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +0 -781
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +0 -93
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +0 -203
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -838
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1237
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +0 -130
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +0 -35
- data/src/core/resolver/dns/dns_resolver_plugin.cc +0 -64
- data/src/core/resolver/dns/native/dns_resolver.cc +0 -173
- data/src/core/util/json/json_util.cc +0 -101
- data/src/core/util/json/json_util.h +0 -163
|
@@ -171,7 +171,7 @@ void Http2ClientTransport::StartWatch(RefCountedPtr<StateWatcher> watcher) {
|
|
|
171
171
|
MutexLock lock(&transport_mutex_);
|
|
172
172
|
GRPC_CHECK(watcher_ == nullptr);
|
|
173
173
|
watcher_ = std::move(watcher);
|
|
174
|
-
if (
|
|
174
|
+
if (shutdown_tracker_.IsShutdownInitiated(transport_mutex_)) {
|
|
175
175
|
// TODO(tjagtap) : [PH2][P2] : Provide better status message and
|
|
176
176
|
// disconnect info here.
|
|
177
177
|
NotifyStateWatcherOnDisconnectLocked(
|
|
@@ -219,7 +219,7 @@ absl::Status Http2ClientTransport::AckPing(uint64_t opaque_data) {
|
|
|
219
219
|
|
|
220
220
|
void Http2ClientTransport::Orphan() {
|
|
221
221
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::Orphan Begin";
|
|
222
|
-
// Accessing
|
|
222
|
+
// Accessing transport_party here is not advisable. It may so happen that
|
|
223
223
|
// the party is already freed/may free up any time. The only guarantee here
|
|
224
224
|
// is that the transport is still valid.
|
|
225
225
|
SourceDestructing();
|
|
@@ -501,10 +501,6 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
|
|
|
501
501
|
keepalive_time_.millis() > max_keepalive_time_millis
|
|
502
502
|
? INT_MAX
|
|
503
503
|
: keepalive_time_.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
|
504
|
-
if (!IsSubchannelConnectionScalingEnabled()) {
|
|
505
|
-
status.SetPayload(kKeepaliveThrottlingKey,
|
|
506
|
-
absl::Cord(std::to_string(throttled_keepalive_time)));
|
|
507
|
-
}
|
|
508
504
|
disconnect_info.keepalive_time =
|
|
509
505
|
Duration::Milliseconds(throttled_keepalive_time);
|
|
510
506
|
}
|
|
@@ -701,39 +697,25 @@ auto Http2ClientTransport::ReadLoop() {
|
|
|
701
697
|
///////////////////////////////////////////////////////////////////////////////
|
|
702
698
|
// Flow Control for the Transport
|
|
703
699
|
|
|
704
|
-
auto Http2ClientTransport::
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
if (is_action_empty) {
|
|
724
|
-
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is
|
|
725
|
-
// done. We must continue to do PeriodicUpdate once BDP is in
|
|
726
|
-
// place.
|
|
727
|
-
MutexLock lock(&transport_mutex_);
|
|
728
|
-
if (GetActiveStreamCountLocked() == 0) {
|
|
729
|
-
AddPeriodicUpdatePromiseWaker();
|
|
730
|
-
return Pending{};
|
|
731
|
-
}
|
|
732
|
-
}
|
|
733
|
-
return absl::OkStatus();
|
|
734
|
-
},
|
|
735
|
-
[]() -> LoopCtl<absl::Status> { return Continue{}; });
|
|
736
|
-
}));
|
|
700
|
+
auto Http2ClientTransport::BdpLoop() {
|
|
701
|
+
return AssertResultType<absl::Status>(Loop([this]() {
|
|
702
|
+
return TrySeq(
|
|
703
|
+
flow_control_.WaitForBdpActivation(),
|
|
704
|
+
[this]() {
|
|
705
|
+
// TODO(akshitpatel) : [PH2][P1] : Reset the keepalive ping timer
|
|
706
|
+
// when a BDP ping is sent, similar to CHTTP2's start_bdp_ping_locked.
|
|
707
|
+
return ping_manager_->RequestPing(
|
|
708
|
+
[this] { flow_control_.StartBdpPing(); },
|
|
709
|
+
/*important=*/false);
|
|
710
|
+
},
|
|
711
|
+
[this]() {
|
|
712
|
+
Duration sleep_duration = flow_control_.CompleteBdpPing();
|
|
713
|
+
chttp2::FlowControlAction action = flow_control_.PeriodicUpdate();
|
|
714
|
+
ActOnFlowControlAction(action, nullptr);
|
|
715
|
+
return Sleep(sleep_duration);
|
|
716
|
+
},
|
|
717
|
+
[]() -> LoopCtl<absl::Status> { return Continue{}; });
|
|
718
|
+
}));
|
|
737
719
|
}
|
|
738
720
|
|
|
739
721
|
// Equivalent to grpc_chttp2_act_on_flowctl_action in chttp2_transport.cc
|
|
@@ -831,11 +813,6 @@ absl::Status Http2ClientTransport::PrepareControlFrames() {
|
|
|
831
813
|
// by a SETTINGS frame, which MAY be empty.
|
|
832
814
|
settings_->MaybeGetSettingsAndSettingsAckFrames(flow_control_,
|
|
833
815
|
frame_sender);
|
|
834
|
-
// TODO(tjagtap) [PH2][P2][Server] : This will be opposite for server. We
|
|
835
|
-
// must read before we write for the server. So the ReadLoop will be Spawned
|
|
836
|
-
// just after the constructor, and the write loop should be spawned only
|
|
837
|
-
// after the first SETTINGS frame is completely received.
|
|
838
|
-
//
|
|
839
816
|
// Because the client is expected to write before it reads, we spawn the
|
|
840
817
|
// ReadLoop of the client only after the first write is queued.
|
|
841
818
|
SpawnGuardedTransportParty("ReadLoop", UntilTransportClosed(ReadLoop()));
|
|
@@ -1134,6 +1111,9 @@ auto Http2ClientTransport::MultiplexerLoop() {
|
|
|
1134
1111
|
}
|
|
1135
1112
|
|
|
1136
1113
|
absl::Status Http2ClientTransport::InitializeStream(Stream& stream) {
|
|
1114
|
+
if (shutdown_tracker_.IsPartyShutdownInitiated()) {
|
|
1115
|
+
return absl::UnavailableError("Transport closed");
|
|
1116
|
+
}
|
|
1137
1117
|
absl::StatusOr<uint32_t> next_stream_id = NextStreamId();
|
|
1138
1118
|
if (!next_stream_id.ok()) {
|
|
1139
1119
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::InitializeStream "
|
|
@@ -1152,7 +1132,6 @@ absl::Status Http2ClientTransport::InitializeStream(Stream& stream) {
|
|
|
1152
1132
|
}
|
|
1153
1133
|
|
|
1154
1134
|
void Http2ClientTransport::AddToStreamList(RefCountedPtr<Stream> stream) {
|
|
1155
|
-
bool should_wake_periodic_updates = false;
|
|
1156
1135
|
{
|
|
1157
1136
|
MutexLock lock(&transport_mutex_);
|
|
1158
1137
|
GRPC_DCHECK(stream != nullptr) << "stream is null";
|
|
@@ -1162,15 +1141,6 @@ void Http2ClientTransport::AddToStreamList(RefCountedPtr<Stream> stream) {
|
|
|
1162
1141
|
<< stream->GetStreamId();
|
|
1163
1142
|
const uint32_t stream_id = stream->GetStreamId();
|
|
1164
1143
|
stream_list_.emplace(stream_id, std::move(stream));
|
|
1165
|
-
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
1166
|
-
if (GetActiveStreamCountLocked() == 1) {
|
|
1167
|
-
should_wake_periodic_updates = true;
|
|
1168
|
-
}
|
|
1169
|
-
}
|
|
1170
|
-
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
1171
|
-
if (should_wake_periodic_updates) {
|
|
1172
|
-
// Release the lock before you wake up another promise on the party.
|
|
1173
|
-
WakeupPeriodicUpdatePromise();
|
|
1174
1144
|
}
|
|
1175
1145
|
}
|
|
1176
1146
|
|
|
@@ -1231,7 +1201,8 @@ Http2ClientTransport::Http2ClientTransport(
|
|
|
1231
1201
|
next_stream_id_(/*Initial Stream ID*/ 1),
|
|
1232
1202
|
should_reset_ping_clock_(false),
|
|
1233
1203
|
read_context_(MaxNewStreamsPerRead(channel_args), endpoint_, kIsClient,
|
|
1234
|
-
GetMaxSecurityFrameSize(channel_args)
|
|
1204
|
+
GetMaxSecurityFrameSize(channel_args),
|
|
1205
|
+
GetPingOnRstStreamPercent(channel_args, kIsClient)),
|
|
1235
1206
|
transport_write_context_(kIsClient),
|
|
1236
1207
|
ping_manager_(std::nullopt),
|
|
1237
1208
|
keepalive_manager_(std::nullopt),
|
|
@@ -1246,16 +1217,16 @@ Http2ClientTransport::Http2ClientTransport(
|
|
|
1246
1217
|
security_frame_handler_(MakeRefCounted<SecurityFrameHandler>()),
|
|
1247
1218
|
ztrace_collector_(std::make_shared<PromiseHttp2ZTraceCollector>()) {
|
|
1248
1219
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::Http2ClientTransport Begin";
|
|
1249
|
-
// Initialize the
|
|
1220
|
+
// Initialize the transport party and write party.
|
|
1250
1221
|
RefCountedPtr<Arena> party_arena = SimpleArenaAllocator(0)->MakeArena();
|
|
1251
1222
|
party_arena->SetContext<EventEngine>(event_engine_.get());
|
|
1252
|
-
|
|
1223
|
+
transport_party_ = Party::Make(std::move(party_arena));
|
|
1253
1224
|
|
|
1254
1225
|
InitLocalSettings(settings_->mutable_local(), /*is_client=*/kIsClient);
|
|
1255
1226
|
TransportChannelArgs args;
|
|
1256
1227
|
ReadChannelArgs(channel_args, args);
|
|
1257
1228
|
|
|
1258
|
-
ping_manager_.emplace(channel_args, args.ping_timeout,
|
|
1229
|
+
ping_manager_.emplace(channel_args, kIsClient, args.ping_timeout,
|
|
1259
1230
|
PingSystemInterfaceImpl::Make(this), event_engine_);
|
|
1260
1231
|
|
|
1261
1232
|
// The keepalive loop is only spawned if the keepalive time is not infinity.
|
|
@@ -1274,18 +1245,25 @@ Http2ClientTransport::Http2ClientTransport(
|
|
|
1274
1245
|
void Http2ClientTransport::SpawnTransportLoops() {
|
|
1275
1246
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::SpawnTransportLoops Begin";
|
|
1276
1247
|
MaybeSpawnKeepaliveLoop();
|
|
1277
|
-
SpawnGuardedTransportParty(
|
|
1278
|
-
"FlowControlPeriodicUpdateLoop",
|
|
1279
|
-
UntilTransportClosed(FlowControlPeriodicUpdateLoop()));
|
|
1280
|
-
|
|
1281
1248
|
if (!TriggerWriteCycleOrHandleError()) {
|
|
1282
1249
|
return;
|
|
1283
1250
|
}
|
|
1284
1251
|
// For Client, write happens before read. So MultiplexerLoop is spawned first.
|
|
1285
1252
|
// ReadLoop is spawned after the first write.
|
|
1286
1253
|
// For Server, read happens before write. So ReadLoop is spawned first.
|
|
1287
|
-
SpawnGuardedTransportParty(
|
|
1288
|
-
|
|
1254
|
+
SpawnGuardedTransportParty(
|
|
1255
|
+
"MultiplexerLoop",
|
|
1256
|
+
|
|
1257
|
+
[self = RefAsSubclass<Http2ClientTransport>()]() {
|
|
1258
|
+
return self->UntilTransportClosed(self->MultiplexerLoop());
|
|
1259
|
+
});
|
|
1260
|
+
if (flow_control_.bdp_probe()) {
|
|
1261
|
+
SpawnGuardedTransportParty(
|
|
1262
|
+
"BdpLoop", [self = RefAsSubclass<Http2ClientTransport>()]() {
|
|
1263
|
+
return self->UntilTransportClosed(self->BdpLoop());
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1289
1267
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::SpawnTransportLoops End";
|
|
1290
1268
|
}
|
|
1291
1269
|
|
|
@@ -1371,8 +1349,13 @@ void Http2ClientTransport::HandleStreamStateChange(Stream& stream,
|
|
|
1371
1349
|
}
|
|
1372
1350
|
|
|
1373
1351
|
void Http2ClientTransport::CleanupStream(Stream& stream) {
|
|
1374
|
-
|
|
1375
|
-
|
|
1352
|
+
{
|
|
1353
|
+
MutexLock lock(&transport_mutex_);
|
|
1354
|
+
stream_list_.erase(stream.GetStreamId());
|
|
1355
|
+
}
|
|
1356
|
+
// Subtract any positive announced window delta of closed stream from the
|
|
1357
|
+
// transport flow control.
|
|
1358
|
+
stream.GetStreamFlowControl().OnStreamClosed();
|
|
1376
1359
|
}
|
|
1377
1360
|
|
|
1378
1361
|
void Http2ClientTransport::BeginCloseStream(
|
|
@@ -1393,30 +1376,99 @@ void Http2ClientTransport::BeginCloseStream(
|
|
|
1393
1376
|
<< ":" << whence.line();
|
|
1394
1377
|
|
|
1395
1378
|
// Enqueue RST_STREAM.
|
|
1396
|
-
|
|
1379
|
+
EnqueueResetStreamFromTransportParty(stream, reset_stream_error_code);
|
|
1380
|
+
HandleStreamStateChange(
|
|
1381
|
+
*stream, stream->OnInitiateReset(std::move(trailing_metadata_status)));
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
void Http2ClientTransport::EnqueueResetStreamFromTransportParty(
|
|
1385
|
+
RefCountedPtr<Stream> stream, const uint32_t reset_stream_error_code) {
|
|
1386
|
+
const absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
|
|
1397
1387
|
stream->EnqueueResetStream(reset_stream_error_code);
|
|
1398
1388
|
GRPC_HTTP2_CLIENT_DLOG << "Enqueued ResetStream with error code="
|
|
1399
1389
|
<< reset_stream_error_code
|
|
1400
1390
|
<< " status=" << enqueue_result.status();
|
|
1401
|
-
if (enqueue_result.ok()) {
|
|
1402
|
-
GRPC_UNUSED absl::Status status =
|
|
1403
|
-
|
|
1404
|
-
}
|
|
1405
|
-
//
|
|
1406
|
-
//
|
|
1407
|
-
|
|
1408
|
-
stream->OnInitiateReset(trailing_metadata_status));
|
|
1391
|
+
if (GPR_LIKELY(enqueue_result.ok())) {
|
|
1392
|
+
GRPC_UNUSED absl::Status status = MaybeAddStreamToWritableStreamList(
|
|
1393
|
+
std::move(stream), enqueue_result.value());
|
|
1394
|
+
}
|
|
1395
|
+
// This function could be hit multiple times for the same stream. So there is
|
|
1396
|
+
// a chance that we may overcount induced frames.
|
|
1397
|
+
// It is a bug, but not worth fixing for now.
|
|
1409
1398
|
read_context_.OnResetFrameEnqueued(reset_stream_error_code);
|
|
1410
1399
|
}
|
|
1411
1400
|
|
|
1412
1401
|
void Http2ClientTransport::CloseTransport() {
|
|
1413
1402
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CloseTransport";
|
|
1414
1403
|
|
|
1415
|
-
|
|
1404
|
+
shutdown_tracker_.MarkShutdownComplete();
|
|
1416
1405
|
settings_->HandleTransportShutdown(event_engine_.get());
|
|
1417
1406
|
|
|
1418
|
-
// This is the only place where the
|
|
1419
|
-
|
|
1407
|
+
// This is the only place where the transport_party_ is reset.
|
|
1408
|
+
transport_party_.reset();
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
void Http2ClientTransport::CloseAllActiveStreams(
|
|
1412
|
+
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>>&& stream_list,
|
|
1413
|
+
const Http2Status& http2_status, DebugLocation whence) {
|
|
1414
|
+
// Close all the streams that are still active on the transport.
|
|
1415
|
+
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list_2;
|
|
1416
|
+
{
|
|
1417
|
+
MutexLock lock(&transport_mutex_);
|
|
1418
|
+
stream_list_2 = std::move(stream_list_);
|
|
1419
|
+
stream_list_.clear();
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CloseAllActiveStreams "
|
|
1423
|
+
"Cleaning up call stacks";
|
|
1424
|
+
|
|
1425
|
+
auto close_streams =
|
|
1426
|
+
[&](const absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>>& list) {
|
|
1427
|
+
for (const auto& pair : list) {
|
|
1428
|
+
RefCountedPtr<Stream> stream = pair.second;
|
|
1429
|
+
BeginCloseStream(std::move(stream),
|
|
1430
|
+
Http2ErrorCodeToFrameErrorCode(
|
|
1431
|
+
http2_status.GetConnectionErrorCode()),
|
|
1432
|
+
http2_status.GetAbslConnectionError(), whence);
|
|
1433
|
+
}
|
|
1434
|
+
};
|
|
1435
|
+
|
|
1436
|
+
close_streams(stream_list); // Snapshot 1
|
|
1437
|
+
close_streams(stream_list_2); // Snapshot 2
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
auto Http2ClientTransport::CloseTransportFactory(
|
|
1441
|
+
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list,
|
|
1442
|
+
Http2Status http2_status, DebugLocation whence) {
|
|
1443
|
+
return [self = RefAsSubclass<Http2ClientTransport>(),
|
|
1444
|
+
stream_list = std::move(stream_list),
|
|
1445
|
+
http2_status = std::move(http2_status), whence]() mutable {
|
|
1446
|
+
self->shutdown_tracker_.InitiatePartyShutdown();
|
|
1447
|
+
self->security_frame_handler_->OnTransportClosed();
|
|
1448
|
+
|
|
1449
|
+
self->CloseAllActiveStreams(std::move(stream_list), http2_status, whence);
|
|
1450
|
+
|
|
1451
|
+
// RFC9113 : A GOAWAY frame might not immediately precede closing of
|
|
1452
|
+
// the connection; a receiver of a GOAWAY that has no more use for the
|
|
1453
|
+
// connection SHOULD still send a GOAWAY frame before terminating the
|
|
1454
|
+
// connection.
|
|
1455
|
+
return Map(
|
|
1456
|
+
// TODO(akshitpatel) : [PH2][P4] : This is creating a copy of
|
|
1457
|
+
// the debug data. Verify if this is causing a performance
|
|
1458
|
+
// issue.
|
|
1459
|
+
Race(AssertResultType<absl::Status>(self->goaway_manager_.RequestGoaway(
|
|
1460
|
+
http2_status.GetConnectionErrorCode(),
|
|
1461
|
+
/*debug_data=*/
|
|
1462
|
+
Slice::FromCopiedString(
|
|
1463
|
+
http2_status.GetAbslConnectionError().message()),
|
|
1464
|
+
kLastIncomingStreamIdClient, /*immediate=*/true)),
|
|
1465
|
+
// Failsafe to close.
|
|
1466
|
+
Sleep(Duration::Seconds(kGoawaySendTimeoutSeconds))),
|
|
1467
|
+
[self](auto) mutable {
|
|
1468
|
+
self->CloseTransport();
|
|
1469
|
+
return Empty{};
|
|
1470
|
+
});
|
|
1471
|
+
};
|
|
1420
1472
|
}
|
|
1421
1473
|
|
|
1422
1474
|
void Http2ClientTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
|
|
@@ -1431,13 +1483,13 @@ void Http2ClientTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
|
|
|
1431
1483
|
// enqueued. Additionally this also prevents additional frames with non-zero
|
|
1432
1484
|
// stream_ids from being processed by the read loop.
|
|
1433
1485
|
ReleasableMutexLock lock(&transport_mutex_);
|
|
1434
|
-
if (
|
|
1486
|
+
if (shutdown_tracker_.IsShutdownInitiated(transport_mutex_)) {
|
|
1435
1487
|
lock.Release();
|
|
1436
1488
|
return;
|
|
1437
1489
|
}
|
|
1438
1490
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::MaybeSpawnCloseTransport "
|
|
1439
1491
|
"Initiating transport close";
|
|
1440
|
-
|
|
1492
|
+
shutdown_tracker_.InitiateShutdown(transport_mutex_);
|
|
1441
1493
|
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list =
|
|
1442
1494
|
std::move(stream_list_);
|
|
1443
1495
|
stream_list_.clear();
|
|
@@ -1447,56 +1499,14 @@ void Http2ClientTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
|
|
|
1447
1499
|
lock.Release();
|
|
1448
1500
|
|
|
1449
1501
|
SpawnInfallibleTransportParty(
|
|
1450
|
-
"CloseTransport",
|
|
1451
|
-
|
|
1452
|
-
http2_status = std::move(http2_status)]() mutable {
|
|
1453
|
-
self->security_frame_handler_->OnTransportClosed();
|
|
1454
|
-
GRPC_HTTP2_CLIENT_DLOG
|
|
1455
|
-
<< "Http2ClientTransport::MaybeSpawnCloseTransport "
|
|
1456
|
-
"Cleaning up call stacks";
|
|
1457
|
-
// Clean up the call stacks for all active streams.
|
|
1458
|
-
for (const auto& pair : stream_list) {
|
|
1459
|
-
// There is no merit in transitioning the stream to
|
|
1460
|
-
// closed state here as the subsequent lookups would
|
|
1461
|
-
// fail. Also, as this is running on the transport
|
|
1462
|
-
// party, there would not be concurrent access to the stream.
|
|
1463
|
-
RefCountedPtr<Stream> stream = pair.second;
|
|
1464
|
-
self->BeginCloseStream(std::move(stream),
|
|
1465
|
-
Http2ErrorCodeToFrameErrorCode(
|
|
1466
|
-
http2_status.GetConnectionErrorCode()),
|
|
1467
|
-
http2_status.GetAbslConnectionError());
|
|
1468
|
-
}
|
|
1469
|
-
|
|
1470
|
-
// RFC9113 : A GOAWAY frame might not immediately precede closing of
|
|
1471
|
-
// the connection; a receiver of a GOAWAY that has no more use for the
|
|
1472
|
-
// connection SHOULD still send a GOAWAY frame before terminating the
|
|
1473
|
-
// connection.
|
|
1474
|
-
return Map(
|
|
1475
|
-
// TODO(akshitpatel) : [PH2][P4] : This is creating a copy of
|
|
1476
|
-
// the debug data. Verify if this is causing a performance
|
|
1477
|
-
// issue.
|
|
1478
|
-
Race(AssertResultType<absl::Status>(
|
|
1479
|
-
self->goaway_manager_.RequestGoaway(
|
|
1480
|
-
http2_status.GetConnectionErrorCode(),
|
|
1481
|
-
/*debug_data=*/
|
|
1482
|
-
Slice::FromCopiedString(
|
|
1483
|
-
http2_status.GetAbslConnectionError().message()),
|
|
1484
|
-
kLastIncomingStreamIdClient, /*immediate=*/true)),
|
|
1485
|
-
// Failsafe to close the transport if goaway is not
|
|
1486
|
-
// sent within kGoawaySendTimeoutSeconds seconds.
|
|
1487
|
-
Sleep(Duration::Seconds(kGoawaySendTimeoutSeconds))),
|
|
1488
|
-
[self](auto) mutable {
|
|
1489
|
-
self->CloseTransport();
|
|
1490
|
-
return Empty{};
|
|
1491
|
-
});
|
|
1492
|
-
;
|
|
1493
|
-
});
|
|
1502
|
+
"CloseTransport", CloseTransportFactory(std::move(stream_list),
|
|
1503
|
+
std::move(http2_status), whence));
|
|
1494
1504
|
}
|
|
1495
1505
|
|
|
1496
1506
|
Http2ClientTransport::~Http2ClientTransport() {
|
|
1497
1507
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::~Http2ClientTransport Begin";
|
|
1498
1508
|
GRPC_DCHECK(stream_list_.empty());
|
|
1499
|
-
GRPC_DCHECK(
|
|
1509
|
+
GRPC_DCHECK(transport_party_ == nullptr);
|
|
1500
1510
|
memory_owner_.Reset();
|
|
1501
1511
|
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::~Http2ClientTransport End";
|
|
1502
1512
|
}
|
|
@@ -1519,8 +1529,8 @@ void Http2ClientTransport::SpawnAddChannelzData(RefCountedPtr<Party> party,
|
|
|
1519
1529
|
.Set("settings", self->settings_->ChannelzProperties())
|
|
1520
1530
|
.Set("flow_control",
|
|
1521
1531
|
self->flow_control_.stats().ChannelzProperties()));
|
|
1522
|
-
self->
|
|
1523
|
-
|
|
1532
|
+
self->transport_party_->ExportToChannelz("Http2ClientTransport Party",
|
|
1533
|
+
sink);
|
|
1524
1534
|
GRPC_HTTP2_CLIENT_DLOG
|
|
1525
1535
|
<< "Http2ClientTransport::SpawnAddChannelzData End";
|
|
1526
1536
|
return Empty{};
|
|
@@ -1535,9 +1545,10 @@ void Http2ClientTransport::AddData(channelz::DataSink sink) {
|
|
|
1535
1545
|
RefCountedPtr<Party> party = nullptr;
|
|
1536
1546
|
{
|
|
1537
1547
|
MutexLock lock(&self->transport_mutex_);
|
|
1538
|
-
if (GPR_LIKELY(!self->
|
|
1539
|
-
|
|
1540
|
-
|
|
1548
|
+
if (GPR_LIKELY(!self->shutdown_tracker_.IsShutdownInitiated(
|
|
1549
|
+
self->transport_mutex_))) {
|
|
1550
|
+
GRPC_DCHECK(self->transport_party_ != nullptr);
|
|
1551
|
+
party = self->transport_party_;
|
|
1541
1552
|
} else {
|
|
1542
1553
|
GRPC_HTTP2_CLIENT_DLOG
|
|
1543
1554
|
<< "Http2ClientTransport::AddData Transport is closed.";
|
|
@@ -158,7 +158,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
158
158
|
|
|
159
159
|
template <typename Factory>
|
|
160
160
|
void TestOnlySpawnPromise(absl::string_view name, Factory&& factory) {
|
|
161
|
-
SpawnInfallible(
|
|
161
|
+
SpawnInfallible(transport_party_, name, std::forward<Factory>(factory));
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
absl::Status TestOnlyTriggerWriteCycle() { return TriggerWriteCycle(); }
|
|
@@ -331,7 +331,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
331
331
|
Poll<absl::Status>>,
|
|
332
332
|
bool> = true>
|
|
333
333
|
auto UntilTransportClosed(Promise&& promise) {
|
|
334
|
-
return Race(Map(
|
|
334
|
+
return Race(Map(shutdown_tracker_.WaitShutdownComplete(),
|
|
335
335
|
[self = RefAsSubclass<Http2ClientTransport>()](Empty) {
|
|
336
336
|
GRPC_HTTP2_CLIENT_DLOG << "Transport closed";
|
|
337
337
|
return absl::CancelledError("Transport closed");
|
|
@@ -344,7 +344,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
344
344
|
Poll<Empty>>,
|
|
345
345
|
bool> = true>
|
|
346
346
|
auto UntilTransportClosed(Promise&& promise) {
|
|
347
|
-
return Race(Map(
|
|
347
|
+
return Race(Map(shutdown_tracker_.WaitShutdownComplete(),
|
|
348
348
|
[self = RefAsSubclass<Http2ClientTransport>()](Empty) {
|
|
349
349
|
GRPC_HTTP2_CLIENT_DLOG << "Transport closed";
|
|
350
350
|
return Empty{};
|
|
@@ -363,7 +363,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
363
363
|
template <typename Factory>
|
|
364
364
|
void SpawnInfallibleTransportParty(absl::string_view name,
|
|
365
365
|
Factory&& factory) {
|
|
366
|
-
SpawnInfallible(
|
|
366
|
+
SpawnInfallible(transport_party_, name, std::forward<Factory>(factory));
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
// Spawns a promise on the transport party. If the promise returns a non-ok
|
|
@@ -371,7 +371,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
371
371
|
// status.
|
|
372
372
|
template <typename Factory>
|
|
373
373
|
void SpawnGuardedTransportParty(absl::string_view name, Factory&& factory) {
|
|
374
|
-
|
|
374
|
+
transport_party_->Spawn(
|
|
375
375
|
name, std::forward<Factory>(factory),
|
|
376
376
|
[self = RefAsSubclass<Http2ClientTransport>()](absl::Status status) {
|
|
377
377
|
if (!status.ok()) {
|
|
@@ -384,8 +384,8 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
384
384
|
template <typename Factory, typename OnDone>
|
|
385
385
|
void SpawnWithOnDoneTransportParty(absl::string_view name, Factory&& factory,
|
|
386
386
|
OnDone&& on_done) {
|
|
387
|
-
|
|
388
|
-
|
|
387
|
+
transport_party_->Spawn(name, std::forward<Factory>(factory),
|
|
388
|
+
std::forward<OnDone>(on_done));
|
|
389
389
|
}
|
|
390
390
|
|
|
391
391
|
//////////////////////////////////////////////////////////////////////////////
|
|
@@ -410,15 +410,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
410
410
|
// tokens are calculated based on the initial window size.
|
|
411
411
|
absl::Status UpdateAllStreamsWritability();
|
|
412
412
|
|
|
413
|
-
auto
|
|
414
|
-
|
|
415
|
-
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
416
|
-
void AddPeriodicUpdatePromiseWaker() {
|
|
417
|
-
periodic_updates_waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
421
|
-
void WakeupPeriodicUpdatePromise() { periodic_updates_waker_.Wakeup(); }
|
|
413
|
+
auto BdpLoop();
|
|
422
414
|
|
|
423
415
|
//////////////////////////////////////////////////////////////////////////////
|
|
424
416
|
// Stream List Operations
|
|
@@ -482,6 +474,9 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
482
474
|
// Runs on the call party.
|
|
483
475
|
std::optional<RefCountedPtr<Stream>> MakeStream(CallHandler call_handler);
|
|
484
476
|
|
|
477
|
+
void EnqueueResetStreamFromTransportParty(RefCountedPtr<Stream> stream,
|
|
478
|
+
uint32_t reset_stream_error_code);
|
|
479
|
+
|
|
485
480
|
// Enqueues a RST_STREAM frame and immediately closes the stream for reads.
|
|
486
481
|
// Writes will be closed by the write loop after the RST_STREAM frame is
|
|
487
482
|
// written to the wire. Once writes are closed, the stream is considered fully
|
|
@@ -557,6 +552,14 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
557
552
|
void MaybeSpawnCloseTransport(Http2Status http2_status,
|
|
558
553
|
DebugLocation whence = {});
|
|
559
554
|
|
|
555
|
+
auto CloseTransportFactory(
|
|
556
|
+
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list,
|
|
557
|
+
Http2Status http2_status, DebugLocation whence = {});
|
|
558
|
+
|
|
559
|
+
void CloseAllActiveStreams(
|
|
560
|
+
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>>&& stream_list,
|
|
561
|
+
const Http2Status& http2_status, DebugLocation whence);
|
|
562
|
+
|
|
560
563
|
// This function MUST run on the transport party.
|
|
561
564
|
void CloseTransport();
|
|
562
565
|
|
|
@@ -668,7 +671,8 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
668
671
|
//////////////////////////////////////////////////////////////////////////////
|
|
669
672
|
// All Data Members
|
|
670
673
|
|
|
671
|
-
|
|
674
|
+
// Refer AGENTS.md for party slot usage
|
|
675
|
+
RefCountedPtr<Party> transport_party_;
|
|
672
676
|
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine_;
|
|
673
677
|
|
|
674
678
|
PromiseEndpoint endpoint_;
|
|
@@ -681,8 +685,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
681
685
|
|
|
682
686
|
uint32_t next_stream_id_;
|
|
683
687
|
HPackCompressor encoder_;
|
|
684
|
-
|
|
685
|
-
Latch<void> transport_closed_latch_;
|
|
688
|
+
TransportShutdownTracker shutdown_tracker_;
|
|
686
689
|
|
|
687
690
|
ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(transport_mutex_){
|
|
688
691
|
"http2_client", GRPC_CHANNEL_READY};
|
|
@@ -716,9 +719,6 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
716
719
|
|
|
717
720
|
RefCountedPtr<SecurityFrameHandler> security_frame_handler_;
|
|
718
721
|
std::shared_ptr<PromiseHttp2ZTraceCollector> ztrace_collector_;
|
|
719
|
-
|
|
720
|
-
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
721
|
-
Waker periodic_updates_waker_;
|
|
722
722
|
};
|
|
723
723
|
|
|
724
724
|
} // namespace http2
|