grpc 1.75.0 → 1.78.0
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 +24 -5
- data/include/grpc/credentials.h +27 -6
- data/include/grpc/event_engine/memory_allocator.h +2 -0
- data/include/grpc/event_engine/memory_request.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 +5 -5
- data/src/core/call/call_filters.h +211 -37
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +54 -32
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +49 -10
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +9 -9
- 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 +10 -9
- 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 +2 -2
- data/src/core/call/security_context.h +1 -1
- data/src/core/call/server_call.cc +5 -5
- data/src/core/call/server_call.h +6 -4
- 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 +25 -29
- data/src/core/channelz/channelz.h +73 -22
- data/src/core/channelz/channelz_registry.cc +2 -2
- data/src/core/channelz/channelz_registry.h +53 -2
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +15 -4
- data/src/core/channelz/text_encode.cc +66 -0
- data/src/core/channelz/text_encode.h +29 -0
- data/src/core/channelz/v2tov1/convert.cc +17 -6
- data/src/core/channelz/v2tov1/legacy_api.cc +18 -12
- data/src/core/channelz/v2tov1/property_list.cc +2 -1
- data/src/core/channelz/ztrace_collector.h +260 -87
- data/src/core/client_channel/backup_poller.cc +7 -8
- 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 +144 -84
- 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 +424 -686
- data/src/core/client_channel/client_channel_filter.h +57 -150
- data/src/core/client_channel/client_channel_internal.h +8 -5
- 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 +5 -5
- data/src/core/client_channel/connector.h +2 -0
- data/src/core/client_channel/dynamic_filters.cc +5 -5
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +1 -28
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +10 -12
- data/src/core/client_channel/load_balanced_call_destination.h +1 -1
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.cc +2 -2
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +11 -12
- 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 +114 -25
- 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 +5 -5
- data/src/core/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/config/config_vars.cc +38 -3
- data/src/core/config/config_vars.h +26 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +8 -8
- data/src/core/config/load_config.cc +13 -1
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +4 -4
- 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 +7 -6
- data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
- data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
- 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 +7 -7
- 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 +6 -6
- 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 +7 -7
- data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
- data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
- data/src/core/credentials/call/jwt/jwt_verifier.cc +19 -18
- 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 +49 -72
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
- data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
- 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 +5 -5
- data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -15
- 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 +23 -3
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
- data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
- 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 +7 -7
- 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 +7 -7
- data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +83 -39
- data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
- data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
- data/src/core/credentials/transport/security_connector.cc +6 -6
- data/src/core/credentials/transport/security_connector.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +13 -13
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -8
- data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -25
- 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 +8 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
- 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 +18 -13
- data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +3 -3
- data/src/core/credentials/transport/tls/tls_security_connector.cc +15 -15
- data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
- data/src/core/credentials/transport/transport_credentials.cc +3 -3
- data/src/core/credentials/transport/transport_credentials.h +4 -4
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
- 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 +6 -4
- 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 +2 -2
- 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 +11 -11
- data/src/core/ext/filters/http/message_compress/compression_filter.h +24 -5
- 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 +14 -14
- 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/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +58 -44
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +25 -24
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +306 -148
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -7
- data/src/core/ext/transport/chttp2/transport/flow_control.h +223 -83
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +175 -27
- data/src/core/ext/transport/chttp2/transport/frame.h +58 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- 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 +6 -6
- 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 +194 -54
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +34 -34
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1475 -632
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +384 -373
- 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 -3
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -5
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +337 -30
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +196 -21
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +172 -72
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -19
- 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 +30 -21
- data/src/core/ext/transport/chttp2/transport/parsing.cc +25 -23
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +70 -28
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +63 -23
- 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 +287 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +476 -208
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +57 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +202 -84
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
- data/src/core/ext/transport/inproc/inproc_transport.cc +9 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +11 -8
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
- 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 +5 -5
- 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 +8 -8
- 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 +12 -12
- 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 +6 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +38 -15
- data/src/core/handshaker/security/secure_endpoint.cc +31 -11
- data/src/core/handshaker/security/security_handshaker.cc +11 -8
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -6
- 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 +29 -25
- data/src/core/lib/channel/channel_stack.h +8 -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 +8 -13
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/promise_based_filter.cc +132 -72
- data/src/core/lib/channel/promise_based_filter.h +39 -23
- data/src/core/lib/compression/compression_internal.cc +6 -6
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +8 -8
- 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 +30 -28
- data/src/core/lib/event_engine/ares_resolver.h +4 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -3
- 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 +4 -4
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
- 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 +3 -3
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- 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 +12 -12
- 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 +15 -15
- 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 +3 -3
- 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 +28 -27
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +175 -177
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +40 -61
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +11 -7
- 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 +9 -9
- 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 +2 -2
- 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.cc +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 +4 -4
- 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/resolved_address.cc +3 -3
- data/src/core/lib/event_engine/shim.cc +8 -11
- data/src/core/lib/event_engine/shim.h +2 -1
- data/src/core/lib/event_engine/slice.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +15 -15
- 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 +11 -11
- 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 +32 -32
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
- data/src/core/lib/event_engine/windows/iocp.cc +11 -11
- 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 +7 -7
- data/src/core/lib/event_engine/windows/win_socket.h +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +16 -16
- data/src/core/lib/event_engine/windows/windows_engine.cc +20 -18
- data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +10 -10
- 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 +255 -42
- data/src/core/lib/experiments/experiments.h +105 -21
- data/src/core/lib/iomgr/buffer_list.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +4 -4
- 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 +7 -7
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
- 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 +19 -19
- data/src/core/lib/iomgr/ev_poll_posix.cc +14 -14
- 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 +10 -9
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- 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 +9 -9
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +4 -4
- 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 +4 -4
- data/src/core/lib/iomgr/socket_windows.cc +6 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +47 -47
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +7 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +70 -31
- data/src/core/lib/iomgr/tcp_windows.cc +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +5 -5
- data/src/core/lib/iomgr/timer_manager.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- 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 +3 -3
- data/src/core/lib/promise/activity.h +11 -10
- 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 +3 -3
- data/src/core/lib/promise/detail/join_state.h +10 -10
- 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 +16 -16
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
- data/src/core/lib/promise/for_each.h +8 -8
- 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 +5 -5
- data/src/core/lib/promise/latch.h +9 -9
- 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 +31 -30
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.cc +43 -30
- data/src/core/lib/promise/party.h +27 -23
- data/src/core/lib/promise/pipe.h +31 -17
- data/src/core/lib/promise/poll.h +6 -5
- data/src/core/lib/promise/promise.h +2 -4
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +8 -8
- data/src/core/lib/promise/try_join.h +5 -5
- data/src/core/lib/promise/try_seq.h +5 -5
- 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/arena.h +15 -2
- data/src/core/lib/resource_quota/connection_quota.cc +9 -7
- data/src/core/lib/resource_quota/connection_quota.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +48 -27
- data/src/core/lib/resource_quota/memory_quota.h +56 -20
- 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 +55 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- data/src/core/lib/resource_quota/thread_quota.h +1 -1
- data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
- data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
- data/src/core/lib/security/authorization/audit_logging.cc +7 -7
- 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_authorization_engine.cc +2 -2
- 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 +3 -3
- 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/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +58 -28
- data/src/core/lib/surface/call.h +13 -6
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/call_utils.cc +7 -7
- data/src/core/lib/surface/call_utils.h +85 -20
- data/src/core/lib/surface/channel.cc +6 -5
- data/src/core/lib/surface/channel.h +13 -3
- data/src/core/lib/surface/channel_create.cc +12 -8
- data/src/core/lib/surface/channel_create.h +1 -1
- data/src/core/lib/surface/channel_init.cc +84 -27
- data/src/core/lib/surface/channel_init.h +30 -13
- data/src/core/lib/surface/completion_queue.cc +21 -20
- data/src/core/lib/surface/completion_queue_factory.cc +7 -7
- data/src/core/lib/surface/connection_context.h +45 -2
- data/src/core/lib/surface/filter_stack_call.cc +25 -31
- data/src/core/lib/surface/filter_stack_call.h +6 -7
- 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 +10 -10
- 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 +3 -3
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +5 -5
- 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 +4 -4
- data/src/core/lib/transport/promise_endpoint.h +11 -11
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- 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 +8 -8
- 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 +6 -6
- 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 +37 -48
- 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 +13 -9
- data/src/core/load_balancing/health_check_client_internal.h +5 -5
- 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 +3 -3
- data/src/core/load_balancing/lb_policy_registry.h +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +11 -7
- data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +9 -17
- data/src/core/load_balancing/pick_first/pick_first.cc +62 -32
- data/src/core/load_balancing/priority/priority.cc +29 -30
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
- data/src/core/load_balancing/rls/rls.cc +23 -23
- data/src/core/load_balancing/round_robin/round_robin.cc +16 -16
- data/src/core/load_balancing/subchannel_interface.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +42 -41
- data/src/core/load_balancing/weighted_target/weighted_target.cc +14 -14
- data/src/core/load_balancing/xds/cds.cc +81 -37
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +24 -41
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +14 -14
- 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 +4 -4
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +35 -35
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +16 -16
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
- data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
- 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 +6 -6
- data/src/core/resolver/endpoint_addresses.h +4 -1
- data/src/core/resolver/fake/fake_resolver.cc +3 -3
- data/src/core/resolver/fake/fake_resolver.h +3 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
- data/src/core/resolver/polling_resolver.cc +8 -8
- 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 +5 -4
- 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 +7 -7
- data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
- data/src/core/resolver/xds/xds_resolver.cc +25 -22
- 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 +47 -43
- 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 +9 -5
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +5 -5
- 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 +19 -18
- 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 +4 -4
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +201 -24
- data/src/core/telemetry/default_tcp_tracer.h +3 -3
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +999 -0
- data/src/core/telemetry/instrument.h +1105 -0
- data/src/core/telemetry/metrics.cc +15 -5
- data/src/core/telemetry/metrics.h +36 -5
- data/src/core/telemetry/stats.h +2 -2
- data/src/core/telemetry/stats_data.cc +1 -20
- data/src/core/telemetry/stats_data.h +2 -21
- data/src/core/transport/auth_context.cc +3 -3
- 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 +81 -48
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +46 -36
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
- 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 +4 -4
- 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 +16 -8
- 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 +18 -5
- data/src/core/tsi/fake_transport_security.cc +6 -5
- data/src/core/tsi/local_transport_security.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +30 -30
- data/src/core/tsi/ssl_transport_security.h +1 -1
- data/src/core/tsi/ssl_transport_security_utils.cc +10 -10
- 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/chunked_vector.h +4 -4
- 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 +2 -2
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/gcp_metadata_query.cc +7 -7
- data/src/core/util/gcp_metadata_query.h +2 -2
- data/src/core/util/glob.cc +2 -0
- data/src/core/util/grpc_check.cc +24 -0
- data/src/core/util/grpc_check.h +103 -0
- 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 +6 -6
- 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 +4 -4
- 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 +199 -28
- 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 +4 -4
- data/src/core/util/matchers.h +1 -1
- data/src/core/util/memory_usage.h +17 -1
- 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/directory_reader.cc +3 -2
- data/src/core/util/posix/stat.cc +2 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/posix/thd.cc +2 -2
- data/src/core/util/posix/tmpfile.cc +2 -2
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted.h +2 -2
- data/src/core/util/ref_counted_ptr.h +6 -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/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- 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 +8 -3
- data/src/core/xds/grpc/xds_certificate_provider.cc +4 -4
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +39 -20
- data/src/core/xds/grpc/xds_client_grpc.h +6 -3
- 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 +7 -7
- data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
- 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 +7 -7
- 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.cc +4 -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 +9 -9
- data/src/core/xds/grpc/xds_listener_parser.h +1 -1
- data/src/core/xds/grpc/xds_matcher.cc +277 -0
- data/src/core/xds/grpc/xds_matcher.h +432 -0
- data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
- data/src/core/xds/grpc/xds_matcher_action.h +48 -0
- data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
- data/src/core/xds/grpc/xds_matcher_context.h +46 -0
- data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
- data/src/core/xds/grpc/xds_matcher_input.h +105 -0
- data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
- data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
- data/src/core/xds/grpc/xds_metadata.cc +4 -3
- 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 +14 -14
- data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
- data/src/core/xds/grpc/xds_routing.cc +6 -6
- 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 +11 -11
- data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
- data/src/core/xds/xds_client/lrs_client.cc +9 -9
- 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 +17 -17
- 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_grpc_imports.generated.h +2 -2
- 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
- data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
- metadata +51 -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,11 +22,12 @@
|
|
|
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
|
|
|
@@ -22,17 +22,18 @@
|
|
|
22
22
|
|
|
23
23
|
#include <cstdint>
|
|
24
24
|
#include <optional>
|
|
25
|
+
#include <vector>
|
|
25
26
|
|
|
26
|
-
#include "absl/functional/function_ref.h"
|
|
27
|
-
#include "absl/strings/string_view.h"
|
|
28
27
|
#include "src/core/channelz/property_list.h"
|
|
29
28
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
30
29
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
31
30
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
32
|
-
#include "
|
|
31
|
+
#include "absl/strings/string_view.h"
|
|
33
32
|
|
|
34
33
|
namespace grpc_core {
|
|
35
34
|
|
|
35
|
+
// TODO(tjagtap) [PH2][P1][Settings] : Add new DCHECKs to PH2-Only functions in
|
|
36
|
+
// this class.
|
|
36
37
|
class Http2SettingsManager {
|
|
37
38
|
public:
|
|
38
39
|
// Only local and peer settings can be edited by the transport.
|
|
@@ -53,7 +54,7 @@ class Http2SettingsManager {
|
|
|
53
54
|
.SetColumn("acked", acked_.ChannelzProperties());
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
// 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.
|
|
57
58
|
// Returns Http2SettingsFrame if we need to send a SETTINGS frame to the
|
|
58
59
|
// peer. Transport MUST send a frame returned by this function to the peer.
|
|
59
60
|
// This function is not idempotent.
|
|
@@ -61,7 +62,7 @@ class Http2SettingsManager {
|
|
|
61
62
|
|
|
62
63
|
// To be called from a promise based HTTP2 transport only
|
|
63
64
|
http2::Http2ErrorCode ApplyIncomingSettings(
|
|
64
|
-
std::vector<Http2SettingsFrame::Setting>& settings) {
|
|
65
|
+
const std::vector<Http2SettingsFrame::Setting>& settings) {
|
|
65
66
|
for (const auto& setting : settings) {
|
|
66
67
|
http2::Http2ErrorCode error1 =
|
|
67
68
|
count_updates_.IsUpdatePermitted(setting.id, setting.value, peer_);
|
|
@@ -0,0 +1,417 @@
|
|
|
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_HTTP2_SETTINGS_PROMISES_H
|
|
20
|
+
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_PROMISES_H
|
|
21
|
+
|
|
22
|
+
#include <grpc/event_engine/event_engine.h>
|
|
23
|
+
#include <grpc/support/port_platform.h>
|
|
24
|
+
|
|
25
|
+
#include <algorithm>
|
|
26
|
+
#include <cstdint>
|
|
27
|
+
#include <optional>
|
|
28
|
+
#include <string>
|
|
29
|
+
#include <utility>
|
|
30
|
+
#include <vector>
|
|
31
|
+
|
|
32
|
+
#include "src/core/channelz/property_list.h"
|
|
33
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
34
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
|
35
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
36
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
|
|
37
|
+
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
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"
|
|
44
|
+
#include "src/core/lib/promise/race.h"
|
|
45
|
+
#include "src/core/lib/promise/sleep.h"
|
|
46
|
+
#include "src/core/lib/promise/try_seq.h"
|
|
47
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
|
48
|
+
#include "src/core/util/grpc_check.h"
|
|
49
|
+
#include "src/core/util/ref_counted.h"
|
|
50
|
+
#include "src/core/util/time.h"
|
|
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
|
+
|
|
58
|
+
namespace grpc_core {
|
|
59
|
+
|
|
60
|
+
// Timeout for getting an ack back on settings changes
|
|
61
|
+
#define GRPC_ARG_SETTINGS_TIMEOUT "grpc.http2.settings_timeout"
|
|
62
|
+
|
|
63
|
+
#define GRPC_SETTINGS_TIMEOUT_DLOG \
|
|
64
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
65
|
+
|
|
66
|
+
// This class can only be used only from a promise based HTTP2 transports
|
|
67
|
+
// general_party_ .
|
|
68
|
+
// This class is designed with the assumption that only 1 SETTINGS frame will be
|
|
69
|
+
// in flight at a time. And we do not send a second SETTINGS frame till we
|
|
70
|
+
// receive and process the SETTINGS ACK and resolve the ACK promise.
|
|
71
|
+
class SettingsPromiseManager final : public RefCounted<SettingsPromiseManager> {
|
|
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
|
+
|
|
106
|
+
// Assumption : This would be set only once in the life of the transport.
|
|
107
|
+
inline void SetSettingsTimeout(const Duration timeout) {
|
|
108
|
+
GRPC_DCHECK(state_ == SettingsState::kWaitingForFirstPeerSettings);
|
|
109
|
+
settings_ack_timeout_ = timeout;
|
|
110
|
+
}
|
|
111
|
+
|
|
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
|
+
}
|
|
122
|
+
|
|
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.
|
|
139
|
+
auto WaitForSettingsTimeout() {
|
|
140
|
+
did_previous_settings_promise_resolve_ = false;
|
|
141
|
+
TimeoutWaiterSpawned();
|
|
142
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
143
|
+
<< "SettingsPromiseManager::WaitForSettingsTimeout Factory timeout_"
|
|
144
|
+
<< settings_ack_timeout_;
|
|
145
|
+
StartSettingsTimeoutTimer();
|
|
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*/) >
|
|
157
|
+
Timestamp::Now())
|
|
158
|
+
<< "Should have timed out";
|
|
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
|
+
}
|
|
253
|
+
}
|
|
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
|
+
|
|
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
|
+
|
|
322
|
+
inline void StartSettingsTimeoutTimer() {
|
|
323
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
324
|
+
<< "SettingsPromiseManager::StartSettingsTimeoutTimer "
|
|
325
|
+
"did_register_waker_ "
|
|
326
|
+
<< did_register_ack_timeout_waker_
|
|
327
|
+
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
328
|
+
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
329
|
+
GRPC_DCHECK(!did_register_ack_timeout_waker_);
|
|
330
|
+
sent_time_ = Timestamp::Now();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
inline bool HasReceivedAck() {
|
|
334
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
335
|
+
<< "SettingsPromiseManager::DidReceiveAck did_register_waker_ "
|
|
336
|
+
<< did_register_ack_timeout_waker_
|
|
337
|
+
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
338
|
+
return number_of_acks_unprocessed_ > 0;
|
|
339
|
+
}
|
|
340
|
+
inline void AddWaitingForAck() {
|
|
341
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
342
|
+
<< "SettingsPromiseManager::AddWaitingForAck did_register_waker_ "
|
|
343
|
+
<< did_register_ack_timeout_waker_
|
|
344
|
+
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
345
|
+
if (!did_register_ack_timeout_waker_) {
|
|
346
|
+
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
347
|
+
ack_timeout_waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
348
|
+
did_register_ack_timeout_waker_ = true;
|
|
349
|
+
}
|
|
350
|
+
GRPC_DCHECK(did_register_ack_timeout_waker_);
|
|
351
|
+
}
|
|
352
|
+
inline void RecordReceivedAck() {
|
|
353
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
354
|
+
<< "SettingsPromiseManager::RecordReceivedAck did_register_waker_ "
|
|
355
|
+
<< did_register_ack_timeout_waker_
|
|
356
|
+
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
357
|
+
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
358
|
+
++number_of_acks_unprocessed_;
|
|
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.";
|
|
366
|
+
}
|
|
367
|
+
GRPC_DCHECK(!did_register_ack_timeout_waker_);
|
|
368
|
+
}
|
|
369
|
+
inline void MarkReceivedAckAsProcessed() {
|
|
370
|
+
GRPC_SETTINGS_TIMEOUT_DLOG
|
|
371
|
+
<< "SettingsPromiseManager::RemoveReceivedAck did_register_waker_ "
|
|
372
|
+
<< did_register_ack_timeout_waker_
|
|
373
|
+
<< " number_of_acks_unprocessed_ : " << number_of_acks_unprocessed_;
|
|
374
|
+
--number_of_acks_unprocessed_;
|
|
375
|
+
GRPC_DCHECK_EQ(number_of_acks_unprocessed_, 0);
|
|
376
|
+
GRPC_DCHECK(!did_register_ack_timeout_waker_);
|
|
377
|
+
}
|
|
378
|
+
|
|
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.
|
|
386
|
+
Timestamp sent_time_ = Timestamp::InfFuture();
|
|
387
|
+
Waker ack_timeout_waker_;
|
|
388
|
+
bool did_register_ack_timeout_waker_ = false;
|
|
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_;
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
} // namespace grpc_core
|
|
416
|
+
|
|
417
|
+
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_PROMISES_H
|
|
@@ -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
|
|