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,129 @@
|
|
|
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
|
+
#include "src/core/ext/transport/chttp2/transport/goaway.h"
|
|
20
|
+
|
|
21
|
+
#include "src/core/util/grpc_check.h"
|
|
22
|
+
|
|
23
|
+
namespace grpc_core {
|
|
24
|
+
namespace http2 {
|
|
25
|
+
|
|
26
|
+
GoawayManager::GoawayManager(std::unique_ptr<GoawayInterface> goaway_interface)
|
|
27
|
+
: context_(MakeRefCounted<Context>(std::move(goaway_interface))) {}
|
|
28
|
+
|
|
29
|
+
std::optional<Http2Frame> GoawayManager::MaybeGetGoawayFrame() {
|
|
30
|
+
switch (context_->goaway_state) {
|
|
31
|
+
case GoawayState::kIdle:
|
|
32
|
+
case GoawayState::kDone:
|
|
33
|
+
break;
|
|
34
|
+
case GoawayState::kInitialGracefulGoawayScheduled: {
|
|
35
|
+
GRPC_DCHECK(!goaway_sent_);
|
|
36
|
+
Http2Frame goaway_frame = context_->GetInitialGracefulGoawayFrame();
|
|
37
|
+
GRPC_HTTP2_GOAWAY_LOG << "Graceful GOAWAY frame created.";
|
|
38
|
+
goaway_sent_ = true;
|
|
39
|
+
return std::move(goaway_frame);
|
|
40
|
+
}
|
|
41
|
+
case GoawayState::kFinalGracefulGoawayScheduled: {
|
|
42
|
+
GRPC_DCHECK(!goaway_sent_);
|
|
43
|
+
Http2Frame goaway_frame = context_->GetFinalGracefulGoawayFrame();
|
|
44
|
+
GRPC_HTTP2_GOAWAY_LOG << "Final graceful GOAWAY frame created.";
|
|
45
|
+
goaway_sent_ = true;
|
|
46
|
+
return std::move(goaway_frame);
|
|
47
|
+
}
|
|
48
|
+
case GoawayState::kImmediateGoawayRequested: {
|
|
49
|
+
GRPC_DCHECK(!goaway_sent_);
|
|
50
|
+
Http2Frame goaway_frame = context_->GetImmediateGoawayFrame();
|
|
51
|
+
GRPC_HTTP2_GOAWAY_LOG << "Immediate GOAWAY frame created.";
|
|
52
|
+
goaway_sent_ = true;
|
|
53
|
+
return std::move(goaway_frame);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return std::nullopt;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
void GoawayManager::MaybeGetSerializedGoawayFrame(SliceBuffer& output_buf) {
|
|
61
|
+
GRPC_HTTP2_GOAWAY_LOG << "MaybeGetSerializedGoawayFrames: current state: "
|
|
62
|
+
<< context_->GoawayStateToString(
|
|
63
|
+
context_->goaway_state);
|
|
64
|
+
|
|
65
|
+
std::optional<Http2Frame> goaway_frame = MaybeGetGoawayFrame();
|
|
66
|
+
if (goaway_frame.has_value()) {
|
|
67
|
+
Serialize(absl::Span<Http2Frame>(&goaway_frame.value(), 1), output_buf);
|
|
68
|
+
GRPC_HTTP2_GOAWAY_LOG << "GOAWAY frame serialized.";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void GoawayManager::NotifyGoawaySent() {
|
|
73
|
+
if (goaway_sent_) {
|
|
74
|
+
GRPC_HTTP2_GOAWAY_LOG << "GOAWAY frame sent in current write cycle.";
|
|
75
|
+
context_->SentGoawayTransition();
|
|
76
|
+
goaway_sent_ = false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
void GoawayManager::Context::SentGoawayTransition() {
|
|
81
|
+
GRPC_HTTP2_GOAWAY_LOG << "SentGoawayTransition: current state: "
|
|
82
|
+
<< GoawayStateToString(goaway_state);
|
|
83
|
+
switch (goaway_state) {
|
|
84
|
+
case GoawayState::kIdle:
|
|
85
|
+
case GoawayState::kInitialGracefulGoawayScheduled:
|
|
86
|
+
case GoawayState::kDone:
|
|
87
|
+
break;
|
|
88
|
+
case GoawayState::kFinalGracefulGoawayScheduled:
|
|
89
|
+
case GoawayState::kImmediateGoawayRequested: {
|
|
90
|
+
GRPC_HTTP2_GOAWAY_LOG << "Transitioning to kDone from "
|
|
91
|
+
<< GoawayStateToString(goaway_state);
|
|
92
|
+
goaway_state = GoawayState::kDone;
|
|
93
|
+
WaitSet::WakeupSet wakers_to_wakeup = wakers.TakeWakeupSet();
|
|
94
|
+
wakers_to_wakeup.Wakeup();
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
std::string GoawayManager::Context::GoawayStateToString(
|
|
103
|
+
GoawayState goaway_state) {
|
|
104
|
+
switch (goaway_state) {
|
|
105
|
+
case GoawayState::kIdle:
|
|
106
|
+
return "kIdle";
|
|
107
|
+
case GoawayState::kInitialGracefulGoawayScheduled:
|
|
108
|
+
return "kInitialGracefulGoawayScheduled";
|
|
109
|
+
case GoawayState::kFinalGracefulGoawayScheduled:
|
|
110
|
+
return "kFinalGracefulGoawayScheduled";
|
|
111
|
+
case GoawayState::kImmediateGoawayRequested:
|
|
112
|
+
return "kImmediateGoawayRequested";
|
|
113
|
+
case GoawayState::kDone:
|
|
114
|
+
return "kDone";
|
|
115
|
+
default:
|
|
116
|
+
return "unknown";
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
std::optional<Http2Frame> GoawayManager::TestOnlyMaybeGetGoawayFrame() {
|
|
121
|
+
GRPC_HTTP2_GOAWAY_LOG << "TestOnlyMaybeGetGoawayFrame: current state: "
|
|
122
|
+
<< context_->GoawayStateToString(
|
|
123
|
+
context_->goaway_state);
|
|
124
|
+
|
|
125
|
+
return MaybeGetGoawayFrame();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
} // namespace http2
|
|
129
|
+
} // namespace grpc_core
|
|
@@ -0,0 +1,350 @@
|
|
|
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_GOAWAY_H
|
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_GOAWAY_H
|
|
21
|
+
|
|
22
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
23
|
+
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
24
|
+
#include "src/core/lib/promise/activity.h"
|
|
25
|
+
#include "src/core/lib/promise/if.h"
|
|
26
|
+
#include "src/core/lib/promise/promise.h"
|
|
27
|
+
#include "src/core/lib/promise/race.h"
|
|
28
|
+
#include "src/core/lib/promise/try_seq.h"
|
|
29
|
+
#include "src/core/lib/promise/wait_set.h"
|
|
30
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
31
|
+
#include "src/core/util/ref_counted_ptr.h"
|
|
32
|
+
#include "absl/status/status.h"
|
|
33
|
+
|
|
34
|
+
// This file contains the promise based implementation details of HTTP2 GOAWAY
|
|
35
|
+
// mechanism.
|
|
36
|
+
// RFC9113 https://www.rfc-editor.org/rfc/rfc9113.html#name-goaway
|
|
37
|
+
|
|
38
|
+
namespace grpc_core {
|
|
39
|
+
namespace http2 {
|
|
40
|
+
#define GRPC_HTTP2_GOAWAY_LOG VLOG(2)
|
|
41
|
+
|
|
42
|
+
class GoawayInterface {
|
|
43
|
+
public:
|
|
44
|
+
virtual ~GoawayInterface() = default;
|
|
45
|
+
// Returns a promise that will be resolved when a ping frame is sent and the
|
|
46
|
+
// corresponding ack is received.
|
|
47
|
+
virtual Promise<absl::Status> SendPingAndWaitForAck() = 0;
|
|
48
|
+
|
|
49
|
+
// Triggers a transport write cycle.
|
|
50
|
+
virtual void TriggerWriteCycle() = 0;
|
|
51
|
+
|
|
52
|
+
// Only used for graceful GOAWAY (and by extension relevant only for server).
|
|
53
|
+
// Returns the last accepted stream id by the transport.
|
|
54
|
+
virtual uint32_t GetLastAcceptedStreamId() = 0;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
enum class GoawayState : uint8_t {
|
|
58
|
+
// No GOAWAY is in progress.
|
|
59
|
+
kIdle,
|
|
60
|
+
// Initial graceful GOAWAY is scheduled to be sent in the next transport write
|
|
61
|
+
// cycle.
|
|
62
|
+
kInitialGracefulGoawayScheduled,
|
|
63
|
+
// Final graceful GOAWAY is scheduled to be sent in the next transport write
|
|
64
|
+
// cycle. Sending this GOAWAY frame completes the graceful GOAWAY process and
|
|
65
|
+
// transitions the state to kDone.
|
|
66
|
+
kFinalGracefulGoawayScheduled,
|
|
67
|
+
// Immediate GOAWAY is requested to be sent in the next transport write
|
|
68
|
+
// cycle. Sending this GOAWAY frame completes the immediate GOAWAY process and
|
|
69
|
+
// transitions the state to kDone.
|
|
70
|
+
kImmediateGoawayRequested,
|
|
71
|
+
// GOAWAY is complete. This is the terminal state for all RequestGoaway calls.
|
|
72
|
+
// Any subsequent RequestGoaway calls will be immediately resolved with OK
|
|
73
|
+
// status.
|
|
74
|
+
kDone,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Information needed to construct a GOAWAY frame.
|
|
78
|
+
struct GoawayArgs {
|
|
79
|
+
uint32_t error_code = 0;
|
|
80
|
+
uint32_t last_good_stream_id = 0;
|
|
81
|
+
Slice debug_data;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
class GoawayManager {
|
|
85
|
+
private:
|
|
86
|
+
std::optional<Http2Frame> MaybeGetGoawayFrame();
|
|
87
|
+
|
|
88
|
+
// Context for the GOAWAY process. This is passed around as a ref to all the
|
|
89
|
+
// promises to ensure that the all the promises have valid access to the
|
|
90
|
+
// context.
|
|
91
|
+
struct Context : public RefCounted<Context> {
|
|
92
|
+
explicit Context(std::unique_ptr<GoawayInterface> goaway_interface)
|
|
93
|
+
: goaway_interface(std::move(goaway_interface)) {}
|
|
94
|
+
|
|
95
|
+
Http2Frame GetImmediateGoawayFrame() {
|
|
96
|
+
GRPC_HTTP2_GOAWAY_LOG
|
|
97
|
+
<< "GetImmediateGoawayFrame: "
|
|
98
|
+
<< " error code: " << goaway_args.error_code
|
|
99
|
+
<< " last good stream id: " << goaway_args.last_good_stream_id
|
|
100
|
+
<< " debug data: " << goaway_args.debug_data.as_string_view();
|
|
101
|
+
|
|
102
|
+
return Http2GoawayFrame{
|
|
103
|
+
/*last_stream_id=*/goaway_args.last_good_stream_id,
|
|
104
|
+
/*error_code=*/goaway_args.error_code,
|
|
105
|
+
/*debug_data=*/std::move(goaway_args.debug_data)};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
Http2Frame GetInitialGracefulGoawayFrame() {
|
|
109
|
+
GRPC_HTTP2_GOAWAY_LOG
|
|
110
|
+
<< "GetInitialGracefulGoawayFrame: "
|
|
111
|
+
<< " error code: " << static_cast<uint32_t>(Http2ErrorCode::kNoError)
|
|
112
|
+
<< " last good stream id: " << RFC9113::kMaxStreamId31Bit
|
|
113
|
+
<< " debug data: " << goaway_args.debug_data.as_string_view();
|
|
114
|
+
return Http2GoawayFrame{
|
|
115
|
+
/*last_stream_id=*/RFC9113::kMaxStreamId31Bit,
|
|
116
|
+
/*error_code=*/static_cast<uint32_t>(Http2ErrorCode::kNoError),
|
|
117
|
+
/*debug_data=*/
|
|
118
|
+
Slice::FromCopiedBuffer(goaway_args.debug_data.as_string_view())};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
Http2Frame GetFinalGracefulGoawayFrame() {
|
|
122
|
+
// Update the last good stream id before sending the final graceful GOAWAY
|
|
123
|
+
// frame. This is needed as the server MAY accept new streams after the
|
|
124
|
+
// first graceful GOAWAY frame is sent.
|
|
125
|
+
goaway_args.last_good_stream_id =
|
|
126
|
+
goaway_interface->GetLastAcceptedStreamId();
|
|
127
|
+
GRPC_HTTP2_GOAWAY_LOG
|
|
128
|
+
<< "GetFinalGracefulGoawayFrame: "
|
|
129
|
+
<< " error code: " << static_cast<uint32_t>(Http2ErrorCode::kNoError)
|
|
130
|
+
<< " last good stream id: " << goaway_args.last_good_stream_id
|
|
131
|
+
<< " debug data: " << goaway_args.debug_data.as_string_view();
|
|
132
|
+
return Http2GoawayFrame{
|
|
133
|
+
/*last_stream_id=*/goaway_args.last_good_stream_id,
|
|
134
|
+
/*error_code=*/static_cast<uint32_t>(Http2ErrorCode::kNoError),
|
|
135
|
+
/*debug_data=*/std::move(goaway_args.debug_data)};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
void AddWaker(Waker&& waker) {
|
|
139
|
+
wakers.AddPending(std::move(waker));
|
|
140
|
+
GRPC_HTTP2_GOAWAY_LOG << "AddWaker: " << wakers.ToString();
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
void SetGoawayArgs(const uint32_t error_code, Slice&& debug_data,
|
|
144
|
+
const uint32_t last_good_stream_id) {
|
|
145
|
+
GRPC_HTTP2_GOAWAY_LOG << "SetGoawayArgs: "
|
|
146
|
+
<< " error code: " << error_code
|
|
147
|
+
<< " last good stream id: " << last_good_stream_id
|
|
148
|
+
<< " debug data: " << debug_data.as_string_view();
|
|
149
|
+
goaway_args = GoawayArgs{/*error_code=*/error_code,
|
|
150
|
+
/*last_good_stream_id=*/last_good_stream_id,
|
|
151
|
+
/*debug_data=*/std::move(debug_data)};
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
std::string GoawayStateToString(GoawayState goaway_state);
|
|
155
|
+
|
|
156
|
+
void SentGoawayTransition();
|
|
157
|
+
|
|
158
|
+
GoawayState goaway_state = GoawayState::kIdle;
|
|
159
|
+
std::unique_ptr<GoawayInterface> goaway_interface;
|
|
160
|
+
// TODO(akshitpatel) : [PH2][P4] : There is scope to make this
|
|
161
|
+
// IntractivityWaker.
|
|
162
|
+
WaitSet wakers;
|
|
163
|
+
GoawayArgs goaway_args{};
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// Runs the given promise until the GOAWAY state is kDone.
|
|
167
|
+
template <typename PromiseType>
|
|
168
|
+
auto UntilDone(PromiseType&& promise) {
|
|
169
|
+
return Race(
|
|
170
|
+
[ctx = context_->Ref()]() -> Poll<absl::Status> {
|
|
171
|
+
if (ctx->goaway_state == GoawayState::kDone) {
|
|
172
|
+
GRPC_HTTP2_GOAWAY_LOG << "GOAWAY state is kDone. Resolving the "
|
|
173
|
+
"promise with OK status.";
|
|
174
|
+
return absl::OkStatus();
|
|
175
|
+
}
|
|
176
|
+
ctx->wakers.AddPending(GetContext<Activity>()->MakeNonOwningWaker());
|
|
177
|
+
return Pending{};
|
|
178
|
+
},
|
|
179
|
+
std::forward<PromiseType>(promise));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Handles an immediate GOAWAY request. The flow is as follows:
|
|
183
|
+
// 1. If there is no pending GOAWAY(state is kIdle), then
|
|
184
|
+
// a. Set the GOAWAY state to kImmediateGoawayRequested.
|
|
185
|
+
// b. Set the GOAWAY args.
|
|
186
|
+
// c. Trigger a write cycle.
|
|
187
|
+
// d. Once the transport invokes MaybeGetSerializedGoawayFrames,
|
|
188
|
+
// a GOAWAY frame is sent and the state is changed to kDone effectively
|
|
189
|
+
// completing the GOAWAY process (and resolving the promise).
|
|
190
|
+
// 2. If there is already an Immediate GOAWAY request in progress, then
|
|
191
|
+
// the function allows the previous error/debug data to take precedence
|
|
192
|
+
// and returns a pending promise. In this case, the promise resolves when
|
|
193
|
+
// the previous GOAWAY request completes.
|
|
194
|
+
// 3. If there is a graceful GOAWAY request in progress(state is either
|
|
195
|
+
// kInitialGracefulGoawayScheduled or kFinalGracefulGoawayScheduled), then
|
|
196
|
+
// the immediate GOAWAY request takes precedence (because it has a error
|
|
197
|
+
// code that may be needed by the peer) and the current error/debug data
|
|
198
|
+
// will be sent in the next transport write cycle. The graceful GOAWAY
|
|
199
|
+
// request will be effectively cancelled. The promise resolves when the
|
|
200
|
+
// immediate GOAWAY request completes.
|
|
201
|
+
// In the above comments, `the promise` refers to the promise returned by
|
|
202
|
+
// RequestGoaway.
|
|
203
|
+
static auto HandleImmediateGoaway(RefCountedPtr<Context> ctx,
|
|
204
|
+
const Http2ErrorCode error_code,
|
|
205
|
+
Slice&& debug_data,
|
|
206
|
+
const uint32_t last_good_stream_id) {
|
|
207
|
+
return [ctx = std::move(ctx), error_code, debug_data = debug_data.Ref(),
|
|
208
|
+
last_good_stream_id]() mutable -> Poll<absl::Status> {
|
|
209
|
+
if (ctx->goaway_state == GoawayState::kImmediateGoawayRequested) {
|
|
210
|
+
GRPC_HTTP2_GOAWAY_LOG
|
|
211
|
+
<< "[Immediate GOAWAY] request already in progress.";
|
|
212
|
+
// Previous GOAWAY request error/debug data takes precedence.
|
|
213
|
+
return Pending{};
|
|
214
|
+
}
|
|
215
|
+
GRPC_HTTP2_GOAWAY_LOG << "[Immediate GOAWAY] state change "
|
|
216
|
+
<< ctx->GoawayStateToString(ctx->goaway_state)
|
|
217
|
+
<< " -> "
|
|
218
|
+
"kImmediateGoawayRequested.";
|
|
219
|
+
|
|
220
|
+
ctx->goaway_state = GoawayState::kImmediateGoawayRequested;
|
|
221
|
+
ctx->SetGoawayArgs(
|
|
222
|
+
/*error_code=*/static_cast<uint32_t>(error_code),
|
|
223
|
+
/*debug_data=*/debug_data.TakeOwned(),
|
|
224
|
+
/*last_good_stream_id=*/last_good_stream_id);
|
|
225
|
+
ctx->goaway_interface->TriggerWriteCycle();
|
|
226
|
+
return Pending{};
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Handles a graceful GOAWAY request. The flow is as follows:
|
|
231
|
+
// 1. If there is no pending GOAWAY(state is kIdle), then
|
|
232
|
+
// a. Set the GOAWAY state to kInitialGracefulGoawayScheduled.
|
|
233
|
+
// b. Set the GOAWAY args.
|
|
234
|
+
// c. Trigger a write cycle and request a ping request.
|
|
235
|
+
// d. Once the ping ack is received and the state is
|
|
236
|
+
// kInitialGracefulGoawayScheduled, the state is changed to
|
|
237
|
+
// kFinalGracefulGoawayScheduled and a write cycle is triggered. The
|
|
238
|
+
// state is checked again as an immediate GOAWAY request could have been
|
|
239
|
+
// made in between in which case the current graceful GOAWAY request is
|
|
240
|
+
// effectively cancelled. In either case, the promise resolves when the
|
|
241
|
+
// GOAWAY request completes.
|
|
242
|
+
// e. Once the state is kFinalGracefulGoawayScheduled, the transport write
|
|
243
|
+
// cycle
|
|
244
|
+
// will send a GOAWAY frame and the state is changed to kDone
|
|
245
|
+
// effectively completing the GOAWAY process (and resolving the
|
|
246
|
+
// promise).
|
|
247
|
+
// 2. If the state is anything other than kIdle, then we don't need to
|
|
248
|
+
// start a new graceful GOAWAY request. The promise resolves when the
|
|
249
|
+
// previous GOAWAY request completes.
|
|
250
|
+
// In the above comments, `the promise` refers to the promise returned by
|
|
251
|
+
// RequestGoaway.
|
|
252
|
+
static auto HandleGracefulGoaway(RefCountedPtr<Context> ctx,
|
|
253
|
+
const Http2ErrorCode error_code,
|
|
254
|
+
Slice&& debug_data,
|
|
255
|
+
const uint32_t last_good_stream_id) {
|
|
256
|
+
GoawayState previous_state = ctx->goaway_state;
|
|
257
|
+
return If(
|
|
258
|
+
previous_state == GoawayState::kIdle,
|
|
259
|
+
[ctx = std::move(ctx), error_code, debug_data = debug_data.Ref(),
|
|
260
|
+
last_good_stream_id]() mutable {
|
|
261
|
+
// TODO(akshitpatel) : [PH2][P4] : Investigate if we need to modify
|
|
262
|
+
// transport ping timeout for the graceful GOAWAY process.
|
|
263
|
+
// Only begin the graceful GOAWAY process (at most once)
|
|
264
|
+
// if there is no pending GOAWAY.
|
|
265
|
+
GRPC_HTTP2_GOAWAY_LOG << "[Graceful GOAWAY] state change "
|
|
266
|
+
<< ctx->GoawayStateToString(ctx->goaway_state)
|
|
267
|
+
<< " -> "
|
|
268
|
+
"kInitialGracefulGoawayScheduled.";
|
|
269
|
+
GRPC_DCHECK(error_code == Http2ErrorCode::kNoError);
|
|
270
|
+
ctx->goaway_state = GoawayState::kInitialGracefulGoawayScheduled;
|
|
271
|
+
ctx->SetGoawayArgs(
|
|
272
|
+
/*error_code=*/static_cast<uint32_t>(Http2ErrorCode::kNoError),
|
|
273
|
+
/*debug_data=*/debug_data.TakeOwned(),
|
|
274
|
+
/*last_good_stream_id=*/last_good_stream_id);
|
|
275
|
+
ctx->goaway_interface->TriggerWriteCycle();
|
|
276
|
+
return TrySeq(ctx->goaway_interface->SendPingAndWaitForAck(),
|
|
277
|
+
[ctx]() -> Poll<absl::Status> {
|
|
278
|
+
GRPC_HTTP2_GOAWAY_LOG
|
|
279
|
+
<< "Ping resolved. Current state: "
|
|
280
|
+
<< ctx->GoawayStateToString(ctx->goaway_state);
|
|
281
|
+
if (ctx->goaway_state ==
|
|
282
|
+
GoawayState::kInitialGracefulGoawayScheduled) {
|
|
283
|
+
GRPC_HTTP2_GOAWAY_LOG
|
|
284
|
+
<< " [Graceful GOAWAY] state change "
|
|
285
|
+
<< ctx->GoawayStateToString(ctx->goaway_state)
|
|
286
|
+
<< " -> "
|
|
287
|
+
"kFinalGracefulGoawayScheduled.";
|
|
288
|
+
ctx->goaway_state =
|
|
289
|
+
GoawayState::kFinalGracefulGoawayScheduled;
|
|
290
|
+
ctx->goaway_interface->TriggerWriteCycle();
|
|
291
|
+
}
|
|
292
|
+
return Pending{};
|
|
293
|
+
});
|
|
294
|
+
},
|
|
295
|
+
[]() -> Poll<absl::Status> {
|
|
296
|
+
GRPC_HTTP2_GOAWAY_LOG << "GOAWAY request already in progress.";
|
|
297
|
+
return Pending{};
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
RefCountedPtr<Context> context_;
|
|
302
|
+
bool goaway_sent_ = false;
|
|
303
|
+
|
|
304
|
+
public:
|
|
305
|
+
explicit GoawayManager(std::unique_ptr<GoawayInterface> goaway_interface);
|
|
306
|
+
|
|
307
|
+
// Returns a promise that will be resolved when the GOAWAY process is
|
|
308
|
+
// complete. For immediate GOAWAY, the promise will be resolved once the
|
|
309
|
+
// GOAWAY frame is sent. For graceful GOAWAY, the promise will be resolved
|
|
310
|
+
// once the final GOAWAY frame is sent.
|
|
311
|
+
auto RequestGoaway(const Http2ErrorCode error_code, Slice&& debug_data,
|
|
312
|
+
const uint32_t last_good_stream_id, const bool immediate) {
|
|
313
|
+
return AssertResultType<absl::Status>(UntilDone(If(
|
|
314
|
+
immediate,
|
|
315
|
+
[ctx = context_->Ref(), error_code, debug_data = debug_data.Ref(),
|
|
316
|
+
last_good_stream_id]() mutable {
|
|
317
|
+
return AssertResultType<absl::Status>(HandleImmediateGoaway(
|
|
318
|
+
std::move(ctx), error_code, std::move(debug_data),
|
|
319
|
+
last_good_stream_id));
|
|
320
|
+
},
|
|
321
|
+
[ctx = context_->Ref(), error_code, debug_data = debug_data.Ref(),
|
|
322
|
+
last_good_stream_id]() mutable {
|
|
323
|
+
return AssertResultType<absl::Status>(
|
|
324
|
+
HandleGracefulGoaway(std::move(ctx), error_code,
|
|
325
|
+
std::move(debug_data), last_good_stream_id));
|
|
326
|
+
})));
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// Called from the transport write cycle to serialize the GOAWAY frame if
|
|
330
|
+
// needed.
|
|
331
|
+
void MaybeGetSerializedGoawayFrame(SliceBuffer& output_buf);
|
|
332
|
+
|
|
333
|
+
bool IsImmediateGoAway() const {
|
|
334
|
+
return context_->goaway_state == GoawayState::kImmediateGoawayRequested;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Called from the transport write cycle to notify the GOAWAY manager that a
|
|
338
|
+
// GOAWAY frame may have been sent. If a GOAWAY frame is sent in current
|
|
339
|
+
// write cycle, this function handles the needed state transition.
|
|
340
|
+
void NotifyGoawaySent();
|
|
341
|
+
|
|
342
|
+
// Returns the current GOAWAY state.
|
|
343
|
+
GoawayState TestOnlyGetGoawayState() const { return context_->goaway_state; }
|
|
344
|
+
std::optional<Http2Frame> TestOnlyMaybeGetGoawayFrame();
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
} // namespace http2
|
|
348
|
+
} // namespace grpc_core
|
|
349
|
+
|
|
350
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_GOAWAY_H
|