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
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
|
|
23
23
|
#include <grpc/support/port_platform.h>
|
|
24
24
|
|
|
25
|
-
#include "absl/strings/str_cat.h"
|
|
26
25
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
27
26
|
#include "src/core/util/useful.h"
|
|
27
|
+
#include "absl/strings/str_cat.h"
|
|
28
28
|
|
|
29
29
|
using grpc_core::http2::Http2ErrorCode;
|
|
30
30
|
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
#include <cstdint>
|
|
24
24
|
#include <optional>
|
|
25
25
|
|
|
26
|
-
#include "absl/functional/function_ref.h"
|
|
27
|
-
#include "absl/strings/string_view.h"
|
|
28
26
|
#include "src/core/channelz/property_list.h"
|
|
29
27
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
30
28
|
#include "src/core/util/useful.h"
|
|
29
|
+
#include "absl/functional/function_ref.h"
|
|
30
|
+
#include "absl/strings/string_view.h"
|
|
31
31
|
|
|
32
32
|
namespace grpc_core {
|
|
33
33
|
|
|
@@ -193,10 +193,12 @@ class Http2Settings {
|
|
|
193
193
|
bool enable_push_ = true;
|
|
194
194
|
|
|
195
195
|
// gRPC defined setting
|
|
196
|
-
// Unlike most other SETTINGS, this setting is negotiated between the client
|
|
197
|
-
// and the server.
|
|
198
196
|
// Currently this is set only once in the lifetime of a transport.
|
|
199
197
|
// Disconnect if it is received more than once from the peer.
|
|
198
|
+
// Non-Binary Metadata (usually UTF-8) is ALWAYS valid irrespective of this
|
|
199
|
+
// flag. Both peers can send each other the default non-binary METADATA
|
|
200
|
+
// irrespective of this flag. This flag says if we are willing to accept
|
|
201
|
+
// Binary-Metadata from the peer or not.
|
|
200
202
|
bool allow_true_binary_metadata_ = false;
|
|
201
203
|
|
|
202
204
|
// gRPC defined setting
|
|
@@ -22,18 +22,16 @@
|
|
|
22
22
|
|
|
23
23
|
#include <grpc/support/port_platform.h>
|
|
24
24
|
|
|
25
|
-
#include
|
|
25
|
+
#include <cstdint>
|
|
26
|
+
#include <optional>
|
|
27
|
+
#include <utility>
|
|
28
|
+
|
|
26
29
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
27
30
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
28
|
-
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
29
|
-
#include "src/core/util/useful.h"
|
|
30
31
|
|
|
31
32
|
namespace grpc_core {
|
|
32
33
|
|
|
33
34
|
std::optional<Http2SettingsFrame> Http2SettingsManager::MaybeSendUpdate() {
|
|
34
|
-
if (!IsPreviousSettingsPromiseResolved()) {
|
|
35
|
-
return std::nullopt;
|
|
36
|
-
}
|
|
37
35
|
switch (update_state_) {
|
|
38
36
|
case UpdateState::kSending:
|
|
39
37
|
return std::nullopt;
|
|
@@ -22,19 +22,18 @@
|
|
|
22
22
|
|
|
23
23
|
#include <cstdint>
|
|
24
24
|
#include <optional>
|
|
25
|
-
#include <
|
|
25
|
+
#include <vector>
|
|
26
26
|
|
|
27
|
-
#include "absl/functional/function_ref.h"
|
|
28
|
-
#include "absl/strings/string_view.h"
|
|
29
27
|
#include "src/core/channelz/property_list.h"
|
|
30
28
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
31
29
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
32
30
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
33
|
-
#include "
|
|
34
|
-
#include "src/core/util/useful.h"
|
|
31
|
+
#include "absl/strings/string_view.h"
|
|
35
32
|
|
|
36
33
|
namespace grpc_core {
|
|
37
34
|
|
|
35
|
+
// TODO(tjagtap) [PH2][P1][Settings] : Add new DCHECKs to PH2-Only functions in
|
|
36
|
+
// this class.
|
|
38
37
|
class Http2SettingsManager {
|
|
39
38
|
public:
|
|
40
39
|
// Only local and peer settings can be edited by the transport.
|
|
@@ -55,7 +54,7 @@ class Http2SettingsManager {
|
|
|
55
54
|
.SetColumn("acked", acked_.ChannelzProperties());
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
// Returns nullopt if we don't need to send a SETTINGS frame to the peer.
|
|
57
|
+
// Returns std::nullopt if we don't need to send a SETTINGS frame to the peer.
|
|
59
58
|
// Returns Http2SettingsFrame if we need to send a SETTINGS frame to the
|
|
60
59
|
// peer. Transport MUST send a frame returned by this function to the peer.
|
|
61
60
|
// This function is not idempotent.
|
|
@@ -63,7 +62,7 @@ class Http2SettingsManager {
|
|
|
63
62
|
|
|
64
63
|
// To be called from a promise based HTTP2 transport only
|
|
65
64
|
http2::Http2ErrorCode ApplyIncomingSettings(
|
|
66
|
-
std::vector<Http2SettingsFrame::Setting>& settings) {
|
|
65
|
+
const std::vector<Http2SettingsFrame::Setting>& settings) {
|
|
67
66
|
for (const auto& setting : settings) {
|
|
68
67
|
http2::Http2ErrorCode error1 =
|
|
69
68
|
count_updates_.IsUpdatePermitted(setting.id, setting.value, peer_);
|
|
@@ -82,13 +81,6 @@ class Http2SettingsManager {
|
|
|
82
81
|
// This function is not idempotent.
|
|
83
82
|
GRPC_MUST_USE_RESULT bool AckLastSend();
|
|
84
83
|
|
|
85
|
-
GRPC_MUST_USE_RESULT bool IsPreviousSettingsPromiseResolved() const {
|
|
86
|
-
return did_previous_settings_promise_resolve_;
|
|
87
|
-
}
|
|
88
|
-
void SetPreviousSettingsPromiseResolved(const bool value) {
|
|
89
|
-
did_previous_settings_promise_resolve_ = value;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
84
|
private:
|
|
93
85
|
struct CountUpdates {
|
|
94
86
|
http2::Http2ErrorCode IsUpdatePermitted(const uint16_t setting_id,
|
|
@@ -144,8 +136,6 @@ class Http2SettingsManager {
|
|
|
144
136
|
Http2Settings local_;
|
|
145
137
|
Http2Settings sent_;
|
|
146
138
|
Http2Settings acked_;
|
|
147
|
-
|
|
148
|
-
bool did_previous_settings_promise_resolve_ = true;
|
|
149
139
|
};
|
|
150
140
|
|
|
151
141
|
} // namespace grpc_core
|
|
@@ -19,159 +19,397 @@
|
|
|
19
19
|
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_PROMISES_H
|
|
20
20
|
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_PROMISES_H
|
|
21
21
|
|
|
22
|
+
#include <grpc/event_engine/event_engine.h>
|
|
22
23
|
#include <grpc/support/port_platform.h>
|
|
23
|
-
#include <stdint.h>
|
|
24
24
|
|
|
25
|
+
#include <algorithm>
|
|
25
26
|
#include <cstdint>
|
|
26
27
|
#include <optional>
|
|
27
|
-
#include <
|
|
28
|
+
#include <string>
|
|
29
|
+
#include <utility>
|
|
30
|
+
#include <vector>
|
|
28
31
|
|
|
29
|
-
#include "absl/functional/function_ref.h"
|
|
30
|
-
#include "absl/strings/string_view.h"
|
|
31
32
|
#include "src/core/channelz/property_list.h"
|
|
33
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
32
34
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
33
35
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
34
36
|
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
35
37
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
36
38
|
#include "src/core/lib/channel/channel_args.h"
|
|
39
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
|
40
|
+
#include "src/core/lib/promise/activity.h"
|
|
41
|
+
#include "src/core/lib/promise/context.h"
|
|
42
|
+
#include "src/core/lib/promise/poll.h"
|
|
43
|
+
#include "src/core/lib/promise/promise.h"
|
|
37
44
|
#include "src/core/lib/promise/race.h"
|
|
38
45
|
#include "src/core/lib/promise/sleep.h"
|
|
39
46
|
#include "src/core/lib/promise/try_seq.h"
|
|
47
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
40
48
|
#include "src/core/util/grpc_check.h"
|
|
49
|
+
#include "src/core/util/ref_counted.h"
|
|
41
50
|
#include "src/core/util/time.h"
|
|
42
|
-
#include "
|
|
51
|
+
#include "absl/functional/any_invocable.h"
|
|
52
|
+
#include "absl/log/log.h"
|
|
53
|
+
#include "absl/status/status.h"
|
|
54
|
+
#include "absl/status/statusor.h"
|
|
55
|
+
#include "absl/strings/str_cat.h"
|
|
56
|
+
#include "absl/types/span.h"
|
|
57
|
+
|
|
43
58
|
namespace grpc_core {
|
|
44
59
|
|
|
45
60
|
// Timeout for getting an ack back on settings changes
|
|
46
61
|
#define GRPC_ARG_SETTINGS_TIMEOUT "grpc.http2.settings_timeout"
|
|
47
62
|
|
|
48
|
-
#define GRPC_SETTINGS_TIMEOUT_DLOG
|
|
63
|
+
#define GRPC_SETTINGS_TIMEOUT_DLOG \
|
|
64
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
49
65
|
|
|
50
66
|
// This class can only be used only from a promise based HTTP2 transports
|
|
51
67
|
// general_party_ .
|
|
52
68
|
// This class is designed with the assumption that only 1 SETTINGS frame will be
|
|
53
69
|
// in flight at a time. And we do not send a second SETTINGS frame till we
|
|
54
|
-
// receive and process the SETTINGS ACK.
|
|
55
|
-
class
|
|
70
|
+
// receive and process the SETTINGS ACK and resolve the ACK promise.
|
|
71
|
+
class SettingsPromiseManager final : public RefCounted<SettingsPromiseManager> {
|
|
56
72
|
public:
|
|
73
|
+
explicit SettingsPromiseManager(
|
|
74
|
+
absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> on_receive_settings)
|
|
75
|
+
: on_receive_first_settings_(std::move(on_receive_settings)),
|
|
76
|
+
state_(SettingsState::kWaitingForFirstPeerSettings) {}
|
|
77
|
+
|
|
78
|
+
~SettingsPromiseManager() override {
|
|
79
|
+
GRPC_DCHECK(on_receive_first_settings_ == nullptr);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Not copyable, movable or assignable.
|
|
83
|
+
SettingsPromiseManager(const SettingsPromiseManager&) = delete;
|
|
84
|
+
SettingsPromiseManager& operator=(const SettingsPromiseManager&) = delete;
|
|
85
|
+
SettingsPromiseManager(SettingsPromiseManager&&) = delete;
|
|
86
|
+
SettingsPromiseManager& operator=(SettingsPromiseManager&&) = delete;
|
|
87
|
+
|
|
88
|
+
void HandleTransportShutdown(
|
|
89
|
+
grpc_event_engine::experimental::EventEngine* event_engine) {
|
|
90
|
+
// If some scenario causes the transport to close without ever receiving
|
|
91
|
+
// settings, we need to still invoke the closure passed to the transport.
|
|
92
|
+
// Additionally, as this function will always run on the transport party, it
|
|
93
|
+
// cannot race with reading a settings frame.
|
|
94
|
+
// TODO(akshitpatel): [PH2][P4] Pass the actual error that caused the
|
|
95
|
+
// transport to be closed here.
|
|
96
|
+
MaybeReportInitialSettingsAbort(event_engine);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
bool IsFirstPeerSettingsApplied() const {
|
|
100
|
+
return state_ == SettingsState::kReady;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
104
|
+
// Functions for SETTINGS being sent from our transport to the peer.
|
|
105
|
+
|
|
57
106
|
// Assumption : This would be set only once in the life of the transport.
|
|
58
|
-
inline void SetSettingsTimeout(const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
channel_args.GetDurationFromIntMillis(GRPC_ARG_SETTINGS_TIMEOUT)
|
|
62
|
-
.value_or(std::max(keepalive_timeout * 2, Duration::Minutes(1)));
|
|
107
|
+
inline void SetSettingsTimeout(const Duration timeout) {
|
|
108
|
+
GRPC_DCHECK(state_ == SettingsState::kWaitingForFirstPeerSettings);
|
|
109
|
+
settings_ack_timeout_ = timeout;
|
|
63
110
|
}
|
|
64
111
|
|
|
65
|
-
//
|
|
66
|
-
// frame
|
|
67
|
-
|
|
112
|
+
// Called when transport receives a SETTINGS ACK frame from peer.
|
|
113
|
+
// This SETTINGS ACK was sent by peer to confirm receipt of SETTINGS frame
|
|
114
|
+
// sent by us. Stop the settings timeout promise.
|
|
115
|
+
GRPC_MUST_USE_RESULT bool OnSettingsAckReceived() {
|
|
116
|
+
bool is_valid = settings_.AckLastSend();
|
|
117
|
+
if (is_valid) {
|
|
118
|
+
RecordReceivedAck();
|
|
119
|
+
}
|
|
120
|
+
return is_valid;
|
|
121
|
+
}
|
|
68
122
|
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
123
|
+
// Called when our transport enqueues a SETTINGS frame to send to the peer.
|
|
124
|
+
// However, the enqueued frames have not yet been written to the endpoint.
|
|
125
|
+
void WillSendSettings() {
|
|
126
|
+
GRPC_DCHECK(!should_wait_for_settings_ack_);
|
|
127
|
+
should_wait_for_settings_ack_ = true;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Returns true if we should spawn WaitForSettingsTimeout promise.
|
|
131
|
+
bool ShouldSpawnWaitForSettingsTimeout() const {
|
|
132
|
+
return should_wait_for_settings_ack_;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// This returns a promise which must be spawned on transports general
|
|
136
|
+
// party. This must be spawned soon after the transport sends a SETTINGS
|
|
137
|
+
// frame on the endpoint. If we don't get an ACK before timeout, the
|
|
138
|
+
// caller MUST close the transport.
|
|
73
139
|
auto WaitForSettingsTimeout() {
|
|
140
|
+
did_previous_settings_promise_resolve_ = false;
|
|
141
|
+
TimeoutWaiterSpawned();
|
|
74
142
|
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
75
|
-
<< "
|
|
143
|
+
<< "SettingsPromiseManager::WaitForSettingsTimeout Factory timeout_"
|
|
144
|
+
<< settings_ack_timeout_;
|
|
76
145
|
StartSettingsTimeoutTimer();
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
sent_time_ +
|
|
89
|
-
(timeout_ *
|
|
90
|
-
1.1 /* 10% grace time for this promise to be scheduled*/) >
|
|
146
|
+
return AssertResultType<absl::Status>(Race(
|
|
147
|
+
[self = this->Ref()]() -> Poll<absl::Status> {
|
|
148
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
149
|
+
<< "SettingsPromiseManager::WaitForSettingsTimeout Race";
|
|
150
|
+
// This Promise will "win" the race if we receive the SETTINGS
|
|
151
|
+
// ACK from the peer within the timeout time.
|
|
152
|
+
if (self->HasReceivedAck()) {
|
|
153
|
+
GRPC_DCHECK(
|
|
154
|
+
self->sent_time_ +
|
|
155
|
+
(self->settings_ack_timeout_ *
|
|
156
|
+
1.2 /* Grace time for this promise to be scheduled*/) >
|
|
91
157
|
Timestamp::Now())
|
|
92
158
|
<< "Should have timed out";
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
159
|
+
self->MarkReceivedAckAsProcessed();
|
|
160
|
+
self->did_previous_settings_promise_resolve_ = true;
|
|
161
|
+
return absl::OkStatus();
|
|
162
|
+
}
|
|
163
|
+
self->AddWaitingForAck();
|
|
164
|
+
return Pending{};
|
|
165
|
+
},
|
|
166
|
+
// This promise will "Win" the Race if timeout is crossed and we did
|
|
167
|
+
// not receive the ACK. The transport must close when this happens.
|
|
168
|
+
TrySeq(Sleep(settings_ack_timeout_),
|
|
169
|
+
[sent_time = sent_time_, timeout = settings_ack_timeout_]() {
|
|
170
|
+
const std::string message = absl::StrCat(
|
|
171
|
+
RFC9113::kSettingsTimeout,
|
|
172
|
+
" Sent Time : ", sent_time.ToString(),
|
|
173
|
+
" Timeout Time : ", (sent_time + timeout).ToString(),
|
|
174
|
+
" Current Time : ", Timestamp::Now().ToString());
|
|
175
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
176
|
+
<< "SettingsPromiseManager::WaitForSettingsTimeout"
|
|
177
|
+
<< message;
|
|
178
|
+
// Ideally we must set did_previous_settings_promise_resolve_
|
|
179
|
+
// to false, but in this case the transport will be closed so
|
|
180
|
+
// it does not matter. I am trying to avoid taking another ref
|
|
181
|
+
// on self in this TrySeq.
|
|
182
|
+
return absl::CancelledError(message);
|
|
183
|
+
})));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
void TestOnlyRecordReceivedAck() { RecordReceivedAck(); }
|
|
187
|
+
void TestOnlyTimeoutWaiterSpawned() { TimeoutWaiterSpawned(); }
|
|
188
|
+
|
|
189
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
190
|
+
// Functions for SETTINGS being received from the peer.
|
|
191
|
+
|
|
192
|
+
// Buffers SETTINGS frames received from peer.
|
|
193
|
+
// Buffered to apply settings at start of next write cycle, only after
|
|
194
|
+
// SETTINGS ACK is written to the endpoint.
|
|
195
|
+
void BufferPeerSettings(std::vector<Http2SettingsFrame::Setting>&& settings) {
|
|
196
|
+
if (state_ == SettingsState::kWaitingForFirstPeerSettings) {
|
|
197
|
+
state_ = SettingsState::kFirstPeerSettingsReceived;
|
|
198
|
+
}
|
|
199
|
+
++num_acks_to_send_;
|
|
200
|
+
pending_peer_settings_.reserve(pending_peer_settings_.size() +
|
|
201
|
+
settings.size());
|
|
202
|
+
pending_peer_settings_.insert(pending_peer_settings_.end(),
|
|
203
|
+
settings.begin(), settings.end());
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Applies settings buffered by BufferPeerSettings().
|
|
207
|
+
// Should be called at start of write cycle, after the SETTINGS ACK has been
|
|
208
|
+
// written to apply the settings. If the first settings frame is received from
|
|
209
|
+
// the peer that that needs some special handling too.
|
|
210
|
+
http2::Http2ErrorCode MaybeReportAndApplyBufferedPeerSettings(
|
|
211
|
+
grpc_event_engine::experimental::EventEngine* event_engine) {
|
|
212
|
+
http2::Http2ErrorCode status = settings_.ApplyIncomingSettings(
|
|
213
|
+
std::exchange(pending_peer_settings_, {}));
|
|
214
|
+
if (state_ == SettingsState::kFirstPeerSettingsReceived) {
|
|
215
|
+
MaybeReportInitialSettings(event_engine);
|
|
216
|
+
state_ = SettingsState::kReady;
|
|
217
|
+
}
|
|
218
|
+
return status;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
222
|
+
// Wrappers around Http2SettingsManager
|
|
223
|
+
|
|
224
|
+
// Appends SETTINGS and SETTINGS ACK frames to output_buf if needed.
|
|
225
|
+
// A SETTINGS frame is appended if local settings changed.
|
|
226
|
+
// SETTINGS ACK frames are appended for any incoming settings that need
|
|
227
|
+
// acknowledgment. This MUST be called only after the
|
|
228
|
+
// MaybeReportAndApplyBufferedPeerSettings function.
|
|
229
|
+
void MaybeGetSettingsAndSettingsAckFrames(
|
|
230
|
+
chttp2::TransportFlowControl& flow_control, SliceBuffer& output_buf) {
|
|
231
|
+
GRPC_SETTINGS_TIMEOUT_DLOG << "MaybeGetSettingsAndSettingsAckFrames";
|
|
232
|
+
if (did_previous_settings_promise_resolve_) {
|
|
233
|
+
std::optional<Http2Frame> settings_frame = settings_.MaybeSendUpdate();
|
|
234
|
+
if (settings_frame.has_value()) {
|
|
235
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
236
|
+
<< "MaybeGetSettingsAndSettingsAckFrames Frame Settings ";
|
|
237
|
+
Serialize(absl::Span<Http2Frame>(&settings_frame.value(), 1),
|
|
238
|
+
output_buf);
|
|
239
|
+
flow_control.FlushedSettings();
|
|
240
|
+
WillSendSettings();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (num_acks_to_send_ > 0) {
|
|
244
|
+
GRPC_SETTINGS_TIMEOUT_DLOG << "Sending " << num_acks_to_send_
|
|
245
|
+
<< " settings ACK frames";
|
|
246
|
+
std::vector<Http2Frame> ack_frames(num_acks_to_send_);
|
|
247
|
+
for (uint32_t i = 0; i < num_acks_to_send_; ++i) {
|
|
248
|
+
ack_frames[i] = Http2SettingsFrame{true, {}};
|
|
249
|
+
}
|
|
250
|
+
Serialize(absl::MakeSpan(ack_frames), output_buf);
|
|
251
|
+
num_acks_to_send_ = 0;
|
|
252
|
+
}
|
|
111
253
|
}
|
|
112
254
|
|
|
255
|
+
Http2Settings& mutable_local() { return settings_.mutable_local(); }
|
|
256
|
+
Http2Settings& mutable_peer() { return settings_.mutable_peer(); }
|
|
257
|
+
|
|
258
|
+
const Http2Settings& local() const { return settings_.local(); }
|
|
259
|
+
const Http2Settings& acked() const { return settings_.acked(); }
|
|
260
|
+
const Http2Settings& peer() const { return settings_.peer(); }
|
|
261
|
+
|
|
262
|
+
channelz::PropertyGrid ChannelzProperties() const {
|
|
263
|
+
return settings_.ChannelzProperties();
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
bool IsSecurityFrameExpected() const {
|
|
267
|
+
GRPC_DCHECK(IsFirstPeerSettingsApplied())
|
|
268
|
+
<< "Security frame must not be received before SETTINGS frame";
|
|
269
|
+
// TODO(tjagtap) : [PH2][P3] : Evaluate when to accept the frame and when to
|
|
270
|
+
// reject it. Compare it with the requirement and with CHTTP2.
|
|
271
|
+
return (settings_.acked().allow_security_frame() ||
|
|
272
|
+
settings_.local().allow_security_frame()) &&
|
|
273
|
+
settings_.peer().allow_security_frame();
|
|
274
|
+
};
|
|
275
|
+
|
|
113
276
|
private:
|
|
277
|
+
Http2SettingsManager settings_;
|
|
278
|
+
|
|
279
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
280
|
+
// Plumbing Settings with Chttp2Connector class
|
|
281
|
+
|
|
282
|
+
void MaybeReportInitialSettings(
|
|
283
|
+
grpc_event_engine::experimental::EventEngine* event_engine) {
|
|
284
|
+
// TODO(tjagtap) [PH2][P2] Relook at this while writing server. I think this
|
|
285
|
+
// will be different for client and server.
|
|
286
|
+
if (on_receive_first_settings_ != nullptr) {
|
|
287
|
+
GRPC_DCHECK(state_ == SettingsState::kFirstPeerSettingsReceived);
|
|
288
|
+
GRPC_DCHECK(event_engine != nullptr);
|
|
289
|
+
event_engine->Run(
|
|
290
|
+
[on_receive_settings = std::move(on_receive_first_settings_),
|
|
291
|
+
peer_max_concurrent_streams =
|
|
292
|
+
settings_.peer().max_concurrent_streams()]() mutable {
|
|
293
|
+
ExecCtx exec_ctx;
|
|
294
|
+
std::move(on_receive_settings)(peer_max_concurrent_streams);
|
|
295
|
+
});
|
|
296
|
+
GRPC_DCHECK(on_receive_first_settings_ == nullptr);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
void MaybeReportInitialSettingsAbort(
|
|
301
|
+
grpc_event_engine::experimental::EventEngine* event_engine) {
|
|
302
|
+
// TODO(tjagtap) [PH2][P2] Relook at this while writing server. I think this
|
|
303
|
+
// will be different for client and server.
|
|
304
|
+
if (on_receive_first_settings_ != nullptr) {
|
|
305
|
+
GRPC_DCHECK(event_engine != nullptr);
|
|
306
|
+
GRPC_DCHECK(state_ != SettingsState::kReady);
|
|
307
|
+
event_engine->Run([on_receive_settings =
|
|
308
|
+
std::move(on_receive_first_settings_)]() mutable {
|
|
309
|
+
ExecCtx exec_ctx;
|
|
310
|
+
std::move(on_receive_settings)(
|
|
311
|
+
absl::UnavailableError("transport closed"));
|
|
312
|
+
});
|
|
313
|
+
GRPC_DCHECK(on_receive_first_settings_ == nullptr);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
318
|
+
// Functions for SETTINGS being sent from our transport to the peer.
|
|
319
|
+
|
|
320
|
+
void TimeoutWaiterSpawned() { should_wait_for_settings_ack_ = false; }
|
|
321
|
+
|
|
114
322
|
inline void StartSettingsTimeoutTimer() {
|
|
115
323
|
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
116
|
-
<< "
|
|
324
|
+
<< "SettingsPromiseManager::StartSettingsTimeoutTimer "
|
|
117
325
|
"did_register_waker_ "
|
|
118
|
-
<<
|
|
326
|
+
<< did_register_ack_timeout_waker_
|
|
119
327
|
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
120
328
|
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
121
|
-
GRPC_DCHECK(!
|
|
329
|
+
GRPC_DCHECK(!did_register_ack_timeout_waker_);
|
|
122
330
|
sent_time_ = Timestamp::Now();
|
|
123
331
|
}
|
|
124
|
-
|
|
332
|
+
|
|
333
|
+
inline bool HasReceivedAck() {
|
|
125
334
|
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
126
|
-
<< "
|
|
127
|
-
<<
|
|
335
|
+
<< "SettingsPromiseManager::DidReceiveAck did_register_waker_ "
|
|
336
|
+
<< did_register_ack_timeout_waker_
|
|
128
337
|
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
129
338
|
return number_of_acks_unprocessed_ > 0;
|
|
130
339
|
}
|
|
131
340
|
inline void AddWaitingForAck() {
|
|
132
341
|
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
133
|
-
<< "
|
|
134
|
-
<<
|
|
342
|
+
<< "SettingsPromiseManager::AddWaitingForAck did_register_waker_ "
|
|
343
|
+
<< did_register_ack_timeout_waker_
|
|
135
344
|
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
136
|
-
if (!
|
|
345
|
+
if (!did_register_ack_timeout_waker_) {
|
|
137
346
|
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
138
|
-
|
|
139
|
-
|
|
347
|
+
ack_timeout_waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
348
|
+
did_register_ack_timeout_waker_ = true;
|
|
140
349
|
}
|
|
141
|
-
GRPC_DCHECK(
|
|
350
|
+
GRPC_DCHECK(did_register_ack_timeout_waker_);
|
|
142
351
|
}
|
|
143
352
|
inline void RecordReceivedAck() {
|
|
144
353
|
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
145
|
-
<< "
|
|
146
|
-
<<
|
|
354
|
+
<< "SettingsPromiseManager::RecordReceivedAck did_register_waker_ "
|
|
355
|
+
<< did_register_ack_timeout_waker_
|
|
147
356
|
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
148
357
|
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
149
358
|
++number_of_acks_unprocessed_;
|
|
150
|
-
if (
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
359
|
+
if (did_register_ack_timeout_waker_) {
|
|
360
|
+
ack_timeout_waker_.Wakeup();
|
|
361
|
+
did_register_ack_timeout_waker_ = false;
|
|
362
|
+
} else {
|
|
363
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
364
|
+
<< "We receive the ACK before WaitForSettingsTimeout promise was "
|
|
365
|
+
"scheduled.";
|
|
155
366
|
}
|
|
156
|
-
GRPC_DCHECK(!
|
|
367
|
+
GRPC_DCHECK(!did_register_ack_timeout_waker_);
|
|
157
368
|
}
|
|
158
|
-
inline void
|
|
369
|
+
inline void MarkReceivedAckAsProcessed() {
|
|
159
370
|
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
160
|
-
<< "
|
|
161
|
-
<<
|
|
371
|
+
<< "SettingsPromiseManager::RemoveReceivedAck did_register_waker_ "
|
|
372
|
+
<< did_register_ack_timeout_waker_
|
|
162
373
|
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
163
374
|
--number_of_acks_unprocessed_;
|
|
164
375
|
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
165
|
-
GRPC_DCHECK(!
|
|
376
|
+
GRPC_DCHECK(!did_register_ack_timeout_waker_);
|
|
166
377
|
}
|
|
167
378
|
|
|
168
|
-
|
|
169
|
-
//
|
|
170
|
-
|
|
379
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
380
|
+
// Data Members for SETTINGS being sent from our transport to the peer.
|
|
381
|
+
|
|
382
|
+
Duration settings_ack_timeout_;
|
|
383
|
+
// TODO(tjagtap) [PH2][P5][Settings] Delete sent_time_. We don't actually use
|
|
384
|
+
// sent_time_ for the timeout. We are just keeping this as book keeping for
|
|
385
|
+
// better debuggability.
|
|
171
386
|
Timestamp sent_time_ = Timestamp::InfFuture();
|
|
172
|
-
Waker
|
|
173
|
-
bool
|
|
387
|
+
Waker ack_timeout_waker_;
|
|
388
|
+
bool did_register_ack_timeout_waker_ = false;
|
|
174
389
|
int number_of_acks_unprocessed_ = 0;
|
|
390
|
+
bool should_wait_for_settings_ack_ = false;
|
|
391
|
+
|
|
392
|
+
// For CHTTP2, MaybeSendUpdate() checks `update_state_` to ensure only one
|
|
393
|
+
// SETTINGS frame is in flight at a time. PH2 requires an additional
|
|
394
|
+
// constraint: a new SETTINGS frame cannot be sent until the SETTINGS-ACK
|
|
395
|
+
// timeout promise for the previous frame has resolved. This flag tracks this
|
|
396
|
+
// condition for PH2.
|
|
397
|
+
bool did_previous_settings_promise_resolve_ = true;
|
|
398
|
+
|
|
399
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
400
|
+
// Data Members for SETTINGS being received from the peer.
|
|
401
|
+
|
|
402
|
+
absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> on_receive_first_settings_;
|
|
403
|
+
std::vector<Http2SettingsFrame::Setting> pending_peer_settings_;
|
|
404
|
+
// Number of incoming SETTINGS frames that we have received but not ACKed yet.
|
|
405
|
+
uint32_t num_acks_to_send_ = 0;
|
|
406
|
+
|
|
407
|
+
enum class SettingsState : uint8_t {
|
|
408
|
+
kWaitingForFirstPeerSettings,
|
|
409
|
+
kFirstPeerSettingsReceived,
|
|
410
|
+
kReady,
|
|
411
|
+
};
|
|
412
|
+
SettingsState state_;
|
|
175
413
|
};
|
|
176
414
|
|
|
177
415
|
} // namespace grpc_core
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
#include <string>
|
|
26
26
|
#include <variant>
|
|
27
27
|
|
|
28
|
+
#include "src/core/util/time.h"
|
|
28
29
|
#include "absl/log/check.h"
|
|
29
30
|
#include "absl/status/status.h"
|
|
30
31
|
#include "absl/strings/str_cat.h"
|
|
31
|
-
#include "src/core/util/time.h"
|
|
32
32
|
|
|
33
33
|
namespace grpc_core {
|
|
34
34
|
namespace http2 {
|
|
@@ -408,6 +408,12 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline T TakeValue(
|
|
|
408
408
|
return std::move(value.value());
|
|
409
409
|
}
|
|
410
410
|
|
|
411
|
+
inline Http2Status ToHttpOkOrConnError(const absl::Status& status) {
|
|
412
|
+
return status.ok() ? Http2Status::Ok()
|
|
413
|
+
: Http2Status::AbslConnectionError(
|
|
414
|
+
status.code(), std::string(status.message()));
|
|
415
|
+
}
|
|
416
|
+
|
|
411
417
|
} // namespace http2
|
|
412
418
|
} // namespace grpc_core
|
|
413
419
|
|