grpc 1.75.0 → 1.78.1
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 +24 -5
- data/include/grpc/credentials.h +27 -6
- data/include/grpc/event_engine/memory_allocator.h +2 -0
- data/include/grpc/event_engine/memory_request.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 +5 -5
- data/src/core/call/call_filters.h +211 -37
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +54 -32
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +49 -10
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +9 -9
- 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 +10 -9
- 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 +2 -2
- data/src/core/call/security_context.h +1 -1
- data/src/core/call/server_call.cc +5 -5
- data/src/core/call/server_call.h +6 -4
- 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 +25 -29
- data/src/core/channelz/channelz.h +73 -22
- data/src/core/channelz/channelz_registry.cc +2 -2
- data/src/core/channelz/channelz_registry.h +53 -2
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +15 -4
- data/src/core/channelz/text_encode.cc +66 -0
- data/src/core/channelz/text_encode.h +29 -0
- data/src/core/channelz/v2tov1/convert.cc +17 -6
- data/src/core/channelz/v2tov1/legacy_api.cc +18 -12
- data/src/core/channelz/v2tov1/property_list.cc +2 -1
- data/src/core/channelz/ztrace_collector.h +260 -87
- data/src/core/client_channel/backup_poller.cc +7 -8
- 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 +144 -84
- 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 +424 -686
- data/src/core/client_channel/client_channel_filter.h +57 -150
- data/src/core/client_channel/client_channel_internal.h +8 -5
- 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 +5 -5
- data/src/core/client_channel/connector.h +2 -0
- data/src/core/client_channel/dynamic_filters.cc +5 -5
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +1 -28
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +10 -12
- data/src/core/client_channel/load_balanced_call_destination.h +1 -1
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.cc +2 -2
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +11 -12
- 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 +114 -25
- 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 +5 -5
- data/src/core/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/config/config_vars.cc +38 -3
- data/src/core/config/config_vars.h +26 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +8 -8
- data/src/core/config/load_config.cc +13 -1
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +4 -4
- 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 +7 -6
- data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
- data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
- 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 +7 -7
- 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 +6 -6
- 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 +7 -7
- data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
- data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
- data/src/core/credentials/call/jwt/jwt_verifier.cc +19 -18
- 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 +49 -72
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
- data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
- 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 +5 -5
- data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -15
- 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 +23 -3
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
- data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
- 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 +7 -7
- 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 +7 -7
- data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +83 -39
- data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
- data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
- data/src/core/credentials/transport/security_connector.cc +6 -6
- data/src/core/credentials/transport/security_connector.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +13 -13
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -8
- data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -25
- 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 +8 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
- 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 +18 -13
- data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +3 -3
- data/src/core/credentials/transport/tls/tls_security_connector.cc +15 -15
- data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
- data/src/core/credentials/transport/transport_credentials.cc +3 -3
- data/src/core/credentials/transport/transport_credentials.h +4 -4
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
- 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 +6 -4
- 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 +2 -2
- 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 +11 -11
- data/src/core/ext/filters/http/message_compress/compression_filter.h +24 -5
- 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 +14 -14
- 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/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +58 -44
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +25 -24
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +306 -148
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -7
- data/src/core/ext/transport/chttp2/transport/flow_control.h +223 -83
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +175 -27
- data/src/core/ext/transport/chttp2/transport/frame.h +58 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- 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 +6 -6
- 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 +194 -54
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +34 -34
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1475 -632
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +384 -373
- 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 -3
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -5
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +337 -30
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +196 -21
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +172 -72
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -19
- 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 +30 -21
- data/src/core/ext/transport/chttp2/transport/parsing.cc +25 -23
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +70 -28
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +63 -23
- 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 +287 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +476 -208
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +57 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +202 -84
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
- data/src/core/ext/transport/inproc/inproc_transport.cc +9 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +11 -8
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
- 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 +5 -5
- 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 +8 -8
- 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 +12 -12
- 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 +6 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +38 -15
- data/src/core/handshaker/security/secure_endpoint.cc +31 -11
- data/src/core/handshaker/security/security_handshaker.cc +11 -8
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -6
- 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 +29 -25
- data/src/core/lib/channel/channel_stack.h +8 -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 +8 -13
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/promise_based_filter.cc +132 -72
- data/src/core/lib/channel/promise_based_filter.h +39 -23
- data/src/core/lib/compression/compression_internal.cc +6 -6
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +8 -8
- 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 +30 -28
- data/src/core/lib/event_engine/ares_resolver.h +4 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -3
- 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 +4 -4
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
- 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 +3 -3
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- 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 +12 -12
- 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 +15 -15
- 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 +3 -3
- 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 +28 -27
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +175 -177
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +40 -61
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +11 -7
- 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 +9 -9
- 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 +2 -2
- 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.cc +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 +4 -4
- 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/resolved_address.cc +3 -3
- data/src/core/lib/event_engine/shim.cc +8 -11
- data/src/core/lib/event_engine/shim.h +2 -1
- data/src/core/lib/event_engine/slice.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +15 -15
- 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 +11 -11
- 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 +32 -32
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
- data/src/core/lib/event_engine/windows/iocp.cc +11 -11
- 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 +7 -7
- data/src/core/lib/event_engine/windows/win_socket.h +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +16 -16
- data/src/core/lib/event_engine/windows/windows_engine.cc +20 -18
- data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +10 -10
- 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 +255 -42
- data/src/core/lib/experiments/experiments.h +105 -21
- data/src/core/lib/iomgr/buffer_list.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +4 -4
- 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 +7 -7
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
- 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 +19 -19
- data/src/core/lib/iomgr/ev_poll_posix.cc +14 -14
- 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 +10 -9
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- 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 +9 -9
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +4 -4
- 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 +4 -4
- data/src/core/lib/iomgr/socket_windows.cc +6 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +47 -47
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +7 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +70 -31
- data/src/core/lib/iomgr/tcp_windows.cc +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +5 -5
- data/src/core/lib/iomgr/timer_manager.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- 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 +3 -3
- data/src/core/lib/promise/activity.h +11 -10
- 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 +3 -3
- data/src/core/lib/promise/detail/join_state.h +10 -10
- 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 +16 -16
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
- data/src/core/lib/promise/for_each.h +8 -8
- 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 +5 -5
- data/src/core/lib/promise/latch.h +9 -9
- 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 +31 -30
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.cc +43 -30
- data/src/core/lib/promise/party.h +27 -23
- data/src/core/lib/promise/pipe.h +31 -17
- data/src/core/lib/promise/poll.h +6 -5
- data/src/core/lib/promise/promise.h +2 -4
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +8 -8
- data/src/core/lib/promise/try_join.h +5 -5
- data/src/core/lib/promise/try_seq.h +5 -5
- 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/arena.h +15 -2
- data/src/core/lib/resource_quota/connection_quota.cc +9 -7
- data/src/core/lib/resource_quota/connection_quota.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +48 -27
- data/src/core/lib/resource_quota/memory_quota.h +56 -20
- 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 +55 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- data/src/core/lib/resource_quota/thread_quota.h +1 -1
- data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
- data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
- data/src/core/lib/security/authorization/audit_logging.cc +7 -7
- 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_authorization_engine.cc +2 -2
- 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 +3 -3
- 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/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +58 -28
- data/src/core/lib/surface/call.h +13 -6
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/call_utils.cc +7 -7
- data/src/core/lib/surface/call_utils.h +85 -20
- data/src/core/lib/surface/channel.cc +6 -5
- data/src/core/lib/surface/channel.h +13 -3
- data/src/core/lib/surface/channel_create.cc +12 -8
- data/src/core/lib/surface/channel_create.h +1 -1
- data/src/core/lib/surface/channel_init.cc +84 -27
- data/src/core/lib/surface/channel_init.h +30 -13
- data/src/core/lib/surface/completion_queue.cc +21 -20
- data/src/core/lib/surface/completion_queue_factory.cc +7 -7
- data/src/core/lib/surface/connection_context.h +45 -2
- data/src/core/lib/surface/filter_stack_call.cc +25 -31
- data/src/core/lib/surface/filter_stack_call.h +6 -7
- 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 +10 -10
- 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 +3 -3
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +5 -5
- 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 +4 -4
- data/src/core/lib/transport/promise_endpoint.h +11 -11
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- 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 +8 -8
- 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 +6 -6
- 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 +37 -48
- 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 +13 -9
- data/src/core/load_balancing/health_check_client_internal.h +5 -5
- 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 +3 -3
- data/src/core/load_balancing/lb_policy_registry.h +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +11 -7
- data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +9 -17
- data/src/core/load_balancing/pick_first/pick_first.cc +62 -32
- data/src/core/load_balancing/priority/priority.cc +29 -30
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
- data/src/core/load_balancing/rls/rls.cc +23 -23
- data/src/core/load_balancing/round_robin/round_robin.cc +16 -16
- data/src/core/load_balancing/subchannel_interface.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +42 -41
- data/src/core/load_balancing/weighted_target/weighted_target.cc +14 -14
- data/src/core/load_balancing/xds/cds.cc +81 -37
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +24 -41
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +14 -14
- 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 +4 -4
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +35 -35
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +16 -16
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
- data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
- 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 +6 -6
- data/src/core/resolver/endpoint_addresses.h +4 -1
- data/src/core/resolver/fake/fake_resolver.cc +3 -3
- data/src/core/resolver/fake/fake_resolver.h +3 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
- data/src/core/resolver/polling_resolver.cc +8 -8
- 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 +5 -4
- 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 +7 -7
- data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
- data/src/core/resolver/xds/xds_resolver.cc +25 -22
- 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 +47 -43
- 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 +9 -5
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +5 -5
- 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 +19 -18
- 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 +4 -4
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +201 -24
- data/src/core/telemetry/default_tcp_tracer.h +3 -3
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +999 -0
- data/src/core/telemetry/instrument.h +1105 -0
- data/src/core/telemetry/metrics.cc +15 -5
- data/src/core/telemetry/metrics.h +36 -5
- data/src/core/telemetry/stats.h +2 -2
- data/src/core/telemetry/stats_data.cc +1 -20
- data/src/core/telemetry/stats_data.h +2 -21
- data/src/core/transport/auth_context.cc +3 -3
- 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 +81 -48
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +46 -36
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
- 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 +4 -4
- 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 +16 -8
- 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 +18 -5
- data/src/core/tsi/fake_transport_security.cc +6 -5
- data/src/core/tsi/local_transport_security.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +30 -30
- data/src/core/tsi/ssl_transport_security.h +1 -1
- data/src/core/tsi/ssl_transport_security_utils.cc +10 -10
- 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/chunked_vector.h +4 -4
- 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 +2 -2
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/gcp_metadata_query.cc +7 -7
- data/src/core/util/gcp_metadata_query.h +2 -2
- data/src/core/util/glob.cc +2 -0
- data/src/core/util/grpc_check.cc +24 -0
- data/src/core/util/grpc_check.h +103 -0
- 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 +6 -6
- 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 +4 -4
- 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 +199 -28
- 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 +4 -4
- data/src/core/util/matchers.h +1 -1
- data/src/core/util/memory_usage.h +17 -1
- 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/directory_reader.cc +3 -2
- data/src/core/util/posix/stat.cc +2 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/posix/thd.cc +2 -2
- data/src/core/util/posix/tmpfile.cc +2 -2
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted.h +2 -2
- data/src/core/util/ref_counted_ptr.h +6 -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/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- 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 +8 -3
- data/src/core/xds/grpc/xds_certificate_provider.cc +4 -4
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +39 -20
- data/src/core/xds/grpc/xds_client_grpc.h +6 -3
- 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 +7 -7
- data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
- 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 +7 -7
- 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.cc +4 -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 +9 -9
- data/src/core/xds/grpc/xds_listener_parser.h +1 -1
- data/src/core/xds/grpc/xds_matcher.cc +277 -0
- data/src/core/xds/grpc/xds_matcher.h +432 -0
- data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
- data/src/core/xds/grpc/xds_matcher_action.h +48 -0
- data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
- data/src/core/xds/grpc/xds_matcher_context.h +46 -0
- data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
- data/src/core/xds/grpc/xds_matcher_input.h +105 -0
- data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
- data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
- data/src/core/xds/grpc/xds_metadata.cc +4 -3
- 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 +14 -14
- data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
- data/src/core/xds/grpc/xds_routing.cc +6 -6
- 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 +11 -11
- data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
- data/src/core/xds/xds_client/lrs_client.cc +9 -9
- 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 +17 -17
- 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_grpc_imports.generated.h +2 -2
- 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/grpc.rb +7 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
- data/src/ruby/spec/spec_helper.rb +1 -1
- data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
- metadata +67 -8
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
|
|
21
21
|
#include <grpc/support/port_platform.h>
|
|
22
22
|
|
|
23
|
-
#include "absl/log/check.h"
|
|
24
|
-
#include "absl/log/log.h"
|
|
25
23
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
26
24
|
#include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
|
|
27
25
|
#include "src/core/lib/debug/trace.h"
|
|
28
26
|
#include "src/core/lib/experiments/experiments.h"
|
|
29
27
|
#include "src/core/util/bitset.h"
|
|
28
|
+
#include "src/core/util/grpc_check.h"
|
|
29
|
+
#include "absl/log/log.h"
|
|
30
30
|
|
|
31
31
|
static const char* stream_list_id_string(grpc_chttp2_stream_list_id id) {
|
|
32
32
|
switch (id) {
|
|
@@ -59,7 +59,7 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
|
|
|
59
59
|
grpc_chttp2_stream* s = t->lists[id].head;
|
|
60
60
|
if (s) {
|
|
61
61
|
grpc_chttp2_stream* new_head = s->links[id].next;
|
|
62
|
-
|
|
62
|
+
GRPC_CHECK(s->included.is_set(id));
|
|
63
63
|
if (new_head) {
|
|
64
64
|
t->lists[id].head = new_head;
|
|
65
65
|
new_head->links[id].prev = nullptr;
|
|
@@ -79,12 +79,12 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
|
|
|
79
79
|
|
|
80
80
|
static void stream_list_remove(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
81
81
|
grpc_chttp2_stream_list_id id) {
|
|
82
|
-
|
|
82
|
+
GRPC_CHECK(s->included.is_set(id));
|
|
83
83
|
s->included.clear(id);
|
|
84
84
|
if (s->links[id].prev) {
|
|
85
85
|
s->links[id].prev->links[id].next = s->links[id].next;
|
|
86
86
|
} else {
|
|
87
|
-
|
|
87
|
+
GRPC_CHECK(t->lists[id].head == s);
|
|
88
88
|
t->lists[id].head = s->links[id].next;
|
|
89
89
|
}
|
|
90
90
|
if (s->links[id].next) {
|
|
@@ -112,7 +112,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
|
|
|
112
112
|
grpc_chttp2_stream* s,
|
|
113
113
|
grpc_chttp2_stream_list_id id) {
|
|
114
114
|
grpc_chttp2_stream* old_tail;
|
|
115
|
-
|
|
115
|
+
GRPC_CHECK(!s->included.is_set(id));
|
|
116
116
|
old_tail = t->lists[id].tail;
|
|
117
117
|
s->links[id].next = nullptr;
|
|
118
118
|
s->links[id].prev = old_tail;
|
|
@@ -132,7 +132,7 @@ static void stream_list_add_head(grpc_chttp2_transport* t,
|
|
|
132
132
|
grpc_chttp2_stream* s,
|
|
133
133
|
grpc_chttp2_stream_list_id id) {
|
|
134
134
|
grpc_chttp2_stream* old_head;
|
|
135
|
-
|
|
135
|
+
GRPC_CHECK(!s->included.is_set(id));
|
|
136
136
|
old_head = t->lists[id].head;
|
|
137
137
|
s->links[id].next = old_head;
|
|
138
138
|
s->links[id].prev = nullptr;
|
|
@@ -170,7 +170,7 @@ static bool stream_list_prepend(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
|
170
170
|
|
|
171
171
|
bool grpc_chttp2_list_add_writable_stream(grpc_chttp2_transport* t,
|
|
172
172
|
grpc_chttp2_stream* s) {
|
|
173
|
-
|
|
173
|
+
GRPC_CHECK_NE(s->id, 0u);
|
|
174
174
|
if (grpc_core::IsPrioritizeFinishedRequestsEnabled() &&
|
|
175
175
|
s->send_trailing_metadata != nullptr) {
|
|
176
176
|
return stream_list_prepend(t, s, GRPC_CHTTP2_LIST_WRITABLE);
|
|
@@ -16,4 +16,20 @@
|
|
|
16
16
|
//
|
|
17
17
|
//
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
#include "src/core/ext/transport/chttp2/transport/transport_common.h"
|
|
20
|
+
|
|
21
|
+
#include <cstdint>
|
|
22
|
+
|
|
23
|
+
#include "src/core/util/shared_bit_gen.h"
|
|
24
|
+
#include "src/core/util/time.h"
|
|
25
|
+
#include "absl/random/random.h"
|
|
26
|
+
|
|
27
|
+
namespace grpc_core {
|
|
28
|
+
|
|
29
|
+
Duration TarpitDuration(const int min_tarpit_duration_ms,
|
|
30
|
+
const int max_tarpit_duration_ms) {
|
|
31
|
+
return Duration::Milliseconds(absl::LogUniform<int>(
|
|
32
|
+
SharedBitGen(), min_tarpit_duration_ms, max_tarpit_duration_ms));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
} // namespace grpc_core
|
|
@@ -19,9 +19,66 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TRANSPORT_COMMON_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TRANSPORT_COMMON_H
|
|
21
21
|
|
|
22
|
+
#include <cstdint>
|
|
23
|
+
|
|
24
|
+
#include "src/core/util/time.h"
|
|
25
|
+
|
|
22
26
|
// For an HTTP2 connection, this must be sent before the settings frame is sent.
|
|
23
27
|
#define GRPC_CHTTP2_CLIENT_CONNECT_STRING "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
|
24
28
|
#define GRPC_CHTTP2_CLIENT_CONNECT_STRLEN \
|
|
25
29
|
(sizeof(GRPC_CHTTP2_CLIENT_CONNECT_STRING) - 1)
|
|
26
30
|
|
|
31
|
+
// EXPERIMENTAL: control tarpitting in chttp2
|
|
32
|
+
#define GRPC_ARG_HTTP_ALLOW_TARPIT "grpc.http.tarpit"
|
|
33
|
+
#define GRPC_ARG_HTTP_TARPIT_MIN_DURATION_MS "grpc.http.tarpit_min_duration_ms"
|
|
34
|
+
#define GRPC_ARG_HTTP_TARPIT_MAX_DURATION_MS "grpc.http.tarpit_max_duration_ms"
|
|
35
|
+
|
|
36
|
+
// EXPERIMENTAL: provide protection against overloading a server with too many
|
|
37
|
+
// requests: wait for streams to be deallocated before they stop counting
|
|
38
|
+
// against MAX_CONCURRENT_STREAMS
|
|
39
|
+
#define GRPC_ARG_MAX_CONCURRENT_STREAMS_OVERLOAD_PROTECTION \
|
|
40
|
+
"grpc.http.overload_protection"
|
|
41
|
+
|
|
42
|
+
// EXPERIMENTAL: Fail requests at the client if the client is over max
|
|
43
|
+
// concurrent streams, so they may be retried elsewhere.
|
|
44
|
+
#define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \
|
|
45
|
+
"grpc.http.max_concurrent_streams_reject_on_client"
|
|
46
|
+
|
|
47
|
+
#define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
|
|
48
|
+
|
|
49
|
+
#define GRPC_CHTTP2_PING_TIMEOUT_STR "ping timeout"
|
|
50
|
+
#define GRPC_CHTTP2_KEEPALIVE_TIMEOUT_STR "keepalive timeout"
|
|
51
|
+
|
|
52
|
+
namespace grpc_core {
|
|
53
|
+
|
|
54
|
+
Duration TarpitDuration(int min_tarpit_duration_ms, int max_tarpit_duration_ms);
|
|
55
|
+
|
|
56
|
+
namespace http2 {
|
|
57
|
+
enum class WritableStreamPriority : uint8_t {
|
|
58
|
+
// Highest priority
|
|
59
|
+
kStreamClosed = 0,
|
|
60
|
+
kWaitForTransportFlowControl,
|
|
61
|
+
// Lowest Priority
|
|
62
|
+
kDefault,
|
|
63
|
+
kLastPriority
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// Debug helper function to convert a WritableStreamPriority to a string.
|
|
67
|
+
inline std::string GetWritableStreamPriorityString(
|
|
68
|
+
const WritableStreamPriority priority) {
|
|
69
|
+
switch (priority) {
|
|
70
|
+
case WritableStreamPriority::kStreamClosed:
|
|
71
|
+
return "StreamClosed";
|
|
72
|
+
case WritableStreamPriority::kWaitForTransportFlowControl:
|
|
73
|
+
return "WaitForTransportFlowControl";
|
|
74
|
+
case WritableStreamPriority::kDefault:
|
|
75
|
+
return "Default";
|
|
76
|
+
default:
|
|
77
|
+
return "unknown";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
} // namespace http2
|
|
81
|
+
|
|
82
|
+
} // namespace grpc_core
|
|
83
|
+
|
|
27
84
|
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TRANSPORT_COMMON_H
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
#include <stdint.h>
|
|
24
24
|
#include <stdlib.h>
|
|
25
25
|
|
|
26
|
-
#include "
|
|
26
|
+
#include "src/core/util/grpc_check.h"
|
|
27
27
|
|
|
28
28
|
// Helpers for hpack varint encoding
|
|
29
29
|
|
|
@@ -49,7 +49,7 @@ class VarintWriter {
|
|
|
49
49
|
explicit VarintWriter(size_t value)
|
|
50
50
|
: value_(value),
|
|
51
51
|
length_(value < kMaxInPrefix ? 1 : VarintLength(value - kMaxInPrefix)) {
|
|
52
|
-
|
|
52
|
+
GRPC_CHECK(value <= UINT32_MAX);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
size_t value() const { return value_; }
|
|
@@ -19,30 +19,51 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_WRITABLE_STREAMS_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_WRITABLE_STREAMS_H
|
|
21
21
|
|
|
22
|
+
#include <cstdint>
|
|
23
|
+
#include <limits>
|
|
24
|
+
#include <optional>
|
|
22
25
|
#include <queue>
|
|
26
|
+
#include <vector>
|
|
23
27
|
|
|
24
|
-
#include "
|
|
25
|
-
#include "absl/log/log.h"
|
|
28
|
+
#include "src/core/ext/transport/chttp2/transport/transport_common.h"
|
|
26
29
|
#include "src/core/lib/promise/if.h"
|
|
27
30
|
#include "src/core/lib/promise/mpsc.h"
|
|
28
31
|
#include "src/core/lib/promise/race.h"
|
|
32
|
+
#include "src/core/lib/promise/status_flag.h"
|
|
29
33
|
#include "src/core/lib/promise/try_seq.h"
|
|
34
|
+
#include "src/core/util/grpc_check.h"
|
|
35
|
+
#include "absl/log/log.h"
|
|
36
|
+
#include "absl/status/status.h"
|
|
37
|
+
#include "absl/strings/str_cat.h"
|
|
30
38
|
|
|
31
39
|
namespace grpc_core {
|
|
32
40
|
namespace http2 {
|
|
33
41
|
|
|
42
|
+
namespace writable_streams_internal {
|
|
43
|
+
template <typename StreamPtr, typename = void>
|
|
44
|
+
struct HasGetStreamId {
|
|
45
|
+
static constexpr bool value = false;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
template <typename StreamPtr>
|
|
49
|
+
struct HasGetStreamId<
|
|
50
|
+
StreamPtr,
|
|
51
|
+
absl::void_t<decltype(std::declval<StreamPtr>()->GetStreamId())>> {
|
|
52
|
+
static constexpr bool value =
|
|
53
|
+
std::is_same_v<decltype(std::declval<StreamPtr>()->GetStreamId()),
|
|
54
|
+
uint32_t>;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
} // namespace writable_streams_internal
|
|
58
|
+
|
|
34
59
|
#define GRPC_WRITABLE_STREAMS_DEBUG VLOG(2)
|
|
35
60
|
|
|
61
|
+
template <typename StreamPtr>
|
|
36
62
|
class WritableStreams {
|
|
63
|
+
static_assert(writable_streams_internal::HasGetStreamId<StreamPtr>::value,
|
|
64
|
+
"StreamPtr must have a GetStreamId() function");
|
|
65
|
+
|
|
37
66
|
public:
|
|
38
|
-
enum class StreamPriority : uint8_t {
|
|
39
|
-
// Highest priority
|
|
40
|
-
kStreamClosed = 0,
|
|
41
|
-
kWaitForTransportFlowControl,
|
|
42
|
-
// Lowest Priority
|
|
43
|
-
kDefault,
|
|
44
|
-
kLastPriority
|
|
45
|
-
};
|
|
46
67
|
explicit WritableStreams(
|
|
47
68
|
const uint32_t max_queue_size = std::numeric_limits<uint32_t>::max())
|
|
48
69
|
: queue_(max_queue_size), sender_(queue_.MakeSender()) {}
|
|
@@ -53,34 +74,46 @@ class WritableStreams {
|
|
|
53
74
|
WritableStreams(WritableStreams&&) = delete;
|
|
54
75
|
WritableStreams& operator=(WritableStreams&&) = delete;
|
|
55
76
|
|
|
77
|
+
absl::Status EnqueueWrapper(const StreamPtr stream,
|
|
78
|
+
const WritableStreamPriority priority,
|
|
79
|
+
bool transport_tokens_available) {
|
|
80
|
+
if (transport_tokens_available) {
|
|
81
|
+
return Enqueue(stream, priority);
|
|
82
|
+
} else {
|
|
83
|
+
return BlockedOnTransportFlowControl(stream);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
56
87
|
// Enqueues a stream id with the given priority.
|
|
57
88
|
// If this returns error, transport MUST be closed.
|
|
58
|
-
absl::Status Enqueue(const
|
|
59
|
-
const
|
|
89
|
+
absl::Status Enqueue(const StreamPtr stream,
|
|
90
|
+
const WritableStreamPriority priority) {
|
|
60
91
|
// Streams waiting for transport flow control MUST not be added to list of
|
|
61
92
|
// writable streams via this API, instead they MUST be added via
|
|
62
93
|
// BlockedOnTransportFlowControl. The reason being there is no merit in
|
|
63
94
|
// re-adding the stream to mpsc queue while it can be immediately enqueued
|
|
64
95
|
// to the prioritized queue.
|
|
65
|
-
|
|
96
|
+
GRPC_DCHECK(priority !=
|
|
97
|
+
WritableStreamPriority::kWaitForTransportFlowControl);
|
|
66
98
|
StatusFlag status = sender_.UnbufferedImmediateSend(
|
|
67
|
-
StreamIDAndPriority{
|
|
68
|
-
GRPC_WRITABLE_STREAMS_DEBUG
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return (status.ok())
|
|
73
|
-
|
|
74
|
-
|
|
99
|
+
StreamIDAndPriority{stream, priority}, /*tokens*/ 1);
|
|
100
|
+
GRPC_WRITABLE_STREAMS_DEBUG
|
|
101
|
+
<< "UnbufferedImmediateEnqueue stream with priority "
|
|
102
|
+
<< GetWritableStreamPriorityString(priority) << " status " << status;
|
|
103
|
+
|
|
104
|
+
return (status.ok())
|
|
105
|
+
? absl::OkStatus()
|
|
106
|
+
: absl::InternalError(absl::StrCat(
|
|
107
|
+
"Failed to enqueue stream to list of writable streams "));
|
|
75
108
|
}
|
|
76
109
|
|
|
77
110
|
// A synchronous function to add a stream id to the transport flow control
|
|
78
111
|
// wait list.
|
|
79
|
-
absl::Status BlockedOnTransportFlowControl(const
|
|
80
|
-
prioritized_queue_.Push(
|
|
81
|
-
|
|
82
|
-
GRPC_WRITABLE_STREAMS_DEBUG << "
|
|
83
|
-
|
|
112
|
+
absl::Status BlockedOnTransportFlowControl(const StreamPtr stream) {
|
|
113
|
+
prioritized_queue_.Push(
|
|
114
|
+
stream, WritableStreamPriority::kWaitForTransportFlowControl);
|
|
115
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Enqueuing a stream with priority "
|
|
116
|
+
"kWaitForTransportFlowControl ";
|
|
84
117
|
return absl::OkStatus();
|
|
85
118
|
}
|
|
86
119
|
|
|
@@ -100,29 +133,33 @@ class WritableStreams {
|
|
|
100
133
|
// prioritized queue.
|
|
101
134
|
// 6. Return the stream id with the highest priority.
|
|
102
135
|
// If this returns error, transport MUST be closed.
|
|
136
|
+
// TODO(akshitpatel) : [PH2][P2] - This will be deprecated in favor of
|
|
137
|
+
// WaitForReady.
|
|
103
138
|
auto Next(const bool transport_tokens_available) {
|
|
104
139
|
// TODO(akshitpatel) : [PH2][P2] - Need to add an immediate dequeue option
|
|
105
140
|
// for the mpsc queue in favor of the race.
|
|
106
141
|
|
|
107
|
-
return AssertResultType<absl::StatusOr<
|
|
142
|
+
return AssertResultType<absl::StatusOr<StreamPtr>>(TrySeq(
|
|
108
143
|
// The current MPSC queue does not have a version of NextBatch that
|
|
109
144
|
// resolves immediately. So we made this Race to ensure that the
|
|
110
145
|
// "Dequeue" from the mpsc resolves immediately - Either with data , or
|
|
111
146
|
// empty.
|
|
112
|
-
Race(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
147
|
+
Race(
|
|
148
|
+
queue_.NextBatch(kMaxBatchSize),
|
|
149
|
+
Immediate(
|
|
150
|
+
ValueOrFailure<std::vector<std::optional<StreamIDAndPriority>>>(
|
|
151
|
+
std::vector<std::optional<StreamIDAndPriority>>()))),
|
|
152
|
+
[this, transport_tokens_available](
|
|
153
|
+
std::vector<std::optional<StreamIDAndPriority>> batch) {
|
|
117
154
|
AddToPrioritizedQueue(batch);
|
|
118
|
-
std::optional<
|
|
155
|
+
std::optional<StreamPtr> stream =
|
|
119
156
|
prioritized_queue_.Pop(transport_tokens_available);
|
|
120
157
|
return If(
|
|
121
|
-
|
|
122
|
-
[
|
|
123
|
-
GRPC_WRITABLE_STREAMS_DEBUG << "Next stream id "
|
|
124
|
-
<<
|
|
125
|
-
return
|
|
158
|
+
stream.has_value(),
|
|
159
|
+
[stream]() -> absl::StatusOr<StreamPtr> {
|
|
160
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Next stream id: "
|
|
161
|
+
<< (*stream)->GetStreamId();
|
|
162
|
+
return stream.value();
|
|
126
163
|
},
|
|
127
164
|
[this, transport_tokens_available] {
|
|
128
165
|
GRPC_WRITABLE_STREAMS_DEBUG << "Query queue for next batch";
|
|
@@ -131,22 +168,24 @@ class WritableStreams {
|
|
|
131
168
|
// on mpsc queue to get a new batch of stream ids.
|
|
132
169
|
queue_.NextBatch(kMaxBatchSize),
|
|
133
170
|
[this, transport_tokens_available](
|
|
134
|
-
ValueOrFailure<
|
|
135
|
-
|
|
171
|
+
ValueOrFailure<
|
|
172
|
+
std::vector<std::optional<StreamIDAndPriority>>>
|
|
173
|
+
batch) -> absl::StatusOr<StreamPtr> {
|
|
136
174
|
if (batch.ok()) {
|
|
137
175
|
GRPC_WRITABLE_STREAMS_DEBUG << "Next batch size "
|
|
138
176
|
<< batch.value().size();
|
|
139
177
|
AddToPrioritizedQueue(batch.value());
|
|
140
|
-
std::optional<
|
|
178
|
+
std::optional<StreamPtr> stream =
|
|
141
179
|
prioritized_queue_.Pop(transport_tokens_available);
|
|
142
|
-
// TODO(akshitpatel) : [PH2][P4] - This
|
|
143
|
-
// ideally be fine. But in case if
|
|
144
|
-
// spuriously returns an empty batch,
|
|
145
|
-
// to avoid this.
|
|
146
|
-
|
|
147
|
-
GRPC_WRITABLE_STREAMS_DEBUG
|
|
148
|
-
|
|
149
|
-
|
|
180
|
+
// TODO(akshitpatel) : [PH2][P4] - This GRPC_DCHECK
|
|
181
|
+
// should ideally be fine. But in case if
|
|
182
|
+
// queue_.NextBatch spuriously returns an empty batch,
|
|
183
|
+
// move to a Loop to avoid this.
|
|
184
|
+
GRPC_DCHECK(stream.has_value());
|
|
185
|
+
GRPC_WRITABLE_STREAMS_DEBUG
|
|
186
|
+
<< "Next stream id: "
|
|
187
|
+
<< stream.value()->GetStreamId();
|
|
188
|
+
return stream.value();
|
|
150
189
|
}
|
|
151
190
|
return absl::InternalError("Failed to read from queue");
|
|
152
191
|
});
|
|
@@ -154,18 +193,55 @@ class WritableStreams {
|
|
|
154
193
|
}));
|
|
155
194
|
}
|
|
156
195
|
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
196
|
+
// Wait for a stream to be ready to be dequeued. This is a blocking call.
|
|
197
|
+
// This returns a promise that resolves when there is a writeable stream ready
|
|
198
|
+
// to be dequeued or ForceReadyForWrite() is called.
|
|
199
|
+
auto WaitForReady(const bool transport_tokens_available) {
|
|
200
|
+
return TrySeq(
|
|
201
|
+
If(
|
|
202
|
+
PrioritizedQueueHasWritableStreams(transport_tokens_available),
|
|
203
|
+
[this]() {
|
|
204
|
+
// TODO(akshitpatel) : [PH2][P3] - This is temporary. Replace with
|
|
205
|
+
// native MPSC::ImmediateNextBatch.
|
|
206
|
+
// We already have writable streams in the prioritized queue.
|
|
207
|
+
// We check for any newly added streams to the un-prioritised
|
|
208
|
+
// queue. We dequeue to honor the priority of any newly enqueued
|
|
209
|
+
// streams.
|
|
210
|
+
return Race(
|
|
211
|
+
queue_.NextBatch(kMaxBatchSize),
|
|
212
|
+
Immediate(ValueOrFailure<
|
|
213
|
+
std::vector<std::optional<StreamIDAndPriority>>>(
|
|
214
|
+
std::vector<std::optional<StreamIDAndPriority>>())));
|
|
215
|
+
},
|
|
216
|
+
// The prioritised queue is empty. So we wait for something to
|
|
217
|
+
// enter the un-prioritised queue and then dequeue it.
|
|
218
|
+
[this]() { return queue_.NextBatch(kMaxBatchSize); }),
|
|
219
|
+
[this](std::vector<std::optional<StreamIDAndPriority>> batch) {
|
|
220
|
+
AddToPrioritizedQueue(batch);
|
|
221
|
+
return Empty{};
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Synchronously drain the prioritized queue.
|
|
226
|
+
std::optional<StreamPtr> ImmediateNext(
|
|
227
|
+
const bool transport_tokens_available) {
|
|
228
|
+
return prioritized_queue_.Pop(transport_tokens_available);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Force resolve WaitForReady. This is used to induce a write cycle on the
|
|
232
|
+
// transport.
|
|
233
|
+
absl::Status ForceReadyForWrite() {
|
|
234
|
+
StatusFlag status =
|
|
235
|
+
sender_.UnbufferedImmediateSend(std::nullopt, /*tokens*/ 1);
|
|
236
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "ForceReadyForWrite status " << status;
|
|
237
|
+
return (status.ok()) ? absl::OkStatus()
|
|
238
|
+
: absl::InternalError(
|
|
239
|
+
"Failed to enqueue to list of writable streams");
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
bool TestOnlyPriorityQueueHasWritableStreams(
|
|
243
|
+
const bool transport_tokens_available) const {
|
|
244
|
+
return !prioritized_queue_.HasNoWritableStreams(transport_tokens_available);
|
|
169
245
|
}
|
|
170
246
|
|
|
171
247
|
private:
|
|
@@ -176,21 +252,26 @@ class WritableStreams {
|
|
|
176
252
|
// Pushes a stream id with the given priority to the queue. Sorting is done
|
|
177
253
|
// based on the priority. If the priority is higher than the max priority,
|
|
178
254
|
// it will be set to the default priority.
|
|
179
|
-
void Push(const
|
|
180
|
-
if (priority >=
|
|
181
|
-
priority =
|
|
255
|
+
void Push(const StreamPtr stream, WritableStreamPriority priority) {
|
|
256
|
+
if (priority >= WritableStreamPriority::kLastPriority) {
|
|
257
|
+
priority = WritableStreamPriority::kDefault;
|
|
182
258
|
}
|
|
183
259
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
260
|
+
total_streams_++;
|
|
261
|
+
GRPC_WRITABLE_STREAMS_DEBUG
|
|
262
|
+
<< "Pushing stream id: " << stream->GetStreamId() << " with priority "
|
|
263
|
+
<< GetWritableStreamPriorityString(priority) << " with total streams "
|
|
264
|
+
<< total_streams_;
|
|
265
|
+
buckets_[static_cast<uint8_t>(priority)].push(stream);
|
|
188
266
|
}
|
|
189
267
|
|
|
190
268
|
// Pops a stream id from the queue based on the priority. If the priority is
|
|
191
269
|
// kWaitForTransportFlowControl, transport_tokens_available is checked to
|
|
192
270
|
// see if the stream id can be popped.
|
|
193
|
-
std::optional<
|
|
271
|
+
std::optional<StreamPtr> Pop(const bool transport_tokens_available) {
|
|
272
|
+
if (HasNoWritableStreams(transport_tokens_available)) {
|
|
273
|
+
return std::nullopt;
|
|
274
|
+
}
|
|
194
275
|
for (uint8_t i = 0; i < buckets_.size(); ++i) {
|
|
195
276
|
auto& bucket = buckets_[i];
|
|
196
277
|
if (!bucket.empty()) {
|
|
@@ -202,36 +283,73 @@ class WritableStreams {
|
|
|
202
283
|
continue;
|
|
203
284
|
}
|
|
204
285
|
|
|
205
|
-
|
|
286
|
+
StreamPtr stream = bucket.front();
|
|
206
287
|
bucket.pop();
|
|
288
|
+
total_streams_--;
|
|
207
289
|
GRPC_WRITABLE_STREAMS_DEBUG
|
|
208
|
-
<< "Popping stream id " <<
|
|
209
|
-
<<
|
|
210
|
-
|
|
290
|
+
<< "Popping stream id: " << stream->GetStreamId()
|
|
291
|
+
<< " from priority "
|
|
292
|
+
<< GetWritableStreamPriorityString(
|
|
293
|
+
static_cast<WritableStreamPriority>(i))
|
|
294
|
+
<< " with " << total_streams_ << " streams remaining";
|
|
295
|
+
return stream;
|
|
211
296
|
}
|
|
212
297
|
}
|
|
213
298
|
return std::nullopt;
|
|
214
299
|
}
|
|
215
300
|
|
|
301
|
+
// Returns true if the queue does not have any stream that can be popped.
|
|
302
|
+
// If transport_tokens_available is false, streams with priority of
|
|
303
|
+
// kWaitForTransportFlowControl are not considered.
|
|
304
|
+
inline bool HasNoWritableStreams(
|
|
305
|
+
const bool transport_tokens_available) const {
|
|
306
|
+
return (transport_tokens_available)
|
|
307
|
+
? (total_streams_ == 0)
|
|
308
|
+
: (total_streams_ -
|
|
309
|
+
buckets_[kWaitForTransportFlowControlIndex].size() ==
|
|
310
|
+
0);
|
|
311
|
+
}
|
|
312
|
+
|
|
216
313
|
static constexpr uint8_t kLastPriority =
|
|
217
|
-
static_cast<uint8_t>(
|
|
314
|
+
static_cast<uint8_t>(WritableStreamPriority::kLastPriority);
|
|
218
315
|
static constexpr uint8_t kWaitForTransportFlowControlIndex =
|
|
219
|
-
static_cast<uint8_t>(
|
|
220
|
-
|
|
316
|
+
static_cast<uint8_t>(
|
|
317
|
+
WritableStreamPriority::kWaitForTransportFlowControl);
|
|
318
|
+
std::vector<std::queue<StreamPtr>> buckets_;
|
|
319
|
+
uint32_t total_streams_ = 0u;
|
|
221
320
|
};
|
|
222
321
|
|
|
223
322
|
struct StreamIDAndPriority {
|
|
224
|
-
const
|
|
225
|
-
const
|
|
323
|
+
const StreamPtr stream;
|
|
324
|
+
const WritableStreamPriority priority;
|
|
226
325
|
};
|
|
227
326
|
|
|
228
|
-
void AddToPrioritizedQueue(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
327
|
+
void AddToPrioritizedQueue(
|
|
328
|
+
const std::vector<std::optional<StreamIDAndPriority>>& batch) {
|
|
329
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "AddToPrioritizedQueue batch size "
|
|
330
|
+
<< batch.size();
|
|
331
|
+
for (const std::optional<StreamIDAndPriority>& stream_id_priority : batch) {
|
|
332
|
+
// Ignore stream id kInvalidStreamID. These are used to force resolve
|
|
333
|
+
// WaitForReady().
|
|
334
|
+
if (!stream_id_priority.has_value()) {
|
|
335
|
+
GRPC_WRITABLE_STREAMS_DEBUG << "Skipping nullopt from batch";
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
prioritized_queue_.Push(stream_id_priority->stream,
|
|
339
|
+
stream_id_priority->priority);
|
|
232
340
|
}
|
|
233
341
|
}
|
|
234
342
|
|
|
343
|
+
// Returns true if the prioritized queue has any stream that can be popped.
|
|
344
|
+
bool PrioritizedQueueHasWritableStreams(
|
|
345
|
+
const bool transport_tokens_available) const {
|
|
346
|
+
GRPC_WRITABLE_STREAMS_DEBUG
|
|
347
|
+
<< "PrioritizedQueueHasWritableStreams "
|
|
348
|
+
<< !prioritized_queue_.HasNoWritableStreams(transport_tokens_available)
|
|
349
|
+
<< " transport_tokens_available " << transport_tokens_available;
|
|
350
|
+
return !prioritized_queue_.HasNoWritableStreams(transport_tokens_available);
|
|
351
|
+
}
|
|
352
|
+
|
|
235
353
|
// TODO(akshitpatel) : [PH2][P4] - Verify if this works for large number of
|
|
236
354
|
// active streams based on the load tests. The reasoning to use max uint32_t
|
|
237
355
|
// is that even when the streams are dequeued from the queue, the streams
|
|
@@ -243,8 +361,8 @@ class WritableStreams {
|
|
|
243
361
|
static constexpr uint32_t kMaxBatchSize =
|
|
244
362
|
std::numeric_limits<uint32_t>::max();
|
|
245
363
|
|
|
246
|
-
MpscReceiver<StreamIDAndPriority
|
|
247
|
-
MpscSender<StreamIDAndPriority
|
|
364
|
+
MpscReceiver<std::optional<StreamIDAndPriority>> queue_;
|
|
365
|
+
MpscSender<std::optional<StreamIDAndPriority>> sender_;
|
|
248
366
|
PrioritizedQueue prioritized_queue_;
|
|
249
367
|
};
|
|
250
368
|
|
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
|
|
19
19
|
#include <algorithm>
|
|
20
20
|
|
|
21
|
-
#include "
|
|
21
|
+
#include "src/core/util/grpc_check.h"
|
|
22
22
|
|
|
23
23
|
namespace grpc_core {
|
|
24
24
|
|
|
25
25
|
size_t Chttp2WriteSizePolicy::WriteTargetSize() { return current_target_; }
|
|
26
26
|
|
|
27
27
|
void Chttp2WriteSizePolicy::BeginWrite(size_t size) {
|
|
28
|
-
|
|
28
|
+
GRPC_CHECK_EQ(experiment_start_time_, Timestamp::InfFuture());
|
|
29
29
|
if (size < current_target_ * 7 / 10) {
|
|
30
30
|
// If we were trending fast but stopped getting enough data to verify, then
|
|
31
31
|
// reset back to the default state.
|
|
@@ -30,10 +30,6 @@
|
|
|
30
30
|
#include <string>
|
|
31
31
|
#include <utility>
|
|
32
32
|
|
|
33
|
-
#include "absl/container/flat_hash_map.h"
|
|
34
|
-
#include "absl/log/check.h"
|
|
35
|
-
#include "absl/log/log.h"
|
|
36
|
-
#include "absl/status/status.h"
|
|
37
33
|
#include "src/core/call/metadata_batch.h"
|
|
38
34
|
#include "src/core/channelz/channelz.h"
|
|
39
35
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
@@ -69,12 +65,16 @@
|
|
|
69
65
|
#include "src/core/telemetry/stats.h"
|
|
70
66
|
#include "src/core/telemetry/stats_data.h"
|
|
71
67
|
#include "src/core/telemetry/tcp_tracer.h"
|
|
68
|
+
#include "src/core/util/grpc_check.h"
|
|
72
69
|
#include "src/core/util/match.h"
|
|
73
70
|
#include "src/core/util/ref_counted.h"
|
|
74
71
|
#include "src/core/util/ref_counted_ptr.h"
|
|
75
72
|
#include "src/core/util/shared_bit_gen.h"
|
|
76
73
|
#include "src/core/util/time.h"
|
|
77
74
|
#include "src/core/util/useful.h"
|
|
75
|
+
#include "absl/container/flat_hash_map.h"
|
|
76
|
+
#include "absl/log/log.h"
|
|
77
|
+
#include "absl/status/status.h"
|
|
78
78
|
|
|
79
79
|
// IWYU pragma: no_include "src/core/util/orphanable.h"
|
|
80
80
|
|
|
@@ -273,7 +273,7 @@ class WriteContext {
|
|
|
273
273
|
grpc_core::Http2Frame frame(std::move(*update));
|
|
274
274
|
Serialize(absl::Span<grpc_core::Http2Frame>(&frame, 1), t_->outbuf);
|
|
275
275
|
if (t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
|
|
276
|
-
|
|
276
|
+
GRPC_CHECK(
|
|
277
277
|
t_->settings_ack_watchdog ==
|
|
278
278
|
grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid);
|
|
279
279
|
// We base settings timeout on keepalive timeout, but double it to allow
|
|
@@ -293,7 +293,7 @@ class WriteContext {
|
|
|
293
293
|
// simple writes are queued to qbuf, and flushed here
|
|
294
294
|
grpc_slice_buffer_move_into(&t_->qbuf, t_->outbuf.c_slice_buffer());
|
|
295
295
|
t_->num_pending_induced_frames = 0;
|
|
296
|
-
|
|
296
|
+
GRPC_CHECK_EQ(t_->qbuf.count, 0u);
|
|
297
297
|
}
|
|
298
298
|
|
|
299
299
|
void FlushWindowUpdates() {
|