grpc 1.75.0.pre1 → 1.76.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +18 -5
- data/include/grpc/credentials.h +21 -5
- data/src/core/call/call_filters.cc +4 -4
- data/src/core/call/call_filters.h +36 -36
- data/src/core/call/call_spine.h +27 -27
- data/src/core/call/client_call.cc +6 -5
- data/src/core/call/filter_fusion.h +5 -5
- data/src/core/call/metadata_batch.h +3 -3
- data/src/core/call/security_context.cc +1 -1
- data/src/core/call/server_call.cc +4 -4
- data/src/core/call/server_call.h +1 -1
- data/src/core/channelz/channelz.cc +12 -18
- data/src/core/channelz/channelz.h +32 -16
- data/src/core/channelz/channelz_registry.h +11 -0
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +10 -1
- 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 +11 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +15 -8
- data/src/core/channelz/ztrace_collector.h +247 -86
- data/src/core/client_channel/backup_poller.cc +5 -6
- data/src/core/client_channel/client_channel.cc +20 -13
- data/src/core/client_channel/client_channel_filter.cc +53 -45
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +3 -4
- data/src/core/client_channel/config_selector.h +3 -3
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +0 -27
- data/src/core/client_channel/load_balanced_call_destination.cc +7 -7
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/subchannel.cc +8 -8
- data/src/core/client_channel/subchannel_stream_client.cc +4 -4
- data/src/core/config/config_vars.cc +30 -1
- data/src/core/config/config_vars.h +21 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +7 -7
- data/src/core/config/load_config.cc +12 -0
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +2 -2
- data/src/core/credentials/call/call_creds_util.cc +4 -3
- data/src/core/credentials/call/composite/composite_call_credentials.cc +4 -4
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/external_account_credentials.cc +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +1 -1
- data/src/core/credentials/call/iam/iam_credentials.cc +4 -4
- data/src/core/credentials/call/jwt/json_token.cc +3 -3
- data/src/core/credentials/call/jwt/jwt_credentials.cc +2 -2
- data/src/core/credentials/call/jwt/jwt_verifier.cc +14 -13
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +20 -12
- data/src/core/credentials/call/plugin/plugin_credentials.cc +2 -2
- data/src/core/credentials/transport/alts/alts_credentials.cc +4 -4
- data/src/core/credentials/transport/alts/alts_security_connector.cc +14 -12
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +22 -2
- 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/composite/composite_channel_credentials.cc +5 -5
- data/src/core/credentials/transport/fake/fake_security_connector.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +78 -28
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/local/local_security_connector.cc +8 -8
- data/src/core/credentials/transport/security_connector.cc +5 -5
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +12 -12
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +3 -3
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +24 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +17 -17
- data/src/core/credentials/transport/tls/ssl_utils.cc +14 -9
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -2
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -11
- data/src/core/credentials/transport/transport_credentials.cc +2 -2
- data/src/core/credentials/transport/transport_credentials.h +2 -2
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +2 -0
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -9
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +96 -88
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -7
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +60 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +32 -10
- data/src/core/ext/transport/chttp2/transport/frame.h +16 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +28 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -27
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +543 -366
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +198 -277
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +11 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +179 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +51 -23
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +13 -6
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +115 -71
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -14
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +7 -7
- data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -15
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +62 -26
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +58 -22
- data/src/core/ext/transport/chttp2/transport/stream.h +207 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +328 -187
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +52 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +181 -79
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +3 -3
- 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/server_auth_filter.cc +2 -2
- data/src/core/handshaker/handshaker.cc +3 -3
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +2 -2
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +2 -2
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +31 -8
- data/src/core/handshaker/security/secure_endpoint.cc +16 -6
- data/src/core/handshaker/security/security_handshaker.cc +3 -3
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/channel/channel_stack.cc +8 -5
- data/src/core/lib/channel/channel_stack.h +3 -0
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -0
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.cc +69 -64
- data/src/core/lib/channel/promise_based_filter.h +16 -15
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/message_compress.cc +7 -7
- data/src/core/lib/event_engine/ares_resolver.cc +22 -20
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -2
- data/src/core/lib/event_engine/extensions/channelz.h +2 -2
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +10 -10
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +23 -22
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +168 -170
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +33 -54
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.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/timer_manager.cc +3 -3
- 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 +11 -11
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +7 -7
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -31
- data/src/core/lib/event_engine/windows/iocp.cc +10 -10
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -11
- data/src/core/lib/event_engine/windows/windows_engine.cc +16 -14
- data/src/core/lib/event_engine/windows/windows_listener.cc +7 -7
- data/src/core/lib/experiments/experiments.cc +105 -18
- data/src/core/lib/experiments/experiments.h +43 -11
- data/src/core/lib/iomgr/call_combiner.cc +3 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -14
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +11 -11
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -4
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +8 -8
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.cc +3 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +42 -42
- 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 +47 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +68 -29
- data/src/core/lib/iomgr/tcp_windows.cc +7 -7
- data/src/core/lib/iomgr/timer_generic.cc +2 -2
- data/src/core/lib/iomgr/timer_manager.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- data/src/core/lib/promise/activity.cc +2 -2
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/context.h +2 -2
- data/src/core/lib/promise/detail/join_state.h +9 -9
- data/src/core/lib/promise/detail/seq_state.h +13 -13
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/for_each.h +5 -5
- data/src/core/lib/promise/interceptor_list.h +2 -2
- data/src/core/lib/promise/latch.h +7 -7
- data/src/core/lib/promise/mpsc.cc +26 -26
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +4 -4
- data/src/core/lib/promise/party.cc +32 -25
- data/src/core/lib/promise/party.h +16 -19
- data/src/core/lib/promise/pipe.h +15 -15
- data/src/core/lib/promise/poll.h +5 -4
- data/src/core/lib/promise/promise.h +0 -2
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/status_flag.h +7 -7
- data/src/core/lib/promise/try_join.h +2 -2
- data/src/core/lib/promise/try_seq.h +2 -2
- 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/memory_quota.cc +45 -24
- data/src/core/lib/resource_quota/memory_quota.h +48 -16
- data/src/core/lib/resource_quota/telemetry.h +54 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- 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 +5 -5
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +16 -14
- data/src/core/lib/surface/call.h +1 -1
- data/src/core/lib/surface/call_utils.cc +2 -2
- data/src/core/lib/surface/call_utils.h +2 -2
- data/src/core/lib/surface/channel.cc +4 -4
- data/src/core/lib/surface/channel_create.cc +10 -6
- data/src/core/lib/surface/channel_init.cc +80 -23
- data/src/core/lib/surface/channel_init.h +26 -11
- data/src/core/lib/surface/completion_queue.cc +17 -16
- 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 +12 -23
- data/src/core/lib/surface/filter_stack_call.h +3 -4
- data/src/core/lib/surface/legacy_channel.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +2 -2
- 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 +3 -3
- data/src/core/lib/transport/promise_endpoint.cc +3 -3
- data/src/core/lib/transport/promise_endpoint.h +8 -8
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/load_balancing/child_policy_handler.cc +4 -4
- data/src/core/load_balancing/endpoint_list.cc +2 -2
- data/src/core/load_balancing/grpclb/grpclb.cc +24 -24
- data/src/core/load_balancing/health_check_client.cc +4 -4
- data/src/core/load_balancing/health_check_client_internal.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +4 -4
- data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
- data/src/core/load_balancing/pick_first/pick_first.cc +14 -14
- data/src/core/load_balancing/priority/priority.cc +23 -24
- data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -3
- data/src/core/load_balancing/rls/rls.cc +13 -13
- data/src/core/load_balancing/round_robin/round_robin.cc +9 -9
- 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 +33 -26
- data/src/core/load_balancing/weighted_target/weighted_target.cc +5 -5
- data/src/core/load_balancing/xds/cds.cc +76 -32
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +3 -3
- data/src/core/load_balancing/xds/xds_override_host.cc +4 -4
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +33 -33
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -10
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -3
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +2 -2
- data/src/core/resolver/endpoint_addresses.cc +3 -3
- data/src/core/resolver/endpoint_addresses.h +3 -0
- data/src/core/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +41 -54
- data/src/core/resolver/polling_resolver.cc +3 -3
- data/src/core/resolver/resolver_registry.cc +5 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +5 -5
- data/src/core/resolver/xds/xds_resolver.cc +9 -9
- data/src/core/server/server.cc +38 -38
- data/src/core/server/server_call_tracer_filter.h +4 -4
- data/src/core/server/server_config_selector_filter.cc +2 -2
- data/src/core/server/xds_server_config_fetcher.cc +9 -8
- data/src/core/service_config/service_config_impl.h +2 -2
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +199 -22
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +719 -0
- data/src/core/telemetry/instrument.h +932 -0
- data/src/core/telemetry/metrics.cc +13 -5
- data/src/core/telemetry/metrics.h +3 -1
- data/src/core/telemetry/stats_data.cc +0 -19
- data/src/core/telemetry/stats_data.h +0 -19
- data/src/core/transport/auth_context.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -45
- 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 +39 -31
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +9 -9
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -3
- data/src/core/tsi/ssl_transport_security.cc +26 -25
- data/src/core/tsi/ssl_transport_security_utils.cc +9 -9
- data/src/core/util/chunked_vector.h +4 -4
- data/src/core/util/event_log.cc +2 -2
- data/src/core/util/gcp_metadata_query.cc +2 -2
- data/src/core/util/grpc_check.cc +22 -0
- data/src/core/util/grpc_check.h +103 -0
- data/src/core/util/http_client/httpcli.cc +3 -3
- data/src/core/util/http_client/parser.cc +4 -4
- data/src/core/util/latent_see.h +7 -4
- data/src/core/util/lru_cache.h +4 -4
- data/src/core/util/memory_usage.h +16 -0
- data/src/core/util/posix/directory_reader.cc +3 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted_ptr.h +5 -0
- data/src/core/util/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +6 -1
- data/src/core/xds/grpc/xds_certificate_provider.cc +3 -3
- data/src/core/xds/grpc/xds_client_grpc.cc +34 -15
- data/src/core/xds/grpc/xds_client_grpc.h +4 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +2 -2
- data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
- data/src/core/xds/grpc/xds_listener_parser.cc +3 -3
- 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_route_config_parser.cc +6 -6
- data/src/core/xds/grpc/xds_routing.cc +3 -3
- data/src/core/xds/grpc/xds_transport_grpc.cc +10 -10
- data/src/core/xds/xds_client/lrs_client.cc +6 -6
- data/src/core/xds/xds_client/xds_client.cc +9 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/lib/grpc/version.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 +37 -2
@@ -47,7 +47,6 @@
|
|
47
47
|
#include "absl/base/attributes.h"
|
48
48
|
#include "absl/container/flat_hash_map.h"
|
49
49
|
#include "absl/hash/hash.h"
|
50
|
-
#include "absl/log/check.h"
|
51
50
|
#include "absl/log/log.h"
|
52
51
|
#include "absl/meta/type_traits.h"
|
53
52
|
#include "absl/random/random.h"
|
@@ -78,6 +77,7 @@
|
|
78
77
|
#include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
|
79
78
|
#include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h"
|
80
79
|
#include "src/core/ext/transport/chttp2/transport/stream_lists.h"
|
80
|
+
#include "src/core/ext/transport/chttp2/transport/transport_common.h"
|
81
81
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
82
82
|
#include "src/core/ext/transport/chttp2/transport/write_size_policy.h"
|
83
83
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -109,6 +109,7 @@
|
|
109
109
|
#include "src/core/telemetry/call_tracer.h"
|
110
110
|
#include "src/core/telemetry/context_list_entry.h"
|
111
111
|
#include "src/core/telemetry/default_tcp_tracer.h"
|
112
|
+
#include "src/core/telemetry/instrument.h"
|
112
113
|
#include "src/core/telemetry/stats.h"
|
113
114
|
#include "src/core/telemetry/stats_data.h"
|
114
115
|
#include "src/core/telemetry/tcp_tracer.h"
|
@@ -116,6 +117,7 @@
|
|
116
117
|
#include "src/core/util/bitset.h"
|
117
118
|
#include "src/core/util/crash.h"
|
118
119
|
#include "src/core/util/debug_location.h"
|
120
|
+
#include "src/core/util/grpc_check.h"
|
119
121
|
#include "src/core/util/http_client/parser.h"
|
120
122
|
#include "src/core/util/notification.h"
|
121
123
|
#include "src/core/util/ref_counted.h"
|
@@ -149,11 +151,6 @@ static grpc_core::Duration g_default_server_keepalive_timeout =
|
|
149
151
|
static bool g_default_client_keepalive_permit_without_calls = false;
|
150
152
|
static bool g_default_server_keepalive_permit_without_calls = false;
|
151
153
|
|
152
|
-
// EXPERIMENTAL: control tarpitting in chttp2
|
153
|
-
#define GRPC_ARG_HTTP_ALLOW_TARPIT "grpc.http.tarpit"
|
154
|
-
#define GRPC_ARG_HTTP_TARPIT_MIN_DURATION_MS "grpc.http.tarpit_min_duration_ms"
|
155
|
-
#define GRPC_ARG_HTTP_TARPIT_MAX_DURATION_MS "grpc.http.tarpit_max_duration_ms"
|
156
|
-
|
157
154
|
#define MAX_CLIENT_STREAM_ID 0x7fffffffu
|
158
155
|
|
159
156
|
// forward declarations of various callbacks that we'll build closures around
|
@@ -377,11 +374,11 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
377
374
|
grpc_chttp2_goaway_parser_destroy(&goaway_parser);
|
378
375
|
|
379
376
|
for (i = 0; i < STREAM_LIST_COUNT; i++) {
|
380
|
-
|
381
|
-
|
377
|
+
GRPC_CHECK_EQ(lists[i].head, nullptr);
|
378
|
+
GRPC_CHECK_EQ(lists[i].tail, nullptr);
|
382
379
|
}
|
383
380
|
|
384
|
-
|
381
|
+
GRPC_CHECK(stream_map.empty());
|
385
382
|
GRPC_COMBINER_UNREF(combiner, "chttp2_transport");
|
386
383
|
|
387
384
|
while (write_cb_pool) {
|
@@ -547,7 +544,7 @@ static void read_channel_args(grpc_chttp2_transport* t,
|
|
547
544
|
static void init_keepalive_pings_if_enabled_locked(
|
548
545
|
grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
|
549
546
|
GRPC_UNUSED grpc_error_handle error) {
|
550
|
-
|
547
|
+
GRPC_DCHECK(error.ok());
|
551
548
|
if (t->keepalive_time != grpc_core::Duration::Infinity()) {
|
552
549
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
553
550
|
t->keepalive_ping_timer_handle =
|
@@ -630,17 +627,20 @@ void grpc_chttp2_transport::ChannelzDataSource::AddData(
|
|
630
627
|
}
|
631
628
|
return "unknown";
|
632
629
|
}())
|
633
|
-
.Set("write_state",
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
630
|
+
.Set("write_state",
|
631
|
+
[t]() {
|
632
|
+
switch (t->write_state) {
|
633
|
+
case GRPC_CHTTP2_WRITE_STATE_IDLE:
|
634
|
+
return "idle";
|
635
|
+
case GRPC_CHTTP2_WRITE_STATE_WRITING:
|
636
|
+
return "writing";
|
637
|
+
case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
|
638
|
+
return "writing_with_more";
|
639
|
+
}
|
640
|
+
return "unknown";
|
641
|
+
}())
|
642
|
+
.Set("tarpit_extra_streams", t->extra_streams)
|
643
|
+
.Set("stream_map_size", t->stream_map.size()));
|
644
644
|
}),
|
645
645
|
absl::OkStatus());
|
646
646
|
});
|
@@ -695,6 +695,11 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
695
695
|
->CreateMemoryOwner()),
|
696
696
|
self_reservation(
|
697
697
|
memory_owner.MakeReservation(sizeof(grpc_chttp2_transport))),
|
698
|
+
// TODO(ctiller): clean this up so we don't need to RefAsSubclass
|
699
|
+
resource_quota_telemetry_storage(
|
700
|
+
memory_owner.telemetry_storage()
|
701
|
+
->RefAsSubclass<grpc_core::InstrumentStorage<
|
702
|
+
grpc_core::ResourceQuotaDomain>>()),
|
698
703
|
event_engine(
|
699
704
|
channel_args
|
700
705
|
.GetObjectRef<grpc_event_engine::experimental::EventEngine>()),
|
@@ -736,8 +741,8 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
736
741
|
}
|
737
742
|
}
|
738
743
|
|
739
|
-
|
740
|
-
|
744
|
+
GRPC_CHECK(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
|
745
|
+
GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
|
741
746
|
|
742
747
|
grpc_slice_buffer_init(&read_buffer);
|
743
748
|
if (is_client) {
|
@@ -849,7 +854,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
849
854
|
grpc_error_add_child(t->close_transport_on_writes_finished, error);
|
850
855
|
return;
|
851
856
|
}
|
852
|
-
|
857
|
+
GRPC_CHECK(!error.ok());
|
853
858
|
t->closed_with_error = error;
|
854
859
|
connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
|
855
860
|
"close_transport");
|
@@ -893,7 +898,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
893
898
|
while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
|
894
899
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
|
895
900
|
}
|
896
|
-
|
901
|
+
GRPC_CHECK(t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE);
|
897
902
|
if (t->interested_parties_until_recv_settings != nullptr) {
|
898
903
|
grpc_endpoint_delete_from_pollset_set(
|
899
904
|
t->ep.get(), t->interested_parties_until_recv_settings);
|
@@ -954,7 +959,7 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
|
|
954
959
|
arena(arena),
|
955
960
|
flow_control(&t->flow_control),
|
956
961
|
call_tracer_wrapper(this),
|
957
|
-
call_tracer(arena->GetContext<grpc_core::
|
962
|
+
call_tracer(arena->GetContext<grpc_core::CallTracer>()) {
|
958
963
|
t->streams_allocated.fetch_add(1, std::memory_order_relaxed);
|
959
964
|
if (server_data) {
|
960
965
|
id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
|
@@ -983,9 +988,9 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
983
988
|
}
|
984
989
|
}
|
985
990
|
|
986
|
-
|
991
|
+
GRPC_CHECK((write_closed && read_closed) || id == 0);
|
987
992
|
if (id != 0) {
|
988
|
-
|
993
|
+
GRPC_CHECK_EQ(t->stream_map.count(id), 0u);
|
989
994
|
}
|
990
995
|
|
991
996
|
grpc_slice_buffer_destroy(&frame_storage);
|
@@ -998,11 +1003,11 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
998
1003
|
}
|
999
1004
|
}
|
1000
1005
|
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
+
GRPC_CHECK_EQ(send_initial_metadata_finished, nullptr);
|
1007
|
+
GRPC_CHECK_EQ(send_trailing_metadata_finished, nullptr);
|
1008
|
+
GRPC_CHECK_EQ(recv_initial_metadata_ready, nullptr);
|
1009
|
+
GRPC_CHECK_EQ(recv_message_ready, nullptr);
|
1010
|
+
GRPC_CHECK_EQ(recv_trailing_metadata_finished, nullptr);
|
1006
1011
|
grpc_slice_buffer_destroy(&flow_controlled_buffer);
|
1007
1012
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, absl::OkStatus());
|
1008
1013
|
}
|
@@ -1035,7 +1040,7 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
|
|
1035
1040
|
return nullptr;
|
1036
1041
|
}
|
1037
1042
|
grpc_chttp2_stream* accepting = nullptr;
|
1038
|
-
|
1043
|
+
GRPC_CHECK_EQ(t->accepting_stream, nullptr);
|
1039
1044
|
t->accepting_stream = &accepting;
|
1040
1045
|
t->accept_stream_cb(t->accept_stream_cb_user_data, t,
|
1041
1046
|
reinterpret_cast<void*>(id));
|
@@ -1138,7 +1143,7 @@ static void write_action_begin_locked(
|
|
1138
1143
|
grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
|
1139
1144
|
grpc_error_handle /*error_ignored*/) {
|
1140
1145
|
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("write_action_begin_locked");
|
1141
|
-
|
1146
|
+
GRPC_CHECK(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
|
1142
1147
|
grpc_chttp2_begin_write_result r;
|
1143
1148
|
if (!t->closed_with_error.ok()) {
|
1144
1149
|
r.writing = false;
|
@@ -1152,7 +1157,7 @@ static void write_action_begin_locked(
|
|
1152
1157
|
begin_writing_desc(r.partial));
|
1153
1158
|
write_action(t.get(), std::move(r.tcp_call_tracers));
|
1154
1159
|
if (t->reading_paused_on_pending_induced_frames) {
|
1155
|
-
|
1160
|
+
GRPC_CHECK_EQ(t->num_pending_induced_frames, 0u);
|
1156
1161
|
// We had paused reading, because we had many induced frames (SETTINGS
|
1157
1162
|
// ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
|
1158
1163
|
// been able to flush qbuf, we can resume reading.
|
@@ -1403,7 +1408,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1403
1408
|
<< " allocating new grpc_chttp2_stream " << s << " to id "
|
1404
1409
|
<< t->next_stream_id;
|
1405
1410
|
|
1406
|
-
|
1411
|
+
GRPC_CHECK_EQ(s->id, 0u);
|
1407
1412
|
s->id = t->next_stream_id;
|
1408
1413
|
t->next_stream_id += 2;
|
1409
1414
|
|
@@ -1534,7 +1539,7 @@ static void send_initial_metadata_locked(
|
|
1534
1539
|
if (t->is_client && t->channelz_socket != nullptr) {
|
1535
1540
|
t->channelz_socket->RecordStreamStartedFromLocal();
|
1536
1541
|
}
|
1537
|
-
|
1542
|
+
GRPC_CHECK_EQ(s->send_initial_metadata_finished, nullptr);
|
1538
1543
|
on_complete->next_data.scratch |= t->closure_barrier_may_cover_write;
|
1539
1544
|
|
1540
1545
|
s->send_initial_metadata_finished = add_closure_barrier(on_complete);
|
@@ -1552,7 +1557,7 @@ static void send_initial_metadata_locked(
|
|
1552
1557
|
if (!s->write_closed) {
|
1553
1558
|
if (t->is_client) {
|
1554
1559
|
if (t->closed_with_error.ok()) {
|
1555
|
-
|
1560
|
+
GRPC_CHECK_EQ(s->id, 0u);
|
1556
1561
|
if (t->max_concurrent_streams_reject_on_client &&
|
1557
1562
|
t->stream_map.size() >=
|
1558
1563
|
t->settings.peer().max_concurrent_streams()) {
|
@@ -1585,7 +1590,7 @@ static void send_initial_metadata_locked(
|
|
1585
1590
|
false);
|
1586
1591
|
}
|
1587
1592
|
} else {
|
1588
|
-
|
1593
|
+
GRPC_CHECK_NE(s->id, 0u);
|
1589
1594
|
grpc_chttp2_mark_stream_writable(t, s);
|
1590
1595
|
if (!(op->send_message &&
|
1591
1596
|
(op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
|
@@ -1689,7 +1694,7 @@ static void send_trailing_metadata_locked(
|
|
1689
1694
|
grpc_transport_stream_op_batch* op, grpc_chttp2_stream* s,
|
1690
1695
|
grpc_transport_stream_op_batch_payload* op_payload,
|
1691
1696
|
grpc_chttp2_transport* t, grpc_closure* on_complete) {
|
1692
|
-
|
1697
|
+
GRPC_CHECK_EQ(s->send_trailing_metadata_finished, nullptr);
|
1693
1698
|
on_complete->next_data.scratch |= t->closure_barrier_may_cover_write;
|
1694
1699
|
s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
|
1695
1700
|
s->send_trailing_metadata =
|
@@ -1721,7 +1726,7 @@ static void send_trailing_metadata_locked(
|
|
1721
1726
|
static void recv_initial_metadata_locked(
|
1722
1727
|
grpc_chttp2_stream* s, grpc_transport_stream_op_batch_payload* op_payload,
|
1723
1728
|
grpc_chttp2_transport* t) {
|
1724
|
-
|
1729
|
+
GRPC_CHECK_EQ(s->recv_initial_metadata_ready, nullptr);
|
1725
1730
|
s->recv_initial_metadata_ready =
|
1726
1731
|
op_payload->recv_initial_metadata.recv_initial_metadata_ready;
|
1727
1732
|
s->recv_initial_metadata =
|
@@ -1737,7 +1742,7 @@ static void recv_initial_metadata_locked(
|
|
1737
1742
|
static void recv_message_locked(
|
1738
1743
|
grpc_chttp2_stream* s, grpc_transport_stream_op_batch_payload* op_payload,
|
1739
1744
|
grpc_chttp2_transport* t) {
|
1740
|
-
|
1745
|
+
GRPC_CHECK_EQ(s->recv_message_ready, nullptr);
|
1741
1746
|
s->recv_message_ready = op_payload->recv_message.recv_message_ready;
|
1742
1747
|
s->recv_message = op_payload->recv_message.recv_message;
|
1743
1748
|
s->recv_message->emplace();
|
@@ -1750,9 +1755,9 @@ static void recv_message_locked(
|
|
1750
1755
|
static void recv_trailing_metadata_locked(
|
1751
1756
|
grpc_chttp2_stream* s, grpc_transport_stream_op_batch_payload* op_payload,
|
1752
1757
|
grpc_chttp2_transport* t) {
|
1753
|
-
|
1758
|
+
GRPC_CHECK_EQ(s->collecting_stats, nullptr);
|
1754
1759
|
s->collecting_stats = op_payload->recv_trailing_metadata.collect_stats;
|
1755
|
-
|
1760
|
+
GRPC_CHECK_EQ(s->recv_trailing_metadata_finished, nullptr);
|
1756
1761
|
s->recv_trailing_metadata_finished =
|
1757
1762
|
op_payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
1758
1763
|
s->recv_trailing_metadata =
|
@@ -1776,7 +1781,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1776
1781
|
// client_channel filter.)
|
1777
1782
|
if (!t->is_client && !grpc_core::IsCallTracerInTransportEnabled() &&
|
1778
1783
|
op->send_initial_metadata) {
|
1779
|
-
s->call_tracer = s->arena->GetContext<grpc_core::
|
1784
|
+
s->call_tracer = s->arena->GetContext<grpc_core::CallTracer>();
|
1780
1785
|
}
|
1781
1786
|
if (GRPC_TRACE_FLAG_ENABLED(http)) {
|
1782
1787
|
LOG(INFO) << "perform_stream_op_locked[s=" << s << "; op=" << op
|
@@ -1844,14 +1849,14 @@ void grpc_chttp2_transport::PerformStreamOp(
|
|
1844
1849
|
|
1845
1850
|
if (!is_client) {
|
1846
1851
|
if (op->send_initial_metadata) {
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
1852
|
+
GRPC_CHECK(!op->payload->send_initial_metadata.send_initial_metadata
|
1853
|
+
->get(grpc_core::GrpcTimeoutMetadata())
|
1854
|
+
.has_value());
|
1850
1855
|
}
|
1851
1856
|
if (op->send_trailing_metadata) {
|
1852
|
-
|
1853
|
-
|
1854
|
-
|
1857
|
+
GRPC_CHECK(!op->payload->send_trailing_metadata.send_trailing_metadata
|
1858
|
+
->get(grpc_core::GrpcTimeoutMetadata())
|
1859
|
+
.has_value());
|
1855
1860
|
}
|
1856
1861
|
}
|
1857
1862
|
|
@@ -1942,8 +1947,8 @@ void grpc_chttp2_retry_initiate_ping(
|
|
1942
1947
|
static void retry_initiate_ping_locked(
|
1943
1948
|
grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
|
1944
1949
|
GRPC_UNUSED grpc_error_handle error) {
|
1945
|
-
|
1946
|
-
|
1950
|
+
GRPC_DCHECK(error.ok());
|
1951
|
+
GRPC_CHECK(t->delayed_ping_timer_handle != TaskHandle::kInvalid);
|
1947
1952
|
t->delayed_ping_timer_handle = TaskHandle::kInvalid;
|
1948
1953
|
grpc_chttp2_initiate_write(t.get(),
|
1949
1954
|
GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
|
@@ -2280,7 +2285,7 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
|
|
2280
2285
|
} else {
|
2281
2286
|
if (s->frame_storage.length != 0) {
|
2282
2287
|
while (true) {
|
2283
|
-
|
2288
|
+
GRPC_CHECK_GT(s->frame_storage.length, 0u);
|
2284
2289
|
int64_t min_progress_size;
|
2285
2290
|
auto r = grpc_deframe_unprocessed_incoming_frames(
|
2286
2291
|
s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
|
@@ -2362,7 +2367,7 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
|
2362
2367
|
static grpc_chttp2_transport::RemovedStreamHandle remove_stream(
|
2363
2368
|
grpc_chttp2_transport* t, uint32_t id, grpc_error_handle error) {
|
2364
2369
|
grpc_chttp2_stream* s = t->stream_map.extract(id).mapped();
|
2365
|
-
|
2370
|
+
GRPC_DCHECK(s);
|
2366
2371
|
if (t->incoming_stream == s) {
|
2367
2372
|
t->incoming_stream = nullptr;
|
2368
2373
|
grpc_chttp2_parsing_become_skip_parser(t);
|
@@ -2391,18 +2396,14 @@ static grpc_chttp2_transport::RemovedStreamHandle remove_stream(
|
|
2391
2396
|
namespace grpc_core {
|
2392
2397
|
namespace {
|
2393
2398
|
|
2394
|
-
Duration TarpitDuration(grpc_chttp2_transport* t) {
|
2395
|
-
return Duration::Milliseconds(absl::LogUniform<int>(
|
2396
|
-
SharedBitGen(), t->min_tarpit_duration_ms, t->max_tarpit_duration_ms));
|
2397
|
-
}
|
2398
|
-
|
2399
2399
|
template <typename F>
|
2400
2400
|
void MaybeTarpit(grpc_chttp2_transport* t, bool tarpit, F fn) {
|
2401
2401
|
if (!tarpit || !t->allow_tarpit || t->is_client) {
|
2402
2402
|
fn(t);
|
2403
2403
|
return;
|
2404
2404
|
}
|
2405
|
-
const auto duration =
|
2405
|
+
const auto duration =
|
2406
|
+
TarpitDuration(t->min_tarpit_duration_ms, t->max_tarpit_duration_ms);
|
2406
2407
|
t->event_engine->RunAfter(
|
2407
2408
|
duration, [t = t->Ref(), fn = std::move(fn)]() mutable {
|
2408
2409
|
ExecCtx exec_ctx;
|
@@ -2621,8 +2622,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2621
2622
|
grpc_error_get_status(error, s->deadline, &grpc_status, &message, nullptr,
|
2622
2623
|
nullptr);
|
2623
2624
|
|
2624
|
-
|
2625
|
-
|
2625
|
+
GRPC_CHECK_GE(grpc_status, 0);
|
2626
|
+
GRPC_CHECK_LT((int)grpc_status, 100);
|
2626
2627
|
|
2627
2628
|
auto remove_stream_handle = grpc_chttp2_mark_stream_closed(t, s, 1, 1, error);
|
2628
2629
|
grpc_core::MaybeTarpit(
|
@@ -2663,7 +2664,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2663
2664
|
*p++ = '2';
|
2664
2665
|
*p++ = '0';
|
2665
2666
|
*p++ = '0';
|
2666
|
-
|
2667
|
+
GRPC_CHECK(p == GRPC_SLICE_END_PTR(http_status_hdr));
|
2667
2668
|
len += static_cast<uint32_t> GRPC_SLICE_LENGTH(http_status_hdr);
|
2668
2669
|
|
2669
2670
|
content_type_hdr = GRPC_SLICE_MALLOC(31);
|
@@ -2699,7 +2700,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2699
2700
|
*p++ = 'r';
|
2700
2701
|
*p++ = 'p';
|
2701
2702
|
*p++ = 'c';
|
2702
|
-
|
2703
|
+
GRPC_CHECK(p == GRPC_SLICE_END_PTR(content_type_hdr));
|
2703
2704
|
len += static_cast<uint32_t> GRPC_SLICE_LENGTH(content_type_hdr);
|
2704
2705
|
}
|
2705
2706
|
|
@@ -2726,11 +2727,11 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2726
2727
|
*p++ = static_cast<uint8_t>('0' + (grpc_status / 10));
|
2727
2728
|
*p++ = static_cast<uint8_t>('0' + (grpc_status % 10));
|
2728
2729
|
}
|
2729
|
-
|
2730
|
+
GRPC_CHECK(p == GRPC_SLICE_END_PTR(status_hdr));
|
2730
2731
|
len += static_cast<uint32_t> GRPC_SLICE_LENGTH(status_hdr);
|
2731
2732
|
|
2732
2733
|
size_t msg_len = message.length();
|
2733
|
-
|
2734
|
+
GRPC_CHECK(msg_len <= UINT32_MAX);
|
2734
2735
|
grpc_core::VarintWriter<1> msg_len_writer(
|
2735
2736
|
static_cast<uint32_t>(msg_len));
|
2736
2737
|
message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length());
|
@@ -2751,7 +2752,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2751
2752
|
*p++ = 'e';
|
2752
2753
|
msg_len_writer.Write(0, p);
|
2753
2754
|
p += msg_len_writer.length();
|
2754
|
-
|
2755
|
+
GRPC_CHECK(p == GRPC_SLICE_END_PTR(message_pfx));
|
2755
2756
|
len += static_cast<uint32_t> GRPC_SLICE_LENGTH(message_pfx);
|
2756
2757
|
len += static_cast<uint32_t>(msg_len);
|
2757
2758
|
|
@@ -2767,7 +2768,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2767
2768
|
*p++ = static_cast<uint8_t>(id >> 16);
|
2768
2769
|
*p++ = static_cast<uint8_t>(id >> 8);
|
2769
2770
|
*p++ = static_cast<uint8_t>(id);
|
2770
|
-
|
2771
|
+
GRPC_CHECK(p == GRPC_SLICE_END_PTR(hdr));
|
2771
2772
|
|
2772
2773
|
grpc_slice_buffer_add(&t->qbuf, hdr);
|
2773
2774
|
if (!sent_initial_metadata) {
|
@@ -2830,28 +2831,33 @@ static void WithUrgency(grpc_chttp2_transport* t,
|
|
2830
2831
|
void grpc_chttp2_act_on_flowctl_action(
|
2831
2832
|
const grpc_core::chttp2::FlowControlAction& action,
|
2832
2833
|
grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
|
2833
|
-
WithUrgency(t, action.send_stream_update(),
|
2834
|
-
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
|
2834
|
+
WithUrgency(/*t=*/t, /*urgency=*/action.send_stream_update(),
|
2835
|
+
/*reason=*/GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
|
2836
|
+
/*action=*/[t, s]() {
|
2835
2837
|
if (s->id != 0 && !s->read_closed) {
|
2836
2838
|
grpc_chttp2_mark_stream_writable(t, s);
|
2837
2839
|
}
|
2838
2840
|
});
|
2839
|
-
WithUrgency(t, action.send_transport_update(),
|
2840
|
-
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL,
|
2841
|
-
|
2842
|
-
|
2841
|
+
WithUrgency(/*t=*/t, /*urgency=*/action.send_transport_update(),
|
2842
|
+
/*reason=*/GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL,
|
2843
|
+
/*action=*/[]() {});
|
2844
|
+
WithUrgency(/*t=*/t, /*urgency=*/action.send_initial_window_update(),
|
2845
|
+
/*reason=*/GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS,
|
2846
|
+
/*action=*/[t, &action]() {
|
2843
2847
|
t->settings.mutable_local().SetInitialWindowSize(
|
2844
2848
|
action.initial_window_size());
|
2845
2849
|
});
|
2846
2850
|
WithUrgency(
|
2847
|
-
t, action.send_max_frame_size_update(),
|
2848
|
-
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS,
|
2851
|
+
/*t=*/t, /*urgency=*/action.send_max_frame_size_update(),
|
2852
|
+
/*reason=*/GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS,
|
2853
|
+
/*action=*/[t, &action]() {
|
2849
2854
|
t->settings.mutable_local().SetMaxFrameSize(action.max_frame_size());
|
2850
2855
|
});
|
2851
2856
|
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
2852
2857
|
WithUrgency(
|
2853
|
-
t, action.preferred_rx_crypto_frame_size_update(),
|
2854
|
-
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS,
|
2858
|
+
/*t=*/t, /*urgency=*/action.preferred_rx_crypto_frame_size_update(),
|
2859
|
+
/*reason=*/GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS,
|
2860
|
+
/*action=*/[t, &action]() {
|
2855
2861
|
t->settings.mutable_local().SetPreferredReceiveCryptoMessageSize(
|
2856
2862
|
action.preferred_rx_crypto_frame_size());
|
2857
2863
|
});
|
@@ -3078,7 +3084,7 @@ static void finish_bdp_ping_locked(
|
|
3078
3084
|
t->flow_control.bdp_estimator()->CompletePing();
|
3079
3085
|
grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t.get(),
|
3080
3086
|
nullptr);
|
3081
|
-
|
3087
|
+
GRPC_CHECK(t->next_bdp_ping_timer_handle == TaskHandle::kInvalid);
|
3082
3088
|
t->next_bdp_ping_timer_handle =
|
3083
3089
|
t->event_engine->RunAfter(next_ping - grpc_core::Timestamp::Now(), [t] {
|
3084
3090
|
grpc_core::ExecCtx exec_ctx;
|
@@ -3096,7 +3102,7 @@ static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t) {
|
|
3096
3102
|
static void next_bdp_ping_timer_expired_locked(
|
3097
3103
|
grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
|
3098
3104
|
GRPC_UNUSED grpc_error_handle error) {
|
3099
|
-
|
3105
|
+
GRPC_DCHECK(error.ok());
|
3100
3106
|
t->next_bdp_ping_timer_handle = TaskHandle::kInvalid;
|
3101
3107
|
if (t->flow_control.bdp_estimator()->accumulator() == 0) {
|
3102
3108
|
// Block the bdp ping till we receive more data.
|
@@ -3164,9 +3170,9 @@ static void init_keepalive_ping(
|
|
3164
3170
|
static void init_keepalive_ping_locked(
|
3165
3171
|
grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
|
3166
3172
|
GRPC_UNUSED grpc_error_handle error) {
|
3167
|
-
|
3168
|
-
|
3169
|
-
|
3173
|
+
GRPC_DCHECK(error.ok());
|
3174
|
+
GRPC_CHECK(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
|
3175
|
+
GRPC_CHECK(t->keepalive_ping_timer_handle != TaskHandle::kInvalid);
|
3170
3176
|
t->keepalive_ping_timer_handle = TaskHandle::kInvalid;
|
3171
3177
|
grpc_core::Timestamp now = grpc_core::Timestamp::Now();
|
3172
3178
|
grpc_core::Timestamp adjusted_keepalive_timestamp = std::exchange(
|
@@ -3217,7 +3223,7 @@ static void finish_keepalive_ping_locked(
|
|
3217
3223
|
<< ": Finish keepalive ping";
|
3218
3224
|
}
|
3219
3225
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
3220
|
-
|
3226
|
+
GRPC_CHECK(t->keepalive_ping_timer_handle == TaskHandle::kInvalid);
|
3221
3227
|
t->keepalive_ping_timer_handle =
|
3222
3228
|
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
3223
3229
|
grpc_core::ExecCtx exec_ctx;
|
@@ -3349,7 +3355,8 @@ static void benign_reclaimer_locked(
|
|
3349
3355
|
if (error.ok() && t->stream_map.empty()) {
|
3350
3356
|
// Channel with no active streams: send a goaway to try and make it
|
3351
3357
|
// disconnect cleanly
|
3352
|
-
|
3358
|
+
t->resource_quota_telemetry_storage->Increment(
|
3359
|
+
grpc_core::ResourceQuotaDomain::kConnectionsDropped);
|
3353
3360
|
GRPC_TRACE_LOG(resource_quota, INFO)
|
3354
3361
|
<< "HTTP2: " << t->peer_string.as_string_view()
|
3355
3362
|
<< " - send goaway to free memory";
|
@@ -3380,7 +3387,8 @@ static void destructive_reclaimer_locked(
|
|
3380
3387
|
GRPC_TRACE_LOG(resource_quota, INFO)
|
3381
3388
|
<< "HTTP2: " << t->peer_string.as_string_view()
|
3382
3389
|
<< " - abandon stream id " << s->id;
|
3383
|
-
|
3390
|
+
t->resource_quota_telemetry_storage->Increment(
|
3391
|
+
grpc_core::ResourceQuotaDomain::kCallsDropped);
|
3384
3392
|
grpc_chttp2_cancel_stream(
|
3385
3393
|
t.get(), s,
|
3386
3394
|
grpc_error_set_int(
|
@@ -28,7 +28,6 @@
|
|
28
28
|
#include <tuple>
|
29
29
|
#include <vector>
|
30
30
|
|
31
|
-
#include "absl/log/check.h"
|
32
31
|
#include "absl/log/log.h"
|
33
32
|
#include "absl/strings/str_cat.h"
|
34
33
|
#include "absl/strings/str_format.h"
|
@@ -37,6 +36,7 @@
|
|
37
36
|
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
38
37
|
#include "src/core/lib/experiments/experiments.h"
|
39
38
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
39
|
+
#include "src/core/util/grpc_check.h"
|
40
40
|
#include "src/core/util/useful.h"
|
41
41
|
|
42
42
|
namespace grpc_core {
|
@@ -333,7 +333,7 @@ void StreamFlowControl::SentUpdate(uint32_t announce) {
|
|
333
333
|
TransportFlowControl::IncomingUpdateContext tfc_upd(tfc_);
|
334
334
|
pending_size_ = std::nullopt;
|
335
335
|
tfc_upd.UpdateAnnouncedWindowDelta(&announced_window_delta_, announce);
|
336
|
-
|
336
|
+
GRPC_CHECK_EQ(DesiredAnnounceSize(), 0u);
|
337
337
|
std::ignore = tfc_upd.MakeAction();
|
338
338
|
}
|
339
339
|
|
@@ -383,7 +383,7 @@ FlowControlAction StreamFlowControl::UpdateAction(FlowControlAction action) {
|
|
383
383
|
|
384
384
|
void StreamFlowControl::IncomingUpdateContext::SetPendingSize(
|
385
385
|
int64_t pending_size) {
|
386
|
-
|
386
|
+
GRPC_CHECK_GE(pending_size, 0);
|
387
387
|
sfc_->pending_size_ = pending_size;
|
388
388
|
}
|
389
389
|
|
@@ -29,7 +29,6 @@
|
|
29
29
|
#include <utility>
|
30
30
|
|
31
31
|
#include "absl/functional/function_ref.h"
|
32
|
-
#include "absl/log/check.h"
|
33
32
|
#include "absl/status/status.h"
|
34
33
|
#include "absl/strings/string_view.h"
|
35
34
|
#include "src/core/channelz/property_list.h"
|
@@ -38,6 +37,7 @@
|
|
38
37
|
#include "src/core/lib/debug/trace.h"
|
39
38
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
40
39
|
#include "src/core/lib/transport/bdp_estimator.h"
|
40
|
+
#include "src/core/util/grpc_check.h"
|
41
41
|
#include "src/core/util/time.h"
|
42
42
|
|
43
43
|
namespace grpc {
|
@@ -59,10 +59,6 @@ static constexpr const uint32_t kMaxInitialWindowSize = (1u << 30);
|
|
59
59
|
static constexpr const int64_t kMaxWindowDelta = (1u << 20);
|
60
60
|
static constexpr const int kDefaultPreferredRxCryptoFrameSize = INT_MAX;
|
61
61
|
|
62
|
-
// TODO(ctiller): clean up when flow_control_fixes is enabled by default
|
63
|
-
static constexpr uint32_t kFrameSize = 1024 * 1024;
|
64
|
-
static constexpr const uint32_t kMinInitialWindowSize = 128;
|
65
|
-
|
66
62
|
class TransportFlowControl;
|
67
63
|
class StreamFlowControl;
|
68
64
|
|
@@ -94,6 +90,15 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
94
90
|
Urgency preferred_rx_crypto_frame_size_update() const {
|
95
91
|
return preferred_rx_crypto_frame_size_update_;
|
96
92
|
}
|
93
|
+
bool AnyUpdateImmediately() const {
|
94
|
+
return send_stream_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
95
|
+
send_transport_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
96
|
+
send_initial_window_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
97
|
+
send_max_frame_size_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
98
|
+
preferred_rx_crypto_frame_size_update_ ==
|
99
|
+
Urgency::UPDATE_IMMEDIATELY;
|
100
|
+
}
|
101
|
+
|
97
102
|
uint32_t initial_window_size() const { return initial_window_size_; }
|
98
103
|
uint32_t max_frame_size() const { return max_frame_size_; }
|
99
104
|
uint32_t preferred_rx_crypto_frame_size() const {
|
@@ -130,7 +135,7 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
130
135
|
static const char* UrgencyString(Urgency u);
|
131
136
|
std::string DebugString() const;
|
132
137
|
|
133
|
-
void AssertEmpty() {
|
138
|
+
void AssertEmpty() { GRPC_CHECK(*this == FlowControlAction()); }
|
134
139
|
|
135
140
|
bool operator==(const FlowControlAction& other) const {
|
136
141
|
return send_stream_update_ == other.send_stream_update_ &&
|
@@ -193,7 +198,7 @@ class TransportFlowControl final {
|
|
193
198
|
class IncomingUpdateContext {
|
194
199
|
public:
|
195
200
|
explicit IncomingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
|
196
|
-
~IncomingUpdateContext() {
|
201
|
+
~IncomingUpdateContext() { GRPC_CHECK_EQ(tfc_, nullptr); }
|
197
202
|
|
198
203
|
IncomingUpdateContext(const IncomingUpdateContext&) = delete;
|
199
204
|
IncomingUpdateContext& operator=(const IncomingUpdateContext&) = delete;
|
@@ -0,0 +1,60 @@
|
|
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_FLOW_CONTROL_MANAGER_H
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
|
21
|
+
|
22
|
+
#include <cstdint>
|
23
|
+
#include <vector>
|
24
|
+
|
25
|
+
#include "absl/container/flat_hash_map.h"
|
26
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
27
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
28
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
29
|
+
|
30
|
+
namespace grpc_core {
|
31
|
+
namespace http2 {
|
32
|
+
|
33
|
+
constexpr chttp2::FlowControlAction::Urgency kNoActionNeeded =
|
34
|
+
chttp2::FlowControlAction::Urgency::NO_ACTION_NEEDED;
|
35
|
+
constexpr chttp2::FlowControlAction::Urgency kUpdateImmediately =
|
36
|
+
chttp2::FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
37
|
+
|
38
|
+
// Function to update local settings based on FlowControlAction.
|
39
|
+
// This function does the settings related tasks equivalent to
|
40
|
+
// grpc_chttp2_act_on_flowctl_action in chttp2_transport.cc
|
41
|
+
inline void ActOnFlowControlActionSettings(
|
42
|
+
const chttp2::FlowControlAction& action, Http2Settings& local_settings,
|
43
|
+
const bool enable_preferred_rx_crypto_frame_advertisement) {
|
44
|
+
if (action.send_initial_window_update() != kNoActionNeeded) {
|
45
|
+
local_settings.SetInitialWindowSize(action.initial_window_size());
|
46
|
+
}
|
47
|
+
if (action.send_max_frame_size_update() != kNoActionNeeded) {
|
48
|
+
local_settings.SetMaxFrameSize(action.max_frame_size());
|
49
|
+
}
|
50
|
+
if (enable_preferred_rx_crypto_frame_advertisement &&
|
51
|
+
action.preferred_rx_crypto_frame_size_update() != kNoActionNeeded) {
|
52
|
+
local_settings.SetPreferredReceiveCryptoMessageSize(
|
53
|
+
action.preferred_rx_crypto_frame_size());
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
} // namespace http2
|
58
|
+
} // namespace grpc_core
|
59
|
+
|
60
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
|