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
|
@@ -48,14 +48,22 @@ grpc_core::Transport* grpc_create_chttp2_transport(
|
|
|
48
48
|
|
|
49
49
|
/// Takes ownership of \a read_buffer, which (if non-NULL) contains
|
|
50
50
|
/// leftover bytes previously read from the endpoint (e.g., by handshakers).
|
|
51
|
+
///
|
|
51
52
|
/// If non-null, \a notify_on_receive_settings will be scheduled when
|
|
52
|
-
/// HTTP/2 settings are received from the peer.
|
|
53
|
+
/// HTTP/2 settings are received from the peer. The argument will be
|
|
54
|
+
/// the peer's MAX_CONCURRENT_STREAMS setting.
|
|
55
|
+
///
|
|
53
56
|
/// If non-null, the endpoint will be removed from
|
|
54
57
|
/// interested_parties_until_recv_settings before
|
|
55
58
|
/// notify_on_receive_settings is invoked.
|
|
59
|
+
//
|
|
60
|
+
// TODO(roth): Consider using the new StateWatcher API in the connector
|
|
61
|
+
// code instead of supporting notify_on_receive_settings and
|
|
62
|
+
// notify_on_close here. This might be easier after pollset_set goes away.
|
|
56
63
|
void grpc_chttp2_transport_start_reading(
|
|
57
64
|
grpc_core::Transport* transport, grpc_slice_buffer* read_buffer,
|
|
58
|
-
|
|
65
|
+
absl::AnyInvocable<void(absl::StatusOr<uint32_t>)>
|
|
66
|
+
notify_on_receive_settings,
|
|
59
67
|
grpc_pollset_set* interested_parties_until_recv_settings,
|
|
60
68
|
grpc_closure* notify_on_close);
|
|
61
69
|
|
|
@@ -23,21 +23,24 @@
|
|
|
23
23
|
|
|
24
24
|
#include <algorithm>
|
|
25
25
|
#include <cmath>
|
|
26
|
+
#include <cstdint>
|
|
26
27
|
#include <ostream>
|
|
27
28
|
#include <string>
|
|
28
29
|
#include <tuple>
|
|
29
30
|
#include <vector>
|
|
30
31
|
|
|
31
|
-
#include "absl/log/check.h"
|
|
32
|
-
#include "absl/log/log.h"
|
|
33
|
-
#include "absl/strings/str_cat.h"
|
|
34
|
-
#include "absl/strings/str_format.h"
|
|
35
|
-
#include "absl/strings/str_join.h"
|
|
36
32
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
37
33
|
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
38
34
|
#include "src/core/lib/experiments/experiments.h"
|
|
39
35
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
|
36
|
+
#include "src/core/util/grpc_check.h"
|
|
40
37
|
#include "src/core/util/useful.h"
|
|
38
|
+
#include "absl/log/log.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/str_join.h"
|
|
43
|
+
#include "absl/strings/string_view.h"
|
|
41
44
|
|
|
42
45
|
namespace grpc_core {
|
|
43
46
|
namespace chttp2 {
|
|
@@ -96,6 +99,26 @@ std::ostream& operator<<(std::ostream& out, const FlowControlAction& action) {
|
|
|
96
99
|
return out << action.DebugString();
|
|
97
100
|
}
|
|
98
101
|
|
|
102
|
+
std::string FlowControlAction::ImmediateUpdateReasons() const {
|
|
103
|
+
std::string result;
|
|
104
|
+
if (send_stream_update_ == Urgency::UPDATE_IMMEDIATELY) {
|
|
105
|
+
absl::StrAppend(&result, "send_stream_update,");
|
|
106
|
+
}
|
|
107
|
+
if (send_transport_update_ == Urgency::UPDATE_IMMEDIATELY) {
|
|
108
|
+
absl::StrAppend(&result, "send_transport_update,");
|
|
109
|
+
}
|
|
110
|
+
if (send_initial_window_update_ == Urgency::UPDATE_IMMEDIATELY) {
|
|
111
|
+
absl::StrAppend(&result, "send_initial_window_update,");
|
|
112
|
+
}
|
|
113
|
+
if (send_max_frame_size_update_ == Urgency::UPDATE_IMMEDIATELY) {
|
|
114
|
+
absl::StrAppend(&result, "send_max_frame_size_update,");
|
|
115
|
+
}
|
|
116
|
+
if (preferred_rx_crypto_frame_size_update_ == Urgency::UPDATE_IMMEDIATELY) {
|
|
117
|
+
absl::StrAppend(&result, "preferred_rx_crypto_frame_size_update,");
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
|
|
99
122
|
TransportFlowControl::TransportFlowControl(absl::string_view name,
|
|
100
123
|
bool enable_bdp_probe,
|
|
101
124
|
MemoryOwner* memory_owner)
|
|
@@ -333,7 +356,7 @@ void StreamFlowControl::SentUpdate(uint32_t announce) {
|
|
|
333
356
|
TransportFlowControl::IncomingUpdateContext tfc_upd(tfc_);
|
|
334
357
|
pending_size_ = std::nullopt;
|
|
335
358
|
tfc_upd.UpdateAnnouncedWindowDelta(&announced_window_delta_, announce);
|
|
336
|
-
|
|
359
|
+
GRPC_CHECK_EQ(DesiredAnnounceSize(), 0u);
|
|
337
360
|
std::ignore = tfc_upd.MakeAction();
|
|
338
361
|
}
|
|
339
362
|
|
|
@@ -381,9 +404,21 @@ FlowControlAction StreamFlowControl::UpdateAction(FlowControlAction action) {
|
|
|
381
404
|
return action;
|
|
382
405
|
}
|
|
383
406
|
|
|
407
|
+
void StreamFlowControl::IncomingUpdateContext::HackIncrementPendingSize(
|
|
408
|
+
int64_t pending_size) {
|
|
409
|
+
GRPC_CHECK_GE(pending_size, 0);
|
|
410
|
+
if (sfc_->pending_size_.has_value()) {
|
|
411
|
+
int64_t final_size = Clamp(sfc_->pending_size_.value() + pending_size,
|
|
412
|
+
int64_t{0}, kMaxWindowUpdateSize);
|
|
413
|
+
*sfc_->pending_size_ = final_size;
|
|
414
|
+
} else {
|
|
415
|
+
sfc_->pending_size_ = pending_size;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
384
419
|
void StreamFlowControl::IncomingUpdateContext::SetPendingSize(
|
|
385
420
|
int64_t pending_size) {
|
|
386
|
-
|
|
421
|
+
GRPC_CHECK_GE(pending_size, 0);
|
|
387
422
|
sfc_->pending_size_ = pending_size;
|
|
388
423
|
}
|
|
389
424
|
|
|
@@ -23,28 +23,25 @@
|
|
|
23
23
|
#include <limits.h>
|
|
24
24
|
#include <stdint.h>
|
|
25
25
|
|
|
26
|
+
#include <algorithm>
|
|
26
27
|
#include <iosfwd>
|
|
27
28
|
#include <optional>
|
|
28
29
|
#include <string>
|
|
29
30
|
#include <utility>
|
|
30
31
|
|
|
31
|
-
#include "absl/functional/function_ref.h"
|
|
32
|
-
#include "absl/log/check.h"
|
|
33
|
-
#include "absl/status/status.h"
|
|
34
|
-
#include "absl/strings/string_view.h"
|
|
35
32
|
#include "src/core/channelz/property_list.h"
|
|
36
33
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
37
34
|
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
38
35
|
#include "src/core/lib/debug/trace.h"
|
|
39
36
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
|
40
37
|
#include "src/core/lib/transport/bdp_estimator.h"
|
|
38
|
+
#include "src/core/util/grpc_check.h"
|
|
41
39
|
#include "src/core/util/time.h"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
} // namespace grpc
|
|
40
|
+
#include "absl/functional/function_ref.h"
|
|
41
|
+
#include "absl/log/log.h"
|
|
42
|
+
#include "absl/status/status.h"
|
|
43
|
+
#include "absl/strings/str_cat.h"
|
|
44
|
+
#include "absl/strings/string_view.h"
|
|
48
45
|
|
|
49
46
|
namespace grpc_core {
|
|
50
47
|
namespace chttp2 {
|
|
@@ -59,15 +56,18 @@ static constexpr const uint32_t kMaxInitialWindowSize = (1u << 30);
|
|
|
59
56
|
static constexpr const int64_t kMaxWindowDelta = (1u << 20);
|
|
60
57
|
static constexpr const int kDefaultPreferredRxCryptoFrameSize = INT_MAX;
|
|
61
58
|
|
|
62
|
-
// TODO(
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
// TODO(tjagtap) [PH2][P2][BDP] Remove this static sleep when the BDP code is
|
|
60
|
+
// done. This needs to be dynamic.
|
|
61
|
+
constexpr Duration kFlowControlPeriodicUpdateTimer = Duration::Seconds(8);
|
|
65
62
|
|
|
66
63
|
class TransportFlowControl;
|
|
67
64
|
class StreamFlowControl;
|
|
68
65
|
|
|
69
66
|
enum class StallEdge { kNoChange, kStalled, kUnstalled };
|
|
70
67
|
|
|
68
|
+
#define GRPC_HTTP2_FLOW_CONTROL_DLOG \
|
|
69
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
70
|
+
|
|
71
71
|
// Encapsulates a collections of actions the transport needs to take with
|
|
72
72
|
// regard to flow control. Each action comes with urgencies that tell the
|
|
73
73
|
// transport how quickly the action must take place.
|
|
@@ -76,10 +76,10 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
|
76
76
|
enum class Urgency : uint8_t {
|
|
77
77
|
// Nothing to be done.
|
|
78
78
|
NO_ACTION_NEEDED = 0,
|
|
79
|
-
// Initiate a write to
|
|
79
|
+
// Initiate a write to send updates immediately.
|
|
80
80
|
UPDATE_IMMEDIATELY,
|
|
81
|
-
//
|
|
82
|
-
//
|
|
81
|
+
// Queue the flow control update, to be sent out the next time a write is
|
|
82
|
+
// initiated.
|
|
83
83
|
QUEUE_UPDATE,
|
|
84
84
|
};
|
|
85
85
|
|
|
@@ -94,12 +94,67 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
|
94
94
|
Urgency preferred_rx_crypto_frame_size_update() const {
|
|
95
95
|
return preferred_rx_crypto_frame_size_update_;
|
|
96
96
|
}
|
|
97
|
+
|
|
98
|
+
// Returns true if any action has UPDATE_IMMEDIATELY urgency.
|
|
99
|
+
bool AnyUpdateImmediately() const {
|
|
100
|
+
return send_stream_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
|
101
|
+
send_transport_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
|
102
|
+
send_initial_window_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
|
103
|
+
send_max_frame_size_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
|
104
|
+
preferred_rx_crypto_frame_size_update_ ==
|
|
105
|
+
Urgency::UPDATE_IMMEDIATELY;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
std::string ImmediateUpdateReasons() const;
|
|
109
|
+
|
|
110
|
+
// Returns the value of SETTINGS_INITIAL_WINDOW_SIZE that we will send to the
|
|
111
|
+
// peer.
|
|
97
112
|
uint32_t initial_window_size() const { return initial_window_size_; }
|
|
113
|
+
// Returns the value of SETTINGS_MAX_FRAME_SIZE that we will send to the peer.
|
|
98
114
|
uint32_t max_frame_size() const { return max_frame_size_; }
|
|
115
|
+
// Returns the value of GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE that we will
|
|
116
|
+
// send to the peer.
|
|
99
117
|
uint32_t preferred_rx_crypto_frame_size() const {
|
|
100
118
|
return preferred_rx_crypto_frame_size_;
|
|
101
119
|
}
|
|
102
120
|
|
|
121
|
+
FlowControlAction& test_only_set_send_initial_window_update(Urgency u,
|
|
122
|
+
uint32_t update) {
|
|
123
|
+
return set_send_initial_window_update(u, update);
|
|
124
|
+
}
|
|
125
|
+
FlowControlAction& test_only_set_send_max_frame_size_update(Urgency u,
|
|
126
|
+
uint32_t update) {
|
|
127
|
+
return set_send_max_frame_size_update(u, update);
|
|
128
|
+
}
|
|
129
|
+
FlowControlAction& test_only_set_preferred_rx_crypto_frame_size_update(
|
|
130
|
+
Urgency u, uint32_t update) {
|
|
131
|
+
return set_preferred_rx_crypto_frame_size_update(u, update);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
static const char* UrgencyString(Urgency u);
|
|
135
|
+
std::string DebugString() const;
|
|
136
|
+
|
|
137
|
+
void AssertEmpty() { GRPC_CHECK(*this == FlowControlAction()); }
|
|
138
|
+
|
|
139
|
+
bool operator==(const FlowControlAction& other) const {
|
|
140
|
+
return send_stream_update_ == other.send_stream_update_ &&
|
|
141
|
+
send_transport_update_ == other.send_transport_update_ &&
|
|
142
|
+
send_initial_window_update_ == other.send_initial_window_update_ &&
|
|
143
|
+
send_max_frame_size_update_ == other.send_max_frame_size_update_ &&
|
|
144
|
+
(send_initial_window_update_ == Urgency::NO_ACTION_NEEDED ||
|
|
145
|
+
initial_window_size_ == other.initial_window_size_) &&
|
|
146
|
+
(send_max_frame_size_update_ == Urgency::NO_ACTION_NEEDED ||
|
|
147
|
+
max_frame_size_ == other.max_frame_size_) &&
|
|
148
|
+
(preferred_rx_crypto_frame_size_update_ ==
|
|
149
|
+
Urgency::NO_ACTION_NEEDED ||
|
|
150
|
+
preferred_rx_crypto_frame_size_ ==
|
|
151
|
+
other.preferred_rx_crypto_frame_size_);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private:
|
|
155
|
+
friend class StreamFlowControl;
|
|
156
|
+
friend class TransportFlowControl;
|
|
157
|
+
|
|
103
158
|
FlowControlAction& set_send_stream_update(Urgency u) {
|
|
104
159
|
send_stream_update_ = u;
|
|
105
160
|
return *this;
|
|
@@ -127,27 +182,6 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
|
127
182
|
return *this;
|
|
128
183
|
}
|
|
129
184
|
|
|
130
|
-
static const char* UrgencyString(Urgency u);
|
|
131
|
-
std::string DebugString() const;
|
|
132
|
-
|
|
133
|
-
void AssertEmpty() { CHECK(*this == FlowControlAction()); }
|
|
134
|
-
|
|
135
|
-
bool operator==(const FlowControlAction& other) const {
|
|
136
|
-
return send_stream_update_ == other.send_stream_update_ &&
|
|
137
|
-
send_transport_update_ == other.send_transport_update_ &&
|
|
138
|
-
send_initial_window_update_ == other.send_initial_window_update_ &&
|
|
139
|
-
send_max_frame_size_update_ == other.send_max_frame_size_update_ &&
|
|
140
|
-
(send_initial_window_update_ == Urgency::NO_ACTION_NEEDED ||
|
|
141
|
-
initial_window_size_ == other.initial_window_size_) &&
|
|
142
|
-
(send_max_frame_size_update_ == Urgency::NO_ACTION_NEEDED ||
|
|
143
|
-
max_frame_size_ == other.max_frame_size_) &&
|
|
144
|
-
(preferred_rx_crypto_frame_size_update_ ==
|
|
145
|
-
Urgency::NO_ACTION_NEEDED ||
|
|
146
|
-
preferred_rx_crypto_frame_size_ ==
|
|
147
|
-
other.preferred_rx_crypto_frame_size_);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
private:
|
|
151
185
|
Urgency send_stream_update_ = Urgency::NO_ACTION_NEEDED;
|
|
152
186
|
Urgency send_transport_update_ = Urgency::NO_ACTION_NEEDED;
|
|
153
187
|
Urgency send_initial_window_update_ = Urgency::NO_ACTION_NEEDED;
|
|
@@ -163,6 +197,7 @@ std::ostream& operator<<(std::ostream& out, const FlowControlAction& action);
|
|
|
163
197
|
|
|
164
198
|
// Implementation of flow control that abides to HTTP/2 spec and attempts
|
|
165
199
|
// to be as performant as possible.
|
|
200
|
+
// This class manages the flow control at a connection level.
|
|
166
201
|
class TransportFlowControl final {
|
|
167
202
|
public:
|
|
168
203
|
explicit TransportFlowControl(absl::string_view name, bool enable_bdp_probe,
|
|
@@ -171,16 +206,19 @@ class TransportFlowControl final {
|
|
|
171
206
|
|
|
172
207
|
bool bdp_probe() const { return enable_bdp_probe_; }
|
|
173
208
|
|
|
174
|
-
//
|
|
175
|
-
// else returns zero; writing_anyway indicates if a write would happen
|
|
209
|
+
// Returns a non-zero announce if we should send a transport update to our
|
|
210
|
+
// peer, else returns zero; writing_anyway indicates if a write would happen
|
|
176
211
|
// regardless of the send - if it is false and this function returns non-zero,
|
|
177
|
-
//
|
|
212
|
+
// the caller can send a flow control update.
|
|
178
213
|
uint32_t DesiredAnnounceSize(bool writing_anyway) const;
|
|
179
|
-
|
|
180
|
-
//
|
|
214
|
+
|
|
215
|
+
// Call to update transport flow control state after sending a transport
|
|
216
|
+
// WINDOW_UPDATE with `announce` size. `announce` should be value returned
|
|
217
|
+
// by `DesiredAnnounceSize`.
|
|
181
218
|
void SentUpdate(uint32_t announce);
|
|
182
219
|
|
|
183
|
-
//
|
|
220
|
+
// Convenience method that combines `DesiredAnnounceSize` and `SentUpdate`.
|
|
221
|
+
// Call to get window increment and update state in one go.
|
|
184
222
|
uint32_t MaybeSendUpdate(bool writing_anyway) {
|
|
185
223
|
uint32_t n = DesiredAnnounceSize(writing_anyway);
|
|
186
224
|
SentUpdate(n);
|
|
@@ -188,28 +226,41 @@ class TransportFlowControl final {
|
|
|
188
226
|
}
|
|
189
227
|
|
|
190
228
|
// Track an update to the incoming flow control counters - that is how many
|
|
191
|
-
// tokens we report to our peer that we
|
|
192
|
-
// Instantiators *must* call MakeAction before destruction of this
|
|
229
|
+
// tokens we report to our peer for the data that we are willing to accept.
|
|
230
|
+
// Instantiators *must* call MakeAction before destruction of this object.
|
|
193
231
|
class IncomingUpdateContext {
|
|
194
232
|
public:
|
|
195
233
|
explicit IncomingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
|
|
196
|
-
~IncomingUpdateContext() {
|
|
234
|
+
~IncomingUpdateContext() { GRPC_CHECK_EQ(tfc_, nullptr); }
|
|
197
235
|
|
|
198
236
|
IncomingUpdateContext(const IncomingUpdateContext&) = delete;
|
|
199
237
|
IncomingUpdateContext& operator=(const IncomingUpdateContext&) = delete;
|
|
238
|
+
IncomingUpdateContext(IncomingUpdateContext&&) = delete;
|
|
239
|
+
IncomingUpdateContext& operator=(IncomingUpdateContext&&) = delete;
|
|
200
240
|
|
|
201
241
|
// Reads the flow control data and returns an actionable struct that will
|
|
202
|
-
// tell
|
|
242
|
+
// tell the transport exactly what it needs to do.
|
|
203
243
|
FlowControlAction MakeAction() {
|
|
204
244
|
return std::exchange(tfc_, nullptr)->UpdateAction(FlowControlAction());
|
|
205
245
|
}
|
|
206
246
|
|
|
207
|
-
//
|
|
208
|
-
//
|
|
247
|
+
// We have received data from the wire.
|
|
248
|
+
// We check if this data is within our flow control limits or not.
|
|
249
|
+
// If it exceeds the limit, we send an error.
|
|
250
|
+
// RFC9113 : A receiver MAY respond with a stream error or connection
|
|
251
|
+
// error of type FLOW_CONTROL_ERROR if it is unable to accept a frame.
|
|
252
|
+
//
|
|
253
|
+
// This function updates transport window for received data.
|
|
254
|
+
// Call this ONLY IF stream is not available (e.g. already closed) AND
|
|
255
|
+
// transport window must be updated to remain in sync with peer.
|
|
256
|
+
// If stream IS available, call RecvData() on
|
|
257
|
+
// StreamFlowControl::IncomingUpdateContext instead.
|
|
209
258
|
absl::Status RecvData(
|
|
210
259
|
int64_t incoming_frame_size, absl::FunctionRef<absl::Status()> stream =
|
|
211
260
|
[]() { return absl::OkStatus(); });
|
|
212
261
|
|
|
262
|
+
private:
|
|
263
|
+
friend class StreamFlowControl;
|
|
213
264
|
// Update a stream announce window delta, keeping track of how much total
|
|
214
265
|
// positive delta is present on the transport.
|
|
215
266
|
void UpdateAnnouncedWindowDelta(int64_t* delta, int64_t change) {
|
|
@@ -223,7 +274,6 @@ class TransportFlowControl final {
|
|
|
223
274
|
}
|
|
224
275
|
}
|
|
225
276
|
|
|
226
|
-
private:
|
|
227
277
|
TransportFlowControl* tfc_;
|
|
228
278
|
};
|
|
229
279
|
|
|
@@ -232,9 +282,14 @@ class TransportFlowControl final {
|
|
|
232
282
|
class OutgoingUpdateContext {
|
|
233
283
|
public:
|
|
234
284
|
explicit OutgoingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
|
|
235
|
-
void StreamSentData(int64_t size) { tfc_->remote_window_ -= size; }
|
|
236
285
|
|
|
237
|
-
|
|
286
|
+
OutgoingUpdateContext(const OutgoingUpdateContext&) = delete;
|
|
287
|
+
OutgoingUpdateContext& operator=(const OutgoingUpdateContext&) = delete;
|
|
288
|
+
OutgoingUpdateContext(OutgoingUpdateContext&&) = delete;
|
|
289
|
+
OutgoingUpdateContext& operator=(OutgoingUpdateContext&&) = delete;
|
|
290
|
+
|
|
291
|
+
// Call this function when a transport-level WINDOW_UPDATE frame is received
|
|
292
|
+
// from peer to increase remote window.
|
|
238
293
|
void RecvUpdate(uint32_t size) { tfc_->remote_window_ += size; }
|
|
239
294
|
|
|
240
295
|
// Finish the update and check whether we became stalled or unstalled.
|
|
@@ -248,29 +303,37 @@ class TransportFlowControl final {
|
|
|
248
303
|
}
|
|
249
304
|
|
|
250
305
|
private:
|
|
306
|
+
friend class StreamFlowControl;
|
|
307
|
+
void StreamSentData(int64_t size) { tfc_->remote_window_ -= size; }
|
|
308
|
+
|
|
251
309
|
TransportFlowControl* tfc_;
|
|
252
310
|
const bool was_stalled_ = tfc_->remote_window_ <= 0;
|
|
253
311
|
};
|
|
254
312
|
|
|
255
313
|
// Call periodically (at a low-ish rate, 100ms - 10s makes sense)
|
|
256
314
|
// to perform more complex flow control calculations and return an action
|
|
257
|
-
// to let
|
|
315
|
+
// to let the transport change its parameters.
|
|
316
|
+
// TODO(tjagtap) [PH2][P2] Plumb with PH2 flow control.
|
|
258
317
|
FlowControlAction PeriodicUpdate();
|
|
259
318
|
|
|
260
|
-
int64_t
|
|
261
|
-
int64_t
|
|
262
|
-
int64_t
|
|
263
|
-
return
|
|
319
|
+
int64_t test_only_target_window() const { return target_window(); }
|
|
320
|
+
int64_t test_only_target_frame_size() const { return target_frame_size(); }
|
|
321
|
+
int64_t test_only_target_preferred_rx_crypto_frame_size() const {
|
|
322
|
+
return target_preferred_rx_crypto_frame_size();
|
|
264
323
|
}
|
|
265
324
|
|
|
266
325
|
BdpEstimator* bdp_estimator() { return &bdp_estimator_; }
|
|
267
326
|
|
|
268
|
-
uint32_t
|
|
269
|
-
uint32_t
|
|
270
|
-
uint32_t sent_init_window() const { return sent_init_window_; }
|
|
327
|
+
uint32_t test_only_acked_init_window() const { return acked_init_window(); }
|
|
328
|
+
uint32_t test_only_sent_init_window() const { return sent_init_window(); }
|
|
271
329
|
|
|
330
|
+
// Call after you prepare and queue a settings frame to send to the peer.
|
|
272
331
|
void FlushedSettings() { sent_init_window_ = queued_init_window(); }
|
|
273
332
|
|
|
333
|
+
// Updates the initial window size that we have acknowledged from the peer.
|
|
334
|
+
// This affects stream-level flow control for data received from the peer.
|
|
335
|
+
// If the new value differs from target_initial_window_size_, we return an
|
|
336
|
+
// action to send an update to the peer with our target.
|
|
274
337
|
FlowControlAction SetAckedInitialWindow(uint32_t value);
|
|
275
338
|
|
|
276
339
|
void set_target_initial_window_size(uint32_t value) {
|
|
@@ -280,16 +343,10 @@ class TransportFlowControl final {
|
|
|
280
343
|
|
|
281
344
|
// Getters
|
|
282
345
|
int64_t remote_window() const { return remote_window_; }
|
|
283
|
-
int64_t
|
|
346
|
+
int64_t test_only_announced_window() const { return announced_window(); }
|
|
284
347
|
|
|
285
|
-
int64_t
|
|
286
|
-
return
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
void RemoveAnnouncedWindowDelta(int64_t delta) {
|
|
290
|
-
if (delta > 0) {
|
|
291
|
-
announced_stream_total_over_incoming_window_ -= delta;
|
|
292
|
-
}
|
|
348
|
+
int64_t test_only_announced_stream_total_over_incoming_window() const {
|
|
349
|
+
return announced_stream_total_over_incoming_window();
|
|
293
350
|
}
|
|
294
351
|
|
|
295
352
|
// A snapshot of the flow control stats to export.
|
|
@@ -348,7 +405,28 @@ class TransportFlowControl final {
|
|
|
348
405
|
}
|
|
349
406
|
|
|
350
407
|
private:
|
|
408
|
+
friend class StreamFlowControl;
|
|
409
|
+
|
|
410
|
+
void RemoveAnnouncedWindowDelta(int64_t delta) {
|
|
411
|
+
if (delta > 0) {
|
|
412
|
+
announced_stream_total_over_incoming_window_ -= delta;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
351
416
|
double TargetInitialWindowSizeBasedOnMemoryPressureAndBdp() const;
|
|
417
|
+
int64_t target_window() const;
|
|
418
|
+
int64_t target_frame_size() const { return target_frame_size_; }
|
|
419
|
+
int64_t target_preferred_rx_crypto_frame_size() const {
|
|
420
|
+
return target_preferred_rx_crypto_frame_size_;
|
|
421
|
+
}
|
|
422
|
+
uint32_t acked_init_window() const { return acked_init_window_; }
|
|
423
|
+
uint32_t queued_init_window() const { return target_initial_window_size_; }
|
|
424
|
+
uint32_t sent_init_window() const { return sent_init_window_; }
|
|
425
|
+
int64_t announced_window() const { return announced_window_; }
|
|
426
|
+
int64_t announced_stream_total_over_incoming_window() const {
|
|
427
|
+
return announced_stream_total_over_incoming_window_;
|
|
428
|
+
}
|
|
429
|
+
|
|
352
430
|
static void UpdateSetting(absl::string_view name, int64_t* desired_value,
|
|
353
431
|
uint32_t new_desired_value,
|
|
354
432
|
FlowControlAction* action,
|
|
@@ -402,20 +480,50 @@ class StreamFlowControl final {
|
|
|
402
480
|
explicit IncomingUpdateContext(StreamFlowControl* sfc)
|
|
403
481
|
: tfc_upd_(sfc->tfc_), sfc_(sfc) {}
|
|
404
482
|
|
|
483
|
+
IncomingUpdateContext(const IncomingUpdateContext&) = delete;
|
|
484
|
+
IncomingUpdateContext& operator=(const IncomingUpdateContext&) = delete;
|
|
485
|
+
IncomingUpdateContext(IncomingUpdateContext&&) = delete;
|
|
486
|
+
IncomingUpdateContext& operator=(IncomingUpdateContext&&) = delete;
|
|
487
|
+
|
|
405
488
|
FlowControlAction MakeAction() {
|
|
406
489
|
return sfc_->UpdateAction(tfc_upd_.MakeAction());
|
|
407
490
|
}
|
|
408
491
|
|
|
409
|
-
//
|
|
492
|
+
// We have received data from the wire.
|
|
493
|
+
// We check if this data is within our flow control limits or not.
|
|
494
|
+
// If it exceeds the limit, we send an error.
|
|
495
|
+
// RFC9113 : A receiver MAY respond with a stream error or connection
|
|
496
|
+
// error of type FLOW_CONTROL_ERROR if it is unable to accept a frame.
|
|
497
|
+
//
|
|
498
|
+
// Updates stream and transport window for received data on an active
|
|
499
|
+
// stream. Calling this updates BOTH windows; do not call
|
|
500
|
+
// TransportFlowControl::IncomingUpdateContext::RecvData() separately.
|
|
410
501
|
absl::Status RecvData(int64_t incoming_frame_size);
|
|
411
502
|
|
|
412
|
-
//
|
|
503
|
+
// Informs flow control that the application needs at least
|
|
504
|
+
// `min_progress_size` bytes to make progress on reading the current stream.
|
|
505
|
+
// An example usage of this would be, say we receive the first 1000 bytes of
|
|
506
|
+
// a 2000 byte gRPC message, we can call SetMinProgressSize(1000)
|
|
507
|
+
// TODO(tjagtap) [PH2][P2] Plumb with PH2 flow control.
|
|
413
508
|
void SetMinProgressSize(int64_t min_progress_size) {
|
|
414
509
|
sfc_->min_progress_size_ = min_progress_size;
|
|
415
510
|
}
|
|
416
511
|
|
|
512
|
+
// Informs flow control that `pending_size` bytes are buffered and waiting
|
|
513
|
+
// for application to read. Call this when a complete message is assembled
|
|
514
|
+
// but not yet pulled by the application. This helps flow control decide
|
|
515
|
+
// whether to send a WINDOW_UPDATE to the peer.
|
|
516
|
+
// TODO(tjagtap) [PH2][P1] Plumb with PH2 flow control.
|
|
417
517
|
void SetPendingSize(int64_t pending_size);
|
|
418
518
|
|
|
519
|
+
// This is a hack in place till SetPendingSize is fully plumbed. This hack
|
|
520
|
+
// function just pretends that the application needs more bytes. Since we
|
|
521
|
+
// dont actually know how many bytes the application needs, we just want to
|
|
522
|
+
// refill the used up tokens. The only way to refill used up tokens is to
|
|
523
|
+
// call this function for each DATA frame.
|
|
524
|
+
// TODO(tjagtap) [PH2][P1] Remove hack after SetPendingSize is plumbed.
|
|
525
|
+
void HackIncrementPendingSize(int64_t pending_size);
|
|
526
|
+
|
|
419
527
|
private:
|
|
420
528
|
TransportFlowControl::IncomingUpdateContext tfc_upd_;
|
|
421
529
|
StreamFlowControl* const sfc_;
|
|
@@ -427,10 +535,18 @@ class StreamFlowControl final {
|
|
|
427
535
|
public:
|
|
428
536
|
explicit OutgoingUpdateContext(StreamFlowControl* sfc)
|
|
429
537
|
: tfc_upd_(sfc->tfc_), sfc_(sfc) {}
|
|
430
|
-
|
|
538
|
+
|
|
539
|
+
OutgoingUpdateContext(const OutgoingUpdateContext&) = delete;
|
|
540
|
+
OutgoingUpdateContext& operator=(const OutgoingUpdateContext&) = delete;
|
|
541
|
+
OutgoingUpdateContext(OutgoingUpdateContext&&) = delete;
|
|
542
|
+
OutgoingUpdateContext& operator=(OutgoingUpdateContext&&) = delete;
|
|
543
|
+
|
|
544
|
+
// Call this when a WINDOW_UPDATE frame is received from peer for this
|
|
545
|
+
// stream, to increase send window.
|
|
431
546
|
void RecvUpdate(uint32_t size) { sfc_->remote_window_delta_ += size; }
|
|
432
|
-
|
|
433
|
-
//
|
|
547
|
+
|
|
548
|
+
// Call this after sending a DATA frame for this stream, to decrease send
|
|
549
|
+
// window based on `outgoing_frame_size`.
|
|
434
550
|
void SentData(int64_t outgoing_frame_size) {
|
|
435
551
|
tfc_upd_.StreamSentData(outgoing_frame_size);
|
|
436
552
|
sfc_->remote_window_delta_ -= outgoing_frame_size;
|
|
@@ -441,14 +557,17 @@ class StreamFlowControl final {
|
|
|
441
557
|
StreamFlowControl* const sfc_;
|
|
442
558
|
};
|
|
443
559
|
|
|
444
|
-
//
|
|
445
|
-
// returns zero
|
|
560
|
+
// Returns a non-zero announce if we should send a stream update to our
|
|
561
|
+
// peer, else returns zero;
|
|
446
562
|
uint32_t DesiredAnnounceSize() const;
|
|
447
|
-
|
|
448
|
-
//
|
|
563
|
+
|
|
564
|
+
// Call after sending stream-level WINDOW_UPDATE to peer to update internal
|
|
565
|
+
// state. Argument should be value previously returned by
|
|
566
|
+
// `DesiredAnnounceSize`.
|
|
449
567
|
void SentUpdate(uint32_t announce);
|
|
450
568
|
|
|
451
|
-
//
|
|
569
|
+
// Convenience method that combines `DesiredAnnounceSize` and `SentUpdate`.
|
|
570
|
+
// Call to get window increment and update state in one go.
|
|
452
571
|
uint32_t MaybeSendUpdate() {
|
|
453
572
|
uint32_t n = DesiredAnnounceSize();
|
|
454
573
|
SentUpdate(n);
|
|
@@ -456,8 +575,10 @@ class StreamFlowControl final {
|
|
|
456
575
|
}
|
|
457
576
|
|
|
458
577
|
int64_t remote_window_delta() const { return remote_window_delta_; }
|
|
459
|
-
int64_t
|
|
460
|
-
|
|
578
|
+
int64_t test_only_announced_window_delta() const {
|
|
579
|
+
return announced_window_delta_;
|
|
580
|
+
}
|
|
581
|
+
int64_t test_only_min_progress_size() const { return min_progress_size_; }
|
|
461
582
|
|
|
462
583
|
// A snapshot of the flow control stats to export.
|
|
463
584
|
struct Stats {
|
|
@@ -471,13 +592,32 @@ class StreamFlowControl final {
|
|
|
471
592
|
|
|
472
593
|
Stats stats() const {
|
|
473
594
|
Stats stats;
|
|
474
|
-
stats.min_progress_size =
|
|
595
|
+
stats.min_progress_size = min_progress_size_;
|
|
475
596
|
stats.remote_window_delta = remote_window_delta();
|
|
476
|
-
stats.announced_window_delta =
|
|
597
|
+
stats.announced_window_delta = announced_window_delta_;
|
|
477
598
|
stats.pending_size = pending_size_;
|
|
478
599
|
return stats;
|
|
479
600
|
}
|
|
480
601
|
|
|
602
|
+
void ReportIfStalled(bool is_client, uint32_t stream_id,
|
|
603
|
+
const Http2Settings& peer_settings) const {
|
|
604
|
+
if (remote_window_delta() + peer_settings.initial_window_size() <= 0 ||
|
|
605
|
+
tfc_->remote_window_ == 0) {
|
|
606
|
+
GRPC_HTTP2_FLOW_CONTROL_DLOG
|
|
607
|
+
<< "PH2 " << (is_client ? "CLIENT" : "SERVER")
|
|
608
|
+
<< " Flow Control Stalled :"
|
|
609
|
+
<< " Settings { peer initial window size="
|
|
610
|
+
<< peer_settings.initial_window_size()
|
|
611
|
+
<< "}, Transport {remote_window=" << tfc_->remote_window()
|
|
612
|
+
<< ", transport announced_window=" << tfc_->announced_window()
|
|
613
|
+
<< "}, Stream {stream_id=" << stream_id
|
|
614
|
+
<< ", remote_window_delta=" << remote_window_delta()
|
|
615
|
+
<< ", remote_window_delta() + peer_settings.initial_window_size() ="
|
|
616
|
+
<< (remote_window_delta() + peer_settings.initial_window_size())
|
|
617
|
+
<< " }";
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
|
|
481
621
|
private:
|
|
482
622
|
TransportFlowControl* const tfc_;
|
|
483
623
|
int64_t min_progress_size_ = 0;
|