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
|
@@ -18,41 +18,146 @@
|
|
|
18
18
|
|
|
19
19
|
#include "src/core/ext/transport/chttp2/transport/http2_transport.h"
|
|
20
20
|
|
|
21
|
+
#include <grpc/grpc.h>
|
|
22
|
+
#include <grpc/impl/channel_arg_names.h>
|
|
23
|
+
|
|
24
|
+
#include <algorithm>
|
|
25
|
+
#include <climits>
|
|
21
26
|
#include <cstdint>
|
|
27
|
+
#include <memory>
|
|
28
|
+
#include <optional>
|
|
29
|
+
#include <string>
|
|
22
30
|
#include <utility>
|
|
31
|
+
#include <vector>
|
|
23
32
|
|
|
24
|
-
#include "src/core/call/call_spine.h"
|
|
25
33
|
#include "src/core/call/metadata_info.h"
|
|
26
34
|
#include "src/core/channelz/channelz.h"
|
|
27
35
|
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
28
36
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
29
|
-
#include "src/core/
|
|
30
|
-
#include "src/core/
|
|
31
|
-
#include "src/core/
|
|
32
|
-
#include "src/core/
|
|
37
|
+
#include "src/core/ext/transport/chttp2/transport/header_assembler.h"
|
|
38
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
|
39
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
40
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
41
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings_promises.h"
|
|
42
|
+
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
43
|
+
#include "src/core/ext/transport/chttp2/transport/internal_channel_arg_names.h"
|
|
44
|
+
#include "src/core/ext/transport/chttp2/transport/stream.h"
|
|
45
|
+
#include "src/core/lib/channel/channel_args.h"
|
|
46
|
+
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
|
47
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
48
|
+
#include "src/core/util/grpc_check.h"
|
|
33
49
|
#include "src/core/util/ref_counted_ptr.h"
|
|
34
|
-
#include "src/core/util/
|
|
50
|
+
#include "src/core/util/time.h"
|
|
51
|
+
#include "absl/log/log.h"
|
|
52
|
+
#include "absl/types/span.h"
|
|
35
53
|
|
|
36
54
|
namespace grpc_core {
|
|
37
55
|
namespace http2 {
|
|
38
56
|
|
|
57
|
+
// All Promise Based HTTP2 Transport TODOs have the tag
|
|
58
|
+
// [PH2][Pn] where n = 0 to 5.
|
|
59
|
+
// This helps to maintain the uniformity for quick lookup and fixing.
|
|
60
|
+
//
|
|
61
|
+
// [PH2][P0] MUST be fixed before the current PR is submitted.
|
|
62
|
+
// [PH2][P1] MUST be fixed before the current sub-project is considered
|
|
63
|
+
// complete.
|
|
64
|
+
// [PH2][P2] MUST be fixed before the current Milestone is considered
|
|
65
|
+
// complete.
|
|
66
|
+
// [PH2][P3] MUST be fixed before Milestone 3 is considered complete.
|
|
67
|
+
// [PH2][P4] Can be fixed after roll out begins. Evaluate these during
|
|
68
|
+
// Milestone 4. Either do the TODOs or delete them.
|
|
69
|
+
// [PH2][P5] Can be fixed after roll out begins. Evaluate these during
|
|
70
|
+
// Milestone 4. Either do the TODOs or delete them.
|
|
71
|
+
// [PH2][EXT] This is a TODO related to a project unrelated to PH2 but happening
|
|
72
|
+
// in parallel.
|
|
73
|
+
|
|
74
|
+
constexpr Duration kDefaultPingTimeout = Duration::Minutes(1);
|
|
75
|
+
constexpr Duration kDefaultKeepaliveTimeout = Duration::Seconds(20);
|
|
76
|
+
constexpr bool kDefaultKeepalivePermitWithoutCalls = false;
|
|
77
|
+
constexpr bool kDefaultEnablePreferredRxCryptoFrameAdvertisement = false;
|
|
78
|
+
constexpr bool kDefaultAckPings = true;
|
|
79
|
+
|
|
80
|
+
constexpr Duration kClientKeepaliveTime = Duration::Infinity();
|
|
81
|
+
|
|
82
|
+
constexpr Duration kServerKeepaliveTime = Duration::Hours(2);
|
|
83
|
+
|
|
39
84
|
// Experimental : This is just the initial skeleton of class
|
|
40
85
|
// and it is functions. The code will be written iteratively.
|
|
41
86
|
// Do not use or edit any of these functions unless you are
|
|
42
87
|
// familiar with the PH2 project (Moving chttp2 to promises.)
|
|
43
88
|
|
|
89
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
90
|
+
// Settings helpers
|
|
91
|
+
|
|
44
92
|
void InitLocalSettings(Http2Settings& settings, const bool is_client) {
|
|
45
93
|
if (is_client) {
|
|
46
94
|
// gRPC has never supported PUSH_PROMISE and we have no plan to do so in the
|
|
47
95
|
// future.
|
|
48
96
|
settings.SetEnablePush(false);
|
|
49
|
-
// This is to make it double-sure that server cannot
|
|
97
|
+
// This is to make it double-sure that server cannot initiate a stream.
|
|
50
98
|
settings.SetMaxConcurrentStreams(0);
|
|
51
99
|
}
|
|
52
100
|
settings.SetMaxHeaderListSize(DEFAULT_MAX_HEADER_LIST_SIZE);
|
|
53
101
|
settings.SetAllowTrueBinaryMetadata(true);
|
|
54
102
|
}
|
|
55
103
|
|
|
104
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
105
|
+
// Channel Args helpers
|
|
106
|
+
void ReadChannelArgs(const ChannelArgs& channel_args,
|
|
107
|
+
TransportChannelArgs& args, Http2Settings& local_settings,
|
|
108
|
+
chttp2::TransportFlowControl& flow_control,
|
|
109
|
+
bool is_client) {
|
|
110
|
+
ReadSettingsFromChannelArgs(channel_args, local_settings, flow_control,
|
|
111
|
+
is_client);
|
|
112
|
+
|
|
113
|
+
args.max_header_list_size_soft_limit =
|
|
114
|
+
GetSoftLimitFromChannelArgs(channel_args);
|
|
115
|
+
args.keepalive_time = std::max(
|
|
116
|
+
Duration::Milliseconds(1),
|
|
117
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
|
|
118
|
+
.value_or(is_client ? kClientKeepaliveTime : kServerKeepaliveTime));
|
|
119
|
+
args.keepalive_timeout = std::max(
|
|
120
|
+
Duration::Zero(),
|
|
121
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
|
|
122
|
+
.value_or(args.keepalive_time == Duration::Infinity()
|
|
123
|
+
? Duration::Infinity()
|
|
124
|
+
: kDefaultKeepaliveTimeout));
|
|
125
|
+
args.ping_timeout =
|
|
126
|
+
std::max(Duration::Zero(),
|
|
127
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_PING_TIMEOUT_MS)
|
|
128
|
+
.value_or(args.keepalive_time == Duration::Infinity()
|
|
129
|
+
? Duration::Infinity()
|
|
130
|
+
: kDefaultPingTimeout));
|
|
131
|
+
args.settings_timeout =
|
|
132
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_SETTINGS_TIMEOUT)
|
|
133
|
+
.value_or(std::max(args.keepalive_timeout * 2, Duration::Minutes(1)));
|
|
134
|
+
|
|
135
|
+
args.keepalive_permit_without_calls =
|
|
136
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
|
137
|
+
.value_or(kDefaultKeepalivePermitWithoutCalls);
|
|
138
|
+
|
|
139
|
+
args.enable_preferred_rx_crypto_frame_advertisement =
|
|
140
|
+
channel_args
|
|
141
|
+
.GetBool(GRPC_ARG_EXPERIMENTAL_HTTP2_PREFERRED_CRYPTO_FRAME_SIZE)
|
|
142
|
+
.value_or(kDefaultEnablePreferredRxCryptoFrameAdvertisement);
|
|
143
|
+
|
|
144
|
+
args.max_usable_hpack_table_size =
|
|
145
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
|
|
146
|
+
|
|
147
|
+
args.initial_sequence_number =
|
|
148
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
|
|
149
|
+
if (args.initial_sequence_number >= 0 &&
|
|
150
|
+
(args.initial_sequence_number & 1) == 0) {
|
|
151
|
+
LOG(ERROR) << "Initial sequence number MUST be odd. Ignoring the value.";
|
|
152
|
+
args.initial_sequence_number = -1;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
args.test_only_ack_pings =
|
|
156
|
+
channel_args.GetBool("grpc.http2.ack_pings").value_or(kDefaultAckPings);
|
|
157
|
+
|
|
158
|
+
GRPC_HTTP2_COMMON_DLOG << "ChannelArgs: " << args.DebugString();
|
|
159
|
+
}
|
|
160
|
+
|
|
56
161
|
void ReadSettingsFromChannelArgs(const ChannelArgs& channel_args,
|
|
57
162
|
Http2Settings& local_settings,
|
|
58
163
|
chttp2::TransportFlowControl& flow_control,
|
|
@@ -108,6 +213,11 @@ void ReadSettingsFromChannelArgs(const ChannelArgs& channel_args,
|
|
|
108
213
|
local_settings.SetAllowSecurityFrame(
|
|
109
214
|
channel_args.GetBool(GRPC_ARG_SECURITY_FRAME_ALLOWED).value_or(false));
|
|
110
215
|
|
|
216
|
+
// TODO(tjagtap) : [PH2][P4] : If max_header_list_size is set only once
|
|
217
|
+
// in the life of a transport, consider making this a data member of
|
|
218
|
+
// class IncomingMetadataTracker instead of accessing via acked settings again
|
|
219
|
+
// and again. Else delete this comment.
|
|
220
|
+
|
|
111
221
|
GRPC_HTTP2_COMMON_DLOG
|
|
112
222
|
<< "Http2Settings: {"
|
|
113
223
|
<< "header_table_size: " << local_settings.header_table_size()
|
|
@@ -124,6 +234,9 @@ void ReadSettingsFromChannelArgs(const ChannelArgs& channel_args,
|
|
|
124
234
|
<< "}";
|
|
125
235
|
}
|
|
126
236
|
|
|
237
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
238
|
+
// ChannelZ helpers
|
|
239
|
+
|
|
127
240
|
RefCountedPtr<channelz::SocketNode> CreateChannelzSocketNode(
|
|
128
241
|
std::shared_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
|
129
242
|
event_engine_endpoint,
|
|
@@ -145,5 +258,171 @@ RefCountedPtr<channelz::SocketNode> CreateChannelzSocketNode(
|
|
|
145
258
|
return nullptr;
|
|
146
259
|
}
|
|
147
260
|
|
|
261
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
262
|
+
// Flow control helpers
|
|
263
|
+
|
|
264
|
+
void ProcessOutgoingDataFrameFlowControl(
|
|
265
|
+
chttp2::StreamFlowControl& stream_flow_control,
|
|
266
|
+
const uint32_t flow_control_tokens_consumed) {
|
|
267
|
+
if (flow_control_tokens_consumed > 0) {
|
|
268
|
+
chttp2::StreamFlowControl::OutgoingUpdateContext fc_update(
|
|
269
|
+
&stream_flow_control);
|
|
270
|
+
// This updates flow control tokens for both stream and transport flow
|
|
271
|
+
// control.
|
|
272
|
+
fc_update.SentData(flow_control_tokens_consumed);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
ValueOrHttp2Status<chttp2::FlowControlAction>
|
|
277
|
+
ProcessIncomingDataFrameFlowControl(Http2FrameHeader& frame_header,
|
|
278
|
+
chttp2::TransportFlowControl& flow_control,
|
|
279
|
+
RefCountedPtr<Stream> stream) {
|
|
280
|
+
GRPC_DCHECK_EQ(frame_header.type, 0u);
|
|
281
|
+
if (frame_header.length > 0) {
|
|
282
|
+
if (stream == nullptr) {
|
|
283
|
+
// This flow control bookkeeping needs to happen even though the stream is
|
|
284
|
+
// gone because otherwise we will go out-of-sync with the peer.
|
|
285
|
+
// The flow control numbers should be consistent for both peers.
|
|
286
|
+
chttp2::TransportFlowControl::IncomingUpdateContext transport_fc(
|
|
287
|
+
&flow_control);
|
|
288
|
+
absl::Status fc_status = transport_fc.RecvData(frame_header.length);
|
|
289
|
+
chttp2::FlowControlAction action = transport_fc.MakeAction();
|
|
290
|
+
GRPC_HTTP2_COMMON_DLOG
|
|
291
|
+
<< "ProcessIncomingDataFrameFlowControl Transport RecvData status: "
|
|
292
|
+
<< fc_status << " action: " << action.DebugString();
|
|
293
|
+
if (!fc_status.ok()) {
|
|
294
|
+
LOG(ERROR) << "Flow control error: " << fc_status.message();
|
|
295
|
+
// RFC9113 : A receiver MAY respond with a stream error or connection
|
|
296
|
+
// error of type FLOW_CONTROL_ERROR if it is unable to accept a frame.
|
|
297
|
+
return Http2Status::Http2ConnectionError(
|
|
298
|
+
Http2ErrorCode::kFlowControlError,
|
|
299
|
+
std::string(fc_status.message()));
|
|
300
|
+
}
|
|
301
|
+
return action;
|
|
302
|
+
} else {
|
|
303
|
+
chttp2::StreamFlowControl::IncomingUpdateContext stream_fc(
|
|
304
|
+
&stream->flow_control);
|
|
305
|
+
absl::Status fc_status = stream_fc.RecvData(frame_header.length);
|
|
306
|
+
chttp2::FlowControlAction action = stream_fc.MakeAction();
|
|
307
|
+
GRPC_HTTP2_COMMON_DLOG
|
|
308
|
+
<< "ProcessIncomingDataFrameFlowControl Stream RecvData status: "
|
|
309
|
+
<< fc_status << " action: " << action.DebugString();
|
|
310
|
+
if (!fc_status.ok()) {
|
|
311
|
+
LOG(ERROR) << "Flow control error: " << fc_status.message();
|
|
312
|
+
// RFC9113 : A receiver MAY respond with a stream error or connection
|
|
313
|
+
// error of type FLOW_CONTROL_ERROR if it is unable to accept a frame.
|
|
314
|
+
return Http2Status::Http2ConnectionError(
|
|
315
|
+
Http2ErrorCode::kFlowControlError,
|
|
316
|
+
std::string(fc_status.message()));
|
|
317
|
+
}
|
|
318
|
+
// TODO(tjagtap) [PH2][P1][FlowControl] This is a HACK. Fix this.
|
|
319
|
+
stream_fc.HackIncrementPendingSize(frame_header.length);
|
|
320
|
+
return action;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return chttp2::FlowControlAction();
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
bool ProcessIncomingWindowUpdateFrameFlowControl(
|
|
327
|
+
const Http2WindowUpdateFrame& frame,
|
|
328
|
+
chttp2::TransportFlowControl& flow_control, RefCountedPtr<Stream> stream) {
|
|
329
|
+
if (frame.stream_id != 0) {
|
|
330
|
+
if (stream != nullptr) {
|
|
331
|
+
GRPC_HTTP2_COMMON_DLOG
|
|
332
|
+
<< "ProcessIncomingWindowUpdateFrameFlowControl stream "
|
|
333
|
+
<< frame.stream_id << " increment " << frame.increment;
|
|
334
|
+
chttp2::StreamFlowControl::OutgoingUpdateContext fc_update(
|
|
335
|
+
&stream->flow_control);
|
|
336
|
+
fc_update.RecvUpdate(frame.increment);
|
|
337
|
+
} else {
|
|
338
|
+
// If stream id is non zero, and stream is nullptr, maybe the stream was
|
|
339
|
+
// closed. Ignore this WINDOW_UPDATE frame.
|
|
340
|
+
GRPC_HTTP2_COMMON_DLOG
|
|
341
|
+
<< "ProcessIncomingWindowUpdateFrameFlowControl stream "
|
|
342
|
+
<< frame.stream_id << " not found. Ignoring.";
|
|
343
|
+
}
|
|
344
|
+
} else {
|
|
345
|
+
GRPC_HTTP2_COMMON_DLOG
|
|
346
|
+
<< "ProcessIncomingWindowUpdateFrameFlowControl transport increment "
|
|
347
|
+
<< frame.increment;
|
|
348
|
+
chttp2::TransportFlowControl::OutgoingUpdateContext fc_update(
|
|
349
|
+
&flow_control);
|
|
350
|
+
fc_update.RecvUpdate(frame.increment);
|
|
351
|
+
if (fc_update.Finish() == chttp2::StallEdge::kUnstalled) {
|
|
352
|
+
// If transport moves from kStalled to kUnstalled, streams blocked by
|
|
353
|
+
// transport flow control will become writable. Return true to trigger a
|
|
354
|
+
// write cycle and attempt to send data from these streams.
|
|
355
|
+
// Although it's possible no streams were blocked, triggering an
|
|
356
|
+
// unnecessary write cycle in that super-rare case is acceptable.
|
|
357
|
+
GRPC_HTTP2_COMMON_DLOG << "ProcessIncomingWindowUpdateFrameFlowControl "
|
|
358
|
+
"Transport Unstalled";
|
|
359
|
+
return true;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return false;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
void MaybeAddStreamWindowUpdateFrame(RefCountedPtr<Stream> stream,
|
|
366
|
+
std::vector<Http2Frame>& frames) {
|
|
367
|
+
GRPC_HTTP2_COMMON_DLOG << "MaybeAddStreamWindowUpdateFrame stream="
|
|
368
|
+
<< ((stream == nullptr)
|
|
369
|
+
? "null"
|
|
370
|
+
: absl::StrCat(
|
|
371
|
+
stream->GetStreamId(),
|
|
372
|
+
" CanSendWindowUpdateFrames=",
|
|
373
|
+
stream->CanSendWindowUpdateFrames()));
|
|
374
|
+
if (stream != nullptr && stream->CanSendWindowUpdateFrames()) {
|
|
375
|
+
const uint32_t increment = stream->flow_control.MaybeSendUpdate();
|
|
376
|
+
GRPC_HTTP2_COMMON_DLOG
|
|
377
|
+
<< "MaybeAddStreamWindowUpdateFrame MaybeSendUpdate { "
|
|
378
|
+
<< stream->GetStreamId() << ", " << increment << " }"
|
|
379
|
+
<< (increment == 0 ? ". The frame will NOT be sent for increment 0"
|
|
380
|
+
: "");
|
|
381
|
+
if (increment > 0) {
|
|
382
|
+
frames.emplace_back(
|
|
383
|
+
Http2WindowUpdateFrame{stream->GetStreamId(), increment});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// /////////////////////////////////////////////////////////////////////////////
|
|
389
|
+
// Header and Continuation frame processing helpers
|
|
390
|
+
|
|
391
|
+
Http2Status ParseAndDiscardHeaders(HPackParser& parser, SliceBuffer&& buffer,
|
|
392
|
+
HeaderAssembler::ParseHeaderArgs args,
|
|
393
|
+
const RefCountedPtr<Stream> stream,
|
|
394
|
+
Http2Status&& original_status) {
|
|
395
|
+
GRPC_HTTP2_COMMON_DLOG << "ParseAndDiscardHeaders buffer "
|
|
396
|
+
"size: "
|
|
397
|
+
<< buffer.Length() << " args: " << args.DebugString()
|
|
398
|
+
<< " stream_id: "
|
|
399
|
+
<< (stream == nullptr ? 0 : stream->GetStreamId())
|
|
400
|
+
<< " original_status: "
|
|
401
|
+
<< original_status.DebugString();
|
|
402
|
+
|
|
403
|
+
if (stream != nullptr) {
|
|
404
|
+
// Parse all the data in the header assembler
|
|
405
|
+
Http2Status result = stream->header_assembler.ParseAndDiscardHeaders(
|
|
406
|
+
parser, args.is_initial_metadata, args.is_client,
|
|
407
|
+
args.max_header_list_size_soft_limit,
|
|
408
|
+
args.max_header_list_size_hard_limit);
|
|
409
|
+
if (!result.IsOk()) {
|
|
410
|
+
GRPC_DCHECK(result.GetType() ==
|
|
411
|
+
Http2Status::Http2ErrorType::kConnectionError);
|
|
412
|
+
LOG(ERROR) << "Connection Error: " << result;
|
|
413
|
+
return result;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
if (buffer.Length() == 0) {
|
|
418
|
+
return std::move(original_status);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
Http2Status status = HeaderAssembler::ParseHeader(
|
|
422
|
+
parser, std::move(buffer), /*grpc_metadata_batch=*/nullptr, args);
|
|
423
|
+
|
|
424
|
+
return (status.IsOk()) ? std::move(original_status) : std::move(status);
|
|
425
|
+
}
|
|
426
|
+
|
|
148
427
|
} // namespace http2
|
|
149
428
|
} // namespace grpc_core
|
|
@@ -20,21 +20,24 @@
|
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_TRANSPORT_H
|
|
21
21
|
|
|
22
22
|
#include <cstdint>
|
|
23
|
-
#include <
|
|
23
|
+
#include <string>
|
|
24
24
|
|
|
25
|
-
#include "src/core/call/call_spine.h"
|
|
26
|
-
#include "src/core/call/metadata_info.h"
|
|
27
25
|
#include "src/core/channelz/channelz.h"
|
|
28
26
|
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
29
27
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
28
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
|
30
29
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
31
|
-
#include "src/core/
|
|
32
|
-
#include "src/core/
|
|
33
|
-
#include "src/core/
|
|
30
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
31
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings_promises.h"
|
|
32
|
+
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
33
|
+
#include "src/core/ext/transport/chttp2/transport/stream.h"
|
|
34
|
+
#include "src/core/lib/promise/activity.h"
|
|
35
|
+
#include "src/core/lib/promise/context.h"
|
|
36
|
+
#include "src/core/lib/promise/poll.h"
|
|
34
37
|
#include "src/core/lib/transport/promise_endpoint.h"
|
|
35
|
-
#include "src/core/lib/transport/transport.h"
|
|
36
38
|
#include "src/core/util/ref_counted_ptr.h"
|
|
37
|
-
#include "
|
|
39
|
+
#include "absl/log/log.h"
|
|
40
|
+
#include "absl/status/status.h"
|
|
38
41
|
|
|
39
42
|
namespace grpc_core {
|
|
40
43
|
namespace http2 {
|
|
@@ -49,34 +52,199 @@ namespace http2 {
|
|
|
49
52
|
#define GRPC_HTTP2_CLIENT_DLOG \
|
|
50
53
|
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
51
54
|
|
|
55
|
+
#define GRPC_HTTP2_CLIENT_ERROR_DLOG \
|
|
56
|
+
LOG_IF(ERROR, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
57
|
+
|
|
52
58
|
#define GRPC_HTTP2_COMMON_DLOG \
|
|
53
59
|
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
54
60
|
|
|
55
|
-
// TODO(akshitpatel) : [PH2][P4] : Choose appropriate size later.
|
|
56
|
-
constexpr uint32_t kStreamQueueSize = /*1 MB*/ 1024u * 1024u;
|
|
57
61
|
constexpr uint32_t kMaxWriteSize = /*10 MB*/ 10u * 1024u * 1024u;
|
|
58
62
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
constexpr uint32_t kGoawaySendTimeoutSeconds = 5u;
|
|
64
|
+
|
|
65
|
+
struct CloseStreamArgs {
|
|
66
|
+
bool close_reads;
|
|
67
|
+
bool close_writes;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
71
|
+
// Read and Write helpers
|
|
72
|
+
|
|
73
|
+
class Http2ReadContext {
|
|
74
|
+
public:
|
|
75
|
+
// Signals that the read loop should pause. If it's already paused, this is a
|
|
76
|
+
// no-op.
|
|
77
|
+
void SetPauseReadLoop() {
|
|
78
|
+
// TODO(tjagtap) [PH2][P2][Settings] Plumb with when we receive urgent
|
|
79
|
+
// settings. Example - initial window size 0 is urgent because it indicates
|
|
80
|
+
// extreme memory pressure on the server.
|
|
81
|
+
should_pause_read_loop_ = true;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// If SetPauseReadLoop() was called, this returns Pending and
|
|
85
|
+
// registers a waker that will be woken by WakeReadLoop().
|
|
86
|
+
// If SetPauseReadLoop() was not called, this returns OkStatus.
|
|
87
|
+
// This should be polled by the read loop to yield control when requested.
|
|
88
|
+
Poll<absl::Status> MaybePauseReadLoop() {
|
|
89
|
+
if (should_pause_read_loop_) {
|
|
90
|
+
read_loop_waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
91
|
+
return Pending{};
|
|
92
|
+
}
|
|
93
|
+
return absl::OkStatus();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// If SetPauseReadLoop() was called, resumes it by
|
|
97
|
+
// waking up the ReadLoop. If not paused, this is a no-op.
|
|
98
|
+
void ResumeReadLoopIfPaused() {
|
|
99
|
+
if (should_pause_read_loop_) {
|
|
100
|
+
should_pause_read_loop_ = false;
|
|
101
|
+
read_loop_waker_.Wakeup();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private:
|
|
106
|
+
bool should_pause_read_loop_ = false;
|
|
107
|
+
Waker read_loop_waker_;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
inline PromiseEndpoint::WriteArgs GetWriteArgs(
|
|
111
|
+
const Http2Settings& peer_settings) {
|
|
112
|
+
PromiseEndpoint::WriteArgs args;
|
|
113
|
+
int max_frame_size = peer_settings.preferred_receive_crypto_message_size();
|
|
114
|
+
// Note: max frame size is 0 if the remote peer does not support adjusting the
|
|
115
|
+
// sending frame size.
|
|
116
|
+
if (max_frame_size == 0) {
|
|
117
|
+
max_frame_size = INT_MAX;
|
|
118
|
+
}
|
|
119
|
+
// `WriteArgs.max_frame_size` is a suggestion to the endpoint implementation
|
|
120
|
+
// to group data to be written into frames of the specified max_frame_size. It
|
|
121
|
+
// is different from HTTP2 SETTINGS_MAX_FRAME_SIZE. That setting limits HTTP2
|
|
122
|
+
// frame payload size.
|
|
123
|
+
args.set_max_frame_size(max_frame_size);
|
|
124
|
+
|
|
125
|
+
// TODO(akshitpatel) [PH2][P1] : Currently only the WriteArgs related to
|
|
126
|
+
// preferred_receive_crypto_message_size have been plumbed. The other write
|
|
127
|
+
// args may need to be plumbed for PH2.
|
|
128
|
+
// CHTTP2 : Reference :
|
|
129
|
+
// File : src/core/ext/transport/chttp2/transport/chttp2_transport.cc
|
|
130
|
+
// Function : write_action
|
|
131
|
+
|
|
132
|
+
return args;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
136
|
+
// Settings helpers
|
|
137
|
+
|
|
138
|
+
void InitLocalSettings(Http2Settings& settings, bool is_client);
|
|
139
|
+
|
|
140
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
141
|
+
// Channel Args helpers
|
|
142
|
+
|
|
143
|
+
struct TransportChannelArgs {
|
|
144
|
+
Duration keepalive_time;
|
|
145
|
+
Duration keepalive_timeout;
|
|
146
|
+
Duration ping_timeout;
|
|
147
|
+
Duration settings_timeout;
|
|
148
|
+
bool keepalive_permit_without_calls;
|
|
149
|
+
bool enable_preferred_rx_crypto_frame_advertisement;
|
|
150
|
+
// This is used to test peer behaviour when we never send a ping ack.
|
|
151
|
+
bool test_only_ack_pings;
|
|
152
|
+
uint32_t max_header_list_size_soft_limit;
|
|
153
|
+
int max_usable_hpack_table_size;
|
|
154
|
+
int initial_sequence_number;
|
|
155
|
+
|
|
156
|
+
std::string DebugString() const {
|
|
157
|
+
return absl::StrCat(
|
|
158
|
+
"keepalive_time: ", keepalive_time,
|
|
159
|
+
" keepalive_timeout: ", keepalive_timeout,
|
|
160
|
+
" ping_timeout: ", ping_timeout,
|
|
161
|
+
" settings_timeout: ", settings_timeout,
|
|
162
|
+
" keepalive_permit_without_calls: ", keepalive_permit_without_calls,
|
|
163
|
+
" enable_preferred_rx_crypto_frame_advertisement: ",
|
|
164
|
+
enable_preferred_rx_crypto_frame_advertisement,
|
|
165
|
+
" max_header_list_size_soft_limit: ", max_header_list_size_soft_limit,
|
|
166
|
+
" max_usable_hpack_table_size: ", max_usable_hpack_table_size,
|
|
167
|
+
" initial_sequence_number: ", initial_sequence_number,
|
|
168
|
+
" test_only_ack_pings: ", test_only_ack_pings);
|
|
169
|
+
}
|
|
66
170
|
};
|
|
67
171
|
|
|
68
|
-
void
|
|
172
|
+
void ReadChannelArgs(const ChannelArgs& channel_args,
|
|
173
|
+
TransportChannelArgs& args, Http2Settings& local_settings,
|
|
174
|
+
chttp2::TransportFlowControl& flow_control,
|
|
175
|
+
bool is_client);
|
|
69
176
|
|
|
70
177
|
void ReadSettingsFromChannelArgs(const ChannelArgs& channel_args,
|
|
71
178
|
Http2Settings& local_settings,
|
|
72
179
|
chttp2::TransportFlowControl& flow_control,
|
|
73
|
-
|
|
180
|
+
bool is_client);
|
|
181
|
+
|
|
182
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
183
|
+
// ChannelZ helpers
|
|
74
184
|
|
|
75
185
|
RefCountedPtr<channelz::SocketNode> CreateChannelzSocketNode(
|
|
76
186
|
std::shared_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
|
77
187
|
event_engine_endpoint,
|
|
78
188
|
const ChannelArgs& args);
|
|
79
189
|
|
|
190
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
191
|
+
// Flow control helpers
|
|
192
|
+
|
|
193
|
+
void ProcessOutgoingDataFrameFlowControl(
|
|
194
|
+
chttp2::StreamFlowControl& stream_flow_control,
|
|
195
|
+
uint32_t flow_control_tokens_consumed);
|
|
196
|
+
|
|
197
|
+
ValueOrHttp2Status<chttp2::FlowControlAction>
|
|
198
|
+
ProcessIncomingDataFrameFlowControl(Http2FrameHeader& frame,
|
|
199
|
+
chttp2::TransportFlowControl& flow_control,
|
|
200
|
+
RefCountedPtr<Stream> stream);
|
|
201
|
+
|
|
202
|
+
// Returns true if a write should be triggered
|
|
203
|
+
bool ProcessIncomingWindowUpdateFrameFlowControl(
|
|
204
|
+
const Http2WindowUpdateFrame& frame,
|
|
205
|
+
chttp2::TransportFlowControl& flow_control, RefCountedPtr<Stream> stream);
|
|
206
|
+
|
|
207
|
+
void MaybeAddStreamWindowUpdateFrame(RefCountedPtr<Stream> stream,
|
|
208
|
+
std::vector<Http2Frame>& frames);
|
|
209
|
+
|
|
210
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
211
|
+
// Header and Continuation frame processing helpers
|
|
212
|
+
|
|
213
|
+
// This function is used to partially process a HEADER or CONTINUATION frame.
|
|
214
|
+
// `PARTIAL PROCESSING` means reading the payload of a HEADER or CONTINUATION
|
|
215
|
+
// and processing it with the HPACK decoder, and then discarding the payload.
|
|
216
|
+
// This is done to keep the transports HPACK parser in sync with peers HPACK.
|
|
217
|
+
// Scenarios where 'partial processing' is used:
|
|
218
|
+
//
|
|
219
|
+
// Case 1: Received a HEADER/CONTINUATION frame
|
|
220
|
+
// 1. If the frame is invalid ('ParseHeaderFrame'/'ParseContinuationFrame'
|
|
221
|
+
// returns a non-OK status) then it is a connection error. In this case, we
|
|
222
|
+
// do NOT invoke 'partial processing' as the transport is about to be closed
|
|
223
|
+
// anyway.
|
|
224
|
+
// 2. If ParseFramePayload returns a non-OK status, then it is a connection
|
|
225
|
+
// error. In this case, we do NOT invoke 'partial processing' as the
|
|
226
|
+
// transport is about to be closed anyway.
|
|
227
|
+
// 3. If the frame is valid, but lookup stream fails, then we invoke 'partial
|
|
228
|
+
// processing' and pass the current payload through the HPACK decoder. This
|
|
229
|
+
// can happen if the stream was already closed.
|
|
230
|
+
// 4. If the frame is valid, lookup stream succeeds and we fail while processing
|
|
231
|
+
// the frame (be it stream or connection error), we first parse the buffered
|
|
232
|
+
// payload (if any) in the stream through the HPACK decoder and then pass the
|
|
233
|
+
// current payload through the HPACK decoder.
|
|
234
|
+
// Case 2: Stream close
|
|
235
|
+
// 1. If the stream is being aborted by the upper layers or the transport hit
|
|
236
|
+
// a stream error on a stream while reading HEADER/CONTINUATION frames, we
|
|
237
|
+
// invoke 'partial processing' to parse the enqueued buffer (if any) in the
|
|
238
|
+
// stream to keep our HPACK state consistent with the peer right before
|
|
239
|
+
// closing the stream. This is done as the next time a HEADER/CONTINUATION
|
|
240
|
+
// frame is received from the peer, the stream lookup will start failing.
|
|
241
|
+
// This function returns a connection error if HPACK parsing fails. Otherwise,
|
|
242
|
+
// it returns the original status.
|
|
243
|
+
Http2Status ParseAndDiscardHeaders(HPackParser& parser, SliceBuffer&& buffer,
|
|
244
|
+
HeaderAssembler::ParseHeaderArgs args,
|
|
245
|
+
RefCountedPtr<Stream> stream,
|
|
246
|
+
Http2Status&& original_status);
|
|
247
|
+
|
|
80
248
|
} // namespace http2
|
|
81
249
|
} // namespace grpc_core
|
|
82
250
|
|
|
@@ -221,6 +221,62 @@ struct H2EndWriteCycle {
|
|
|
221
221
|
}
|
|
222
222
|
};
|
|
223
223
|
|
|
224
|
+
struct H2TcpMetricsTrace {
|
|
225
|
+
std::shared_ptr<
|
|
226
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo>
|
|
227
|
+
telemetry_info;
|
|
228
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEvent event;
|
|
229
|
+
std::vector<
|
|
230
|
+
grpc_event_engine::experimental::EventEngine::Endpoint::WriteMetric>
|
|
231
|
+
metrics;
|
|
232
|
+
absl::Time timestamp;
|
|
233
|
+
|
|
234
|
+
size_t MemoryUsage() const {
|
|
235
|
+
return sizeof(H2TcpMetricsTrace) + metrics.capacity() * sizeof(metrics[0]);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
channelz::PropertyList ChannelzProperties() const {
|
|
239
|
+
absl::string_view event_string = "unknown";
|
|
240
|
+
switch (event) {
|
|
241
|
+
case grpc_event_engine::experimental::EventEngine::Endpoint::WriteEvent::
|
|
242
|
+
kSendMsg:
|
|
243
|
+
event_string = "send_msg";
|
|
244
|
+
break;
|
|
245
|
+
case grpc_event_engine::experimental::EventEngine::Endpoint::WriteEvent::
|
|
246
|
+
kScheduled:
|
|
247
|
+
event_string = "scheduled";
|
|
248
|
+
break;
|
|
249
|
+
case grpc_event_engine::experimental::EventEngine::Endpoint::WriteEvent::
|
|
250
|
+
kSent:
|
|
251
|
+
event_string = "sent";
|
|
252
|
+
break;
|
|
253
|
+
case grpc_event_engine::experimental::EventEngine::Endpoint::WriteEvent::
|
|
254
|
+
kAcked:
|
|
255
|
+
event_string = "acked";
|
|
256
|
+
break;
|
|
257
|
+
case grpc_event_engine::experimental::EventEngine::Endpoint::WriteEvent::
|
|
258
|
+
kClosed:
|
|
259
|
+
event_string = "closed";
|
|
260
|
+
break;
|
|
261
|
+
default:
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
return channelz::PropertyList()
|
|
265
|
+
.Set("event", event_string)
|
|
266
|
+
.Set("tcp_event_timestamp", timestamp)
|
|
267
|
+
.Merge([this]() {
|
|
268
|
+
channelz::PropertyList props;
|
|
269
|
+
for (const auto& metric : metrics) {
|
|
270
|
+
if (auto key = telemetry_info->GetMetricName(metric.key);
|
|
271
|
+
key.has_value()) {
|
|
272
|
+
props.Set(*key, metric.value);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return props;
|
|
276
|
+
}());
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
224
280
|
using Http2ZTraceCollector = channelz::ZTraceCollector<
|
|
225
281
|
http2_ztrace_collector_detail::Config, H2DataTrace<false>,
|
|
226
282
|
H2HeaderTrace<false>, H2RstStreamTrace<false>, H2SettingsTrace<false>,
|
|
@@ -229,7 +285,7 @@ using Http2ZTraceCollector = channelz::ZTraceCollector<
|
|
|
229
285
|
H2RstStreamTrace<true>, H2SettingsTrace<true>, H2PingTrace<true>,
|
|
230
286
|
H2GoAwayTrace<true>, H2WindowUpdateTrace<true>, H2SecurityTrace<true>,
|
|
231
287
|
H2UnknownFrameTrace, H2FlowControlStall, H2BeginWriteCycle, H2EndWriteCycle,
|
|
232
|
-
H2BeginEndpointWrite>;
|
|
288
|
+
H2BeginEndpointWrite, H2TcpMetricsTrace>;
|
|
233
289
|
|
|
234
290
|
struct PromiseEndpointReadTrace {
|
|
235
291
|
uint64_t bytes;
|