grpc 1.76.0 → 1.78.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 +11 -5
- data/include/grpc/credentials.h +6 -1
- data/include/grpc/event_engine/memory_allocator.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +5 -0
- data/include/grpc/support/metrics.h +7 -1
- data/src/core/call/call_filters.cc +1 -1
- data/src/core/call/call_filters.h +175 -1
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +27 -5
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +43 -5
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +4 -4
- data/src/core/call/interception_chain.h +7 -6
- data/src/core/call/metadata_batch.cc +49 -55
- data/src/core/call/metadata_batch.h +7 -6
- data/src/core/call/metadata_info.cc +1 -1
- data/src/core/call/parsed_metadata.h +2 -2
- data/src/core/call/request_buffer.cc +1 -1
- data/src/core/call/security_context.cc +1 -1
- data/src/core/call/security_context.h +1 -1
- data/src/core/call/server_call.cc +1 -1
- data/src/core/call/server_call.h +5 -3
- data/src/core/call/simple_slice_based_metadata.h +1 -1
- data/src/core/call/status_util.cc +1 -1
- data/src/core/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +3 -3
- data/src/core/channelz/channelz.cc +13 -11
- data/src/core/channelz/channelz.h +41 -6
- data/src/core/channelz/channelz_registry.cc +2 -2
- data/src/core/channelz/channelz_registry.h +42 -2
- data/src/core/channelz/property_list.h +6 -4
- data/src/core/channelz/v2tov1/convert.cc +6 -6
- data/src/core/channelz/v2tov1/legacy_api.cc +4 -5
- data/src/core/channelz/v2tov1/property_list.cc +1 -1
- data/src/core/channelz/ztrace_collector.h +14 -2
- data/src/core/client_channel/backup_poller.cc +2 -2
- data/src/core/client_channel/buffered_call.cc +140 -0
- data/src/core/client_channel/buffered_call.h +104 -0
- data/src/core/client_channel/client_channel.cc +124 -71
- data/src/core/client_channel/client_channel.h +8 -11
- data/src/core/client_channel/client_channel_factory.h +1 -1
- data/src/core/client_channel/client_channel_filter.cc +393 -663
- data/src/core/client_channel/client_channel_filter.h +57 -150
- data/src/core/client_channel/client_channel_internal.h +5 -1
- data/src/core/client_channel/client_channel_service_config.cc +43 -3
- data/src/core/client_channel/client_channel_service_config.h +12 -1
- data/src/core/client_channel/config_selector.h +2 -2
- data/src/core/client_channel/connector.h +2 -0
- data/src/core/client_channel/dynamic_filters.cc +2 -2
- data/src/core/client_channel/global_subchannel_pool.h +1 -1
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +3 -5
- data/src/core/client_channel/load_balanced_call_destination.h +1 -1
- data/src/core/client_channel/retry_filter.cc +2 -2
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
- data/src/core/client_channel/retry_service_config.cc +3 -3
- data/src/core/client_channel/retry_service_config.h +1 -1
- data/src/core/client_channel/subchannel.cc +106 -17
- data/src/core/client_channel/subchannel.h +24 -8
- data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
- data/src/core/client_channel/subchannel_pool_interface.h +1 -1
- data/src/core/client_channel/subchannel_stream_client.cc +1 -1
- data/src/core/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/config/config_vars.cc +8 -2
- data/src/core/config/config_vars.h +5 -0
- data/src/core/config/core_configuration.h +1 -1
- data/src/core/config/load_config.cc +1 -1
- data/src/core/credentials/call/call_credentials.h +2 -2
- data/src/core/credentials/call/call_creds_registry.h +1 -1
- data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
- data/src/core/credentials/call/call_creds_util.cc +3 -3
- data/src/core/credentials/call/composite/composite_call_credentials.cc +2 -2
- data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +6 -6
- data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
- data/src/core/credentials/call/external/external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +6 -6
- data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
- data/src/core/credentials/call/iam/iam_credentials.cc +2 -2
- data/src/core/credentials/call/iam/iam_credentials.h +1 -1
- data/src/core/credentials/call/json_util.cc +1 -1
- data/src/core/credentials/call/jwt/json_token.cc +4 -4
- data/src/core/credentials/call/jwt/jwt_credentials.cc +3 -3
- data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
- data/src/core/credentials/call/jwt/jwt_verifier.cc +5 -5
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
- data/src/core/credentials/call/jwt_util.cc +3 -3
- data/src/core/credentials/call/jwt_util.h +1 -1
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +29 -60
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
- data/src/core/credentials/call/plugin/plugin_credentials.cc +4 -4
- data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
- data/src/core/credentials/transport/alts/alts_credentials.cc +3 -3
- data/src/core/credentials/transport/alts/alts_security_connector.cc +3 -3
- data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +1 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +1 -1
- data/src/core/credentials/transport/channel_creds_registry.h +1 -1
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/composite/composite_channel_credentials.cc +2 -2
- data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_security_connector.cc +5 -5
- data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +5 -11
- data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
- data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
- data/src/core/credentials/transport/local/local_security_connector.cc +5 -5
- data/src/core/credentials/transport/security_connector.cc +1 -1
- data/src/core/credentials/transport/security_connector.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +5 -5
- data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
- data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
- data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
- data/src/core/credentials/transport/tls/ssl_utils.cc +4 -4
- data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +1 -1
- data/src/core/credentials/transport/tls/tls_security_connector.cc +4 -4
- data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
- data/src/core/credentials/transport/transport_credentials.cc +1 -1
- data/src/core/credentials/transport/transport_credentials.h +2 -2
- data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +5 -5
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
- data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
- data/src/core/ext/filters/http/client_authority_filter.h +4 -1
- data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/compression_filter.h +21 -2
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +50 -37
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -17
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +210 -60
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +39 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +213 -78
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +46 -1
- data/src/core/ext/transport/chttp2/transport/frame.cc +147 -21
- data/src/core/ext/transport/chttp2/transport/frame.h +44 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
- data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +175 -51
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1177 -511
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +264 -174
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -16
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +320 -82
- data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +286 -7
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +187 -19
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +57 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +25 -5
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
- data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +24 -15
- data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +7 -3
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
- data/src/core/ext/transport/chttp2/transport/stream.h +139 -59
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +225 -98
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +5 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +27 -11
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -2
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +8 -5
- data/src/core/filter/auth/auth_filters.h +7 -1
- data/src/core/filter/auth/client_auth_filter.cc +2 -2
- data/src/core/filter/auth/server_auth_filter.cc +3 -3
- data/src/core/filter/blackboard.h +2 -2
- data/src/core/filter/filter_args.h +40 -2
- data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
- data/src/core/handshaker/handshaker.cc +5 -5
- data/src/core/handshaker/handshaker.h +2 -2
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +11 -11
- data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper_registry.h +1 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +4 -4
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +7 -7
- data/src/core/handshaker/security/secure_endpoint.cc +15 -5
- data/src/core/handshaker/security/security_handshaker.cc +8 -5
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
- data/src/core/lib/address_utils/parse_address.cc +5 -5
- data/src/core/lib/address_utils/parse_address.h +2 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
- data/src/core/lib/channel/channel_args.cc +1 -1
- data/src/core/lib/channel/channel_args.h +2 -2
- data/src/core/lib/channel/channel_stack.cc +22 -21
- data/src/core/lib/channel/channel_stack.h +5 -3
- data/src/core/lib/channel/channel_stack_builder.cc +8 -4
- data/src/core/lib/channel/channel_stack_builder.h +10 -9
- data/src/core/lib/channel/channel_stack_builder_impl.cc +7 -13
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.cc +63 -8
- data/src/core/lib/channel/promise_based_filter.h +23 -8
- data/src/core/lib/compression/compression_internal.cc +4 -4
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +1 -1
- data/src/core/lib/debug/trace.cc +2 -5
- data/src/core/lib/debug/trace.h +10 -0
- data/src/core/lib/debug/trace_flags.cc +2 -2
- data/src/core/lib/debug/trace_flags.h +1 -1
- data/src/core/lib/event_engine/ares_resolver.cc +8 -8
- data/src/core/lib/event_engine/ares_resolver.h +4 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
- data/src/core/lib/event_engine/default_event_engine.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +1 -1
- data/src/core/lib/event_engine/extensions/channelz.h +1 -1
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
- data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
- data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
- data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +6 -6
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +7 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +4 -4
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -4
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
- data/src/core/lib/event_engine/utils.cc +3 -3
- data/src/core/lib/event_engine/utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
- data/src/core/lib/event_engine/windows/iocp.cc +1 -1
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
- data/src/core/lib/event_engine/windows/win_socket.cc +1 -1
- data/src/core/lib/event_engine/windows/win_socket.h +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +5 -5
- data/src/core/lib/event_engine/windows/windows_engine.cc +4 -4
- data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
- data/src/core/lib/experiments/config.cc +4 -4
- data/src/core/lib/experiments/experiments.cc +174 -48
- data/src/core/lib/experiments/experiments.h +76 -24
- data/src/core/lib/iomgr/buffer_list.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/closure.h +2 -2
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +1 -1
- data/src/core/lib/iomgr/error.h +2 -2
- data/src/core/lib/iomgr/error_cfstream.cc +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +4 -4
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -5
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +1 -1
- data/src/core/lib/iomgr/polling_entity.cc +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +1 -1
- data/src/core/lib/iomgr/resolve_address.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_posix.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +20 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_windows.cc +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +3 -3
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/vsock.h +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/promise/activity.cc +2 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +3 -3
- data/src/core/lib/promise/arena_promise.h +47 -6
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/join_state.h +1 -1
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/detail/promise_like.h +1 -1
- data/src/core/lib/promise/detail/seq_state.h +3 -3
- data/src/core/lib/promise/detail/status.h +1 -1
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
- data/src/core/lib/promise/for_each.h +3 -3
- data/src/core/lib/promise/if.h +1 -1
- data/src/core/lib/promise/inter_activity_latch.h +3 -3
- data/src/core/lib/promise/inter_activity_mutex.h +1 -1
- data/src/core/lib/promise/interceptor_list.h +3 -3
- data/src/core/lib/promise/latch.h +2 -2
- data/src/core/lib/promise/loop.h +2 -2
- data/src/core/lib/promise/map.h +2 -2
- data/src/core/lib/promise/mpsc.cc +5 -4
- data/src/core/lib/promise/observable.h +2 -2
- data/src/core/lib/promise/party.cc +14 -8
- data/src/core/lib/promise/party.h +11 -4
- data/src/core/lib/promise/pipe.h +16 -2
- data/src/core/lib/promise/poll.h +2 -2
- data/src/core/lib/promise/promise.h +2 -2
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +2 -2
- data/src/core/lib/promise/try_join.h +3 -3
- data/src/core/lib/promise/try_seq.h +3 -3
- data/src/core/lib/promise/wait_set.h +2 -2
- data/src/core/lib/resource_quota/api.cc +1 -1
- data/src/core/lib/resource_quota/arena.cc +1 -1
- data/src/core/lib/resource_quota/connection_quota.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +3 -3
- data/src/core/lib/resource_quota/memory_quota.h +9 -5
- data/src/core/lib/resource_quota/periodic_update.h +1 -1
- data/src/core/lib/resource_quota/resource_quota.cc +8 -0
- data/src/core/lib/resource_quota/resource_quota.h +2 -1
- data/src/core/lib/resource_quota/stream_quota.cc +22 -0
- data/src/core/lib/resource_quota/stream_quota.h +31 -0
- data/src/core/lib/resource_quota/telemetry.h +1 -0
- data/src/core/lib/resource_quota/thread_quota.h +1 -1
- data/src/core/lib/security/authorization/audit_logging.cc +3 -3
- data/src/core/lib/security/authorization/audit_logging.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
- data/src/core/lib/security/authorization/matchers.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +1 -1
- data/src/core/lib/slice/percent_encoding.cc +1 -1
- data/src/core/lib/slice/slice.cc +1 -1
- data/src/core/lib/slice/slice.h +2 -2
- data/src/core/lib/slice/slice_buffer.cc +1 -1
- data/src/core/lib/slice/slice_internal.h +1 -1
- data/src/core/lib/surface/call.cc +42 -14
- data/src/core/lib/surface/call.h +12 -5
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/call_utils.cc +5 -5
- data/src/core/lib/surface/call_utils.h +83 -18
- data/src/core/lib/surface/channel.cc +2 -1
- data/src/core/lib/surface/channel.h +13 -3
- data/src/core/lib/surface/channel_create.cc +2 -2
- data/src/core/lib/surface/channel_create.h +1 -1
- data/src/core/lib/surface/channel_init.cc +5 -5
- data/src/core/lib/surface/channel_init.h +4 -2
- data/src/core/lib/surface/completion_queue.cc +4 -4
- data/src/core/lib/surface/filter_stack_call.cc +13 -8
- data/src/core/lib/surface/filter_stack_call.h +3 -3
- data/src/core/lib/surface/init.cc +4 -4
- data/src/core/lib/surface/lame_client.cc +2 -2
- data/src/core/lib/surface/lame_client.h +3 -3
- data/src/core/lib/surface/legacy_channel.cc +3 -3
- data/src/core/lib/surface/legacy_channel.h +1 -1
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/validate_metadata.h +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/connectivity_state.h +2 -2
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/promise_endpoint.cc +1 -1
- data/src/core/lib/transport/promise_endpoint.h +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/transport.cc +3 -3
- data/src/core/lib/transport/transport.h +62 -4
- data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/load_balancing/address_filtering.cc +1 -1
- data/src/core/load_balancing/address_filtering.h +2 -2
- data/src/core/load_balancing/backend_metric_parser.cc +1 -1
- data/src/core/load_balancing/backend_metric_parser.h +1 -1
- data/src/core/load_balancing/child_policy_handler.cc +4 -4
- data/src/core/load_balancing/child_policy_handler.h +2 -2
- data/src/core/load_balancing/delegating_helper.h +2 -2
- data/src/core/load_balancing/endpoint_list.cc +4 -4
- data/src/core/load_balancing/endpoint_list.h +2 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
- data/src/core/load_balancing/grpclb/grpclb.cc +13 -24
- data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
- data/src/core/load_balancing/health_check_client.cc +9 -5
- data/src/core/load_balancing/health_check_client_internal.h +3 -3
- data/src/core/load_balancing/lb_policy.h +11 -8
- data/src/core/load_balancing/lb_policy_factory.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +2 -2
- data/src/core/load_balancing/lb_policy_registry.h +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +7 -3
- data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +7 -15
- data/src/core/load_balancing/pick_first/pick_first.cc +48 -18
- data/src/core/load_balancing/priority/priority.cc +6 -6
- data/src/core/load_balancing/ring_hash/ring_hash.cc +8 -8
- data/src/core/load_balancing/rls/rls.cc +10 -10
- data/src/core/load_balancing/round_robin/round_robin.cc +7 -7
- data/src/core/load_balancing/subchannel_interface.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +1 -1
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +9 -15
- data/src/core/load_balancing/weighted_target/weighted_target.cc +9 -9
- data/src/core/load_balancing/xds/cds.cc +5 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +22 -39
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
- data/src/core/load_balancing/xds/xds_override_host.h +1 -1
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +6 -6
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
- data/src/core/resolver/dns/dns_resolver_plugin.cc +2 -2
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +8 -8
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
- data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
- data/src/core/resolver/endpoint_addresses.cc +4 -4
- data/src/core/resolver/endpoint_addresses.h +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +3 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +5 -5
- data/src/core/resolver/polling_resolver.cc +5 -5
- data/src/core/resolver/polling_resolver.h +1 -1
- data/src/core/resolver/resolver.h +2 -2
- data/src/core/resolver/resolver_factory.h +2 -2
- data/src/core/resolver/resolver_registry.cc +1 -1
- data/src/core/resolver/resolver_registry.h +1 -1
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
- data/src/core/resolver/xds/xds_config.cc +1 -1
- data/src/core/resolver/xds/xds_config.h +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +2 -2
- data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
- data/src/core/resolver/xds/xds_resolver.cc +16 -13
- data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
- data/src/core/server/add_port.cc +2 -2
- data/src/core/server/server.cc +9 -5
- data/src/core/server/server.h +8 -7
- data/src/core/server/server_call_tracer_filter.cc +1 -1
- data/src/core/server/server_call_tracer_filter.h +5 -1
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/xds_channel_stack_modifier.cc +3 -2
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +10 -10
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
- data/src/core/service_config/service_config_impl.cc +3 -3
- data/src/core/service_config/service_config_impl.h +2 -2
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.h +2 -2
- data/src/core/telemetry/default_tcp_tracer.h +3 -3
- data/src/core/telemetry/histogram.h +1 -1
- data/src/core/telemetry/instrument.cc +550 -270
- data/src/core/telemetry/instrument.h +301 -128
- data/src/core/telemetry/metrics.cc +2 -0
- data/src/core/telemetry/metrics.h +33 -4
- data/src/core/telemetry/stats.h +2 -2
- data/src/core/telemetry/stats_data.cc +1 -1
- data/src/core/telemetry/stats_data.h +2 -2
- data/src/core/transport/auth_context.cc +1 -1
- data/src/core/transport/auth_context.h +2 -1
- data/src/core/transport/auth_context_comparator_registry.h +1 -1
- data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +9 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +9 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +15 -2
- data/src/core/tsi/fake_transport_security.cc +2 -1
- data/src/core/tsi/local_transport_security.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +6 -6
- data/src/core/tsi/ssl_transport_security.h +1 -1
- data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
- data/src/core/tsi/ssl_transport_security_utils.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/alloc.cc +1 -1
- data/src/core/util/backoff.h +1 -1
- data/src/core/util/crash.h +1 -1
- data/src/core/util/dual_ref_counted.h +2 -2
- data/src/core/util/event_log.cc +1 -1
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/gcp_metadata_query.cc +5 -5
- data/src/core/util/gcp_metadata_query.h +2 -2
- data/src/core/util/grpc_check.cc +2 -0
- data/src/core/util/grpc_check.h +1 -1
- data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
- data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
- data/src/core/util/http_client/format_request.cc +1 -1
- data/src/core/util/http_client/httpcli.cc +3 -3
- data/src/core/util/http_client/httpcli.h +4 -4
- data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
- data/src/core/util/http_client/parser.cc +1 -1
- data/src/core/util/json/json_channel_args.h +1 -1
- data/src/core/util/json/json_object_loader.h +6 -6
- data/src/core/util/json/json_reader.cc +2 -2
- data/src/core/util/json/json_reader.h +1 -1
- data/src/core/util/json/json_util.h +3 -3
- data/src/core/util/json/json_writer.cc +1 -1
- data/src/core/util/latent_see.cc +45 -24
- data/src/core/util/latent_see.h +192 -24
- data/src/core/util/linux/cpu.cc +1 -1
- data/src/core/util/load_file.cc +1 -1
- data/src/core/util/load_file.h +1 -1
- data/src/core/util/log.cc +3 -3
- data/src/core/util/lru_cache.h +1 -1
- data/src/core/util/matchers.h +1 -1
- data/src/core/util/memory_usage.h +3 -3
- data/src/core/util/mpscq.h +1 -1
- data/src/core/util/notification.h +1 -1
- data/src/core/util/posix/cpu.cc +1 -1
- data/src/core/util/posix/stat.cc +2 -2
- data/src/core/util/posix/thd.cc +2 -2
- data/src/core/util/posix/tmpfile.cc +2 -2
- data/src/core/util/ref_counted.h +2 -2
- data/src/core/util/ref_counted_ptr.h +1 -1
- data/src/core/util/ref_counted_string.h +1 -1
- data/src/core/util/single_set_ptr.h +3 -1
- data/src/core/util/status_helper.cc +8 -8
- data/src/core/util/status_helper.h +1 -1
- data/src/core/util/string.cc +2 -2
- data/src/core/util/sync_abseil.cc +1 -1
- data/src/core/util/table.h +1 -1
- data/src/core/util/time.cc +1 -1
- data/src/core/util/time_precise.cc +1 -1
- data/src/core/util/unique_ptr_with_bitset.h +1 -1
- data/src/core/util/unique_type_name.h +1 -1
- data/src/core/util/upb_utils.h +6 -1
- data/src/core/util/validation_errors.cc +2 -2
- data/src/core/util/validation_errors.h +2 -3
- data/src/core/util/wait_for_single_owner.h +2 -2
- data/src/core/util/windows/directory_reader.cc +1 -1
- data/src/core/util/windows/stat.cc +2 -2
- data/src/core/util/windows/thd.cc +2 -2
- data/src/core/util/windows/time.cc +1 -1
- data/src/core/util/work_serializer.cc +3 -3
- data/src/core/util/work_serializer.h +2 -2
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
- data/src/core/xds/grpc/certificate_provider_store.h +2 -2
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
- data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +2 -2
- data/src/core/xds/grpc/xds_certificate_provider.cc +1 -1
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- data/src/core/xds/grpc/xds_cluster.cc +2 -2
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +5 -5
- data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
- data/src/core/xds/grpc/xds_endpoint.h +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +5 -5
- data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
- data/src/core/xds/grpc/xds_health_status.cc +1 -1
- data/src/core/xds/grpc/xds_health_status.h +1 -1
- data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
- data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_filter.h +3 -3
- data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
- data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +2 -2
- data/src/core/xds/grpc/xds_listener_parser.cc +6 -6
- data/src/core/xds/grpc/xds_listener_parser.h +1 -1
- data/src/core/xds/grpc/xds_matcher.cc +1 -1
- data/src/core/xds/grpc/xds_matcher.h +3 -3
- data/src/core/xds/grpc/xds_matcher_input.h +1 -1
- data/src/core/xds/grpc/xds_metadata.cc +1 -1
- data/src/core/xds/grpc/xds_metadata.h +3 -3
- data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
- data/src/core/xds/grpc/xds_route_config.cc +3 -3
- data/src/core/xds/grpc/xds_route_config_parser.cc +8 -8
- data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
- data/src/core/xds/grpc/xds_routing.cc +4 -4
- data/src/core/xds/grpc/xds_routing.h +2 -2
- data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +1 -1
- data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
- data/src/core/xds/xds_client/lrs_client.cc +3 -3
- data/src/core/xds/xds_client/lrs_client.h +4 -4
- data/src/core/xds/xds_client/xds_api.h +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +8 -8
- data/src/core/xds/xds_client/xds_client.h +5 -5
- data/src/core/xds/xds_client/xds_locality.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
- data/src/core/xds/xds_client/xds_transport.h +2 -2
- data/src/ruby/ext/grpc/extconf.rb +14 -12
- data/src/ruby/ext/grpc/rb_call.c +0 -1
- data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- metadata +16 -6
|
@@ -19,59 +19,75 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_CLIENT_TRANSPORT_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_CLIENT_TRANSPORT_H
|
|
21
21
|
|
|
22
|
+
#include <grpc/event_engine/event_engine.h>
|
|
23
|
+
#include <grpc/grpc.h>
|
|
22
24
|
#include <grpc/support/port_platform.h>
|
|
23
25
|
|
|
26
|
+
#include <cstddef>
|
|
24
27
|
#include <cstdint>
|
|
28
|
+
#include <memory>
|
|
29
|
+
#include <optional>
|
|
30
|
+
#include <string>
|
|
25
31
|
#include <utility>
|
|
32
|
+
#include <vector>
|
|
26
33
|
|
|
27
34
|
#include "src/core/call/call_spine.h"
|
|
35
|
+
#include "src/core/call/metadata.h"
|
|
36
|
+
#include "src/core/channelz/channelz.h"
|
|
28
37
|
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
29
|
-
#include "src/core/ext/transport/chttp2/transport/flow_control_manager.h"
|
|
30
38
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
31
|
-
#include "src/core/ext/transport/chttp2/transport/
|
|
39
|
+
#include "src/core/ext/transport/chttp2/transport/goaway.h"
|
|
32
40
|
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
|
33
41
|
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
|
34
|
-
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
35
42
|
#include "src/core/ext/transport/chttp2/transport/http2_settings_promises.h"
|
|
36
43
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
37
44
|
#include "src/core/ext/transport/chttp2/transport/http2_transport.h"
|
|
38
45
|
#include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
|
|
46
|
+
#include "src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h"
|
|
39
47
|
#include "src/core/ext/transport/chttp2/transport/keepalive.h"
|
|
40
|
-
#include "src/core/ext/transport/chttp2/transport/message_assembler.h"
|
|
41
48
|
#include "src/core/ext/transport/chttp2/transport/ping_promise.h"
|
|
42
49
|
#include "src/core/ext/transport/chttp2/transport/stream.h"
|
|
50
|
+
#include "src/core/ext/transport/chttp2/transport/stream_data_queue.h"
|
|
43
51
|
#include "src/core/ext/transport/chttp2/transport/writable_streams.h"
|
|
44
|
-
#include "src/core/lib/
|
|
45
|
-
#include "src/core/lib/
|
|
46
|
-
#include "src/core/lib/
|
|
52
|
+
#include "src/core/lib/channel/channel_args.h"
|
|
53
|
+
#include "src/core/lib/iomgr/closure.h"
|
|
54
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
|
55
|
+
#include "src/core/lib/promise/activity.h"
|
|
56
|
+
#include "src/core/lib/promise/context.h"
|
|
57
|
+
#include "src/core/lib/promise/if.h"
|
|
58
|
+
#include "src/core/lib/promise/latch.h"
|
|
59
|
+
#include "src/core/lib/promise/map.h"
|
|
47
60
|
#include "src/core/lib/promise/party.h"
|
|
61
|
+
#include "src/core/lib/promise/poll.h"
|
|
62
|
+
#include "src/core/lib/promise/promise.h"
|
|
63
|
+
#include "src/core/lib/promise/race.h"
|
|
64
|
+
#include "src/core/lib/promise/try_seq.h"
|
|
48
65
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
|
66
|
+
#include "src/core/lib/slice/slice.h"
|
|
67
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
49
68
|
#include "src/core/lib/transport/connectivity_state.h"
|
|
50
69
|
#include "src/core/lib/transport/promise_endpoint.h"
|
|
51
70
|
#include "src/core/lib/transport/transport.h"
|
|
71
|
+
#include "src/core/util/check_class_size.h"
|
|
72
|
+
#include "src/core/util/debug_location.h"
|
|
73
|
+
#include "src/core/util/grpc_check.h"
|
|
52
74
|
#include "src/core/util/orphanable.h"
|
|
53
75
|
#include "src/core/util/ref_counted_ptr.h"
|
|
54
76
|
#include "src/core/util/sync.h"
|
|
77
|
+
#include "src/core/util/time.h"
|
|
78
|
+
#include "absl/base/thread_annotations.h"
|
|
79
|
+
#include "absl/container/flat_hash_map.h"
|
|
80
|
+
#include "absl/container/flat_hash_set.h"
|
|
81
|
+
#include "absl/functional/any_invocable.h"
|
|
82
|
+
#include "absl/log/log.h"
|
|
83
|
+
#include "absl/status/status.h"
|
|
84
|
+
#include "absl/status/statusor.h"
|
|
85
|
+
#include "absl/strings/string_view.h"
|
|
86
|
+
#include "absl/types/span.h"
|
|
55
87
|
|
|
56
88
|
namespace grpc_core {
|
|
57
89
|
namespace http2 {
|
|
58
90
|
|
|
59
|
-
// All Promise Based HTTP2 Transport TODOs have the tag
|
|
60
|
-
// [PH2][Pn] where n = 0 to 5.
|
|
61
|
-
// This helps to maintain the uniformity for quick lookup and fixing.
|
|
62
|
-
//
|
|
63
|
-
// [PH2][P0] MUST be fixed before the current PR is submitted.
|
|
64
|
-
// [PH2][P1] MUST be fixed before the current sub-project is considered
|
|
65
|
-
// complete.
|
|
66
|
-
// [PH2][P2] MUST be fixed before the current Milestone is considered
|
|
67
|
-
// complete.
|
|
68
|
-
// [PH2][P3] MUST be fixed before Milestone 3 is considered complete.
|
|
69
|
-
// [PH2][P4] Can be fixed after roll out begins. Evaluate these during
|
|
70
|
-
// Milestone 4. Either do the TODOs or delete them.
|
|
71
|
-
// [PH2][P5] This MUST be a separate standalone project.
|
|
72
|
-
// [PH2][EXT] This is a TODO related to a project unrelated to PH2 but happening
|
|
73
|
-
// in parallel.
|
|
74
|
-
|
|
75
91
|
// Http2 Client Transport Spawns Overview
|
|
76
92
|
|
|
77
93
|
// | Promise Spawn | Max Duration | Promise Resolution | Max Spawns |
|
|
@@ -85,23 +101,21 @@ namespace http2 {
|
|
|
85
101
|
// Max Party Slots (Always): 3
|
|
86
102
|
// Max Promise Slots (Worst Case): 4
|
|
87
103
|
|
|
88
|
-
// Experimental :
|
|
89
|
-
// and it is functions. The code will be written iteratively.
|
|
104
|
+
// Experimental : The code will be written iteratively.
|
|
90
105
|
// Do not use or edit any of these functions unless you are
|
|
91
106
|
// familiar with the PH2 project (Moving chttp2 to promises.)
|
|
92
107
|
// TODO(tjagtap) : [PH2][P3] : Update the experimental status of the code before
|
|
93
108
|
// http2 rollout begins.
|
|
94
109
|
class Http2ClientTransport final : public ClientTransport,
|
|
95
110
|
public channelz::DataSource {
|
|
96
|
-
// TODO(
|
|
97
|
-
//
|
|
98
|
-
// reduce cognitive load in the header.
|
|
111
|
+
// TODO(akshitpatel) [PH2][P1] : Functions that need a mutex to be held should
|
|
112
|
+
// have "locked" suffix in function name.
|
|
99
113
|
public:
|
|
100
114
|
Http2ClientTransport(
|
|
101
115
|
PromiseEndpoint endpoint, GRPC_UNUSED const ChannelArgs& channel_args,
|
|
102
116
|
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
|
103
117
|
event_engine,
|
|
104
|
-
|
|
118
|
+
absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> on_receive_settings);
|
|
105
119
|
|
|
106
120
|
Http2ClientTransport(const Http2ClientTransport&) = delete;
|
|
107
121
|
Http2ClientTransport& operator=(const Http2ClientTransport&) = delete;
|
|
@@ -128,8 +142,10 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
128
142
|
OrphanablePtr<ConnectivityStateWatcherInterface> watcher);
|
|
129
143
|
void StopConnectivityWatch(ConnectivityStateWatcherInterface* watcher);
|
|
130
144
|
|
|
145
|
+
void StartWatch(RefCountedPtr<StateWatcher> watcher) override;
|
|
146
|
+
void StopWatch(RefCountedPtr<StateWatcher> watcher) override;
|
|
147
|
+
|
|
131
148
|
void Orphan() override;
|
|
132
|
-
void AbortWithError();
|
|
133
149
|
|
|
134
150
|
RefCountedPtr<channelz::SocketNode> GetSocketNode() const override {
|
|
135
151
|
return const_cast<channelz::BaseNode*>(
|
|
@@ -143,6 +159,8 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
143
159
|
}
|
|
144
160
|
|
|
145
161
|
void AddData(channelz::DataSink sink) override;
|
|
162
|
+
void SpawnAddChannelzData(RefCountedPtr<Party> party,
|
|
163
|
+
channelz::DataSink sink);
|
|
146
164
|
|
|
147
165
|
auto TestOnlyTriggerWriteCycle() {
|
|
148
166
|
return Immediate(writable_stream_list_.ForceReadyForWrite());
|
|
@@ -150,12 +168,12 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
150
168
|
|
|
151
169
|
auto TestOnlySendPing(absl::AnyInvocable<void()> on_initiate,
|
|
152
170
|
bool important = false) {
|
|
153
|
-
return ping_manager_
|
|
171
|
+
return ping_manager_->RequestPing(std::move(on_initiate), important);
|
|
154
172
|
}
|
|
155
173
|
|
|
156
174
|
template <typename Factory>
|
|
157
|
-
|
|
158
|
-
|
|
175
|
+
void TestOnlySpawnPromise(absl::string_view name, Factory&& factory) {
|
|
176
|
+
general_party_->Spawn(name, std::forward<Factory>(factory), [](Empty) {});
|
|
159
177
|
}
|
|
160
178
|
|
|
161
179
|
int64_t TestOnlyTransportFlowControlWindow() {
|
|
@@ -173,6 +191,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
173
191
|
bool AreTransportFlowControlTokensAvailable() {
|
|
174
192
|
return flow_control_.remote_window() > 0;
|
|
175
193
|
}
|
|
194
|
+
void SpawnTransportLoops();
|
|
176
195
|
|
|
177
196
|
private:
|
|
178
197
|
// Promise factory for processing each type of frame
|
|
@@ -199,26 +218,16 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
199
218
|
// Returns a promise that will process one HTTP2 frame.
|
|
200
219
|
auto ProcessOneFrame(Http2Frame frame);
|
|
201
220
|
|
|
202
|
-
// Returns a promise that will do the cleanup after the ReadLoop ends.
|
|
203
|
-
auto OnReadLoopEnded();
|
|
204
|
-
|
|
205
221
|
// Writing to the endpoint.
|
|
206
222
|
|
|
207
223
|
// Write time sensitive control frames to the endpoint. Frames sent from here
|
|
208
|
-
// will be
|
|
209
|
-
//
|
|
210
|
-
// the first frame to be written onto a connection as per
|
|
211
|
-
// RFC9113.
|
|
212
|
-
// 2. GOAWAY - This is second because if this is the final GoAway, then we may
|
|
213
|
-
// not need to send anything else to the peer.
|
|
214
|
-
// 3. PING and PING acks.
|
|
215
|
-
// 4. WINDOW_UPDATE
|
|
216
|
-
// 5. Custom gRPC security frame
|
|
224
|
+
// will be GOAWAY, SETTINGS, PING and PING acks, WINDOW_UPDATE and
|
|
225
|
+
// Custom gRPC security frame.
|
|
217
226
|
// These frames are written to the endpoint in a single endpoint write. If any
|
|
218
227
|
// module needs to take action after the write (for cases like spawning
|
|
219
228
|
// timeout promises), they MUST plug the call in the
|
|
220
229
|
// NotifyControlFramesWriteDone.
|
|
221
|
-
auto
|
|
230
|
+
auto ProcessAndWriteControlFrames();
|
|
222
231
|
|
|
223
232
|
// Notify the control frames modules that the endpoint write is done.
|
|
224
233
|
void NotifyControlFramesWriteDone();
|
|
@@ -227,37 +236,71 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
227
236
|
// the writable streams and write to the endpoint.
|
|
228
237
|
auto MultiplexerLoop();
|
|
229
238
|
|
|
230
|
-
// Returns a promise that will do the cleanup after the MultiplexerLoop
|
|
231
|
-
// ends.
|
|
232
|
-
auto OnMultiplexerLoopEnded();
|
|
233
|
-
|
|
234
239
|
// Returns a promise to fetch data from the callhandler and pass it further
|
|
235
240
|
// down towards the endpoint.
|
|
236
241
|
auto CallOutboundLoop(CallHandler call_handler, RefCountedPtr<Stream> stream,
|
|
237
|
-
InterActivityMutex<uint32_t>::Lock lock,
|
|
238
242
|
ClientMetadataHandle metadata);
|
|
239
243
|
|
|
244
|
+
// TODO(akshitpatel) : [PH2][P1] : Make this a synchronous function.
|
|
240
245
|
// Force triggers a transport write cycle
|
|
241
246
|
auto TriggerWriteCycle() {
|
|
242
247
|
return Immediate(writable_stream_list_.ForceReadyForWrite());
|
|
243
248
|
}
|
|
244
249
|
|
|
250
|
+
auto FlowControlPeriodicUpdateLoop();
|
|
251
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
252
|
+
void AddPeriodicUpdatePromiseWaker() {
|
|
253
|
+
periodic_updates_waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
254
|
+
}
|
|
255
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
256
|
+
void WakeupPeriodicUpdatePromise() { periodic_updates_waker_.Wakeup(); }
|
|
257
|
+
|
|
245
258
|
// Processes the flow control action and take necessary steps.
|
|
246
259
|
void ActOnFlowControlAction(const chttp2::FlowControlAction& action,
|
|
247
|
-
|
|
260
|
+
RefCountedPtr<Stream> stream);
|
|
261
|
+
|
|
262
|
+
void NotifyStateWatcherOnDisconnectLocked(
|
|
263
|
+
absl::Status status, StateWatcher::DisconnectInfo disconnect_info)
|
|
264
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&transport_mutex_);
|
|
248
265
|
|
|
249
266
|
RefCountedPtr<Party> general_party_;
|
|
267
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine_;
|
|
250
268
|
|
|
251
269
|
PromiseEndpoint endpoint_;
|
|
252
|
-
|
|
253
|
-
SettingsTimeoutManager transport_settings_;
|
|
270
|
+
RefCountedPtr<SettingsPromiseManager> settings_;
|
|
254
271
|
|
|
255
272
|
Http2FrameHeader current_frame_header_;
|
|
273
|
+
// Returns the number of active streams. A stream is removed from the `active`
|
|
274
|
+
// list once both client and server agree to close the stream. The count of
|
|
275
|
+
// stream_list_(even though stream list represents streams open for reads)
|
|
276
|
+
// works here because of the following cases where the stream is closed:
|
|
277
|
+
// 1. Reading a RST stream frame: In this case, the stream is immediately
|
|
278
|
+
// closed for reads and writes and removed from the stream_list_
|
|
279
|
+
// (effectively tracking the number of active streams).
|
|
280
|
+
// 2. Reading a Trailing Metadata frame: In this case, the stream MAY be
|
|
281
|
+
// closed for reads and writes immediately which follows the above case. In
|
|
282
|
+
// other cases, the transport either reads RST stream frame from the server
|
|
283
|
+
// (and follows case 1) or sends a half close frame and closes the stream
|
|
284
|
+
// for reads and writes (in the multiplexer loop).
|
|
285
|
+
// 3. Hitting error condition in the transport: In this case, RST stream is
|
|
286
|
+
// is enqueued and the stream is closed for reads immediately. This means
|
|
287
|
+
// we effectively reduce the number of active streams inline (because we
|
|
288
|
+
// remove the stream from the stream_list_). This is fine because the
|
|
289
|
+
// priority logic in list of writable streams ensures that the RST stream
|
|
290
|
+
// frame is given priority over any new streams being created by the
|
|
291
|
+
// client.
|
|
292
|
+
// 4. Application abort: In this case, multiplexer loop will write RST stream
|
|
293
|
+
// frame to the endpoint and close the stream from reads and writes. This
|
|
294
|
+
// then follows the same reasoning as case 1.
|
|
295
|
+
inline uint32_t GetActiveStreamCountLocked() const
|
|
296
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(transport_mutex_) {
|
|
297
|
+
return stream_list_.size();
|
|
298
|
+
}
|
|
256
299
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if (
|
|
300
|
+
// Returns the next stream id. If the next stream id is not available, it
|
|
301
|
+
// returns std::nullopt. MUST be called from the transport party.
|
|
302
|
+
absl::StatusOr<uint32_t> NextStreamId() {
|
|
303
|
+
if (next_stream_id_ > GetMaxAllowedStreamId()) {
|
|
261
304
|
// TODO(tjagtap) : [PH2][P3] : Handle case if transport runs out of stream
|
|
262
305
|
// ids
|
|
263
306
|
// RFC9113 : Stream identifiers cannot be reused. Long-lived connections
|
|
@@ -267,22 +310,53 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
267
310
|
// that is unable to establish a new stream identifier can send a GOAWAY
|
|
268
311
|
// frame so that the client is forced to open a new connection for new
|
|
269
312
|
// streams.
|
|
313
|
+
return absl::ResourceExhaustedError("No more stream ids available");
|
|
270
314
|
}
|
|
315
|
+
// TODO(akshitpatel) : [PH2][P3] : There is a channel arg to delay
|
|
316
|
+
// starting new streams instead of failing them. This needs to be
|
|
317
|
+
// implemented.
|
|
318
|
+
{
|
|
319
|
+
MutexLock lock(&transport_mutex_);
|
|
320
|
+
if (GetActiveStreamCountLocked() >=
|
|
321
|
+
settings_->peer().max_concurrent_streams()) {
|
|
322
|
+
return absl::ResourceExhaustedError("Reached max concurrent streams");
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
271
326
|
// RFC9113 : Streams initiated by a client MUST use odd-numbered stream
|
|
272
327
|
// identifiers.
|
|
273
|
-
|
|
274
|
-
|
|
328
|
+
uint32_t new_stream_id =
|
|
329
|
+
std::exchange(next_stream_id_, next_stream_id_ + 2);
|
|
330
|
+
if (GPR_UNLIKELY(next_stream_id_ > GetMaxAllowedStreamId())) {
|
|
331
|
+
ReportDisconnection(
|
|
332
|
+
absl::ResourceExhaustedError("Transport Stream IDs exhausted"),
|
|
333
|
+
{}, // TODO(tjagtap) : [PH2][P2] : Report better disconnect info.
|
|
334
|
+
"no_more_stream_ids");
|
|
335
|
+
}
|
|
336
|
+
return new_stream_id;
|
|
275
337
|
}
|
|
276
338
|
|
|
339
|
+
// Returns the next stream id without incrementing it. MUST be called from the
|
|
340
|
+
// transport party.
|
|
341
|
+
uint32_t PeekNextStreamId() const { return next_stream_id_; }
|
|
342
|
+
|
|
343
|
+
// Returns the last stream id sent by the transport. If no streams were sent,
|
|
344
|
+
// returns 0. MUST be called from the transport party.
|
|
345
|
+
uint32_t GetLastStreamId() const {
|
|
346
|
+
const uint32_t next_stream_id = PeekNextStreamId();
|
|
347
|
+
return (next_stream_id > 1) ? (next_stream_id - 2) : 0;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
absl::Status InitializeStream(RefCountedPtr<Stream> stream);
|
|
351
|
+
|
|
352
|
+
void AddToStreamList(RefCountedPtr<Stream> stream);
|
|
353
|
+
|
|
277
354
|
Mutex transport_mutex_;
|
|
278
|
-
|
|
279
|
-
// mapping up in the on_done of the CallInitiator or CallHandler
|
|
355
|
+
|
|
280
356
|
absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list_
|
|
281
357
|
ABSL_GUARDED_BY(transport_mutex_);
|
|
282
358
|
|
|
283
|
-
|
|
284
|
-
// This also tracks the stream_id for creating new streams.
|
|
285
|
-
InterActivityMutex<uint32_t> stream_id_mutex_;
|
|
359
|
+
uint32_t next_stream_id_;
|
|
286
360
|
HPackCompressor encoder_;
|
|
287
361
|
HPackParser parser_;
|
|
288
362
|
bool is_transport_closed_ ABSL_GUARDED_BY(transport_mutex_) = false;
|
|
@@ -298,78 +372,47 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
298
372
|
std::move(promise));
|
|
299
373
|
}
|
|
300
374
|
|
|
375
|
+
// Spawns an infallible promise on the given party.
|
|
376
|
+
template <typename Factory>
|
|
377
|
+
void SpawnInfallible(RefCountedPtr<Party> party, absl::string_view name,
|
|
378
|
+
Factory&& factory);
|
|
379
|
+
|
|
380
|
+
// Spawns an infallible promise on the transport party.
|
|
381
|
+
template <typename Factory>
|
|
382
|
+
void SpawnInfallibleTransportParty(absl::string_view name, Factory&& factory);
|
|
383
|
+
|
|
384
|
+
// Spawns a promise on the transport party. If the promise returns a non-ok
|
|
385
|
+
// status, it is handled by closing the transport with the corresponding
|
|
386
|
+
// status.
|
|
387
|
+
template <typename Factory>
|
|
388
|
+
void SpawnGuardedTransportParty(absl::string_view name, Factory&& factory);
|
|
389
|
+
|
|
301
390
|
ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(transport_mutex_){
|
|
302
391
|
"http2_client", GRPC_CHANNEL_READY};
|
|
303
392
|
|
|
304
|
-
|
|
305
|
-
uint32_t stream_id);
|
|
393
|
+
RefCountedPtr<StateWatcher> watcher_ ABSL_GUARDED_BY(transport_mutex_);
|
|
306
394
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
bool close_writes;
|
|
310
|
-
};
|
|
395
|
+
// Runs on the call party.
|
|
396
|
+
std::optional<RefCountedPtr<Stream>> MakeStream(CallHandler call_handler);
|
|
311
397
|
|
|
312
398
|
// This function MUST be idempotent.
|
|
313
399
|
void CloseStream(RefCountedPtr<Stream> stream, CloseStreamArgs args,
|
|
314
400
|
DebugLocation whence = {});
|
|
315
401
|
|
|
316
|
-
void BeginCloseStream(
|
|
402
|
+
void BeginCloseStream(RefCountedPtr<Stream> stream,
|
|
317
403
|
std::optional<uint32_t> reset_stream_error_code,
|
|
318
404
|
ServerMetadataHandle&& metadata,
|
|
319
405
|
DebugLocation whence = {});
|
|
320
406
|
|
|
321
407
|
RefCountedPtr<Stream> LookupStream(uint32_t stream_id);
|
|
322
408
|
|
|
323
|
-
auto EndpointReadSlice(const size_t num_bytes)
|
|
324
|
-
|
|
325
|
-
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
326
|
-
num_bytes](absl::StatusOr<Slice> status) {
|
|
327
|
-
if (status.ok()) {
|
|
328
|
-
self->keepalive_manager_.GotData();
|
|
329
|
-
self->ztrace_collector_->Append(
|
|
330
|
-
PromiseEndpointReadTrace{num_bytes});
|
|
331
|
-
}
|
|
332
|
-
return status;
|
|
333
|
-
});
|
|
334
|
-
}
|
|
409
|
+
auto EndpointReadSlice(const size_t num_bytes);
|
|
410
|
+
auto EndpointRead(const size_t num_bytes);
|
|
335
411
|
|
|
336
412
|
// HTTP2 Settings
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
auto WaitForSettingsTimeoutDone() {
|
|
341
|
-
return [self = RefAsSubclass<Http2ClientTransport>()](absl::Status status) {
|
|
342
|
-
if (!status.ok()) {
|
|
343
|
-
GRPC_UNUSED absl::Status result = self->HandleError(
|
|
344
|
-
std::nullopt, Http2Status::Http2ConnectionError(
|
|
345
|
-
Http2ErrorCode::kProtocolError,
|
|
346
|
-
std::string(RFC9113::kSettingsTimeout)));
|
|
347
|
-
} else {
|
|
348
|
-
self->MarkPeerSettingsResolved();
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
// TODO(tjagtap) : [PH2][P1] : Plumbing. Call this after the SETTINGS frame
|
|
353
|
-
// has been written to endpoint_.
|
|
354
|
-
void SpawnWaitForSettingsTimeout() {
|
|
355
|
-
settings_.SetPreviousSettingsPromiseResolved(false);
|
|
356
|
-
general_party_->Spawn("WaitForSettingsTimeout",
|
|
357
|
-
transport_settings_.WaitForSettingsTimeout(),
|
|
358
|
-
WaitForSettingsTimeoutDone());
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
auto EndpointRead(const size_t num_bytes) {
|
|
362
|
-
return Map(endpoint_.Read(num_bytes),
|
|
363
|
-
[self = RefAsSubclass<Http2ClientTransport>(),
|
|
364
|
-
num_bytes](absl::StatusOr<SliceBuffer> status) {
|
|
365
|
-
if (status.ok()) {
|
|
366
|
-
self->keepalive_manager_.GotData();
|
|
367
|
-
self->ztrace_collector_->Append(
|
|
368
|
-
PromiseEndpointReadTrace{num_bytes});
|
|
369
|
-
}
|
|
370
|
-
return status;
|
|
371
|
-
});
|
|
372
|
-
}
|
|
413
|
+
auto WaitForSettingsTimeoutOnDone();
|
|
414
|
+
void MaybeSpawnWaitForSettingsTimeout();
|
|
415
|
+
void EnforceLatestIncomingSettings();
|
|
373
416
|
|
|
374
417
|
// This function MUST run on the transport party.
|
|
375
418
|
void CloseTransport();
|
|
@@ -388,18 +431,22 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
388
431
|
absl::Status HandleError(const std::optional<uint32_t> stream_id,
|
|
389
432
|
Http2Status status, DebugLocation whence = {}) {
|
|
390
433
|
auto error_type = status.GetType();
|
|
391
|
-
|
|
434
|
+
GRPC_DCHECK(error_type != Http2Status::Http2ErrorType::kOk);
|
|
392
435
|
|
|
393
436
|
if (error_type == Http2Status::Http2ErrorType::kStreamError) {
|
|
394
|
-
|
|
395
|
-
|
|
437
|
+
GRPC_HTTP2_CLIENT_ERROR_DLOG << "Stream Error: " << status.DebugString();
|
|
438
|
+
GRPC_DCHECK(stream_id.has_value());
|
|
439
|
+
// Passing a cancelled server metadata handle to propagate the error
|
|
440
|
+
// to the upper layers.
|
|
396
441
|
BeginCloseStream(
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
442
|
+
LookupStream(stream_id.value()),
|
|
443
|
+
Http2ErrorCodeToFrameErrorCode(status.GetStreamErrorCode()),
|
|
444
|
+
CancelledServerMetadataFromStatus(status.GetAbslStreamError()),
|
|
445
|
+
whence);
|
|
400
446
|
return absl::OkStatus();
|
|
401
447
|
} else if (error_type == Http2Status::Http2ErrorType::kConnectionError) {
|
|
402
|
-
|
|
448
|
+
GRPC_HTTP2_CLIENT_ERROR_DLOG << "Connection Error: "
|
|
449
|
+
<< status.DebugString();
|
|
403
450
|
absl::Status absl_status = status.GetAbslConnectionError();
|
|
404
451
|
MaybeSpawnCloseTransport(std::move(status), whence);
|
|
405
452
|
return absl_status;
|
|
@@ -408,13 +455,8 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
408
455
|
}
|
|
409
456
|
|
|
410
457
|
bool should_reset_ping_clock_;
|
|
411
|
-
bool incoming_header_in_progress_;
|
|
412
|
-
bool incoming_header_end_stream_;
|
|
413
458
|
bool is_first_write_;
|
|
414
|
-
|
|
415
|
-
grpc_closure* on_receive_settings_;
|
|
416
|
-
|
|
417
|
-
uint32_t max_header_list_size_soft_limit_;
|
|
459
|
+
IncomingMetadataTracker incoming_headers_;
|
|
418
460
|
|
|
419
461
|
// The target number of bytes to write in a single write cycle. We may not
|
|
420
462
|
// always honour this max_write_size. We MAY overshoot it at most once per
|
|
@@ -436,39 +478,49 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
436
478
|
size_t GetMaxWriteSize() const { return max_write_size_; }
|
|
437
479
|
|
|
438
480
|
auto SerializeAndWrite(std::vector<Http2Frame>&& frames);
|
|
481
|
+
// Tracks the max allowed stream id. Currently this is only set on receiving a
|
|
482
|
+
// graceful GOAWAY frame.
|
|
483
|
+
uint32_t max_allowed_stream_id_ = RFC9113::kMaxStreamId31Bit;
|
|
484
|
+
|
|
485
|
+
uint32_t GetMaxAllowedStreamId() const;
|
|
486
|
+
|
|
487
|
+
void SetMaxAllowedStreamId(uint32_t max_allowed_stream_id);
|
|
488
|
+
|
|
489
|
+
bool CanCloseTransportLocked() const
|
|
490
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(transport_mutex_);
|
|
439
491
|
|
|
440
492
|
// Ping related members
|
|
441
|
-
|
|
442
|
-
//
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
const Duration keepalive_timeout_;
|
|
448
|
-
// Duration to wait for ping ack before triggering timeout
|
|
449
|
-
const Duration ping_timeout_;
|
|
450
|
-
PingManager ping_manager_;
|
|
451
|
-
KeepaliveManager keepalive_manager_;
|
|
493
|
+
|
|
494
|
+
// Duration between two consecutive keepalive pings.
|
|
495
|
+
Duration keepalive_time_;
|
|
496
|
+
bool test_only_ack_pings_;
|
|
497
|
+
std::optional<PingManager> ping_manager_;
|
|
498
|
+
std::optional<KeepaliveManager> keepalive_manager_;
|
|
452
499
|
|
|
453
500
|
// Flags
|
|
454
501
|
bool keepalive_permit_without_calls_;
|
|
455
502
|
|
|
456
503
|
auto SendPing(absl::AnyInvocable<void()> on_initiate, bool important) {
|
|
457
|
-
return ping_manager_
|
|
504
|
+
return ping_manager_->RequestPing(std::move(on_initiate), important);
|
|
458
505
|
}
|
|
459
|
-
auto WaitForPingAck() { return ping_manager_
|
|
506
|
+
auto WaitForPingAck() { return ping_manager_->WaitForPingAck(); }
|
|
460
507
|
|
|
461
|
-
void
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
508
|
+
void MaybeGetWindowUpdateFrames(SliceBuffer& output_buf);
|
|
509
|
+
|
|
510
|
+
void ReportDisconnection(const absl::Status& status,
|
|
511
|
+
StateWatcher::DisconnectInfo disconnect_info,
|
|
512
|
+
const char* reason);
|
|
513
|
+
|
|
514
|
+
void ReportDisconnectionLocked(const absl::Status& status,
|
|
515
|
+
StateWatcher::DisconnectInfo disconnect_info,
|
|
516
|
+
const char* reason)
|
|
517
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&transport_mutex_);
|
|
467
518
|
|
|
468
519
|
// Ping Helper functions
|
|
469
520
|
Duration NextAllowedPingInterval() {
|
|
470
521
|
MutexLock lock(&transport_mutex_);
|
|
471
|
-
return (!keepalive_permit_without_calls_ &&
|
|
522
|
+
return (!keepalive_permit_without_calls_ &&
|
|
523
|
+
GetActiveStreamCountLocked() == 0)
|
|
472
524
|
? Duration::Hours(2)
|
|
473
525
|
: Duration::Seconds(1);
|
|
474
526
|
}
|
|
@@ -476,7 +528,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
476
528
|
auto AckPing(uint64_t opaque_data) {
|
|
477
529
|
bool valid_ping_ack_received = true;
|
|
478
530
|
|
|
479
|
-
if (!ping_manager_
|
|
531
|
+
if (!ping_manager_->AckPing(opaque_data)) {
|
|
480
532
|
GRPC_HTTP2_CLIENT_DLOG << "Unknown ping response received for ping id="
|
|
481
533
|
<< opaque_data;
|
|
482
534
|
valid_ping_ack_received = false;
|
|
@@ -488,13 +540,10 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
488
540
|
// When this happens, it becomes important to ensure that if a ping ack
|
|
489
541
|
// is received and there is an "important" outstanding ping request, we
|
|
490
542
|
// should retry to send it out now.
|
|
491
|
-
valid_ping_ack_received && ping_manager_
|
|
543
|
+
valid_ping_ack_received && ping_manager_->ImportantPingRequested(),
|
|
492
544
|
[self = RefAsSubclass<Http2ClientTransport>()] {
|
|
493
545
|
return Map(self->TriggerWriteCycle(), [](const absl::Status status) {
|
|
494
|
-
return (status
|
|
495
|
-
? Http2Status::Ok()
|
|
496
|
-
: Http2Status::AbslConnectionError(
|
|
497
|
-
status.code(), std::string(status.message()));
|
|
546
|
+
return ToHttpOkOrConnError(status);
|
|
498
547
|
});
|
|
499
548
|
},
|
|
500
549
|
[] { return Immediate(Http2Status::Ok()); });
|
|
@@ -513,9 +562,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
513
562
|
}
|
|
514
563
|
|
|
515
564
|
Promise<absl::Status> PingTimeout() override {
|
|
516
|
-
|
|
517
|
-
// Returns a promise that resolves once goaway is sent.
|
|
518
|
-
LOG(INFO) << "Ping timeout at time: " << Timestamp::Now();
|
|
565
|
+
GRPC_HTTP2_CLIENT_DLOG << "Ping timeout at time: " << Timestamp::Now();
|
|
519
566
|
|
|
520
567
|
// TODO(akshitpatel) : [PH2][P2] : The error code here has been chosen
|
|
521
568
|
// based on CHTTP2's usage of GRPC_STATUS_UNAVAILABLE (which corresponds
|
|
@@ -523,8 +570,9 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
523
570
|
// kRefusedStream doesn't seem to fit this case. We should revisit this
|
|
524
571
|
// and update the error code.
|
|
525
572
|
return Immediate(transport_->HandleError(
|
|
526
|
-
std::nullopt,
|
|
527
|
-
|
|
573
|
+
std::nullopt,
|
|
574
|
+
Http2Status::Http2ConnectionError(Http2ErrorCode::kRefusedStream,
|
|
575
|
+
GRPC_CHTTP2_PING_TIMEOUT_STR)));
|
|
528
576
|
}
|
|
529
577
|
|
|
530
578
|
private:
|
|
@@ -554,8 +602,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
554
602
|
});
|
|
555
603
|
}
|
|
556
604
|
Promise<absl::Status> OnKeepAliveTimeout() override {
|
|
557
|
-
|
|
558
|
-
LOG(INFO) << "Keepalive timeout triggered";
|
|
605
|
+
GRPC_HTTP2_CLIENT_DLOG << "Keepalive timeout triggered";
|
|
559
606
|
|
|
560
607
|
// TODO(akshitpatel) : [PH2][P2] : The error code here has been chosen
|
|
561
608
|
// based on CHTTP2's usage of GRPC_STATUS_UNAVAILABLE (which corresponds
|
|
@@ -563,9 +610,9 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
563
610
|
// kRefusedStream doesn't seem to fit this case. We should revisit this
|
|
564
611
|
// and update the error code.
|
|
565
612
|
return Immediate(transport_->HandleError(
|
|
566
|
-
std::nullopt,
|
|
567
|
-
|
|
568
|
-
|
|
613
|
+
std::nullopt, Http2Status::Http2ConnectionError(
|
|
614
|
+
Http2ErrorCode::kRefusedStream,
|
|
615
|
+
GRPC_CHTTP2_KEEPALIVE_TIMEOUT_STR)));
|
|
569
616
|
}
|
|
570
617
|
|
|
571
618
|
bool NeedToSendKeepAlivePing() override {
|
|
@@ -573,7 +620,7 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
573
620
|
{
|
|
574
621
|
MutexLock lock(&transport_->transport_mutex_);
|
|
575
622
|
need_to_send_ping = (transport_->keepalive_permit_without_calls_ ||
|
|
576
|
-
|
|
623
|
+
transport_->GetActiveStreamCountLocked() > 0);
|
|
577
624
|
}
|
|
578
625
|
return need_to_send_ping;
|
|
579
626
|
}
|
|
@@ -585,11 +632,44 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
585
632
|
Http2ClientTransport* transport_;
|
|
586
633
|
};
|
|
587
634
|
|
|
635
|
+
class GoawayInterfaceImpl : public GoawayInterface {
|
|
636
|
+
public:
|
|
637
|
+
static std::unique_ptr<GoawayInterface> Make(
|
|
638
|
+
Http2ClientTransport* transport) {
|
|
639
|
+
return std::make_unique<GoawayInterfaceImpl>(
|
|
640
|
+
GoawayInterfaceImpl(transport));
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
Promise<absl::Status> SendPingAndWaitForAck() override {
|
|
644
|
+
return transport_->ping_manager_->RequestPing(/*on_initiate=*/[] {},
|
|
645
|
+
/*important=*/true);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
void TriggerWriteCycle() override { transport_->TriggerWriteCycle(); }
|
|
649
|
+
|
|
650
|
+
uint32_t GetLastAcceptedStreamId() override {
|
|
651
|
+
GRPC_DCHECK(false)
|
|
652
|
+
<< "GetLastAcceptedStreamId is not implemented for client transport.";
|
|
653
|
+
LOG(ERROR) << "GetLastAcceptedStreamId is not implemented for client "
|
|
654
|
+
"transport.";
|
|
655
|
+
return 0;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
private:
|
|
659
|
+
explicit GoawayInterfaceImpl(Http2ClientTransport* transport)
|
|
660
|
+
: transport_(transport) {}
|
|
661
|
+
|
|
662
|
+
Http2ClientTransport* transport_;
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
GoawayManager goaway_manager_;
|
|
666
|
+
|
|
588
667
|
WritableStreams<RefCountedPtr<Stream>> writable_stream_list_;
|
|
589
668
|
|
|
590
669
|
absl::Status MaybeAddStreamToWritableStreamList(
|
|
591
670
|
const RefCountedPtr<Stream> stream,
|
|
592
|
-
const StreamDataQueue<ClientMetadataHandle>::
|
|
671
|
+
const StreamDataQueue<ClientMetadataHandle>::StreamWritabilityUpdate
|
|
672
|
+
result) {
|
|
593
673
|
if (result.became_writable) {
|
|
594
674
|
GRPC_HTTP2_CLIENT_DLOG
|
|
595
675
|
<< "Http2ClientTransport MaybeAddStreamToWritableStreamList "
|
|
@@ -613,12 +693,22 @@ class Http2ClientTransport final : public ClientTransport,
|
|
|
613
693
|
|
|
614
694
|
/// Based on channel args, preferred_rx_crypto_frame_sizes are advertised to
|
|
615
695
|
/// the peer
|
|
616
|
-
|
|
617
|
-
// control workflow corresponding to grpc_chttp2_act_on_flowctl_action
|
|
618
|
-
GRPC_UNUSED bool enable_preferred_rx_crypto_frame_advertisement_;
|
|
696
|
+
bool enable_preferred_rx_crypto_frame_advertisement_;
|
|
619
697
|
MemoryOwner memory_owner_;
|
|
620
698
|
chttp2::TransportFlowControl flow_control_;
|
|
621
699
|
std::shared_ptr<PromiseHttp2ZTraceCollector> ztrace_collector_;
|
|
700
|
+
absl::flat_hash_set<uint32_t> window_update_list_;
|
|
701
|
+
|
|
702
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
|
|
703
|
+
Waker periodic_updates_waker_;
|
|
704
|
+
|
|
705
|
+
Http2ReadContext reader_state_;
|
|
706
|
+
Http2Status ParseAndDiscardHeaders(SliceBuffer&& buffer, bool is_end_headers,
|
|
707
|
+
RefCountedPtr<Stream> stream,
|
|
708
|
+
Http2Status&& original_status,
|
|
709
|
+
DebugLocation whence = {});
|
|
710
|
+
void ReadChannelArgs(const ChannelArgs& channel_args,
|
|
711
|
+
TransportChannelArgs& args);
|
|
622
712
|
};
|
|
623
713
|
|
|
624
714
|
// Since the corresponding class in CHTTP2 is about 3.9KB, our goal is to
|