grpc 1.76.0 → 1.78.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +11 -5
- data/include/grpc/credentials.h +6 -1
- data/include/grpc/event_engine/memory_allocator.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +5 -0
- data/include/grpc/support/metrics.h +7 -1
- data/src/core/call/call_filters.cc +1 -1
- data/src/core/call/call_filters.h +175 -1
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +27 -5
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +43 -5
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +4 -4
- data/src/core/call/interception_chain.h +7 -6
- data/src/core/call/metadata_batch.cc +49 -55
- data/src/core/call/metadata_batch.h +7 -6
- data/src/core/call/metadata_info.cc +1 -1
- data/src/core/call/parsed_metadata.h +2 -2
- data/src/core/call/request_buffer.cc +1 -1
- data/src/core/call/security_context.cc +1 -1
- data/src/core/call/security_context.h +1 -1
- data/src/core/call/server_call.cc +1 -1
- data/src/core/call/server_call.h +5 -3
- data/src/core/call/simple_slice_based_metadata.h +1 -1
- data/src/core/call/status_util.cc +1 -1
- data/src/core/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +3 -3
- data/src/core/channelz/channelz.cc +13 -11
- data/src/core/channelz/channelz.h +41 -6
- data/src/core/channelz/channelz_registry.cc +2 -2
- data/src/core/channelz/channelz_registry.h +42 -2
- data/src/core/channelz/property_list.h +6 -4
- data/src/core/channelz/v2tov1/convert.cc +6 -6
- data/src/core/channelz/v2tov1/legacy_api.cc +4 -5
- data/src/core/channelz/v2tov1/property_list.cc +1 -1
- data/src/core/channelz/ztrace_collector.h +14 -2
- data/src/core/client_channel/backup_poller.cc +2 -2
- data/src/core/client_channel/buffered_call.cc +140 -0
- data/src/core/client_channel/buffered_call.h +104 -0
- data/src/core/client_channel/client_channel.cc +124 -71
- data/src/core/client_channel/client_channel.h +8 -11
- data/src/core/client_channel/client_channel_factory.h +1 -1
- data/src/core/client_channel/client_channel_filter.cc +393 -663
- data/src/core/client_channel/client_channel_filter.h +57 -150
- data/src/core/client_channel/client_channel_internal.h +5 -1
- data/src/core/client_channel/client_channel_service_config.cc +43 -3
- data/src/core/client_channel/client_channel_service_config.h +12 -1
- data/src/core/client_channel/config_selector.h +2 -2
- data/src/core/client_channel/connector.h +2 -0
- data/src/core/client_channel/dynamic_filters.cc +2 -2
- data/src/core/client_channel/global_subchannel_pool.h +1 -1
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +3 -5
- data/src/core/client_channel/load_balanced_call_destination.h +1 -1
- data/src/core/client_channel/retry_filter.cc +2 -2
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
- data/src/core/client_channel/retry_service_config.cc +3 -3
- data/src/core/client_channel/retry_service_config.h +1 -1
- data/src/core/client_channel/subchannel.cc +106 -17
- data/src/core/client_channel/subchannel.h +24 -8
- data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
- data/src/core/client_channel/subchannel_pool_interface.h +1 -1
- data/src/core/client_channel/subchannel_stream_client.cc +1 -1
- data/src/core/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/config/config_vars.cc +8 -2
- data/src/core/config/config_vars.h +5 -0
- data/src/core/config/core_configuration.h +1 -1
- data/src/core/config/load_config.cc +1 -1
- data/src/core/credentials/call/call_credentials.h +2 -2
- data/src/core/credentials/call/call_creds_registry.h +1 -1
- data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
- data/src/core/credentials/call/call_creds_util.cc +3 -3
- data/src/core/credentials/call/composite/composite_call_credentials.cc +2 -2
- data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +6 -6
- data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
- data/src/core/credentials/call/external/external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +6 -6
- data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
- data/src/core/credentials/call/iam/iam_credentials.cc +2 -2
- data/src/core/credentials/call/iam/iam_credentials.h +1 -1
- data/src/core/credentials/call/json_util.cc +1 -1
- data/src/core/credentials/call/jwt/json_token.cc +4 -4
- data/src/core/credentials/call/jwt/jwt_credentials.cc +3 -3
- data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
- data/src/core/credentials/call/jwt/jwt_verifier.cc +5 -5
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
- data/src/core/credentials/call/jwt_util.cc +3 -3
- data/src/core/credentials/call/jwt_util.h +1 -1
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +29 -60
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
- data/src/core/credentials/call/plugin/plugin_credentials.cc +4 -4
- data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
- data/src/core/credentials/transport/alts/alts_credentials.cc +3 -3
- data/src/core/credentials/transport/alts/alts_security_connector.cc +3 -3
- data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +1 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +1 -1
- data/src/core/credentials/transport/channel_creds_registry.h +1 -1
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/composite/composite_channel_credentials.cc +2 -2
- data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_security_connector.cc +5 -5
- data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +5 -11
- data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
- data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
- data/src/core/credentials/transport/local/local_security_connector.cc +5 -5
- data/src/core/credentials/transport/security_connector.cc +1 -1
- data/src/core/credentials/transport/security_connector.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +5 -5
- data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
- data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
- data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
- data/src/core/credentials/transport/tls/ssl_utils.cc +4 -4
- data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +1 -1
- data/src/core/credentials/transport/tls/tls_security_connector.cc +4 -4
- data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
- data/src/core/credentials/transport/transport_credentials.cc +1 -1
- data/src/core/credentials/transport/transport_credentials.h +2 -2
- data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +5 -5
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
- data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
- data/src/core/ext/filters/http/client_authority_filter.h +4 -1
- data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/compression_filter.h +21 -2
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +50 -37
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -17
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +210 -60
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +39 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +213 -78
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +46 -1
- data/src/core/ext/transport/chttp2/transport/frame.cc +147 -21
- data/src/core/ext/transport/chttp2/transport/frame.h +44 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
- data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +175 -51
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1177 -511
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +264 -174
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -16
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +320 -82
- data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +286 -7
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +187 -19
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +57 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +25 -5
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
- data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +24 -15
- data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +7 -3
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
- data/src/core/ext/transport/chttp2/transport/stream.h +139 -59
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +225 -98
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +5 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +27 -11
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -2
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +8 -5
- data/src/core/filter/auth/auth_filters.h +7 -1
- data/src/core/filter/auth/client_auth_filter.cc +2 -2
- data/src/core/filter/auth/server_auth_filter.cc +3 -3
- data/src/core/filter/blackboard.h +2 -2
- data/src/core/filter/filter_args.h +40 -2
- data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
- data/src/core/handshaker/handshaker.cc +5 -5
- data/src/core/handshaker/handshaker.h +2 -2
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +11 -11
- data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper_registry.h +1 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +4 -4
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +7 -7
- data/src/core/handshaker/security/secure_endpoint.cc +15 -5
- data/src/core/handshaker/security/security_handshaker.cc +8 -5
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
- data/src/core/lib/address_utils/parse_address.cc +5 -5
- data/src/core/lib/address_utils/parse_address.h +2 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
- data/src/core/lib/channel/channel_args.cc +1 -1
- data/src/core/lib/channel/channel_args.h +2 -2
- data/src/core/lib/channel/channel_stack.cc +22 -21
- data/src/core/lib/channel/channel_stack.h +5 -3
- data/src/core/lib/channel/channel_stack_builder.cc +8 -4
- data/src/core/lib/channel/channel_stack_builder.h +10 -9
- data/src/core/lib/channel/channel_stack_builder_impl.cc +7 -13
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.cc +63 -8
- data/src/core/lib/channel/promise_based_filter.h +23 -8
- data/src/core/lib/compression/compression_internal.cc +4 -4
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +1 -1
- data/src/core/lib/debug/trace.cc +2 -5
- data/src/core/lib/debug/trace.h +10 -0
- data/src/core/lib/debug/trace_flags.cc +2 -2
- data/src/core/lib/debug/trace_flags.h +1 -1
- data/src/core/lib/event_engine/ares_resolver.cc +8 -8
- data/src/core/lib/event_engine/ares_resolver.h +4 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
- data/src/core/lib/event_engine/default_event_engine.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +1 -1
- data/src/core/lib/event_engine/extensions/channelz.h +1 -1
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
- data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
- data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
- data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +6 -6
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +7 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +4 -4
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -4
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
- data/src/core/lib/event_engine/utils.cc +3 -3
- data/src/core/lib/event_engine/utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
- data/src/core/lib/event_engine/windows/iocp.cc +1 -1
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
- data/src/core/lib/event_engine/windows/win_socket.cc +1 -1
- data/src/core/lib/event_engine/windows/win_socket.h +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +5 -5
- data/src/core/lib/event_engine/windows/windows_engine.cc +4 -4
- data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
- data/src/core/lib/experiments/config.cc +4 -4
- data/src/core/lib/experiments/experiments.cc +174 -48
- data/src/core/lib/experiments/experiments.h +76 -24
- data/src/core/lib/iomgr/buffer_list.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/closure.h +2 -2
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +1 -1
- data/src/core/lib/iomgr/error.h +2 -2
- data/src/core/lib/iomgr/error_cfstream.cc +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +4 -4
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -5
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +1 -1
- data/src/core/lib/iomgr/polling_entity.cc +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +1 -1
- data/src/core/lib/iomgr/resolve_address.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_posix.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +20 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_windows.cc +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +3 -3
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/vsock.h +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/promise/activity.cc +2 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +3 -3
- data/src/core/lib/promise/arena_promise.h +47 -6
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/join_state.h +1 -1
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/detail/promise_like.h +1 -1
- data/src/core/lib/promise/detail/seq_state.h +3 -3
- data/src/core/lib/promise/detail/status.h +1 -1
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
- data/src/core/lib/promise/for_each.h +3 -3
- data/src/core/lib/promise/if.h +1 -1
- data/src/core/lib/promise/inter_activity_latch.h +3 -3
- data/src/core/lib/promise/inter_activity_mutex.h +1 -1
- data/src/core/lib/promise/interceptor_list.h +3 -3
- data/src/core/lib/promise/latch.h +2 -2
- data/src/core/lib/promise/loop.h +2 -2
- data/src/core/lib/promise/map.h +2 -2
- data/src/core/lib/promise/mpsc.cc +5 -4
- data/src/core/lib/promise/observable.h +2 -2
- data/src/core/lib/promise/party.cc +14 -8
- data/src/core/lib/promise/party.h +11 -4
- data/src/core/lib/promise/pipe.h +16 -2
- data/src/core/lib/promise/poll.h +2 -2
- data/src/core/lib/promise/promise.h +2 -2
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +2 -2
- data/src/core/lib/promise/try_join.h +3 -3
- data/src/core/lib/promise/try_seq.h +3 -3
- data/src/core/lib/promise/wait_set.h +2 -2
- data/src/core/lib/resource_quota/api.cc +1 -1
- data/src/core/lib/resource_quota/arena.cc +1 -1
- data/src/core/lib/resource_quota/connection_quota.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +3 -3
- data/src/core/lib/resource_quota/memory_quota.h +9 -5
- data/src/core/lib/resource_quota/periodic_update.h +1 -1
- data/src/core/lib/resource_quota/resource_quota.cc +8 -0
- data/src/core/lib/resource_quota/resource_quota.h +2 -1
- data/src/core/lib/resource_quota/stream_quota.cc +22 -0
- data/src/core/lib/resource_quota/stream_quota.h +31 -0
- data/src/core/lib/resource_quota/telemetry.h +1 -0
- data/src/core/lib/resource_quota/thread_quota.h +1 -1
- data/src/core/lib/security/authorization/audit_logging.cc +3 -3
- data/src/core/lib/security/authorization/audit_logging.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
- data/src/core/lib/security/authorization/matchers.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +1 -1
- data/src/core/lib/slice/percent_encoding.cc +1 -1
- data/src/core/lib/slice/slice.cc +1 -1
- data/src/core/lib/slice/slice.h +2 -2
- data/src/core/lib/slice/slice_buffer.cc +1 -1
- data/src/core/lib/slice/slice_internal.h +1 -1
- data/src/core/lib/surface/call.cc +42 -14
- data/src/core/lib/surface/call.h +12 -5
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/call_utils.cc +5 -5
- data/src/core/lib/surface/call_utils.h +83 -18
- data/src/core/lib/surface/channel.cc +2 -1
- data/src/core/lib/surface/channel.h +13 -3
- data/src/core/lib/surface/channel_create.cc +2 -2
- data/src/core/lib/surface/channel_create.h +1 -1
- data/src/core/lib/surface/channel_init.cc +5 -5
- data/src/core/lib/surface/channel_init.h +4 -2
- data/src/core/lib/surface/completion_queue.cc +4 -4
- data/src/core/lib/surface/filter_stack_call.cc +13 -8
- data/src/core/lib/surface/filter_stack_call.h +3 -3
- data/src/core/lib/surface/init.cc +4 -4
- data/src/core/lib/surface/lame_client.cc +2 -2
- data/src/core/lib/surface/lame_client.h +3 -3
- data/src/core/lib/surface/legacy_channel.cc +3 -3
- data/src/core/lib/surface/legacy_channel.h +1 -1
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/validate_metadata.h +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/connectivity_state.h +2 -2
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/promise_endpoint.cc +1 -1
- data/src/core/lib/transport/promise_endpoint.h +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/transport.cc +3 -3
- data/src/core/lib/transport/transport.h +62 -4
- data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/load_balancing/address_filtering.cc +1 -1
- data/src/core/load_balancing/address_filtering.h +2 -2
- data/src/core/load_balancing/backend_metric_parser.cc +1 -1
- data/src/core/load_balancing/backend_metric_parser.h +1 -1
- data/src/core/load_balancing/child_policy_handler.cc +4 -4
- data/src/core/load_balancing/child_policy_handler.h +2 -2
- data/src/core/load_balancing/delegating_helper.h +2 -2
- data/src/core/load_balancing/endpoint_list.cc +4 -4
- data/src/core/load_balancing/endpoint_list.h +2 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
- data/src/core/load_balancing/grpclb/grpclb.cc +13 -24
- data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
- data/src/core/load_balancing/health_check_client.cc +9 -5
- data/src/core/load_balancing/health_check_client_internal.h +3 -3
- data/src/core/load_balancing/lb_policy.h +11 -8
- data/src/core/load_balancing/lb_policy_factory.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +2 -2
- data/src/core/load_balancing/lb_policy_registry.h +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +7 -3
- data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +7 -15
- data/src/core/load_balancing/pick_first/pick_first.cc +48 -18
- data/src/core/load_balancing/priority/priority.cc +6 -6
- data/src/core/load_balancing/ring_hash/ring_hash.cc +8 -8
- data/src/core/load_balancing/rls/rls.cc +10 -10
- data/src/core/load_balancing/round_robin/round_robin.cc +7 -7
- data/src/core/load_balancing/subchannel_interface.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +1 -1
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +9 -15
- data/src/core/load_balancing/weighted_target/weighted_target.cc +9 -9
- data/src/core/load_balancing/xds/cds.cc +5 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +22 -39
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
- data/src/core/load_balancing/xds/xds_override_host.h +1 -1
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +6 -6
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
- data/src/core/resolver/dns/dns_resolver_plugin.cc +2 -2
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +8 -8
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
- data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
- data/src/core/resolver/endpoint_addresses.cc +4 -4
- data/src/core/resolver/endpoint_addresses.h +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +3 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +5 -5
- data/src/core/resolver/polling_resolver.cc +5 -5
- data/src/core/resolver/polling_resolver.h +1 -1
- data/src/core/resolver/resolver.h +2 -2
- data/src/core/resolver/resolver_factory.h +2 -2
- data/src/core/resolver/resolver_registry.cc +1 -1
- data/src/core/resolver/resolver_registry.h +1 -1
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
- data/src/core/resolver/xds/xds_config.cc +1 -1
- data/src/core/resolver/xds/xds_config.h +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +2 -2
- data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
- data/src/core/resolver/xds/xds_resolver.cc +16 -13
- data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
- data/src/core/server/add_port.cc +2 -2
- data/src/core/server/server.cc +9 -5
- data/src/core/server/server.h +8 -7
- data/src/core/server/server_call_tracer_filter.cc +1 -1
- data/src/core/server/server_call_tracer_filter.h +5 -1
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/xds_channel_stack_modifier.cc +3 -2
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +10 -10
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
- data/src/core/service_config/service_config_impl.cc +3 -3
- data/src/core/service_config/service_config_impl.h +2 -2
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.h +2 -2
- data/src/core/telemetry/default_tcp_tracer.h +3 -3
- data/src/core/telemetry/histogram.h +1 -1
- data/src/core/telemetry/instrument.cc +550 -270
- data/src/core/telemetry/instrument.h +301 -128
- data/src/core/telemetry/metrics.cc +2 -0
- data/src/core/telemetry/metrics.h +33 -4
- data/src/core/telemetry/stats.h +2 -2
- data/src/core/telemetry/stats_data.cc +1 -1
- data/src/core/telemetry/stats_data.h +2 -2
- data/src/core/transport/auth_context.cc +1 -1
- data/src/core/transport/auth_context.h +2 -1
- data/src/core/transport/auth_context_comparator_registry.h +1 -1
- data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +9 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +9 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +15 -2
- data/src/core/tsi/fake_transport_security.cc +2 -1
- data/src/core/tsi/local_transport_security.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +6 -6
- data/src/core/tsi/ssl_transport_security.h +1 -1
- data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
- data/src/core/tsi/ssl_transport_security_utils.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/alloc.cc +1 -1
- data/src/core/util/backoff.h +1 -1
- data/src/core/util/crash.h +1 -1
- data/src/core/util/dual_ref_counted.h +2 -2
- data/src/core/util/event_log.cc +1 -1
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/gcp_metadata_query.cc +5 -5
- data/src/core/util/gcp_metadata_query.h +2 -2
- data/src/core/util/grpc_check.cc +2 -0
- data/src/core/util/grpc_check.h +1 -1
- data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
- data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
- data/src/core/util/http_client/format_request.cc +1 -1
- data/src/core/util/http_client/httpcli.cc +3 -3
- data/src/core/util/http_client/httpcli.h +4 -4
- data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
- data/src/core/util/http_client/parser.cc +1 -1
- data/src/core/util/json/json_channel_args.h +1 -1
- data/src/core/util/json/json_object_loader.h +6 -6
- data/src/core/util/json/json_reader.cc +2 -2
- data/src/core/util/json/json_reader.h +1 -1
- data/src/core/util/json/json_util.h +3 -3
- data/src/core/util/json/json_writer.cc +1 -1
- data/src/core/util/latent_see.cc +45 -24
- data/src/core/util/latent_see.h +192 -24
- data/src/core/util/linux/cpu.cc +1 -1
- data/src/core/util/load_file.cc +1 -1
- data/src/core/util/load_file.h +1 -1
- data/src/core/util/log.cc +3 -3
- data/src/core/util/lru_cache.h +1 -1
- data/src/core/util/matchers.h +1 -1
- data/src/core/util/memory_usage.h +3 -3
- data/src/core/util/mpscq.h +1 -1
- data/src/core/util/notification.h +1 -1
- data/src/core/util/posix/cpu.cc +1 -1
- data/src/core/util/posix/stat.cc +2 -2
- data/src/core/util/posix/thd.cc +2 -2
- data/src/core/util/posix/tmpfile.cc +2 -2
- data/src/core/util/ref_counted.h +2 -2
- data/src/core/util/ref_counted_ptr.h +1 -1
- data/src/core/util/ref_counted_string.h +1 -1
- data/src/core/util/single_set_ptr.h +3 -1
- data/src/core/util/status_helper.cc +8 -8
- data/src/core/util/status_helper.h +1 -1
- data/src/core/util/string.cc +2 -2
- data/src/core/util/sync_abseil.cc +1 -1
- data/src/core/util/table.h +1 -1
- data/src/core/util/time.cc +1 -1
- data/src/core/util/time_precise.cc +1 -1
- data/src/core/util/unique_ptr_with_bitset.h +1 -1
- data/src/core/util/unique_type_name.h +1 -1
- data/src/core/util/upb_utils.h +6 -1
- data/src/core/util/validation_errors.cc +2 -2
- data/src/core/util/validation_errors.h +2 -3
- data/src/core/util/wait_for_single_owner.h +2 -2
- data/src/core/util/windows/directory_reader.cc +1 -1
- data/src/core/util/windows/stat.cc +2 -2
- data/src/core/util/windows/thd.cc +2 -2
- data/src/core/util/windows/time.cc +1 -1
- data/src/core/util/work_serializer.cc +3 -3
- data/src/core/util/work_serializer.h +2 -2
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
- data/src/core/xds/grpc/certificate_provider_store.h +2 -2
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
- data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +2 -2
- data/src/core/xds/grpc/xds_certificate_provider.cc +1 -1
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- data/src/core/xds/grpc/xds_cluster.cc +2 -2
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +5 -5
- data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
- data/src/core/xds/grpc/xds_endpoint.h +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +5 -5
- data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
- data/src/core/xds/grpc/xds_health_status.cc +1 -1
- data/src/core/xds/grpc/xds_health_status.h +1 -1
- data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
- data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_filter.h +3 -3
- data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
- data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +2 -2
- data/src/core/xds/grpc/xds_listener_parser.cc +6 -6
- data/src/core/xds/grpc/xds_listener_parser.h +1 -1
- data/src/core/xds/grpc/xds_matcher.cc +1 -1
- data/src/core/xds/grpc/xds_matcher.h +3 -3
- data/src/core/xds/grpc/xds_matcher_input.h +1 -1
- data/src/core/xds/grpc/xds_metadata.cc +1 -1
- data/src/core/xds/grpc/xds_metadata.h +3 -3
- data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
- data/src/core/xds/grpc/xds_route_config.cc +3 -3
- data/src/core/xds/grpc/xds_route_config_parser.cc +8 -8
- data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
- data/src/core/xds/grpc/xds_routing.cc +4 -4
- data/src/core/xds/grpc/xds_routing.h +2 -2
- data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +1 -1
- data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
- data/src/core/xds/xds_client/lrs_client.cc +3 -3
- data/src/core/xds/xds_client/lrs_client.h +4 -4
- data/src/core/xds/xds_client/xds_api.h +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +8 -8
- data/src/core/xds/xds_client/xds_client.h +5 -5
- data/src/core/xds/xds_client/xds_locality.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
- data/src/core/xds/xds_client/xds_transport.h +2 -2
- data/src/ruby/ext/grpc/extconf.rb +14 -12
- data/src/ruby/ext/grpc/rb_call.c +0 -1
- data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- metadata +16 -6
|
@@ -23,14 +23,12 @@
|
|
|
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/status/status.h"
|
|
33
|
-
#include "absl/strings/string_view.h"
|
|
34
32
|
#include "src/core/channelz/property_list.h"
|
|
35
33
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
36
34
|
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
@@ -39,12 +37,11 @@
|
|
|
39
37
|
#include "src/core/lib/transport/bdp_estimator.h"
|
|
40
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,11 +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
|
|
|
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);
|
|
62
|
+
|
|
62
63
|
class TransportFlowControl;
|
|
63
64
|
class StreamFlowControl;
|
|
64
65
|
|
|
65
66
|
enum class StallEdge { kNoChange, kStalled, kUnstalled };
|
|
66
67
|
|
|
68
|
+
#define GRPC_HTTP2_FLOW_CONTROL_DLOG \
|
|
69
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
70
|
+
|
|
67
71
|
// Encapsulates a collections of actions the transport needs to take with
|
|
68
72
|
// regard to flow control. Each action comes with urgencies that tell the
|
|
69
73
|
// transport how quickly the action must take place.
|
|
@@ -72,10 +76,10 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
|
72
76
|
enum class Urgency : uint8_t {
|
|
73
77
|
// Nothing to be done.
|
|
74
78
|
NO_ACTION_NEEDED = 0,
|
|
75
|
-
// Initiate a write to
|
|
79
|
+
// Initiate a write to send updates immediately.
|
|
76
80
|
UPDATE_IMMEDIATELY,
|
|
77
|
-
//
|
|
78
|
-
//
|
|
81
|
+
// Queue the flow control update, to be sent out the next time a write is
|
|
82
|
+
// initiated.
|
|
79
83
|
QUEUE_UPDATE,
|
|
80
84
|
};
|
|
81
85
|
|
|
@@ -90,6 +94,8 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
|
90
94
|
Urgency preferred_rx_crypto_frame_size_update() const {
|
|
91
95
|
return preferred_rx_crypto_frame_size_update_;
|
|
92
96
|
}
|
|
97
|
+
|
|
98
|
+
// Returns true if any action has UPDATE_IMMEDIATELY urgency.
|
|
93
99
|
bool AnyUpdateImmediately() const {
|
|
94
100
|
return send_stream_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
|
95
101
|
send_transport_update_ == Urgency::UPDATE_IMMEDIATELY ||
|
|
@@ -99,12 +105,56 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
|
99
105
|
Urgency::UPDATE_IMMEDIATELY;
|
|
100
106
|
}
|
|
101
107
|
|
|
108
|
+
std::string ImmediateUpdateReasons() const;
|
|
109
|
+
|
|
110
|
+
// Returns the value of SETTINGS_INITIAL_WINDOW_SIZE that we will send to the
|
|
111
|
+
// peer.
|
|
102
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.
|
|
103
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.
|
|
104
117
|
uint32_t preferred_rx_crypto_frame_size() const {
|
|
105
118
|
return preferred_rx_crypto_frame_size_;
|
|
106
119
|
}
|
|
107
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
|
+
|
|
108
158
|
FlowControlAction& set_send_stream_update(Urgency u) {
|
|
109
159
|
send_stream_update_ = u;
|
|
110
160
|
return *this;
|
|
@@ -132,27 +182,6 @@ class GRPC_MUST_USE_RESULT FlowControlAction {
|
|
|
132
182
|
return *this;
|
|
133
183
|
}
|
|
134
184
|
|
|
135
|
-
static const char* UrgencyString(Urgency u);
|
|
136
|
-
std::string DebugString() const;
|
|
137
|
-
|
|
138
|
-
void AssertEmpty() { GRPC_CHECK(*this == FlowControlAction()); }
|
|
139
|
-
|
|
140
|
-
bool operator==(const FlowControlAction& other) const {
|
|
141
|
-
return send_stream_update_ == other.send_stream_update_ &&
|
|
142
|
-
send_transport_update_ == other.send_transport_update_ &&
|
|
143
|
-
send_initial_window_update_ == other.send_initial_window_update_ &&
|
|
144
|
-
send_max_frame_size_update_ == other.send_max_frame_size_update_ &&
|
|
145
|
-
(send_initial_window_update_ == Urgency::NO_ACTION_NEEDED ||
|
|
146
|
-
initial_window_size_ == other.initial_window_size_) &&
|
|
147
|
-
(send_max_frame_size_update_ == Urgency::NO_ACTION_NEEDED ||
|
|
148
|
-
max_frame_size_ == other.max_frame_size_) &&
|
|
149
|
-
(preferred_rx_crypto_frame_size_update_ ==
|
|
150
|
-
Urgency::NO_ACTION_NEEDED ||
|
|
151
|
-
preferred_rx_crypto_frame_size_ ==
|
|
152
|
-
other.preferred_rx_crypto_frame_size_);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
private:
|
|
156
185
|
Urgency send_stream_update_ = Urgency::NO_ACTION_NEEDED;
|
|
157
186
|
Urgency send_transport_update_ = Urgency::NO_ACTION_NEEDED;
|
|
158
187
|
Urgency send_initial_window_update_ = Urgency::NO_ACTION_NEEDED;
|
|
@@ -168,6 +197,7 @@ std::ostream& operator<<(std::ostream& out, const FlowControlAction& action);
|
|
|
168
197
|
|
|
169
198
|
// Implementation of flow control that abides to HTTP/2 spec and attempts
|
|
170
199
|
// to be as performant as possible.
|
|
200
|
+
// This class manages the flow control at a connection level.
|
|
171
201
|
class TransportFlowControl final {
|
|
172
202
|
public:
|
|
173
203
|
explicit TransportFlowControl(absl::string_view name, bool enable_bdp_probe,
|
|
@@ -176,16 +206,19 @@ class TransportFlowControl final {
|
|
|
176
206
|
|
|
177
207
|
bool bdp_probe() const { return enable_bdp_probe_; }
|
|
178
208
|
|
|
179
|
-
//
|
|
180
|
-
// 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
|
|
181
211
|
// regardless of the send - if it is false and this function returns non-zero,
|
|
182
|
-
//
|
|
212
|
+
// the caller can send a flow control update.
|
|
183
213
|
uint32_t DesiredAnnounceSize(bool writing_anyway) const;
|
|
184
|
-
|
|
185
|
-
//
|
|
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`.
|
|
186
218
|
void SentUpdate(uint32_t announce);
|
|
187
219
|
|
|
188
|
-
//
|
|
220
|
+
// Convenience method that combines `DesiredAnnounceSize` and `SentUpdate`.
|
|
221
|
+
// Call to get window increment and update state in one go.
|
|
189
222
|
uint32_t MaybeSendUpdate(bool writing_anyway) {
|
|
190
223
|
uint32_t n = DesiredAnnounceSize(writing_anyway);
|
|
191
224
|
SentUpdate(n);
|
|
@@ -193,8 +226,8 @@ class TransportFlowControl final {
|
|
|
193
226
|
}
|
|
194
227
|
|
|
195
228
|
// Track an update to the incoming flow control counters - that is how many
|
|
196
|
-
// tokens we report to our peer that we
|
|
197
|
-
// 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.
|
|
198
231
|
class IncomingUpdateContext {
|
|
199
232
|
public:
|
|
200
233
|
explicit IncomingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
|
|
@@ -202,19 +235,32 @@ class TransportFlowControl final {
|
|
|
202
235
|
|
|
203
236
|
IncomingUpdateContext(const IncomingUpdateContext&) = delete;
|
|
204
237
|
IncomingUpdateContext& operator=(const IncomingUpdateContext&) = delete;
|
|
238
|
+
IncomingUpdateContext(IncomingUpdateContext&&) = delete;
|
|
239
|
+
IncomingUpdateContext& operator=(IncomingUpdateContext&&) = delete;
|
|
205
240
|
|
|
206
241
|
// Reads the flow control data and returns an actionable struct that will
|
|
207
|
-
// tell
|
|
242
|
+
// tell the transport exactly what it needs to do.
|
|
208
243
|
FlowControlAction MakeAction() {
|
|
209
244
|
return std::exchange(tfc_, nullptr)->UpdateAction(FlowControlAction());
|
|
210
245
|
}
|
|
211
246
|
|
|
212
|
-
//
|
|
213
|
-
//
|
|
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.
|
|
214
258
|
absl::Status RecvData(
|
|
215
259
|
int64_t incoming_frame_size, absl::FunctionRef<absl::Status()> stream =
|
|
216
260
|
[]() { return absl::OkStatus(); });
|
|
217
261
|
|
|
262
|
+
private:
|
|
263
|
+
friend class StreamFlowControl;
|
|
218
264
|
// Update a stream announce window delta, keeping track of how much total
|
|
219
265
|
// positive delta is present on the transport.
|
|
220
266
|
void UpdateAnnouncedWindowDelta(int64_t* delta, int64_t change) {
|
|
@@ -228,7 +274,6 @@ class TransportFlowControl final {
|
|
|
228
274
|
}
|
|
229
275
|
}
|
|
230
276
|
|
|
231
|
-
private:
|
|
232
277
|
TransportFlowControl* tfc_;
|
|
233
278
|
};
|
|
234
279
|
|
|
@@ -237,9 +282,14 @@ class TransportFlowControl final {
|
|
|
237
282
|
class OutgoingUpdateContext {
|
|
238
283
|
public:
|
|
239
284
|
explicit OutgoingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
|
|
240
|
-
void StreamSentData(int64_t size) { tfc_->remote_window_ -= size; }
|
|
241
285
|
|
|
242
|
-
|
|
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.
|
|
243
293
|
void RecvUpdate(uint32_t size) { tfc_->remote_window_ += size; }
|
|
244
294
|
|
|
245
295
|
// Finish the update and check whether we became stalled or unstalled.
|
|
@@ -253,29 +303,37 @@ class TransportFlowControl final {
|
|
|
253
303
|
}
|
|
254
304
|
|
|
255
305
|
private:
|
|
306
|
+
friend class StreamFlowControl;
|
|
307
|
+
void StreamSentData(int64_t size) { tfc_->remote_window_ -= size; }
|
|
308
|
+
|
|
256
309
|
TransportFlowControl* tfc_;
|
|
257
310
|
const bool was_stalled_ = tfc_->remote_window_ <= 0;
|
|
258
311
|
};
|
|
259
312
|
|
|
260
313
|
// Call periodically (at a low-ish rate, 100ms - 10s makes sense)
|
|
261
314
|
// to perform more complex flow control calculations and return an action
|
|
262
|
-
// to let
|
|
315
|
+
// to let the transport change its parameters.
|
|
316
|
+
// TODO(tjagtap) [PH2][P2] Plumb with PH2 flow control.
|
|
263
317
|
FlowControlAction PeriodicUpdate();
|
|
264
318
|
|
|
265
|
-
int64_t
|
|
266
|
-
int64_t
|
|
267
|
-
int64_t
|
|
268
|
-
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();
|
|
269
323
|
}
|
|
270
324
|
|
|
271
325
|
BdpEstimator* bdp_estimator() { return &bdp_estimator_; }
|
|
272
326
|
|
|
273
|
-
uint32_t
|
|
274
|
-
uint32_t
|
|
275
|
-
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(); }
|
|
276
329
|
|
|
330
|
+
// Call after you prepare and queue a settings frame to send to the peer.
|
|
277
331
|
void FlushedSettings() { sent_init_window_ = queued_init_window(); }
|
|
278
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.
|
|
279
337
|
FlowControlAction SetAckedInitialWindow(uint32_t value);
|
|
280
338
|
|
|
281
339
|
void set_target_initial_window_size(uint32_t value) {
|
|
@@ -285,16 +343,10 @@ class TransportFlowControl final {
|
|
|
285
343
|
|
|
286
344
|
// Getters
|
|
287
345
|
int64_t remote_window() const { return remote_window_; }
|
|
288
|
-
int64_t
|
|
289
|
-
|
|
290
|
-
int64_t announced_stream_total_over_incoming_window() const {
|
|
291
|
-
return announced_stream_total_over_incoming_window_;
|
|
292
|
-
}
|
|
346
|
+
int64_t test_only_announced_window() const { return announced_window(); }
|
|
293
347
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
announced_stream_total_over_incoming_window_ -= delta;
|
|
297
|
-
}
|
|
348
|
+
int64_t test_only_announced_stream_total_over_incoming_window() const {
|
|
349
|
+
return announced_stream_total_over_incoming_window();
|
|
298
350
|
}
|
|
299
351
|
|
|
300
352
|
// A snapshot of the flow control stats to export.
|
|
@@ -353,7 +405,28 @@ class TransportFlowControl final {
|
|
|
353
405
|
}
|
|
354
406
|
|
|
355
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
|
+
|
|
356
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
|
+
|
|
357
430
|
static void UpdateSetting(absl::string_view name, int64_t* desired_value,
|
|
358
431
|
uint32_t new_desired_value,
|
|
359
432
|
FlowControlAction* action,
|
|
@@ -407,20 +480,50 @@ class StreamFlowControl final {
|
|
|
407
480
|
explicit IncomingUpdateContext(StreamFlowControl* sfc)
|
|
408
481
|
: tfc_upd_(sfc->tfc_), sfc_(sfc) {}
|
|
409
482
|
|
|
483
|
+
IncomingUpdateContext(const IncomingUpdateContext&) = delete;
|
|
484
|
+
IncomingUpdateContext& operator=(const IncomingUpdateContext&) = delete;
|
|
485
|
+
IncomingUpdateContext(IncomingUpdateContext&&) = delete;
|
|
486
|
+
IncomingUpdateContext& operator=(IncomingUpdateContext&&) = delete;
|
|
487
|
+
|
|
410
488
|
FlowControlAction MakeAction() {
|
|
411
489
|
return sfc_->UpdateAction(tfc_upd_.MakeAction());
|
|
412
490
|
}
|
|
413
491
|
|
|
414
|
-
//
|
|
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.
|
|
415
501
|
absl::Status RecvData(int64_t incoming_frame_size);
|
|
416
502
|
|
|
417
|
-
//
|
|
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.
|
|
418
508
|
void SetMinProgressSize(int64_t min_progress_size) {
|
|
419
509
|
sfc_->min_progress_size_ = min_progress_size;
|
|
420
510
|
}
|
|
421
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.
|
|
422
517
|
void SetPendingSize(int64_t pending_size);
|
|
423
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
|
+
|
|
424
527
|
private:
|
|
425
528
|
TransportFlowControl::IncomingUpdateContext tfc_upd_;
|
|
426
529
|
StreamFlowControl* const sfc_;
|
|
@@ -432,10 +535,18 @@ class StreamFlowControl final {
|
|
|
432
535
|
public:
|
|
433
536
|
explicit OutgoingUpdateContext(StreamFlowControl* sfc)
|
|
434
537
|
: tfc_upd_(sfc->tfc_), sfc_(sfc) {}
|
|
435
|
-
|
|
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.
|
|
436
546
|
void RecvUpdate(uint32_t size) { sfc_->remote_window_delta_ += size; }
|
|
437
|
-
|
|
438
|
-
//
|
|
547
|
+
|
|
548
|
+
// Call this after sending a DATA frame for this stream, to decrease send
|
|
549
|
+
// window based on `outgoing_frame_size`.
|
|
439
550
|
void SentData(int64_t outgoing_frame_size) {
|
|
440
551
|
tfc_upd_.StreamSentData(outgoing_frame_size);
|
|
441
552
|
sfc_->remote_window_delta_ -= outgoing_frame_size;
|
|
@@ -446,14 +557,17 @@ class StreamFlowControl final {
|
|
|
446
557
|
StreamFlowControl* const sfc_;
|
|
447
558
|
};
|
|
448
559
|
|
|
449
|
-
//
|
|
450
|
-
// returns zero
|
|
560
|
+
// Returns a non-zero announce if we should send a stream update to our
|
|
561
|
+
// peer, else returns zero;
|
|
451
562
|
uint32_t DesiredAnnounceSize() const;
|
|
452
|
-
|
|
453
|
-
//
|
|
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`.
|
|
454
567
|
void SentUpdate(uint32_t announce);
|
|
455
568
|
|
|
456
|
-
//
|
|
569
|
+
// Convenience method that combines `DesiredAnnounceSize` and `SentUpdate`.
|
|
570
|
+
// Call to get window increment and update state in one go.
|
|
457
571
|
uint32_t MaybeSendUpdate() {
|
|
458
572
|
uint32_t n = DesiredAnnounceSize();
|
|
459
573
|
SentUpdate(n);
|
|
@@ -461,8 +575,10 @@ class StreamFlowControl final {
|
|
|
461
575
|
}
|
|
462
576
|
|
|
463
577
|
int64_t remote_window_delta() const { return remote_window_delta_; }
|
|
464
|
-
int64_t
|
|
465
|
-
|
|
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_; }
|
|
466
582
|
|
|
467
583
|
// A snapshot of the flow control stats to export.
|
|
468
584
|
struct Stats {
|
|
@@ -476,13 +592,32 @@ class StreamFlowControl final {
|
|
|
476
592
|
|
|
477
593
|
Stats stats() const {
|
|
478
594
|
Stats stats;
|
|
479
|
-
stats.min_progress_size =
|
|
595
|
+
stats.min_progress_size = min_progress_size_;
|
|
480
596
|
stats.remote_window_delta = remote_window_delta();
|
|
481
|
-
stats.announced_window_delta =
|
|
597
|
+
stats.announced_window_delta = announced_window_delta_;
|
|
482
598
|
stats.pending_size = pending_size_;
|
|
483
599
|
return stats;
|
|
484
600
|
}
|
|
485
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
|
+
|
|
486
621
|
private:
|
|
487
622
|
TransportFlowControl* const tfc_;
|
|
488
623
|
int64_t min_progress_size_ = 0;
|
|
@@ -19,13 +19,15 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
|
|
21
21
|
|
|
22
|
+
#include <algorithm>
|
|
22
23
|
#include <cstdint>
|
|
23
24
|
#include <vector>
|
|
24
25
|
|
|
25
|
-
#include "absl/container/flat_hash_map.h"
|
|
26
26
|
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
27
27
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
28
28
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
29
|
+
#include "src/core/util/grpc_check.h"
|
|
30
|
+
#include "absl/container/flat_hash_map.h"
|
|
29
31
|
|
|
30
32
|
namespace grpc_core {
|
|
31
33
|
namespace http2 {
|
|
@@ -34,6 +36,10 @@ constexpr chttp2::FlowControlAction::Urgency kNoActionNeeded =
|
|
|
34
36
|
chttp2::FlowControlAction::Urgency::NO_ACTION_NEEDED;
|
|
35
37
|
constexpr chttp2::FlowControlAction::Urgency kUpdateImmediately =
|
|
36
38
|
chttp2::FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
|
39
|
+
constexpr int64_t kZero = 0;
|
|
40
|
+
|
|
41
|
+
#define GRPC_HTTP2_FLOW_CONTROL_HELPERS \
|
|
42
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
37
43
|
|
|
38
44
|
// Function to update local settings based on FlowControlAction.
|
|
39
45
|
// This function does the settings related tasks equivalent to
|
|
@@ -54,6 +60,45 @@ inline void ActOnFlowControlActionSettings(
|
|
|
54
60
|
}
|
|
55
61
|
}
|
|
56
62
|
|
|
63
|
+
// RFC9113 : A sender MUST NOT allow a flow-control window to exceed ((2^31)-1)
|
|
64
|
+
// octets. If a sender receives a WINDOW_UPDATE that causes a flow-control
|
|
65
|
+
// window to exceed this maximum, it MUST terminate either the stream or the
|
|
66
|
+
// connection, as appropriate.
|
|
67
|
+
// While the return value is int64_t for compatibility with CHTTP2 flow control,
|
|
68
|
+
// we dont expect this value to exceed ((2^31)-1) i.e kMaxSize31Bit
|
|
69
|
+
inline int64_t GetStreamFlowControlTokens(
|
|
70
|
+
chttp2::StreamFlowControl& stream_flow_control,
|
|
71
|
+
const Http2Settings& peer_settings) {
|
|
72
|
+
GRPC_DCHECK(stream_flow_control.remote_window_delta() +
|
|
73
|
+
peer_settings.initial_window_size() <=
|
|
74
|
+
RFC9113::kMaxSize31Bit);
|
|
75
|
+
return std::max(kZero, stream_flow_control.remote_window_delta() +
|
|
76
|
+
peer_settings.initial_window_size());
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
inline uint32_t GetMaxPermittedDequeue(
|
|
80
|
+
chttp2::TransportFlowControl& transport_flow_control,
|
|
81
|
+
chttp2::StreamFlowControl& stream_flow_control, const size_t upper_limit,
|
|
82
|
+
const Http2Settings& peer_settings) {
|
|
83
|
+
const int64_t flow_control_tokens =
|
|
84
|
+
std::min(transport_flow_control.remote_window(),
|
|
85
|
+
GetStreamFlowControlTokens(stream_flow_control, peer_settings));
|
|
86
|
+
uint32_t max_dequeue = 0;
|
|
87
|
+
if (flow_control_tokens > 0) {
|
|
88
|
+
max_dequeue = static_cast<uint32_t>(
|
|
89
|
+
std::min({static_cast<size_t>(flow_control_tokens), upper_limit,
|
|
90
|
+
static_cast<size_t>(RFC9113::kMaxSize31Bit - 1)}));
|
|
91
|
+
}
|
|
92
|
+
GRPC_HTTP2_FLOW_CONTROL_HELPERS
|
|
93
|
+
<< "GetFlowControlTokens flow_control_tokens = " << flow_control_tokens
|
|
94
|
+
<< " upper_limit = " << upper_limit << " max_dequeue = " << max_dequeue;
|
|
95
|
+
return max_dequeue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// TODO(tjagtap) [PH2][P4] : Ensure that the total transport flow control window
|
|
99
|
+
// or stream flow control window does not exceed the max permitted limit of
|
|
100
|
+
// 2^31-1
|
|
101
|
+
|
|
57
102
|
} // namespace http2
|
|
58
103
|
} // namespace grpc_core
|
|
59
104
|
|