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
|
@@ -19,13 +19,35 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_STREAM_DATA_QUEUE_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_STREAM_DATA_QUEUE_H
|
|
21
21
|
|
|
22
|
+
#include <grpc/support/port_platform.h>
|
|
23
|
+
|
|
24
|
+
#include <algorithm>
|
|
25
|
+
#include <cstddef>
|
|
26
|
+
#include <cstdint>
|
|
27
|
+
#include <limits>
|
|
28
|
+
#include <optional>
|
|
22
29
|
#include <queue>
|
|
30
|
+
#include <string>
|
|
31
|
+
#include <utility>
|
|
32
|
+
#include <variant>
|
|
33
|
+
#include <vector>
|
|
23
34
|
|
|
24
|
-
#include "
|
|
35
|
+
#include "src/core/call/message.h"
|
|
36
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
25
37
|
#include "src/core/ext/transport/chttp2/transport/header_assembler.h"
|
|
38
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
|
39
|
+
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
26
40
|
#include "src/core/ext/transport/chttp2/transport/message_assembler.h"
|
|
27
41
|
#include "src/core/ext/transport/chttp2/transport/transport_common.h"
|
|
42
|
+
#include "src/core/lib/promise/activity.h"
|
|
43
|
+
#include "src/core/lib/promise/context.h"
|
|
44
|
+
#include "src/core/lib/promise/poll.h"
|
|
45
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
28
46
|
#include "src/core/util/grpc_check.h"
|
|
47
|
+
#include "src/core/util/ref_counted.h"
|
|
48
|
+
#include "src/core/util/sync.h"
|
|
49
|
+
#include "absl/log/log.h"
|
|
50
|
+
#include "absl/status/status.h"
|
|
29
51
|
|
|
30
52
|
namespace grpc_core {
|
|
31
53
|
namespace http2 {
|
|
@@ -50,7 +72,7 @@ class SimpleQueue {
|
|
|
50
72
|
// with tokens = 0. Enqueues with tokens = 0 are primarily for sending
|
|
51
73
|
// metadata as flow control does not apply to them. This function is NOT
|
|
52
74
|
// thread safe.
|
|
53
|
-
Poll<
|
|
75
|
+
Poll<bool> Enqueue(T& data, const uint32_t tokens) {
|
|
54
76
|
return PollEnqueue(data, tokens);
|
|
55
77
|
}
|
|
56
78
|
|
|
@@ -81,8 +103,13 @@ class SimpleQueue {
|
|
|
81
103
|
// Clears the queue. This function is NOT thread safe.
|
|
82
104
|
void Clear() { std::queue<Entry>().swap(queue_); }
|
|
83
105
|
|
|
106
|
+
inline std::optional<uint32_t> GetNextEntryTokens() const {
|
|
107
|
+
return queue_.empty() ? std::nullopt
|
|
108
|
+
: std::make_optional(queue_.front().tokens);
|
|
109
|
+
}
|
|
110
|
+
|
|
84
111
|
private:
|
|
85
|
-
Poll<
|
|
112
|
+
Poll<bool> PollEnqueue(T& data, const uint32_t tokens) {
|
|
86
113
|
GRPC_STREAM_DATA_QUEUE_DEBUG << "Enqueueing data. Data tokens: " << tokens;
|
|
87
114
|
const uint32_t max_tokens_consumed_threshold =
|
|
88
115
|
max_tokens_ >= tokens ? max_tokens_ - tokens : 0;
|
|
@@ -93,7 +120,7 @@ class SimpleQueue {
|
|
|
93
120
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
94
121
|
<< "Enqueue successful. Data tokens: " << tokens
|
|
95
122
|
<< " Current tokens consumed: " << tokens_consumed_;
|
|
96
|
-
return /*became_non_empty
|
|
123
|
+
return /*became_non_empty=*/(queue_.size() == 1);
|
|
97
124
|
}
|
|
98
125
|
|
|
99
126
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
@@ -106,6 +133,11 @@ class SimpleQueue {
|
|
|
106
133
|
|
|
107
134
|
inline absl::StatusOr<bool> ImmediateEnqueueInternal(T data,
|
|
108
135
|
const uint32_t tokens) {
|
|
136
|
+
GRPC_DCHECK_LE(tokens_consumed_,
|
|
137
|
+
std::numeric_limits<uint32_t>::max() - tokens);
|
|
138
|
+
if (tokens_consumed_ > std::numeric_limits<uint32_t>::max() - tokens) {
|
|
139
|
+
return absl::InternalError("Tokens consumed overflowed.");
|
|
140
|
+
}
|
|
109
141
|
tokens_consumed_ += tokens;
|
|
110
142
|
queue_.emplace(Entry{std::move(data), tokens});
|
|
111
143
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
@@ -170,18 +202,12 @@ class SimpleQueue {
|
|
|
170
202
|
template <typename MetadataHandle>
|
|
171
203
|
class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
172
204
|
public:
|
|
173
|
-
explicit StreamDataQueue(const bool is_client, const uint32_t
|
|
174
|
-
|
|
175
|
-
bool allow_true_binary_metadata)
|
|
176
|
-
: stream_id_(stream_id),
|
|
205
|
+
explicit StreamDataQueue(const bool is_client, const uint32_t queue_size)
|
|
206
|
+
: stream_id_(0),
|
|
177
207
|
is_client_(is_client),
|
|
178
208
|
queue_(queue_size),
|
|
179
|
-
initial_metadata_disassembler_(
|
|
180
|
-
|
|
181
|
-
allow_true_binary_metadata),
|
|
182
|
-
trailing_metadata_disassembler_(stream_id,
|
|
183
|
-
/*is_trailing_metadata=*/true,
|
|
184
|
-
allow_true_binary_metadata) {};
|
|
209
|
+
initial_metadata_disassembler_(/*is_trailing_metadata=*/false),
|
|
210
|
+
trailing_metadata_disassembler_(/*is_trailing_metadata=*/true) {};
|
|
185
211
|
~StreamDataQueue() = default;
|
|
186
212
|
|
|
187
213
|
StreamDataQueue(StreamDataQueue&& rhs) = delete;
|
|
@@ -189,6 +215,17 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
189
215
|
StreamDataQueue(const StreamDataQueue&) = delete;
|
|
190
216
|
StreamDataQueue& operator=(const StreamDataQueue&) = delete;
|
|
191
217
|
|
|
218
|
+
void SetStreamId(const uint32_t stream_id,
|
|
219
|
+
const bool allow_true_binary_metadata_peer) {
|
|
220
|
+
GRPC_DCHECK_EQ(stream_id_, 0u);
|
|
221
|
+
GRPC_DCHECK_NE(stream_id, 0u);
|
|
222
|
+
stream_id_ = stream_id;
|
|
223
|
+
initial_metadata_disassembler_.Initialize(stream_id,
|
|
224
|
+
allow_true_binary_metadata_peer);
|
|
225
|
+
trailing_metadata_disassembler_.Initialize(stream_id,
|
|
226
|
+
allow_true_binary_metadata_peer);
|
|
227
|
+
}
|
|
228
|
+
|
|
192
229
|
//////////////////////////////////////////////////////////////////////////////
|
|
193
230
|
// Enqueue Helpers
|
|
194
231
|
// These enqueue helpers are based on following assumptions:
|
|
@@ -206,7 +243,7 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
206
243
|
// end_stream set. If the stream needs to be half closed, the client should
|
|
207
244
|
// enqueue a half close message.
|
|
208
245
|
|
|
209
|
-
struct
|
|
246
|
+
struct StreamWritabilityUpdate {
|
|
210
247
|
bool became_writable;
|
|
211
248
|
WritableStreamPriority priority;
|
|
212
249
|
};
|
|
@@ -216,7 +253,7 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
216
253
|
// 2. This MUST be called before any messages are enqueued.
|
|
217
254
|
// 3. MUST not be called after trailing metadata is enqueued.
|
|
218
255
|
// 4. This function is thread safe.
|
|
219
|
-
absl::StatusOr<
|
|
256
|
+
absl::StatusOr<StreamWritabilityUpdate> EnqueueInitialMetadata(
|
|
220
257
|
MetadataHandle&& metadata) {
|
|
221
258
|
MutexLock lock(&mu_);
|
|
222
259
|
GRPC_DCHECK(!is_initial_metadata_queued_);
|
|
@@ -229,11 +266,11 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
229
266
|
QueueEntry{InitialMetadataType{std::move(metadata)}}, /*tokens=*/0);
|
|
230
267
|
if (GPR_UNLIKELY(!result.ok())) {
|
|
231
268
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
232
|
-
<< "Immediate enqueueing initial metadata
|
|
233
|
-
<<
|
|
269
|
+
<< "Immediate enqueueing initial metadata failed with status: "
|
|
270
|
+
<< result.status();
|
|
234
271
|
return result.status();
|
|
235
272
|
}
|
|
236
|
-
return
|
|
273
|
+
return UpdateWritableStateAndPriorityEnqueueLocked(
|
|
237
274
|
/*became_non_empty*/ result.value(), WritableStreamPriority::kDefault);
|
|
238
275
|
}
|
|
239
276
|
|
|
@@ -241,7 +278,7 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
241
278
|
// 1. MUST be called at most once.
|
|
242
279
|
// 2. MUST be called only for a server.
|
|
243
280
|
// 3. This function is thread safe.
|
|
244
|
-
absl::StatusOr<
|
|
281
|
+
absl::StatusOr<StreamWritabilityUpdate> EnqueueTrailingMetadata(
|
|
245
282
|
MetadataHandle&& metadata) {
|
|
246
283
|
MutexLock lock(&mu_);
|
|
247
284
|
GRPC_DCHECK(metadata != nullptr);
|
|
@@ -249,10 +286,9 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
249
286
|
GRPC_DCHECK(!is_trailing_metadata_or_half_close_queued_);
|
|
250
287
|
|
|
251
288
|
if (GPR_UNLIKELY(IsEnqueueClosed())) {
|
|
252
|
-
GRPC_STREAM_DATA_QUEUE_DEBUG << "Enqueue closed
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
WritableStreamPriority::kStreamClosed};
|
|
289
|
+
GRPC_STREAM_DATA_QUEUE_DEBUG << "Enqueue closed.";
|
|
290
|
+
return StreamWritabilityUpdate{/*became_writable=*/false,
|
|
291
|
+
WritableStreamPriority::kStreamClosed};
|
|
256
292
|
}
|
|
257
293
|
|
|
258
294
|
is_trailing_metadata_or_half_close_queued_ = true;
|
|
@@ -260,11 +296,11 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
260
296
|
QueueEntry{TrailingMetadataType{std::move(metadata)}}, /*tokens=*/0);
|
|
261
297
|
if (GPR_UNLIKELY(!result.ok())) {
|
|
262
298
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
263
|
-
<< "Immediate enqueueing trailing metadata
|
|
264
|
-
<<
|
|
299
|
+
<< "Immediate enqueueing trailing metadata failed with status: "
|
|
300
|
+
<< result.status();
|
|
265
301
|
return result.status();
|
|
266
302
|
}
|
|
267
|
-
return
|
|
303
|
+
return UpdateWritableStateAndPriorityEnqueueLocked(
|
|
268
304
|
/*became_non_empty*/ result.value(),
|
|
269
305
|
WritableStreamPriority::kStreamClosed);
|
|
270
306
|
}
|
|
@@ -285,26 +321,22 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
285
321
|
const uint32_t tokens =
|
|
286
322
|
message->payload()->Length() + kGrpcHeaderSizeInBytes;
|
|
287
323
|
return [self = this->Ref(), entry = QueueEntry{std::move(message)},
|
|
288
|
-
tokens]() mutable -> Poll<absl::StatusOr<
|
|
324
|
+
tokens]() mutable -> Poll<absl::StatusOr<StreamWritabilityUpdate>> {
|
|
289
325
|
MutexLock lock(&self->mu_);
|
|
290
326
|
if (GPR_UNLIKELY(self->IsEnqueueClosed())) {
|
|
291
|
-
GRPC_STREAM_DATA_QUEUE_DEBUG << "Enqueue closed
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
WritableStreamPriority::kStreamClosed};
|
|
327
|
+
GRPC_STREAM_DATA_QUEUE_DEBUG << "Enqueue closed";
|
|
328
|
+
return StreamWritabilityUpdate{/*became_writable=*/false,
|
|
329
|
+
WritableStreamPriority::kStreamClosed};
|
|
295
330
|
}
|
|
296
|
-
Poll<
|
|
331
|
+
Poll<bool> result = self->queue_.Enqueue(entry, tokens);
|
|
297
332
|
if (result.ready()) {
|
|
298
333
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
299
|
-
<< "Enqueued message
|
|
300
|
-
<< "
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
WritableStreamPriority::kDefault);
|
|
306
|
-
}
|
|
307
|
-
return result.value().status();
|
|
334
|
+
<< "Enqueued message with tokens: " << tokens
|
|
335
|
+
<< "became_non_empty: " << result.value();
|
|
336
|
+
|
|
337
|
+
return self->UpdateWritableStateAndPriorityEnqueueLocked(
|
|
338
|
+
/*became_non_empty=*/result.value(),
|
|
339
|
+
WritableStreamPriority::kDefault);
|
|
308
340
|
}
|
|
309
341
|
return Pending{};
|
|
310
342
|
};
|
|
@@ -314,7 +346,7 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
314
346
|
// 1. MUST be called at most once.
|
|
315
347
|
// 2. MUST be called only for a client.
|
|
316
348
|
// 3. This function is thread safe.
|
|
317
|
-
absl::StatusOr<
|
|
349
|
+
absl::StatusOr<StreamWritabilityUpdate> EnqueueHalfClosed() {
|
|
318
350
|
MutexLock lock(&mu_);
|
|
319
351
|
GRPC_DCHECK(is_initial_metadata_queued_);
|
|
320
352
|
GRPC_DCHECK(is_client_);
|
|
@@ -322,11 +354,11 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
322
354
|
if (GPR_UNLIKELY(IsEnqueueClosed() ||
|
|
323
355
|
is_trailing_metadata_or_half_close_queued_)) {
|
|
324
356
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
325
|
-
<< "Enqueue closed or trailing metadata/half close queued
|
|
326
|
-
<<
|
|
357
|
+
<< "Enqueue closed or trailing metadata/half close queued "
|
|
358
|
+
<< " is_trailing_metadata_or_half_close_queued_ = "
|
|
327
359
|
<< is_trailing_metadata_or_half_close_queued_;
|
|
328
|
-
return
|
|
329
|
-
|
|
360
|
+
return StreamWritabilityUpdate{/*became_writable=*/false,
|
|
361
|
+
WritableStreamPriority::kStreamClosed};
|
|
330
362
|
}
|
|
331
363
|
|
|
332
364
|
is_trailing_metadata_or_half_close_queued_ = true;
|
|
@@ -334,11 +366,11 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
334
366
|
queue_.ImmediateEnqueue(QueueEntry{HalfClosed{}}, /*tokens=*/0);
|
|
335
367
|
if (GPR_UNLIKELY(!result.ok())) {
|
|
336
368
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
337
|
-
<< "Immediate enqueueing half closed
|
|
338
|
-
<<
|
|
369
|
+
<< "Immediate enqueueing half closed failed with status: "
|
|
370
|
+
<< result.status();
|
|
339
371
|
return result.status();
|
|
340
372
|
}
|
|
341
|
-
return
|
|
373
|
+
return UpdateWritableStateAndPriorityEnqueueLocked(
|
|
342
374
|
/*became_non_empty*/ result.value(),
|
|
343
375
|
WritableStreamPriority::kStreamClosed);
|
|
344
376
|
}
|
|
@@ -346,22 +378,21 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
346
378
|
// Enqueue Reset Stream.
|
|
347
379
|
// 1. MUST be called at most once.
|
|
348
380
|
// 3. This function is thread safe.
|
|
349
|
-
absl::StatusOr<
|
|
381
|
+
absl::StatusOr<StreamWritabilityUpdate> EnqueueResetStream(
|
|
382
|
+
const uint32_t error_code) {
|
|
350
383
|
MutexLock lock(&mu_);
|
|
351
384
|
GRPC_DCHECK(is_initial_metadata_queued_);
|
|
352
385
|
|
|
353
386
|
// This can happen when the transport tries to close the stream and the
|
|
354
387
|
// stream is cancelled from the call stack.
|
|
355
388
|
if (GPR_UNLIKELY(IsEnqueueClosed())) {
|
|
356
|
-
GRPC_STREAM_DATA_QUEUE_DEBUG << "Enqueue closed
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
WritableStreamPriority::kStreamClosed};
|
|
389
|
+
GRPC_STREAM_DATA_QUEUE_DEBUG << "Enqueue closed";
|
|
390
|
+
return StreamWritabilityUpdate{/*became_writable=*/false,
|
|
391
|
+
WritableStreamPriority::kStreamClosed};
|
|
360
392
|
}
|
|
361
393
|
|
|
362
394
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
363
|
-
<< "Immediate enqueueing reset stream
|
|
364
|
-
<< " with error code: " << error_code;
|
|
395
|
+
<< "Immediate enqueueing reset stream with error code: " << error_code;
|
|
365
396
|
reset_stream_state_ = RstStreamState::kQueued;
|
|
366
397
|
reset_stream_error_code_ = error_code;
|
|
367
398
|
|
|
@@ -369,7 +400,7 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
369
400
|
// enqueueing reset stream to the queue. In this case, if the queue is
|
|
370
401
|
// empty, enqueuing reset stream to StreamDataQueue will make the stream
|
|
371
402
|
// writable.
|
|
372
|
-
return
|
|
403
|
+
return UpdateWritableStateAndPriorityEnqueueLocked(
|
|
373
404
|
/*became_non_empty*/ queue_.IsEmpty(),
|
|
374
405
|
WritableStreamPriority::kStreamClosed);
|
|
375
406
|
}
|
|
@@ -388,6 +419,7 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
388
419
|
// Maybe not be extremely accurate but should be good enough for our
|
|
389
420
|
// purposes.
|
|
390
421
|
size_t total_bytes_consumed = 0u;
|
|
422
|
+
size_t flow_control_tokens_consumed = 0u;
|
|
391
423
|
// Bitmask of the dequeue flags.
|
|
392
424
|
uint8_t flags = 0u;
|
|
393
425
|
|
|
@@ -428,17 +460,19 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
428
460
|
// This function is thread safe.
|
|
429
461
|
DequeueResult DequeueFrames(const uint32_t max_fc_tokens,
|
|
430
462
|
const uint32_t max_frame_length,
|
|
463
|
+
const uint32_t stream_fc_tokens,
|
|
431
464
|
HPackCompressor& encoder,
|
|
432
465
|
const bool can_send_reset_stream) {
|
|
433
466
|
MutexLock lock(&mu_);
|
|
434
467
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
435
|
-
<< "Dequeueing frames
|
|
436
|
-
<< " Max fc tokens: " << max_fc_tokens
|
|
468
|
+
<< "Dequeueing frames. Max fc tokens: " << max_fc_tokens
|
|
437
469
|
<< " Max frame length: " << max_frame_length
|
|
438
470
|
<< " Message disassembler buffered length: "
|
|
439
471
|
<< message_disassembler_.GetBufferedLength()
|
|
440
472
|
<< " Can send reset stream: " << can_send_reset_stream
|
|
441
473
|
<< " Reset stream state: " << static_cast<uint8_t>(reset_stream_state_);
|
|
474
|
+
GRPC_DCHECK_GT(stream_id_, 0u)
|
|
475
|
+
<< "Stream id must be set before dequeueing frames.";
|
|
442
476
|
|
|
443
477
|
// If a reset stream is queued, we do not want to send any more frames. Any
|
|
444
478
|
// metadata enqueued has not reached HPACK encoder, so it is safe to drop
|
|
@@ -465,14 +499,35 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
465
499
|
std::visit(handle_dequeue, std::move(*queue_entry));
|
|
466
500
|
}
|
|
467
501
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
502
|
+
GRPC_DCHECK_GE(stream_fc_tokens,
|
|
503
|
+
handle_dequeue.GetFlowControlTokensConsumed());
|
|
504
|
+
|
|
505
|
+
return DequeueResult{
|
|
506
|
+
handle_dequeue.GetFrames(),
|
|
507
|
+
UpdateWritableStateDequeueLocked(
|
|
508
|
+
stream_fc_tokens - handle_dequeue.GetFlowControlTokensConsumed()),
|
|
509
|
+
priority_,
|
|
510
|
+
handle_dequeue.GetTotalBytesConsumed(),
|
|
511
|
+
handle_dequeue.GetFlowControlTokensConsumed(),
|
|
512
|
+
handle_dequeue.GetDequeueFlags()};
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// TODO(tjagtap) : [PH2][P1][FlowControl] : Call this while processing
|
|
516
|
+
// window update frame.
|
|
517
|
+
// Needs to be invoked when the peer sends stream flow control window update.
|
|
518
|
+
// stream_fc_tokens represents the stream flow control (delta) window +
|
|
519
|
+
// intial_window_size.
|
|
520
|
+
StreamWritabilityUpdate ReceivedFlowControlWindowUpdate(
|
|
521
|
+
const uint32_t stream_fc_tokens) {
|
|
522
|
+
MutexLock lock(&mu_);
|
|
523
|
+
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
524
|
+
<< "Received flow control window update. stream_fc_tokens: "
|
|
525
|
+
<< stream_fc_tokens;
|
|
526
|
+
const bool old_writable_state = is_writable_;
|
|
527
|
+
const bool new_writable_state =
|
|
528
|
+
UpdateWritableStateDequeueLocked(stream_fc_tokens);
|
|
529
|
+
return {/*became_writable=*/(!old_writable_state && new_writable_state),
|
|
530
|
+
priority_};
|
|
476
531
|
}
|
|
477
532
|
|
|
478
533
|
// Returns true if the queue is empty. This function is thread safe.
|
|
@@ -498,7 +553,8 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
498
553
|
HPackCompressor& encoder, StreamDataQueue& queue)
|
|
499
554
|
: queue_(queue),
|
|
500
555
|
max_frame_length_(max_frame_length),
|
|
501
|
-
|
|
556
|
+
max_tokens_available_(max_tokens),
|
|
557
|
+
flow_control_tokens_consumed_(0),
|
|
502
558
|
encoder_(encoder) {}
|
|
503
559
|
|
|
504
560
|
void operator()(InitialMetadataType initial_metadata) {
|
|
@@ -542,6 +598,9 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
542
598
|
}
|
|
543
599
|
|
|
544
600
|
size_t GetTotalBytesConsumed() const { return total_bytes_consumed_; }
|
|
601
|
+
size_t GetFlowControlTokensConsumed() const {
|
|
602
|
+
return flow_control_tokens_consumed_;
|
|
603
|
+
}
|
|
545
604
|
uint8_t GetDequeueFlags() const { return dequeue_flags_; }
|
|
546
605
|
|
|
547
606
|
private:
|
|
@@ -586,16 +645,18 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
586
645
|
|
|
587
646
|
inline void MaybeAppendMessageFrames() {
|
|
588
647
|
while (queue_.message_disassembler_.GetBufferedLength() > 0 &&
|
|
589
|
-
|
|
648
|
+
(max_tokens_available_ - flow_control_tokens_consumed_) > 0) {
|
|
590
649
|
GRPC_DCHECK_EQ(
|
|
591
650
|
queue_.initial_metadata_disassembler_.GetBufferedLength(), 0u);
|
|
592
651
|
Http2DataFrame frame = queue_.message_disassembler_.GenerateNextFrame(
|
|
593
652
|
queue_.stream_id_,
|
|
594
|
-
std::min(
|
|
595
|
-
|
|
653
|
+
std::min(max_tokens_available_ - flow_control_tokens_consumed_,
|
|
654
|
+
max_frame_length_));
|
|
655
|
+
flow_control_tokens_consumed_ += frame.payload.Length();
|
|
596
656
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
597
657
|
<< "Appending message frame with length " << frame.payload.Length()
|
|
598
|
-
<< "
|
|
658
|
+
<< " Consumed tokens: " << flow_control_tokens_consumed_
|
|
659
|
+
<< " Max tokens: " << max_tokens_available_;
|
|
599
660
|
AppendFrame(std::move(frame));
|
|
600
661
|
}
|
|
601
662
|
}
|
|
@@ -620,7 +681,8 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
620
681
|
|
|
621
682
|
StreamDataQueue& queue_;
|
|
622
683
|
const uint32_t max_frame_length_;
|
|
623
|
-
uint32_t
|
|
684
|
+
const uint32_t max_tokens_available_;
|
|
685
|
+
uint32_t flow_control_tokens_consumed_;
|
|
624
686
|
uint32_t error_code_ = static_cast<uint32_t>(Http2ErrorCode::kNoError);
|
|
625
687
|
std::vector<Http2Frame> frames_;
|
|
626
688
|
HPackCompressor& encoder_;
|
|
@@ -628,28 +690,83 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
628
690
|
uint8_t dequeue_flags_ = 0u;
|
|
629
691
|
};
|
|
630
692
|
|
|
631
|
-
// Updates the
|
|
632
|
-
//
|
|
633
|
-
//
|
|
634
|
-
//
|
|
635
|
-
|
|
636
|
-
|
|
693
|
+
// Updates the writable state and priority of the stream. MUST only be called
|
|
694
|
+
// from the enqueue functions.
|
|
695
|
+
// became_non_empty: True if the queue was empty and became non-empty as a
|
|
696
|
+
// result of this enqueue operation.
|
|
697
|
+
// priority: The new priority of the stream after this enqueue operation.
|
|
698
|
+
// Returns the result of the enqueue operation
|
|
699
|
+
//
|
|
700
|
+
// High level flow:
|
|
701
|
+
// Priority is simply updated to the new priority.
|
|
702
|
+
// Writable state is updated as follows:
|
|
703
|
+
// 1. If the stream was not writable before and became non-empty as a result
|
|
704
|
+
// of this enqueue operation, then the stream is marked as writable.
|
|
705
|
+
// 2. If the stream was already writable before, it remains writable.
|
|
706
|
+
// 3. The case where the stream was not writable before and the queue already
|
|
707
|
+
// contained data implies that the stream is blocked on stream flow control
|
|
708
|
+
// tokens. When the transport receives stream flow control window update,
|
|
709
|
+
// the stream is marked as writable.
|
|
710
|
+
// For enqueue operations there is no easy way to query
|
|
711
|
+
// stream_flow_control_tokens. So it is assumed that flow control tokens are
|
|
712
|
+
// always available for an enqueue operation. This can cause a stream to be
|
|
713
|
+
// marked as writable when it is not but this will correct itself in the next
|
|
714
|
+
// dequeue operation (which returns an accurate is_writable).
|
|
715
|
+
StreamWritabilityUpdate UpdateWritableStateAndPriorityEnqueueLocked(
|
|
716
|
+
const bool became_non_empty, const WritableStreamPriority priority)
|
|
637
717
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
|
718
|
+
// Update priority.
|
|
638
719
|
priority_ = priority;
|
|
720
|
+
|
|
721
|
+
// Update writable state.
|
|
639
722
|
if (!is_writable_ && became_non_empty) {
|
|
640
723
|
is_writable_ = true;
|
|
641
724
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
642
|
-
<< "UpdateWritableStateLocked
|
|
643
|
-
<< " became writable with priority: "
|
|
725
|
+
<< "UpdateWritableStateLocked became writable with priority: "
|
|
644
726
|
<< GetWritableStreamPriorityString(priority_);
|
|
645
|
-
return
|
|
727
|
+
return StreamWritabilityUpdate{/*became_writable=*/true, priority_};
|
|
646
728
|
}
|
|
647
729
|
|
|
648
730
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
649
|
-
<< "
|
|
650
|
-
<<
|
|
731
|
+
<< "UpdateWritableStateAndPriorityEnqueueLocked with priority: "
|
|
732
|
+
<< GetWritableStreamPriorityString(priority_)
|
|
651
733
|
<< " is_writable: " << is_writable_;
|
|
652
|
-
return
|
|
734
|
+
return StreamWritabilityUpdate{/*became_writable=*/false, priority_};
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
// Updates the writable state of the stream. Returns true if the
|
|
738
|
+
// stream became writable.
|
|
739
|
+
// Writable state is updated as follows:
|
|
740
|
+
// 1. If the next message to dequeue is a grpc message, then the stream is
|
|
741
|
+
// writable if and only if we have available stream flow control tokens.
|
|
742
|
+
// 2. If the next message to dequeue is not a grpc message, then the stream is
|
|
743
|
+
// writable if and only if the queue is not empty.
|
|
744
|
+
// Unlike UpdateWritableStateAndPriorityEnqueueLocked, this function the
|
|
745
|
+
// become_writable returned by this function is `accurate` as it considers
|
|
746
|
+
// the whether the stream has bytes to write and the flow control tokens
|
|
747
|
+
// available.
|
|
748
|
+
bool UpdateWritableStateDequeueLocked(
|
|
749
|
+
const uint32_t available_stream_fc_tokens)
|
|
750
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
|
751
|
+
// The stream is writable if the queue is not empty. If the next bytes to
|
|
752
|
+
// write are part of a gRPC message, then check if we have stream flow
|
|
753
|
+
// control tokens.
|
|
754
|
+
is_writable_ = (!queue_.IsEmpty());
|
|
755
|
+
|
|
756
|
+
// Next bytes to write are part of a gRPC message.
|
|
757
|
+
if (message_disassembler_.GetBufferedLength() > 0 ||
|
|
758
|
+
IsNextQueueEntryMessage()) {
|
|
759
|
+
is_writable_ = (available_stream_fc_tokens > 0);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
GRPC_STREAM_DATA_QUEUE_DEBUG << "UpdateWritableStateLocked with priority: "
|
|
763
|
+
<< GetWritableStreamPriorityString(priority_)
|
|
764
|
+
<< " is_writable: " << is_writable_;
|
|
765
|
+
return is_writable_;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
inline bool IsNextQueueEntryMessage() const {
|
|
769
|
+
return (!queue_.IsEmpty() && queue_.GetNextEntryTokens().value() > 0);
|
|
653
770
|
}
|
|
654
771
|
|
|
655
772
|
// Handles the case where a reset stream is queued.
|
|
@@ -661,17 +778,17 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
661
778
|
switch (reset_stream_state_) {
|
|
662
779
|
case RstStreamState::kDequeued:
|
|
663
780
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
664
|
-
<< "Reset stream is already dequeued
|
|
665
|
-
<< ". Returning empty frames.";
|
|
781
|
+
<< "Reset stream is already dequeued. Returning empty frames.";
|
|
666
782
|
GRPC_DCHECK(queue_.IsEmpty());
|
|
667
783
|
is_writable_ = false;
|
|
668
|
-
return DequeueResult{
|
|
669
|
-
|
|
784
|
+
return DequeueResult{
|
|
785
|
+
std::vector<Http2Frame>(), is_writable_, priority_,
|
|
786
|
+
/*total_bytes_consumed=*/0u,
|
|
787
|
+
/*flow_control_tokens_consumed=*/0u, /*flags=*/0u};
|
|
670
788
|
case RstStreamState::kQueued: {
|
|
671
789
|
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
672
790
|
<< "Reset stream is queued. Skipping all frames (if any) for "
|
|
673
|
-
"dequeuing
|
|
674
|
-
<< stream_id_;
|
|
791
|
+
"dequeuing.";
|
|
675
792
|
is_writable_ = false;
|
|
676
793
|
std::vector<Http2Frame> frames;
|
|
677
794
|
uint8_t flags = 0u;
|
|
@@ -682,14 +799,19 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
682
799
|
}
|
|
683
800
|
queue_.Clear();
|
|
684
801
|
reset_stream_state_ = RstStreamState::kDequeued;
|
|
685
|
-
return DequeueResult{std::move(frames),
|
|
686
|
-
|
|
802
|
+
return DequeueResult{std::move(frames),
|
|
803
|
+
is_writable_,
|
|
804
|
+
priority_,
|
|
805
|
+
/*total_bytes_consumed=*/0u,
|
|
806
|
+
/*flow_control_tokens_consumed=*/0u,
|
|
807
|
+
flags};
|
|
687
808
|
}
|
|
688
809
|
case RstStreamState::kNotQueued:
|
|
689
810
|
return std::nullopt;
|
|
690
811
|
default:
|
|
691
812
|
GRPC_CHECK(false) << "Invalid reset stream state: "
|
|
692
813
|
<< static_cast<uint8_t>(reset_stream_state_);
|
|
814
|
+
return std::nullopt;
|
|
693
815
|
}
|
|
694
816
|
}
|
|
695
817
|
|
|
@@ -701,18 +823,19 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
701
823
|
case RstStreamState::kDequeued:
|
|
702
824
|
// This can happen when the transport tries to close the stream and the
|
|
703
825
|
// stream is cancelled from the call stack.
|
|
704
|
-
GRPC_STREAM_DATA_QUEUE_DEBUG
|
|
705
|
-
<< "Reset stream already queued for stream " << stream_id_;
|
|
826
|
+
GRPC_STREAM_DATA_QUEUE_DEBUG << "Reset stream already queued.";
|
|
706
827
|
return true;
|
|
707
828
|
default:
|
|
708
829
|
GRPC_CHECK(false) << "Invalid reset stream state: "
|
|
709
830
|
<< static_cast<uint8_t>(reset_stream_state_);
|
|
710
831
|
}
|
|
711
832
|
|
|
712
|
-
GPR_UNREACHABLE_CODE(
|
|
833
|
+
GPR_UNREACHABLE_CODE(return false);
|
|
713
834
|
}
|
|
714
835
|
|
|
715
|
-
|
|
836
|
+
uint32_t stream_id_;
|
|
837
|
+
|
|
838
|
+
// This is only used for DCHECKs. Not actually used for any business logic.
|
|
716
839
|
const bool is_client_;
|
|
717
840
|
|
|
718
841
|
enum class RstStreamState : uint8_t {
|
|
@@ -727,6 +850,10 @@ class StreamDataQueue : public RefCounted<StreamDataQueue<MetadataHandle>> {
|
|
|
727
850
|
|
|
728
851
|
// Access both during enqueue and dequeue.
|
|
729
852
|
Mutex mu_;
|
|
853
|
+
// This variable tracks whether the stream is writable. 'Writable' represents
|
|
854
|
+
// that the stream has bytes to send and the stream has flow control tokens
|
|
855
|
+
// (if needed) to send them. This variable also has 1-1 correspondence with
|
|
856
|
+
// whether the stream is in the list of writable streams in the transport.
|
|
730
857
|
bool is_writable_ ABSL_GUARDED_BY(mu_) = false;
|
|
731
858
|
RstStreamState reset_stream_state_ ABSL_GUARDED_BY(mu_) =
|
|
732
859
|
RstStreamState::kNotQueued;
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
|
|
21
21
|
#include <grpc/support/port_platform.h>
|
|
22
22
|
|
|
23
|
-
#include "absl/log/log.h"
|
|
24
23
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
25
24
|
#include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
|
|
26
25
|
#include "src/core/lib/debug/trace.h"
|
|
27
26
|
#include "src/core/lib/experiments/experiments.h"
|
|
28
27
|
#include "src/core/util/bitset.h"
|
|
29
28
|
#include "src/core/util/grpc_check.h"
|
|
29
|
+
#include "absl/log/log.h"
|
|
30
30
|
|
|
31
31
|
static const char* stream_list_id_string(grpc_chttp2_stream_list_id id) {
|
|
32
32
|
switch (id) {
|
|
@@ -44,6 +44,11 @@
|
|
|
44
44
|
#define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \
|
|
45
45
|
"grpc.http.max_concurrent_streams_reject_on_client"
|
|
46
46
|
|
|
47
|
+
#define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
|
|
48
|
+
|
|
49
|
+
#define GRPC_CHTTP2_PING_TIMEOUT_STR "ping timeout"
|
|
50
|
+
#define GRPC_CHTTP2_KEEPALIVE_TIMEOUT_STR "keepalive timeout"
|
|
51
|
+
|
|
47
52
|
namespace grpc_core {
|
|
48
53
|
|
|
49
54
|
Duration TarpitDuration(int min_tarpit_duration_ms, int max_tarpit_duration_ms);
|