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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
//
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2025 gRPC authors.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
// you may not use this file except in compliance with the License.
|
|
7
|
+
// You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
// See the License for the specific language governing permissions and
|
|
15
|
+
// limitations under the License.
|
|
16
|
+
//
|
|
17
|
+
//
|
|
18
|
+
|
|
19
|
+
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
|
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
|
|
21
|
+
|
|
22
|
+
#include <cstdint>
|
|
23
|
+
#include <string>
|
|
24
|
+
|
|
25
|
+
#include "src/core/call/metadata_info.h"
|
|
26
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
27
|
+
#include "src/core/util/grpc_check.h"
|
|
28
|
+
#include "absl/strings/str_cat.h"
|
|
29
|
+
|
|
30
|
+
namespace grpc_core {
|
|
31
|
+
namespace http2 {
|
|
32
|
+
|
|
33
|
+
class IncomingMetadataTracker {
|
|
34
|
+
// Manages transport-wide state for incoming HEADERS and CONTINUATION frames.
|
|
35
|
+
// RFC 9113 (Section 6.10) requires that if a HEADERS frame does not have
|
|
36
|
+
// END_HEADERS set, it must be followed by a contiguous sequence of
|
|
37
|
+
// CONTINUATION frames for the same stream, ending with END_HEADERS. No other
|
|
38
|
+
// frame types or frames for other streams may be interleaved during this
|
|
39
|
+
// sequence. This constraint makes tracking header sequence state a
|
|
40
|
+
// transport-level concern, as only one stream can be receiving headers at
|
|
41
|
+
// a time. This class is distinct from HeaderAssembler, which buffers header
|
|
42
|
+
// payloads on a per-stream basis.
|
|
43
|
+
public:
|
|
44
|
+
IncomingMetadataTracker() = default;
|
|
45
|
+
~IncomingMetadataTracker() = default;
|
|
46
|
+
|
|
47
|
+
IncomingMetadataTracker(IncomingMetadataTracker&& rvalue) = delete;
|
|
48
|
+
IncomingMetadataTracker& operator=(IncomingMetadataTracker&& rvalue) = delete;
|
|
49
|
+
IncomingMetadataTracker(const IncomingMetadataTracker&) = delete;
|
|
50
|
+
IncomingMetadataTracker& operator=(const IncomingMetadataTracker&) = delete;
|
|
51
|
+
|
|
52
|
+
void set_soft_limit(uint32_t limit) {
|
|
53
|
+
max_header_list_size_soft_limit_ = limit;
|
|
54
|
+
}
|
|
55
|
+
uint32_t soft_limit() const { return max_header_list_size_soft_limit_; }
|
|
56
|
+
|
|
57
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
58
|
+
// Writing Header and Continuation State
|
|
59
|
+
|
|
60
|
+
// Called when a HEADER frame is received.
|
|
61
|
+
void OnHeaderReceived(const Http2HeaderFrame& frame) {
|
|
62
|
+
GRPC_CHECK(!incoming_header_in_progress_);
|
|
63
|
+
incoming_header_in_progress_ = !frame.end_headers;
|
|
64
|
+
incoming_header_stream_id_ = frame.stream_id;
|
|
65
|
+
incoming_header_end_stream_ = frame.end_stream;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Called when a CONTINUATION frame is received.
|
|
69
|
+
void OnContinuationReceived(const Http2ContinuationFrame& frame) {
|
|
70
|
+
GRPC_CHECK(incoming_header_in_progress_);
|
|
71
|
+
GRPC_CHECK_EQ(frame.stream_id, incoming_header_stream_id_);
|
|
72
|
+
incoming_header_in_progress_ = !frame.end_headers;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
76
|
+
// Reading Header and Continuation State
|
|
77
|
+
|
|
78
|
+
// Returns true if we are in the middle of receiving a header block
|
|
79
|
+
// (i.e., HEADERS without END_HEADERS was received, and we are waiting for
|
|
80
|
+
// CONTINUATION frames).
|
|
81
|
+
bool IsWaitingForContinuationFrame() const {
|
|
82
|
+
return incoming_header_in_progress_;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Returns true if end_stream was set in the received header.
|
|
86
|
+
bool HeaderHasEndStream() const { return incoming_header_end_stream_; }
|
|
87
|
+
|
|
88
|
+
// Returns stream id of stream for which headers are being received.
|
|
89
|
+
uint32_t GetStreamId() const { return incoming_header_stream_id_; }
|
|
90
|
+
|
|
91
|
+
bool ClientReceivedDuplicateMetadata(
|
|
92
|
+
const bool did_receive_initial_metadata,
|
|
93
|
+
const bool did_receive_trailing_metadata) const {
|
|
94
|
+
const bool is_duplicate_initial_metadata =
|
|
95
|
+
!incoming_header_end_stream_ && did_receive_initial_metadata;
|
|
96
|
+
const bool is_duplicate_trailing_metadata =
|
|
97
|
+
incoming_header_end_stream_ && did_receive_trailing_metadata;
|
|
98
|
+
return is_duplicate_initial_metadata || is_duplicate_trailing_metadata;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
bool ServerReceivedDuplicateMetadata(
|
|
102
|
+
const bool did_receive_initial_metadata) const {
|
|
103
|
+
// TODO(tjagtap) : [PH2][P2] : Verify this when implementing Server.
|
|
104
|
+
// Also write a small unit test for it.
|
|
105
|
+
return !incoming_header_end_stream_ && did_receive_initial_metadata;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
std::string DebugString() const {
|
|
109
|
+
return absl::StrCat(
|
|
110
|
+
"{ incoming_header_in_progress : ",
|
|
111
|
+
incoming_header_in_progress_ ? "true" : "false",
|
|
112
|
+
", incoming_header_end_stream : ",
|
|
113
|
+
incoming_header_end_stream_ ? "true" : "false",
|
|
114
|
+
", incoming_header_stream_id : ", incoming_header_stream_id_, "}");
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private:
|
|
118
|
+
bool incoming_header_in_progress_ = false;
|
|
119
|
+
bool incoming_header_end_stream_ = false;
|
|
120
|
+
uint32_t incoming_header_stream_id_ = 0;
|
|
121
|
+
uint32_t max_header_list_size_soft_limit_ =
|
|
122
|
+
DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
} // namespace http2
|
|
126
|
+
} // namespace grpc_core
|
|
127
|
+
|
|
128
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
|
|
@@ -34,10 +34,6 @@
|
|
|
34
34
|
#include <utility>
|
|
35
35
|
#include <variant>
|
|
36
36
|
|
|
37
|
-
#include "absl/container/flat_hash_map.h"
|
|
38
|
-
#include "absl/random/random.h"
|
|
39
|
-
#include "absl/status/status.h"
|
|
40
|
-
#include "absl/strings/string_view.h"
|
|
41
37
|
#include "src/core/call/metadata_batch.h"
|
|
42
38
|
#include "src/core/channelz/channelz.h"
|
|
43
39
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
@@ -68,6 +64,7 @@
|
|
|
68
64
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
|
69
65
|
#include "src/core/lib/resource_quota/arena.h"
|
|
70
66
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
|
67
|
+
#include "src/core/lib/resource_quota/stream_quota.h"
|
|
71
68
|
#include "src/core/lib/slice/slice.h"
|
|
72
69
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
73
70
|
#include "src/core/lib/surface/init_internally.h"
|
|
@@ -83,6 +80,10 @@
|
|
|
83
80
|
#include "src/core/util/ref_counted.h"
|
|
84
81
|
#include "src/core/util/ref_counted_ptr.h"
|
|
85
82
|
#include "src/core/util/time.h"
|
|
83
|
+
#include "absl/container/flat_hash_map.h"
|
|
84
|
+
#include "absl/random/random.h"
|
|
85
|
+
#include "absl/status/status.h"
|
|
86
|
+
#include "absl/strings/string_view.h"
|
|
86
87
|
|
|
87
88
|
// Flag that this closure barrier may be covering a write in a pollset, and so
|
|
88
89
|
// we should not complete this closure until we can prove that the write got
|
|
@@ -115,6 +116,7 @@ typedef enum {
|
|
|
115
116
|
GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
|
|
116
117
|
} grpc_chttp2_write_state;
|
|
117
118
|
|
|
119
|
+
// Not getting used anywhere AFAIK
|
|
118
120
|
typedef enum {
|
|
119
121
|
GRPC_CHTTP2_OPTIMIZE_FOR_LATENCY,
|
|
120
122
|
GRPC_CHTTP2_OPTIMIZE_FOR_THROUGHPUT,
|
|
@@ -238,7 +240,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
238
240
|
public:
|
|
239
241
|
explicit ChannelzDataSource(grpc_chttp2_transport* transport)
|
|
240
242
|
: grpc_core::channelz::DataSource(transport->channelz_socket),
|
|
241
|
-
transport_(transport) {
|
|
243
|
+
transport_(transport->Ref()) { // Take a ref
|
|
242
244
|
SourceConstructed();
|
|
243
245
|
}
|
|
244
246
|
~ChannelzDataSource() { SourceDestructing(); }
|
|
@@ -248,7 +250,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
248
250
|
absl::string_view name) override;
|
|
249
251
|
|
|
250
252
|
private:
|
|
251
|
-
grpc_chttp2_transport
|
|
253
|
+
grpc_core::RefCountedPtr<grpc_chttp2_transport> transport_;
|
|
252
254
|
};
|
|
253
255
|
|
|
254
256
|
void Orphan() override;
|
|
@@ -287,6 +289,19 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
287
289
|
void WriteSecurityFrame(grpc_core::SliceBuffer* data);
|
|
288
290
|
void WriteSecurityFrameLocked(grpc_core::SliceBuffer* data);
|
|
289
291
|
|
|
292
|
+
void StartWatch(grpc_core::RefCountedPtr<StateWatcher> watcher) override;
|
|
293
|
+
void StopWatch(grpc_core::RefCountedPtr<StateWatcher> watcher) override;
|
|
294
|
+
|
|
295
|
+
void NotifyStateWatcherOnDisconnectLocked(
|
|
296
|
+
absl::Status status, StateWatcher::DisconnectInfo disconnect_info);
|
|
297
|
+
|
|
298
|
+
void OnPeerMaxConcurrentStreamsUpdateComplete();
|
|
299
|
+
void MaybeNotifyStateWatcherOfPeerMaxConcurrentStreamsLocked();
|
|
300
|
+
void NotifyStateWatcherOnPeerMaxConcurrentStreamsUpdateLocked();
|
|
301
|
+
|
|
302
|
+
void MaybeNotifyOnReceiveSettingsLocked(
|
|
303
|
+
absl::StatusOr<uint32_t> max_concurrent_streams);
|
|
304
|
+
|
|
290
305
|
// We depend on the ep being available for the life of the transport in
|
|
291
306
|
// at least one place - event callback in WriteEventSink. Hence, this should
|
|
292
307
|
// only be orphaned in the destructor.
|
|
@@ -301,6 +316,8 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
301
316
|
grpc_core::MemoryOwner memory_owner;
|
|
302
317
|
const grpc_core::MemoryAllocator::Reservation self_reservation;
|
|
303
318
|
grpc_core::ReclamationSweep active_reclamation;
|
|
319
|
+
grpc_core::InstrumentStorageRefPtr<grpc_core::ResourceQuotaDomain>
|
|
320
|
+
resource_quota_telemetry_storage;
|
|
304
321
|
|
|
305
322
|
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine;
|
|
306
323
|
grpc_core::Combiner* combiner;
|
|
@@ -313,7 +330,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
313
330
|
// starts a connectivity watch.
|
|
314
331
|
grpc_pollset_set* interested_parties_until_recv_settings = nullptr;
|
|
315
332
|
|
|
316
|
-
|
|
333
|
+
absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> notify_on_receive_settings;
|
|
317
334
|
grpc_closure* notify_on_close = nullptr;
|
|
318
335
|
|
|
319
336
|
/// has the upper layer closed the transport?
|
|
@@ -372,7 +389,12 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
372
389
|
void* user_data, grpc_core::ServerMetadata* metadata) = nullptr;
|
|
373
390
|
void* accept_stream_cb_user_data;
|
|
374
391
|
|
|
392
|
+
// There should be only a single watcher in use at any given time.
|
|
393
|
+
grpc_core::RefCountedPtr<StateWatcher> watcher;
|
|
394
|
+
uint32_t last_reported_max_concurrent_streams;
|
|
395
|
+
bool max_concurrent_streams_notification_in_flight;
|
|
375
396
|
/// connectivity tracking
|
|
397
|
+
// TODO(roth): Get rid of this in favor of the new state watcher.
|
|
376
398
|
grpc_core::ConnectivityStateTracker state_tracker;
|
|
377
399
|
|
|
378
400
|
/// data to write now
|
|
@@ -590,6 +612,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
590
612
|
|
|
591
613
|
std::shared_ptr<grpc_core::Http2StatsCollector> http2_stats;
|
|
592
614
|
grpc_core::Http2ZTraceCollector http2_ztrace_collector;
|
|
615
|
+
grpc_core::Timestamp last_ztrace_time = grpc_core::Timestamp::InfPast();
|
|
593
616
|
|
|
594
617
|
GPR_NO_UNIQUE_ADDRESS grpc_core::latent_see::Flow write_flow;
|
|
595
618
|
};
|
|
@@ -714,7 +737,7 @@ struct grpc_chttp2_stream {
|
|
|
714
737
|
// annotations as soon as we have parsed initial metadata, but in our legacy
|
|
715
738
|
// stack, we create the stream before parsing headers. In the new v3 stack,
|
|
716
739
|
// that won't be an issue.
|
|
717
|
-
grpc_core::
|
|
740
|
+
grpc_core::CallTracer* call_tracer = nullptr;
|
|
718
741
|
// TODO(yashykt): Remove this once call_tracer_transport_fix is rolled out
|
|
719
742
|
grpc_core::CallTracerAnnotationInterface* parent_call_tracer = nullptr;
|
|
720
743
|
|
|
@@ -740,17 +763,6 @@ struct grpc_chttp2_stream {
|
|
|
740
763
|
grpc_core::Timestamp::InfPast();
|
|
741
764
|
};
|
|
742
765
|
|
|
743
|
-
// EXPERIMENTAL: provide protection against overloading a server with too many
|
|
744
|
-
// requests: wait for streams to be deallocated before they stop counting
|
|
745
|
-
// against MAX_CONCURRENT_STREAMS
|
|
746
|
-
#define GRPC_ARG_MAX_CONCURRENT_STREAMS_OVERLOAD_PROTECTION \
|
|
747
|
-
"grpc.http.overload_protection"
|
|
748
|
-
|
|
749
|
-
// EXPERIMENTAL: Fail requests at the client if the client is over max
|
|
750
|
-
// concurrent streams, so they may be retried elsewhere.
|
|
751
|
-
#define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \
|
|
752
|
-
"grpc.http.max_concurrent_streams_reject_on_client"
|
|
753
|
-
|
|
754
766
|
/// Transport writing call flow:
|
|
755
767
|
/// grpc_chttp2_initiate_write() is called anywhere that we know bytes need to
|
|
756
768
|
/// go out on the wire.
|
|
@@ -17,21 +17,28 @@
|
|
|
17
17
|
//
|
|
18
18
|
#include "src/core/ext/transport/chttp2/transport/keepalive.h"
|
|
19
19
|
|
|
20
|
+
#include <utility>
|
|
21
|
+
|
|
20
22
|
#include "src/core/lib/promise/all_ok.h"
|
|
21
23
|
#include "src/core/lib/promise/if.h"
|
|
22
24
|
#include "src/core/lib/promise/loop.h"
|
|
25
|
+
#include "src/core/lib/promise/party.h"
|
|
23
26
|
#include "src/core/lib/promise/race.h"
|
|
24
27
|
#include "src/core/lib/promise/sleep.h"
|
|
25
28
|
#include "src/core/lib/promise/try_seq.h"
|
|
29
|
+
#include "src/core/util/grpc_check.h"
|
|
30
|
+
#include "src/core/util/time.h"
|
|
26
31
|
|
|
27
32
|
namespace grpc_core {
|
|
28
33
|
namespace http2 {
|
|
29
34
|
KeepaliveManager::KeepaliveManager(
|
|
30
35
|
std::unique_ptr<KeepAliveInterface> keep_alive_interface,
|
|
31
|
-
Duration keepalive_timeout, const Duration keepalive_time)
|
|
36
|
+
Duration keepalive_timeout, const Duration keepalive_time, Party* party)
|
|
32
37
|
: keep_alive_interface_(std::move(keep_alive_interface)),
|
|
33
38
|
keepalive_timeout_(keepalive_timeout),
|
|
34
|
-
keepalive_time_(keepalive_time) {
|
|
39
|
+
keepalive_time_(keepalive_time) {
|
|
40
|
+
MaybeSpawnKeepaliveLoop(party);
|
|
41
|
+
}
|
|
35
42
|
|
|
36
43
|
auto KeepaliveManager::WaitForKeepAliveTimeout() {
|
|
37
44
|
return AssertResultType<absl::Status>(
|
|
@@ -59,8 +66,8 @@ auto KeepaliveManager::WaitForKeepAliveTimeout() {
|
|
|
59
66
|
}));
|
|
60
67
|
}
|
|
61
68
|
auto KeepaliveManager::TimeoutAndSendPing() {
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
GRPC_DCHECK(!data_received_in_last_cycle_);
|
|
70
|
+
GRPC_DCHECK(keepalive_timeout_ != Duration::Infinity());
|
|
64
71
|
|
|
65
72
|
return AllOk<absl::Status>(Race(WaitForData(), WaitForKeepAliveTimeout()),
|
|
66
73
|
SendPingAndWaitForAck());
|
|
@@ -83,7 +90,7 @@ auto KeepaliveManager::MaybeSendKeepAlivePing() {
|
|
|
83
90
|
}));
|
|
84
91
|
}
|
|
85
92
|
|
|
86
|
-
void KeepaliveManager::
|
|
93
|
+
void KeepaliveManager::MaybeSpawnKeepaliveLoop(Party* party) {
|
|
87
94
|
if (!IsKeepAliveNeeded()) {
|
|
88
95
|
GRPC_HTTP2_KEEPALIVE_LOG << "Not spawning keepalive loop.";
|
|
89
96
|
return;
|
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_KEEPALIVE_H
|
|
19
19
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_KEEPALIVE_H
|
|
20
20
|
|
|
21
|
-
#include "absl/status/status.h"
|
|
22
21
|
#include "src/core/lib/promise/party.h"
|
|
23
22
|
#include "src/core/lib/promise/promise.h"
|
|
23
|
+
#include "src/core/util/grpc_check.h"
|
|
24
|
+
#include "absl/status/status.h"
|
|
24
25
|
|
|
25
26
|
namespace grpc_core {
|
|
26
27
|
namespace http2 {
|
|
@@ -44,11 +45,8 @@ class KeepAliveInterface {
|
|
|
44
45
|
class KeepaliveManager {
|
|
45
46
|
public:
|
|
46
47
|
KeepaliveManager(std::unique_ptr<KeepAliveInterface> keep_alive_interface,
|
|
47
|
-
Duration keepalive_timeout, Duration keepalive_time
|
|
48
|
-
|
|
49
|
-
// Spawns the keepalive loop on the given party. This MUST be called at most
|
|
50
|
-
// once during the lifetime of the keepalive manager.
|
|
51
|
-
void Spawn(Party* party);
|
|
48
|
+
Duration keepalive_timeout, Duration keepalive_time,
|
|
49
|
+
Party* party);
|
|
52
50
|
|
|
53
51
|
// Needs to be called when any data is read from the endpoint.
|
|
54
52
|
void GotData() {
|
|
@@ -69,6 +67,10 @@ class KeepaliveManager {
|
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
private:
|
|
70
|
+
// Spawns the keepalive loop on the given party. This MUST be called at most
|
|
71
|
+
// once during the lifetime of the keepalive manager.
|
|
72
|
+
void MaybeSpawnKeepaliveLoop(Party* party);
|
|
73
|
+
|
|
72
74
|
// Returns a promise that sleeps for the keepalive_timeout_ and triggers the
|
|
73
75
|
// keepalive timeout unless data is read within the keepalive timeout.
|
|
74
76
|
auto WaitForKeepAliveTimeout();
|
|
@@ -104,7 +106,7 @@ class KeepaliveManager {
|
|
|
104
106
|
};
|
|
105
107
|
}
|
|
106
108
|
auto SendPingAndWaitForAck() {
|
|
107
|
-
|
|
109
|
+
GRPC_DCHECK_EQ(data_received_in_last_cycle_, false);
|
|
108
110
|
return keep_alive_interface_->SendPingAndWaitForAck();
|
|
109
111
|
}
|
|
110
112
|
|
|
@@ -121,10 +123,12 @@ class KeepaliveManager {
|
|
|
121
123
|
}
|
|
122
124
|
|
|
123
125
|
std::unique_ptr<KeepAliveInterface> keep_alive_interface_;
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
// timeout
|
|
126
|
+
// Duration to wait before triggering a keepalive timeout. If the
|
|
127
|
+
// keepalive_timeout_ is set to infinity, then the timeout is dictated by the
|
|
128
|
+
// ping timeout. Otherwise, this field can be used to set a specific timeout
|
|
129
|
+
// for keepalive pings.
|
|
127
130
|
Duration keepalive_timeout_;
|
|
131
|
+
// Duration between two consecutive keepalive pings.
|
|
128
132
|
const Duration keepalive_time_;
|
|
129
133
|
bool data_received_in_last_cycle_ = false;
|
|
130
134
|
bool keep_alive_timeout_triggered_ = false;
|
|
@@ -19,21 +19,26 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_MESSAGE_ASSEMBLER_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_MESSAGE_ASSEMBLER_H
|
|
21
21
|
|
|
22
|
+
#include <grpc/support/port_platform.h>
|
|
23
|
+
|
|
22
24
|
#include <cstdint>
|
|
23
25
|
#include <utility>
|
|
24
26
|
|
|
25
|
-
#include "absl/log/check.h"
|
|
26
27
|
#include "src/core/call/message.h"
|
|
27
28
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
28
29
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
29
30
|
#include "src/core/lib/resource_quota/arena.h"
|
|
30
31
|
#include "src/core/lib/slice/slice.h"
|
|
31
32
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
33
|
+
#include "src/core/util/grpc_check.h"
|
|
32
34
|
#include "src/core/util/ref_counted_ptr.h"
|
|
35
|
+
#include "absl/log/log.h"
|
|
33
36
|
|
|
34
37
|
namespace grpc_core {
|
|
35
38
|
namespace http2 {
|
|
36
39
|
|
|
40
|
+
#define GRPC_MESSAGE_ASSEMBLER_DEBUG VLOG(2)
|
|
41
|
+
|
|
37
42
|
// TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
|
|
38
43
|
// assembler and disassembler code
|
|
39
44
|
|
|
@@ -53,7 +58,7 @@ class GrpcMessageAssembler {
|
|
|
53
58
|
// This function will move the payload into an internal buffer.
|
|
54
59
|
Http2Status AppendNewDataFrame(SliceBuffer& payload,
|
|
55
60
|
const bool is_end_stream) {
|
|
56
|
-
|
|
61
|
+
GRPC_DCHECK(!is_end_stream_)
|
|
57
62
|
<< "Calling this function when a previous frame was marked as the last "
|
|
58
63
|
"frame does not make sense.";
|
|
59
64
|
is_end_stream_ = is_end_stream;
|
|
@@ -66,7 +71,7 @@ class GrpcMessageAssembler {
|
|
|
66
71
|
}
|
|
67
72
|
}
|
|
68
73
|
payload.MoveFirstNBytesIntoSliceBuffer(payload.Length(), message_buffer_);
|
|
69
|
-
|
|
74
|
+
GRPC_DCHECK_EQ(payload.Length(), 0u);
|
|
70
75
|
return Http2Status::Ok();
|
|
71
76
|
}
|
|
72
77
|
|
|
@@ -79,15 +84,21 @@ class GrpcMessageAssembler {
|
|
|
79
84
|
// TODO(tjagtap) : [PH2][P3] : Write a test for this.
|
|
80
85
|
return ReturnNullOrError();
|
|
81
86
|
}
|
|
82
|
-
GrpcMessageHeader header =
|
|
87
|
+
ValueOrHttp2Status<GrpcMessageHeader> header =
|
|
88
|
+
ExtractGrpcHeader(message_buffer_);
|
|
89
|
+
if (!header.IsOk()) {
|
|
90
|
+
return header.TakeStatus(std::move(header));
|
|
91
|
+
}
|
|
92
|
+
const uint32_t header_length = header.value().length;
|
|
93
|
+
|
|
83
94
|
if constexpr (sizeof(size_t) == 4) {
|
|
84
|
-
if (GPR_UNLIKELY(
|
|
95
|
+
if (GPR_UNLIKELY(header_length > kOneGb)) {
|
|
85
96
|
return Http2Status::Http2StreamError(
|
|
86
97
|
Http2ErrorCode::kInternalError,
|
|
87
98
|
"Stream Error: SliceBuffer overflow for 32 bit platforms.");
|
|
88
99
|
}
|
|
89
100
|
}
|
|
90
|
-
if (GPR_LIKELY(current_len - kGrpcHeaderSizeInBytes >=
|
|
101
|
+
if (GPR_LIKELY(current_len - kGrpcHeaderSizeInBytes >= header_length)) {
|
|
91
102
|
SliceBuffer discard;
|
|
92
103
|
message_buffer_.MoveFirstNBytesIntoSliceBuffer(kGrpcHeaderSizeInBytes,
|
|
93
104
|
discard);
|
|
@@ -98,9 +109,8 @@ class GrpcMessageAssembler {
|
|
|
98
109
|
// bounds.
|
|
99
110
|
MessageHandle grpc_message = Arena::MakePooled<Message>();
|
|
100
111
|
message_buffer_.MoveFirstNBytesIntoSliceBuffer(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
flag = header.flags;
|
|
112
|
+
header_length, *(grpc_message->payload()));
|
|
113
|
+
grpc_message->mutable_flags() = header.value().flags;
|
|
104
114
|
return std::move(grpc_message);
|
|
105
115
|
}
|
|
106
116
|
return ReturnNullOrError();
|
|
@@ -112,21 +122,18 @@ class GrpcMessageAssembler {
|
|
|
112
122
|
return Http2Status::Http2StreamError(Http2ErrorCode::kInternalError,
|
|
113
123
|
"Incomplete gRPC frame received");
|
|
114
124
|
}
|
|
115
|
-
|
|
125
|
+
GRPC_MESSAGE_ASSEMBLER_DEBUG
|
|
126
|
+
<< "Incomplete gRPC message received. Return nullptr";
|
|
116
127
|
return ValueOrHttp2Status<MessageHandle>(nullptr);
|
|
117
128
|
}
|
|
129
|
+
|
|
118
130
|
bool is_end_stream_ = false;
|
|
119
131
|
SliceBuffer message_buffer_;
|
|
120
132
|
};
|
|
121
133
|
|
|
122
|
-
constexpr uint32_t kMaxMessageBatchSize = (16 * 1024u);
|
|
123
|
-
|
|
124
134
|
// This class is meant to convert gRPC Messages into Http2DataFrame ensuring
|
|
125
135
|
// that the payload size of the data frame is configurable.
|
|
126
|
-
// This class is not responsible for queueing or backpressure.
|
|
127
|
-
// by other classes.
|
|
128
|
-
// TODO(tjagtap) : [PH2][P2] Edit comment once this
|
|
129
|
-
// class is integrated and exercised.
|
|
136
|
+
// This class is not responsible for queueing or backpressure.
|
|
130
137
|
class GrpcMessageDisassembler {
|
|
131
138
|
public:
|
|
132
139
|
// One GrpcMessageDisassembler instance MUST be associated with one stream
|
|
@@ -135,15 +142,17 @@ class GrpcMessageDisassembler {
|
|
|
135
142
|
|
|
136
143
|
// GrpcMessageDisassembler object will take ownership of the message.
|
|
137
144
|
void PrepareSingleMessageForSending(MessageHandle message) {
|
|
138
|
-
|
|
145
|
+
GRPC_DCHECK_EQ(GetBufferedLength(), 0u);
|
|
139
146
|
PrepareMessageForSending(std::move(message));
|
|
140
147
|
}
|
|
141
148
|
|
|
142
149
|
// GrpcMessageDisassembler object will take ownership of the message.
|
|
143
150
|
void PrepareBatchedMessageForSending(MessageHandle message) {
|
|
151
|
+
// The size of the message is controlled by the application (and by using
|
|
152
|
+
// GRPC_ARG_MAX_SEND_MESSAGE_LENGTH). PH2 ensures that if the the message
|
|
153
|
+
// size is larger than the default stream queue size kStreamQueueSize, at
|
|
154
|
+
// max one message will be buffered in the disassembler.
|
|
144
155
|
PrepareMessageForSending(std::move(message));
|
|
145
|
-
DCHECK_LE(GetBufferedLength(), kMaxMessageBatchSize)
|
|
146
|
-
<< "Avoid batches larger than " << kMaxMessageBatchSize << "bytes";
|
|
147
156
|
}
|
|
148
157
|
|
|
149
158
|
size_t GetBufferedLength() const { return message_.Length(); }
|
|
@@ -152,8 +161,8 @@ class GrpcMessageDisassembler {
|
|
|
152
161
|
Http2DataFrame GenerateNextFrame(const uint32_t stream_id,
|
|
153
162
|
const uint32_t max_length,
|
|
154
163
|
const bool is_end_stream = false) {
|
|
155
|
-
|
|
156
|
-
|
|
164
|
+
GRPC_DCHECK_GT(max_length, 0u);
|
|
165
|
+
GRPC_DCHECK_GT(GetBufferedLength(), 0u);
|
|
157
166
|
SliceBuffer temp;
|
|
158
167
|
const uint32_t current_length =
|
|
159
168
|
message_.Length() >= max_length ? max_length : message_.Length();
|
|
@@ -31,15 +31,6 @@
|
|
|
31
31
|
#include <utility>
|
|
32
32
|
#include <variant>
|
|
33
33
|
|
|
34
|
-
#include "absl/base/attributes.h"
|
|
35
|
-
#include "absl/container/flat_hash_map.h"
|
|
36
|
-
#include "absl/log/check.h"
|
|
37
|
-
#include "absl/log/log.h"
|
|
38
|
-
#include "absl/random/bit_gen_ref.h"
|
|
39
|
-
#include "absl/status/status.h"
|
|
40
|
-
#include "absl/strings/str_cat.h"
|
|
41
|
-
#include "absl/strings/str_format.h"
|
|
42
|
-
#include "absl/strings/string_view.h"
|
|
43
34
|
#include "src/core/call/metadata_batch.h"
|
|
44
35
|
#include "src/core/channelz/channelz.h"
|
|
45
36
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
@@ -73,10 +64,19 @@
|
|
|
73
64
|
#include "src/core/telemetry/call_tracer.h"
|
|
74
65
|
#include "src/core/telemetry/stats.h"
|
|
75
66
|
#include "src/core/telemetry/stats_data.h"
|
|
67
|
+
#include "src/core/util/grpc_check.h"
|
|
76
68
|
#include "src/core/util/random_early_detection.h"
|
|
77
69
|
#include "src/core/util/ref_counted_ptr.h"
|
|
78
70
|
#include "src/core/util/shared_bit_gen.h"
|
|
79
71
|
#include "src/core/util/status_helper.h"
|
|
72
|
+
#include "absl/base/attributes.h"
|
|
73
|
+
#include "absl/container/flat_hash_map.h"
|
|
74
|
+
#include "absl/log/log.h"
|
|
75
|
+
#include "absl/random/bit_gen_ref.h"
|
|
76
|
+
#include "absl/status/status.h"
|
|
77
|
+
#include "absl/strings/str_cat.h"
|
|
78
|
+
#include "absl/strings/str_format.h"
|
|
79
|
+
#include "absl/strings/string_view.h"
|
|
80
80
|
|
|
81
81
|
using grpc_core::HPackParser;
|
|
82
82
|
using grpc_core::http2::Http2ErrorCode;
|
|
@@ -274,7 +274,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
274
274
|
}
|
|
275
275
|
[[fallthrough]];
|
|
276
276
|
case GRPC_DTS_FH_0:
|
|
277
|
-
|
|
277
|
+
GRPC_DCHECK_LT(cur, end);
|
|
278
278
|
t->incoming_frame_size = (static_cast<uint32_t>(*cur)) << 16;
|
|
279
279
|
if (++cur == end) {
|
|
280
280
|
t->deframe_state = GRPC_DTS_FH_1;
|
|
@@ -282,7 +282,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
282
282
|
}
|
|
283
283
|
[[fallthrough]];
|
|
284
284
|
case GRPC_DTS_FH_1:
|
|
285
|
-
|
|
285
|
+
GRPC_DCHECK_LT(cur, end);
|
|
286
286
|
t->incoming_frame_size |= (static_cast<uint32_t>(*cur)) << 8;
|
|
287
287
|
if (++cur == end) {
|
|
288
288
|
t->deframe_state = GRPC_DTS_FH_2;
|
|
@@ -290,7 +290,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
290
290
|
}
|
|
291
291
|
[[fallthrough]];
|
|
292
292
|
case GRPC_DTS_FH_2:
|
|
293
|
-
|
|
293
|
+
GRPC_DCHECK_LT(cur, end);
|
|
294
294
|
t->incoming_frame_size |= *cur;
|
|
295
295
|
if (++cur == end) {
|
|
296
296
|
t->deframe_state = GRPC_DTS_FH_3;
|
|
@@ -298,7 +298,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
298
298
|
}
|
|
299
299
|
[[fallthrough]];
|
|
300
300
|
case GRPC_DTS_FH_3:
|
|
301
|
-
|
|
301
|
+
GRPC_DCHECK_LT(cur, end);
|
|
302
302
|
t->incoming_frame_type = *cur;
|
|
303
303
|
if (++cur == end) {
|
|
304
304
|
t->deframe_state = GRPC_DTS_FH_4;
|
|
@@ -306,7 +306,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
306
306
|
}
|
|
307
307
|
[[fallthrough]];
|
|
308
308
|
case GRPC_DTS_FH_4:
|
|
309
|
-
|
|
309
|
+
GRPC_DCHECK_LT(cur, end);
|
|
310
310
|
t->incoming_frame_flags = *cur;
|
|
311
311
|
if (++cur == end) {
|
|
312
312
|
t->deframe_state = GRPC_DTS_FH_5;
|
|
@@ -314,7 +314,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
314
314
|
}
|
|
315
315
|
[[fallthrough]];
|
|
316
316
|
case GRPC_DTS_FH_5:
|
|
317
|
-
|
|
317
|
+
GRPC_DCHECK_LT(cur, end);
|
|
318
318
|
t->incoming_stream_id = ((static_cast<uint32_t>(*cur)) & 0x7f) << 24;
|
|
319
319
|
if (++cur == end) {
|
|
320
320
|
t->deframe_state = GRPC_DTS_FH_6;
|
|
@@ -322,7 +322,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
322
322
|
}
|
|
323
323
|
[[fallthrough]];
|
|
324
324
|
case GRPC_DTS_FH_6:
|
|
325
|
-
|
|
325
|
+
GRPC_DCHECK_LT(cur, end);
|
|
326
326
|
t->incoming_stream_id |= (static_cast<uint32_t>(*cur)) << 16;
|
|
327
327
|
if (++cur == end) {
|
|
328
328
|
t->deframe_state = GRPC_DTS_FH_7;
|
|
@@ -330,7 +330,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
330
330
|
}
|
|
331
331
|
[[fallthrough]];
|
|
332
332
|
case GRPC_DTS_FH_7:
|
|
333
|
-
|
|
333
|
+
GRPC_DCHECK_LT(cur, end);
|
|
334
334
|
t->incoming_stream_id |= (static_cast<uint32_t>(*cur)) << 8;
|
|
335
335
|
if (++cur == end) {
|
|
336
336
|
t->deframe_state = GRPC_DTS_FH_8;
|
|
@@ -338,7 +338,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
338
338
|
}
|
|
339
339
|
[[fallthrough]];
|
|
340
340
|
case GRPC_DTS_FH_8:
|
|
341
|
-
|
|
341
|
+
GRPC_DCHECK_LT(cur, end);
|
|
342
342
|
t->incoming_stream_id |= (static_cast<uint32_t>(*cur));
|
|
343
343
|
GRPC_TRACE_LOG(http, INFO)
|
|
344
344
|
<< "INCOMING[" << t << "]: "
|
|
@@ -372,7 +372,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
|
|
|
372
372
|
}
|
|
373
373
|
[[fallthrough]];
|
|
374
374
|
case GRPC_DTS_FRAME:
|
|
375
|
-
|
|
375
|
+
GRPC_DCHECK_LT(cur, end);
|
|
376
376
|
if (static_cast<uint32_t>(end - cur) == t->incoming_frame_size) {
|
|
377
377
|
err = parse_frame_slice(
|
|
378
378
|
t,
|
|
@@ -671,10 +671,12 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
|
671
671
|
nullptr, &t->http2_ztrace_collector));
|
|
672
672
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
|
|
673
673
|
return init_header_skip_frame_parser(t, priority_type, is_eoh);
|
|
674
|
-
} else if (GPR_UNLIKELY(
|
|
674
|
+
} else if (GPR_UNLIKELY(
|
|
675
|
+
t->memory_owner.RejectNewStreamsUnderHighMemoryPressure())) {
|
|
675
676
|
// We have more streams allocated than we'd like, so apply some pushback
|
|
676
677
|
// by refusing this stream.
|
|
677
|
-
|
|
678
|
+
t->memory_owner.telemetry_storage()->Increment(
|
|
679
|
+
grpc_core::ResourceQuotaDomain::kCallsRejected);
|
|
678
680
|
++t->num_pending_induced_frames;
|
|
679
681
|
grpc_slice_buffer_add(
|
|
680
682
|
&t->qbuf, grpc_chttp2_rst_stream_create(
|
|
@@ -766,7 +768,7 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
|
766
768
|
} else {
|
|
767
769
|
t->incoming_stream = s;
|
|
768
770
|
}
|
|
769
|
-
|
|
771
|
+
GRPC_DCHECK_NE(s, nullptr);
|
|
770
772
|
s->call_tracer_wrapper.RecordIncomingBytes({9, 0, 0});
|
|
771
773
|
if (GPR_UNLIKELY(s->read_closed)) {
|
|
772
774
|
GRPC_CHTTP2_IF_TRACING(ERROR)
|
|
@@ -976,7 +978,7 @@ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
|
|
|
976
978
|
const grpc_slice& slice,
|
|
977
979
|
int is_last) {
|
|
978
980
|
auto* parser = static_cast<grpc_core::HPackParser*>(hpack_parser);
|
|
979
|
-
grpc_core::
|
|
981
|
+
grpc_core::CallSpan* call_tracer = nullptr;
|
|
980
982
|
if (s != nullptr) {
|
|
981
983
|
s->call_tracer_wrapper.RecordIncomingBytes(
|
|
982
984
|
{0, 0, GRPC_SLICE_LENGTH(slice)});
|