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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
//
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2025 gRPC authors.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
// you may not use this file except in compliance with the License.
|
|
7
|
+
// You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
// See the License for the specific language governing permissions and
|
|
15
|
+
// limitations under the License.
|
|
16
|
+
//
|
|
17
|
+
//
|
|
18
|
+
|
|
19
|
+
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
|
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
|
|
21
|
+
|
|
22
|
+
#include <cstdint>
|
|
23
|
+
#include <string>
|
|
24
|
+
|
|
25
|
+
#include "src/core/call/metadata_info.h"
|
|
26
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
27
|
+
#include "src/core/util/grpc_check.h"
|
|
28
|
+
#include "absl/strings/str_cat.h"
|
|
29
|
+
|
|
30
|
+
namespace grpc_core {
|
|
31
|
+
namespace http2 {
|
|
32
|
+
|
|
33
|
+
class IncomingMetadataTracker {
|
|
34
|
+
// Manages transport-wide state for incoming HEADERS and CONTINUATION frames.
|
|
35
|
+
// RFC 9113 (Section 6.10) requires that if a HEADERS frame does not have
|
|
36
|
+
// END_HEADERS set, it must be followed by a contiguous sequence of
|
|
37
|
+
// CONTINUATION frames for the same stream, ending with END_HEADERS. No other
|
|
38
|
+
// frame types or frames for other streams may be interleaved during this
|
|
39
|
+
// sequence. This constraint makes tracking header sequence state a
|
|
40
|
+
// transport-level concern, as only one stream can be receiving headers at
|
|
41
|
+
// a time. This class is distinct from HeaderAssembler, which buffers header
|
|
42
|
+
// payloads on a per-stream basis.
|
|
43
|
+
public:
|
|
44
|
+
IncomingMetadataTracker() = default;
|
|
45
|
+
~IncomingMetadataTracker() = default;
|
|
46
|
+
|
|
47
|
+
IncomingMetadataTracker(IncomingMetadataTracker&& rvalue) = delete;
|
|
48
|
+
IncomingMetadataTracker& operator=(IncomingMetadataTracker&& rvalue) = delete;
|
|
49
|
+
IncomingMetadataTracker(const IncomingMetadataTracker&) = delete;
|
|
50
|
+
IncomingMetadataTracker& operator=(const IncomingMetadataTracker&) = delete;
|
|
51
|
+
|
|
52
|
+
void set_soft_limit(uint32_t limit) {
|
|
53
|
+
max_header_list_size_soft_limit_ = limit;
|
|
54
|
+
}
|
|
55
|
+
uint32_t soft_limit() const { return max_header_list_size_soft_limit_; }
|
|
56
|
+
|
|
57
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
58
|
+
// Writing Header and Continuation State
|
|
59
|
+
|
|
60
|
+
// Called when a HEADER frame is received.
|
|
61
|
+
void OnHeaderReceived(const Http2HeaderFrame& frame) {
|
|
62
|
+
GRPC_CHECK(!incoming_header_in_progress_);
|
|
63
|
+
incoming_header_in_progress_ = !frame.end_headers;
|
|
64
|
+
incoming_header_stream_id_ = frame.stream_id;
|
|
65
|
+
incoming_header_end_stream_ = frame.end_stream;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Called when a CONTINUATION frame is received.
|
|
69
|
+
void OnContinuationReceived(const Http2ContinuationFrame& frame) {
|
|
70
|
+
GRPC_CHECK(incoming_header_in_progress_);
|
|
71
|
+
GRPC_CHECK_EQ(frame.stream_id, incoming_header_stream_id_);
|
|
72
|
+
incoming_header_in_progress_ = !frame.end_headers;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
76
|
+
// Reading Header and Continuation State
|
|
77
|
+
|
|
78
|
+
// Returns true if we are in the middle of receiving a header block
|
|
79
|
+
// (i.e., HEADERS without END_HEADERS was received, and we are waiting for
|
|
80
|
+
// CONTINUATION frames).
|
|
81
|
+
bool IsWaitingForContinuationFrame() const {
|
|
82
|
+
return incoming_header_in_progress_;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Returns true if end_stream was set in the received header.
|
|
86
|
+
bool HeaderHasEndStream() const { return incoming_header_end_stream_; }
|
|
87
|
+
|
|
88
|
+
// Returns stream id of stream for which headers are being received.
|
|
89
|
+
uint32_t GetStreamId() const { return incoming_header_stream_id_; }
|
|
90
|
+
|
|
91
|
+
bool ClientReceivedDuplicateMetadata(
|
|
92
|
+
const bool did_receive_initial_metadata,
|
|
93
|
+
const bool did_receive_trailing_metadata) const {
|
|
94
|
+
const bool is_duplicate_initial_metadata =
|
|
95
|
+
!incoming_header_end_stream_ && did_receive_initial_metadata;
|
|
96
|
+
const bool is_duplicate_trailing_metadata =
|
|
97
|
+
incoming_header_end_stream_ && did_receive_trailing_metadata;
|
|
98
|
+
return is_duplicate_initial_metadata || is_duplicate_trailing_metadata;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
bool ServerReceivedDuplicateMetadata(
|
|
102
|
+
const bool did_receive_initial_metadata) const {
|
|
103
|
+
// TODO(tjagtap) : [PH2][P2] : Verify this when implementing Server.
|
|
104
|
+
// Also write a small unit test for it.
|
|
105
|
+
return !incoming_header_end_stream_ && did_receive_initial_metadata;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
std::string DebugString() const {
|
|
109
|
+
return absl::StrCat(
|
|
110
|
+
"{ incoming_header_in_progress : ",
|
|
111
|
+
incoming_header_in_progress_ ? "true" : "false",
|
|
112
|
+
", incoming_header_end_stream : ",
|
|
113
|
+
incoming_header_end_stream_ ? "true" : "false",
|
|
114
|
+
", incoming_header_stream_id : ", incoming_header_stream_id_, "}");
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private:
|
|
118
|
+
bool incoming_header_in_progress_ = false;
|
|
119
|
+
bool incoming_header_end_stream_ = false;
|
|
120
|
+
uint32_t incoming_header_stream_id_ = 0;
|
|
121
|
+
uint32_t max_header_list_size_soft_limit_ =
|
|
122
|
+
DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
} // namespace http2
|
|
126
|
+
} // namespace grpc_core
|
|
127
|
+
|
|
128
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
|
|
@@ -34,10 +34,6 @@
|
|
|
34
34
|
#include <utility>
|
|
35
35
|
#include <variant>
|
|
36
36
|
|
|
37
|
-
#include "absl/container/flat_hash_map.h"
|
|
38
|
-
#include "absl/random/random.h"
|
|
39
|
-
#include "absl/status/status.h"
|
|
40
|
-
#include "absl/strings/string_view.h"
|
|
41
37
|
#include "src/core/call/metadata_batch.h"
|
|
42
38
|
#include "src/core/channelz/channelz.h"
|
|
43
39
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
@@ -68,6 +64,7 @@
|
|
|
68
64
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
|
69
65
|
#include "src/core/lib/resource_quota/arena.h"
|
|
70
66
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
|
67
|
+
#include "src/core/lib/resource_quota/stream_quota.h"
|
|
71
68
|
#include "src/core/lib/slice/slice.h"
|
|
72
69
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
73
70
|
#include "src/core/lib/surface/init_internally.h"
|
|
@@ -83,6 +80,10 @@
|
|
|
83
80
|
#include "src/core/util/ref_counted.h"
|
|
84
81
|
#include "src/core/util/ref_counted_ptr.h"
|
|
85
82
|
#include "src/core/util/time.h"
|
|
83
|
+
#include "absl/container/flat_hash_map.h"
|
|
84
|
+
#include "absl/random/random.h"
|
|
85
|
+
#include "absl/status/status.h"
|
|
86
|
+
#include "absl/strings/string_view.h"
|
|
86
87
|
|
|
87
88
|
// Flag that this closure barrier may be covering a write in a pollset, and so
|
|
88
89
|
// we should not complete this closure until we can prove that the write got
|
|
@@ -288,6 +289,19 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
288
289
|
void WriteSecurityFrame(grpc_core::SliceBuffer* data);
|
|
289
290
|
void WriteSecurityFrameLocked(grpc_core::SliceBuffer* data);
|
|
290
291
|
|
|
292
|
+
void StartWatch(grpc_core::RefCountedPtr<StateWatcher> watcher) override;
|
|
293
|
+
void StopWatch(grpc_core::RefCountedPtr<StateWatcher> watcher) override;
|
|
294
|
+
|
|
295
|
+
void NotifyStateWatcherOnDisconnectLocked(
|
|
296
|
+
absl::Status status, StateWatcher::DisconnectInfo disconnect_info);
|
|
297
|
+
|
|
298
|
+
void OnPeerMaxConcurrentStreamsUpdateComplete();
|
|
299
|
+
void MaybeNotifyStateWatcherOfPeerMaxConcurrentStreamsLocked();
|
|
300
|
+
void NotifyStateWatcherOnPeerMaxConcurrentStreamsUpdateLocked();
|
|
301
|
+
|
|
302
|
+
void MaybeNotifyOnReceiveSettingsLocked(
|
|
303
|
+
absl::StatusOr<uint32_t> max_concurrent_streams);
|
|
304
|
+
|
|
291
305
|
// We depend on the ep being available for the life of the transport in
|
|
292
306
|
// at least one place - event callback in WriteEventSink. Hence, this should
|
|
293
307
|
// only be orphaned in the destructor.
|
|
@@ -316,7 +330,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
316
330
|
// starts a connectivity watch.
|
|
317
331
|
grpc_pollset_set* interested_parties_until_recv_settings = nullptr;
|
|
318
332
|
|
|
319
|
-
|
|
333
|
+
absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> notify_on_receive_settings;
|
|
320
334
|
grpc_closure* notify_on_close = nullptr;
|
|
321
335
|
|
|
322
336
|
/// has the upper layer closed the transport?
|
|
@@ -375,7 +389,12 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
375
389
|
void* user_data, grpc_core::ServerMetadata* metadata) = nullptr;
|
|
376
390
|
void* accept_stream_cb_user_data;
|
|
377
391
|
|
|
392
|
+
// There should be only a single watcher in use at any given time.
|
|
393
|
+
grpc_core::RefCountedPtr<StateWatcher> watcher;
|
|
394
|
+
uint32_t last_reported_max_concurrent_streams;
|
|
395
|
+
bool max_concurrent_streams_notification_in_flight;
|
|
378
396
|
/// connectivity tracking
|
|
397
|
+
// TODO(roth): Get rid of this in favor of the new state watcher.
|
|
379
398
|
grpc_core::ConnectivityStateTracker state_tracker;
|
|
380
399
|
|
|
381
400
|
/// data to write now
|
|
@@ -593,6 +612,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
|
|
|
593
612
|
|
|
594
613
|
std::shared_ptr<grpc_core::Http2StatsCollector> http2_stats;
|
|
595
614
|
grpc_core::Http2ZTraceCollector http2_ztrace_collector;
|
|
615
|
+
grpc_core::Timestamp last_ztrace_time = grpc_core::Timestamp::InfPast();
|
|
596
616
|
|
|
597
617
|
GPR_NO_UNIQUE_ADDRESS grpc_core::latent_see::Flow write_flow;
|
|
598
618
|
};
|
|
@@ -17,21 +17,28 @@
|
|
|
17
17
|
//
|
|
18
18
|
#include "src/core/ext/transport/chttp2/transport/keepalive.h"
|
|
19
19
|
|
|
20
|
+
#include <utility>
|
|
21
|
+
|
|
20
22
|
#include "src/core/lib/promise/all_ok.h"
|
|
21
23
|
#include "src/core/lib/promise/if.h"
|
|
22
24
|
#include "src/core/lib/promise/loop.h"
|
|
25
|
+
#include "src/core/lib/promise/party.h"
|
|
23
26
|
#include "src/core/lib/promise/race.h"
|
|
24
27
|
#include "src/core/lib/promise/sleep.h"
|
|
25
28
|
#include "src/core/lib/promise/try_seq.h"
|
|
29
|
+
#include "src/core/util/grpc_check.h"
|
|
30
|
+
#include "src/core/util/time.h"
|
|
26
31
|
|
|
27
32
|
namespace grpc_core {
|
|
28
33
|
namespace http2 {
|
|
29
34
|
KeepaliveManager::KeepaliveManager(
|
|
30
35
|
std::unique_ptr<KeepAliveInterface> keep_alive_interface,
|
|
31
|
-
Duration keepalive_timeout, const Duration keepalive_time)
|
|
36
|
+
Duration keepalive_timeout, const Duration keepalive_time, Party* party)
|
|
32
37
|
: keep_alive_interface_(std::move(keep_alive_interface)),
|
|
33
38
|
keepalive_timeout_(keepalive_timeout),
|
|
34
|
-
keepalive_time_(keepalive_time) {
|
|
39
|
+
keepalive_time_(keepalive_time) {
|
|
40
|
+
MaybeSpawnKeepaliveLoop(party);
|
|
41
|
+
}
|
|
35
42
|
|
|
36
43
|
auto KeepaliveManager::WaitForKeepAliveTimeout() {
|
|
37
44
|
return AssertResultType<absl::Status>(
|
|
@@ -59,8 +66,8 @@ auto KeepaliveManager::WaitForKeepAliveTimeout() {
|
|
|
59
66
|
}));
|
|
60
67
|
}
|
|
61
68
|
auto KeepaliveManager::TimeoutAndSendPing() {
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
GRPC_DCHECK(!data_received_in_last_cycle_);
|
|
70
|
+
GRPC_DCHECK(keepalive_timeout_ != Duration::Infinity());
|
|
64
71
|
|
|
65
72
|
return AllOk<absl::Status>(Race(WaitForData(), WaitForKeepAliveTimeout()),
|
|
66
73
|
SendPingAndWaitForAck());
|
|
@@ -83,7 +90,7 @@ auto KeepaliveManager::MaybeSendKeepAlivePing() {
|
|
|
83
90
|
}));
|
|
84
91
|
}
|
|
85
92
|
|
|
86
|
-
void KeepaliveManager::
|
|
93
|
+
void KeepaliveManager::MaybeSpawnKeepaliveLoop(Party* party) {
|
|
87
94
|
if (!IsKeepAliveNeeded()) {
|
|
88
95
|
GRPC_HTTP2_KEEPALIVE_LOG << "Not spawning keepalive loop.";
|
|
89
96
|
return;
|
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_KEEPALIVE_H
|
|
19
19
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_KEEPALIVE_H
|
|
20
20
|
|
|
21
|
-
#include "absl/status/status.h"
|
|
22
21
|
#include "src/core/lib/promise/party.h"
|
|
23
22
|
#include "src/core/lib/promise/promise.h"
|
|
23
|
+
#include "src/core/util/grpc_check.h"
|
|
24
|
+
#include "absl/status/status.h"
|
|
24
25
|
|
|
25
26
|
namespace grpc_core {
|
|
26
27
|
namespace http2 {
|
|
@@ -44,11 +45,8 @@ class KeepAliveInterface {
|
|
|
44
45
|
class KeepaliveManager {
|
|
45
46
|
public:
|
|
46
47
|
KeepaliveManager(std::unique_ptr<KeepAliveInterface> keep_alive_interface,
|
|
47
|
-
Duration keepalive_timeout, Duration keepalive_time
|
|
48
|
-
|
|
49
|
-
// Spawns the keepalive loop on the given party. This MUST be called at most
|
|
50
|
-
// once during the lifetime of the keepalive manager.
|
|
51
|
-
void Spawn(Party* party);
|
|
48
|
+
Duration keepalive_timeout, Duration keepalive_time,
|
|
49
|
+
Party* party);
|
|
52
50
|
|
|
53
51
|
// Needs to be called when any data is read from the endpoint.
|
|
54
52
|
void GotData() {
|
|
@@ -69,6 +67,10 @@ class KeepaliveManager {
|
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
private:
|
|
70
|
+
// Spawns the keepalive loop on the given party. This MUST be called at most
|
|
71
|
+
// once during the lifetime of the keepalive manager.
|
|
72
|
+
void MaybeSpawnKeepaliveLoop(Party* party);
|
|
73
|
+
|
|
72
74
|
// Returns a promise that sleeps for the keepalive_timeout_ and triggers the
|
|
73
75
|
// keepalive timeout unless data is read within the keepalive timeout.
|
|
74
76
|
auto WaitForKeepAliveTimeout();
|
|
@@ -104,7 +106,7 @@ class KeepaliveManager {
|
|
|
104
106
|
};
|
|
105
107
|
}
|
|
106
108
|
auto SendPingAndWaitForAck() {
|
|
107
|
-
|
|
109
|
+
GRPC_DCHECK_EQ(data_received_in_last_cycle_, false);
|
|
108
110
|
return keep_alive_interface_->SendPingAndWaitForAck();
|
|
109
111
|
}
|
|
110
112
|
|
|
@@ -121,10 +123,12 @@ class KeepaliveManager {
|
|
|
121
123
|
}
|
|
122
124
|
|
|
123
125
|
std::unique_ptr<KeepAliveInterface> keep_alive_interface_;
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
// timeout
|
|
126
|
+
// Duration to wait before triggering a keepalive timeout. If the
|
|
127
|
+
// keepalive_timeout_ is set to infinity, then the timeout is dictated by the
|
|
128
|
+
// ping timeout. Otherwise, this field can be used to set a specific timeout
|
|
129
|
+
// for keepalive pings.
|
|
127
130
|
Duration keepalive_timeout_;
|
|
131
|
+
// Duration between two consecutive keepalive pings.
|
|
128
132
|
const Duration keepalive_time_;
|
|
129
133
|
bool data_received_in_last_cycle_ = false;
|
|
130
134
|
bool keep_alive_timeout_triggered_ = false;
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_MESSAGE_ASSEMBLER_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_MESSAGE_ASSEMBLER_H
|
|
21
21
|
|
|
22
|
+
#include <grpc/support/port_platform.h>
|
|
23
|
+
|
|
22
24
|
#include <cstdint>
|
|
23
25
|
#include <utility>
|
|
24
26
|
|
|
@@ -30,10 +32,13 @@
|
|
|
30
32
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
31
33
|
#include "src/core/util/grpc_check.h"
|
|
32
34
|
#include "src/core/util/ref_counted_ptr.h"
|
|
35
|
+
#include "absl/log/log.h"
|
|
33
36
|
|
|
34
37
|
namespace grpc_core {
|
|
35
38
|
namespace http2 {
|
|
36
39
|
|
|
40
|
+
#define GRPC_MESSAGE_ASSEMBLER_DEBUG VLOG(2)
|
|
41
|
+
|
|
37
42
|
// TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
|
|
38
43
|
// assembler and disassembler code
|
|
39
44
|
|
|
@@ -79,15 +84,21 @@ class GrpcMessageAssembler {
|
|
|
79
84
|
// TODO(tjagtap) : [PH2][P3] : Write a test for this.
|
|
80
85
|
return ReturnNullOrError();
|
|
81
86
|
}
|
|
82
|
-
GrpcMessageHeader header =
|
|
87
|
+
ValueOrHttp2Status<GrpcMessageHeader> header =
|
|
88
|
+
ExtractGrpcHeader(message_buffer_);
|
|
89
|
+
if (!header.IsOk()) {
|
|
90
|
+
return header.TakeStatus(std::move(header));
|
|
91
|
+
}
|
|
92
|
+
const uint32_t header_length = header.value().length;
|
|
93
|
+
|
|
83
94
|
if constexpr (sizeof(size_t) == 4) {
|
|
84
|
-
if (GPR_UNLIKELY(
|
|
95
|
+
if (GPR_UNLIKELY(header_length > kOneGb)) {
|
|
85
96
|
return Http2Status::Http2StreamError(
|
|
86
97
|
Http2ErrorCode::kInternalError,
|
|
87
98
|
"Stream Error: SliceBuffer overflow for 32 bit platforms.");
|
|
88
99
|
}
|
|
89
100
|
}
|
|
90
|
-
if (GPR_LIKELY(current_len - kGrpcHeaderSizeInBytes >=
|
|
101
|
+
if (GPR_LIKELY(current_len - kGrpcHeaderSizeInBytes >= header_length)) {
|
|
91
102
|
SliceBuffer discard;
|
|
92
103
|
message_buffer_.MoveFirstNBytesIntoSliceBuffer(kGrpcHeaderSizeInBytes,
|
|
93
104
|
discard);
|
|
@@ -98,9 +109,8 @@ class GrpcMessageAssembler {
|
|
|
98
109
|
// bounds.
|
|
99
110
|
MessageHandle grpc_message = Arena::MakePooled<Message>();
|
|
100
111
|
message_buffer_.MoveFirstNBytesIntoSliceBuffer(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
flag = header.flags;
|
|
112
|
+
header_length, *(grpc_message->payload()));
|
|
113
|
+
grpc_message->mutable_flags() = header.value().flags;
|
|
104
114
|
return std::move(grpc_message);
|
|
105
115
|
}
|
|
106
116
|
return ReturnNullOrError();
|
|
@@ -112,21 +122,18 @@ class GrpcMessageAssembler {
|
|
|
112
122
|
return Http2Status::Http2StreamError(Http2ErrorCode::kInternalError,
|
|
113
123
|
"Incomplete gRPC frame received");
|
|
114
124
|
}
|
|
115
|
-
|
|
125
|
+
GRPC_MESSAGE_ASSEMBLER_DEBUG
|
|
126
|
+
<< "Incomplete gRPC message received. Return nullptr";
|
|
116
127
|
return ValueOrHttp2Status<MessageHandle>(nullptr);
|
|
117
128
|
}
|
|
129
|
+
|
|
118
130
|
bool is_end_stream_ = false;
|
|
119
131
|
SliceBuffer message_buffer_;
|
|
120
132
|
};
|
|
121
133
|
|
|
122
|
-
constexpr uint32_t kMaxMessageBatchSize = (16 * 1024u);
|
|
123
|
-
|
|
124
134
|
// This class is meant to convert gRPC Messages into Http2DataFrame ensuring
|
|
125
135
|
// that the payload size of the data frame is configurable.
|
|
126
|
-
// This class is not responsible for queueing or backpressure.
|
|
127
|
-
// by other classes.
|
|
128
|
-
// TODO(tjagtap) : [PH2][P2] Edit comment once this
|
|
129
|
-
// class is integrated and exercised.
|
|
136
|
+
// This class is not responsible for queueing or backpressure.
|
|
130
137
|
class GrpcMessageDisassembler {
|
|
131
138
|
public:
|
|
132
139
|
// One GrpcMessageDisassembler instance MUST be associated with one stream
|
|
@@ -141,9 +148,11 @@ class GrpcMessageDisassembler {
|
|
|
141
148
|
|
|
142
149
|
// GrpcMessageDisassembler object will take ownership of the message.
|
|
143
150
|
void PrepareBatchedMessageForSending(MessageHandle message) {
|
|
151
|
+
// The size of the message is controlled by the application (and by using
|
|
152
|
+
// GRPC_ARG_MAX_SEND_MESSAGE_LENGTH). PH2 ensures that if the the message
|
|
153
|
+
// size is larger than the default stream queue size kStreamQueueSize, at
|
|
154
|
+
// max one message will be buffered in the disassembler.
|
|
144
155
|
PrepareMessageForSending(std::move(message));
|
|
145
|
-
GRPC_DCHECK_LE(GetBufferedLength(), kMaxMessageBatchSize)
|
|
146
|
-
<< "Avoid batches larger than " << kMaxMessageBatchSize << "bytes";
|
|
147
156
|
}
|
|
148
157
|
|
|
149
158
|
size_t GetBufferedLength() const { return message_.Length(); }
|
|
@@ -31,14 +31,6 @@
|
|
|
31
31
|
#include <utility>
|
|
32
32
|
#include <variant>
|
|
33
33
|
|
|
34
|
-
#include "absl/base/attributes.h"
|
|
35
|
-
#include "absl/container/flat_hash_map.h"
|
|
36
|
-
#include "absl/log/log.h"
|
|
37
|
-
#include "absl/random/bit_gen_ref.h"
|
|
38
|
-
#include "absl/status/status.h"
|
|
39
|
-
#include "absl/strings/str_cat.h"
|
|
40
|
-
#include "absl/strings/str_format.h"
|
|
41
|
-
#include "absl/strings/string_view.h"
|
|
42
34
|
#include "src/core/call/metadata_batch.h"
|
|
43
35
|
#include "src/core/channelz/channelz.h"
|
|
44
36
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
@@ -77,6 +69,14 @@
|
|
|
77
69
|
#include "src/core/util/ref_counted_ptr.h"
|
|
78
70
|
#include "src/core/util/shared_bit_gen.h"
|
|
79
71
|
#include "src/core/util/status_helper.h"
|
|
72
|
+
#include "absl/base/attributes.h"
|
|
73
|
+
#include "absl/container/flat_hash_map.h"
|
|
74
|
+
#include "absl/log/log.h"
|
|
75
|
+
#include "absl/random/bit_gen_ref.h"
|
|
76
|
+
#include "absl/status/status.h"
|
|
77
|
+
#include "absl/strings/str_cat.h"
|
|
78
|
+
#include "absl/strings/str_format.h"
|
|
79
|
+
#include "absl/strings/string_view.h"
|
|
80
80
|
|
|
81
81
|
using grpc_core::HPackParser;
|
|
82
82
|
using grpc_core::http2::Http2ErrorCode;
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
#include <optional>
|
|
25
25
|
#include <vector>
|
|
26
26
|
|
|
27
|
+
#include "src/core/channelz/property_list.h"
|
|
28
|
+
#include "src/core/lib/debug/trace.h"
|
|
29
|
+
#include "src/core/util/time.h"
|
|
27
30
|
#include "absl/container/flat_hash_map.h"
|
|
28
31
|
#include "absl/functional/any_invocable.h"
|
|
29
32
|
#include "absl/hash/hash.h"
|
|
30
33
|
#include "absl/random/bit_gen_ref.h"
|
|
31
|
-
#include "src/core/channelz/property_list.h"
|
|
32
|
-
#include "src/core/lib/debug/trace.h"
|
|
33
|
-
#include "src/core/util/time.h"
|
|
34
34
|
|
|
35
35
|
namespace grpc_core {
|
|
36
36
|
|
|
@@ -17,12 +17,17 @@
|
|
|
17
17
|
//
|
|
18
18
|
#include "src/core/ext/transport/chttp2/transport/ping_promise.h"
|
|
19
19
|
|
|
20
|
+
#include <memory>
|
|
21
|
+
#include <utility>
|
|
22
|
+
|
|
23
|
+
#include "src/core/lib/channel/channel_args.h"
|
|
20
24
|
#include "src/core/lib/promise/latch.h"
|
|
21
25
|
#include "src/core/lib/promise/map.h"
|
|
22
26
|
#include "src/core/lib/promise/party.h"
|
|
23
27
|
#include "src/core/lib/promise/race.h"
|
|
24
28
|
#include "src/core/lib/promise/sleep.h"
|
|
25
29
|
#include "src/core/lib/promise/try_seq.h"
|
|
30
|
+
#include "src/core/util/grpc_check.h"
|
|
26
31
|
#include "src/core/util/match.h"
|
|
27
32
|
#include "src/core/util/time.h"
|
|
28
33
|
|
|
@@ -54,13 +59,14 @@ Promise<absl::Status> PingManager::PingPromiseCallbacks::WaitForPingAck() {
|
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
// Ping System implementation
|
|
57
|
-
PingManager::PingManager(const ChannelArgs& channel_args,
|
|
62
|
+
PingManager::PingManager(const ChannelArgs& channel_args, Duration ping_timeout,
|
|
58
63
|
std::unique_ptr<PingInterface> ping_interface,
|
|
59
64
|
std::shared_ptr<EventEngine> event_engine)
|
|
60
65
|
: ping_callbacks_(event_engine),
|
|
61
66
|
ping_abuse_policy_(channel_args),
|
|
62
67
|
ping_rate_policy_(channel_args, /*is_client=*/true),
|
|
63
|
-
ping_interface_(std::move(ping_interface))
|
|
68
|
+
ping_interface_(std::move(ping_interface)),
|
|
69
|
+
ping_timeout_(ping_timeout) {}
|
|
64
70
|
|
|
65
71
|
void PingManager::TriggerDelayedPing(const Duration wait) {
|
|
66
72
|
// Spawn at most once.
|
|
@@ -146,7 +152,7 @@ void PingManager::MaybeGetSerializedPingFrames(
|
|
|
146
152
|
<< pending_ping_acks_.size()
|
|
147
153
|
<< " next_allowed_ping_interval: "
|
|
148
154
|
<< next_allowed_ping_interval;
|
|
149
|
-
|
|
155
|
+
GRPC_DCHECK(!opaque_data_.has_value());
|
|
150
156
|
std::vector<Http2Frame> frames;
|
|
151
157
|
frames.reserve(pending_ping_acks_.size() + 1); // +1 for the ping frame.
|
|
152
158
|
|
|
@@ -170,9 +176,9 @@ void PingManager::MaybeGetSerializedPingFrames(
|
|
|
170
176
|
}
|
|
171
177
|
}
|
|
172
178
|
|
|
173
|
-
void PingManager::NotifyPingSent(
|
|
179
|
+
void PingManager::NotifyPingSent() {
|
|
174
180
|
if (opaque_data_.has_value()) {
|
|
175
|
-
SpawnTimeout(
|
|
181
|
+
SpawnTimeout(ping_timeout_, opaque_data_.value());
|
|
176
182
|
SentPing();
|
|
177
183
|
opaque_data_.reset();
|
|
178
184
|
}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
#include "src/core/lib/promise/map.h"
|
|
30
30
|
#include "src/core/lib/promise/promise.h"
|
|
31
31
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
32
|
+
#include "src/core/util/grpc_check.h"
|
|
32
33
|
#include "src/core/util/shared_bit_gen.h"
|
|
33
34
|
#include "src/core/util/time.h"
|
|
34
35
|
|
|
@@ -71,7 +72,7 @@ class PingInterface {
|
|
|
71
72
|
// returned by this class on the same transport party.
|
|
72
73
|
class PingManager {
|
|
73
74
|
public:
|
|
74
|
-
PingManager(const ChannelArgs& channel_args,
|
|
75
|
+
PingManager(const ChannelArgs& channel_args, Duration ping_timeout,
|
|
75
76
|
std::unique_ptr<PingInterface> ping_interface,
|
|
76
77
|
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
|
77
78
|
event_engine);
|
|
@@ -83,7 +84,7 @@ class PingManager {
|
|
|
83
84
|
|
|
84
85
|
// Notify the ping system that a ping has been sent. This will spawn a ping
|
|
85
86
|
// timeout promise.
|
|
86
|
-
void NotifyPingSent(
|
|
87
|
+
void NotifyPingSent();
|
|
87
88
|
|
|
88
89
|
// Ping Rate policy wrapper
|
|
89
90
|
void ReceivedDataFrame() { ping_rate_policy_.ReceivedDataFrame(); }
|
|
@@ -132,7 +133,7 @@ class PingManager {
|
|
|
132
133
|
|
|
133
134
|
std::optional<uint64_t> TestOnlyMaybeGetSerializedPingFrames(
|
|
134
135
|
SliceBuffer& output_buffer, Duration next_allowed_ping_interval) {
|
|
135
|
-
|
|
136
|
+
GRPC_DCHECK(!opaque_data_.has_value());
|
|
136
137
|
if (NeedToPing(next_allowed_ping_interval)) {
|
|
137
138
|
uint64_t opaque_data = ping_callbacks_.StartPing();
|
|
138
139
|
Http2Frame frame = GetHttp2PingFrame(/*ack*/ false, opaque_data);
|
|
@@ -153,6 +154,7 @@ class PingManager {
|
|
|
153
154
|
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
|
154
155
|
event_engine)
|
|
155
156
|
: event_engine_(event_engine) {}
|
|
157
|
+
~PingPromiseCallbacks() { CancelCallbacks(); }
|
|
156
158
|
Promise<absl::Status> RequestPing(absl::AnyInvocable<void()> on_initiate,
|
|
157
159
|
bool important);
|
|
158
160
|
Promise<absl::Status> WaitForPingAck();
|
|
@@ -220,6 +222,8 @@ class PingManager {
|
|
|
220
222
|
std::optional<uint64_t> opaque_data_;
|
|
221
223
|
std::unique_ptr<PingInterface> ping_interface_;
|
|
222
224
|
std::vector<uint64_t> pending_ping_acks_;
|
|
225
|
+
// Duration to wait before triggering a ping timeout.
|
|
226
|
+
Duration ping_timeout_;
|
|
223
227
|
|
|
224
228
|
void TriggerDelayedPing(Duration wait);
|
|
225
229
|
bool NeedToPing(Duration next_allowed_ping_interval);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 gRPC authors.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
//
|
|
16
|
+
|
|
17
|
+
#include "src/core/ext/transport/chttp2/transport/security_frame.h"
|
|
18
|
+
|
|
19
|
+
#include <cstddef>
|
|
20
|
+
#include <cstdint>
|
|
21
|
+
|
|
22
|
+
#include "src/core/lib/slice/slice.h"
|
|
23
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
24
|
+
#include "src/core/lib/transport/transport_framing_endpoint_extension.h"
|
|
25
|
+
#include "absl/status/status.h"
|
|
26
|
+
|
|
27
|
+
namespace grpc_core {
|
|
28
|
+
|
|
29
|
+
// TODO(tjagtap) [PH2][P1] Implement
|
|
30
|
+
|
|
31
|
+
} // namespace grpc_core
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 gRPC authors.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
//
|
|
16
|
+
|
|
17
|
+
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H
|
|
18
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H
|
|
19
|
+
|
|
20
|
+
#include <grpc/slice.h>
|
|
21
|
+
#include <stdint.h>
|
|
22
|
+
|
|
23
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
24
|
+
#include "src/core/lib/transport/transport_framing_endpoint_extension.h"
|
|
25
|
+
|
|
26
|
+
namespace grpc_core {
|
|
27
|
+
|
|
28
|
+
// TODO(tjagtap) [PH2][P1] Implement
|
|
29
|
+
|
|
30
|
+
} // namespace grpc_core
|
|
31
|
+
|
|
32
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H
|