grpc 1.78.0 → 1.80.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 +22 -8
- data/include/grpc/credentials.h +47 -37
- data/include/grpc/credentials_cpp.h +39 -0
- data/include/grpc/event_engine/event_engine.h +8 -3
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/impl/call.h +9 -0
- data/include/grpc/impl/channel_arg_names.h +7 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/private_key_signer.h +104 -0
- data/include/grpc/support/port_platform.h +6 -0
- data/src/core/call/call_filters.h +101 -78
- data/src/core/call/call_spine.h +91 -68
- data/src/core/call/call_state.h +60 -4
- data/src/core/call/client_call.cc +9 -9
- data/src/core/call/client_call.h +1 -1
- data/src/core/call/metadata_batch.cc +2 -0
- data/src/core/call/metadata_batch.h +48 -1
- data/src/core/call/metadata_info.cc +35 -0
- data/src/core/call/metadata_info.h +2 -0
- data/src/core/call/simple_slice_based_metadata.h +2 -1
- data/src/core/channelz/channelz.cc +9 -6
- data/src/core/channelz/channelz.h +7 -4
- data/src/core/channelz/property_list.h +5 -0
- data/src/core/channelz/v2tov1/convert.cc +1 -1
- data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
- data/src/core/client_channel/buffered_call.cc +7 -3
- data/src/core/client_channel/buffered_call.h +11 -5
- data/src/core/client_channel/client_channel.cc +106 -44
- data/src/core/client_channel/client_channel.h +3 -6
- data/src/core/client_channel/client_channel_filter.cc +90 -64
- data/src/core/client_channel/client_channel_filter.h +3 -6
- data/src/core/client_channel/client_channel_internal.h +5 -0
- data/src/core/client_channel/config_selector.h +17 -12
- data/src/core/client_channel/dynamic_filters.cc +8 -7
- data/src/core/client_channel/dynamic_filters.h +7 -5
- data/src/core/client_channel/retry_filter.cc +1 -1
- data/src/core/client_channel/retry_filter.h +2 -2
- data/src/core/client_channel/subchannel.cc +1682 -266
- data/src/core/client_channel/subchannel.h +411 -134
- data/src/core/client_channel/subchannel_stream_client.cc +22 -18
- data/src/core/client_channel/subchannel_stream_client.h +8 -9
- data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
- data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
- data/src/core/config/config_vars.cc +9 -1
- data/src/core/config/config_vars.h +6 -0
- data/src/core/credentials/call/call_creds_registry.h +51 -22
- data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
- data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
- data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
- data/src/core/credentials/transport/channel_creds_registry.h +71 -20
- data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
- data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
- data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
- data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
- data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
- data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
- data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
- data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
- data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
- data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
- data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
- data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
- data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
- data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
- data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
- data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
- data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
- data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
- data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
- data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
- data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
- data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +6 -3
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
- data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
- data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
- data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
- data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
- data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
- data/src/core/filter/filter_chain.h +95 -0
- data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
- data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
- data/src/core/handshaker/security/secure_endpoint.cc +282 -68
- data/src/core/handshaker/security/secure_endpoint.h +0 -7
- data/src/core/lib/channel/channel_args.h +1 -1
- data/src/core/lib/channel/promise_based_filter.cc +17 -4
- data/src/core/lib/channel/promise_based_filter.h +3 -2
- data/src/core/lib/debug/trace_flags.cc +2 -0
- data/src/core/lib/debug/trace_flags.h +1 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
- data/src/core/lib/event_engine/event_engine.cc +9 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
- data/src/core/lib/experiments/experiments.cc +309 -201
- data/src/core/lib/experiments/experiments.h +141 -80
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
- data/src/core/lib/iomgr/resolve_address.h +0 -2
- data/src/core/lib/iomgr/resolved_address.h +0 -2
- data/src/core/lib/iomgr/tcp_posix.cc +13 -5
- data/src/core/lib/iomgr/tcp_server.cc +0 -5
- data/src/core/lib/iomgr/tcp_server.h +0 -7
- data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
- data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
- data/src/core/lib/promise/all_ok.h +17 -12
- data/src/core/lib/promise/cancel_callback.h +12 -13
- data/src/core/lib/promise/detail/join_state.h +626 -0
- data/src/core/lib/promise/detail/promise_factory.h +14 -14
- data/src/core/lib/promise/for_each.h +32 -8
- data/src/core/lib/promise/if.h +9 -7
- data/src/core/lib/promise/loop.h +18 -16
- data/src/core/lib/promise/map.h +54 -47
- data/src/core/lib/promise/mpsc.h +11 -10
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.h +25 -19
- data/src/core/lib/promise/poll.h +5 -5
- data/src/core/lib/promise/prioritized_race.h +10 -7
- data/src/core/lib/promise/promise.h +16 -11
- data/src/core/lib/promise/race.h +6 -5
- data/src/core/lib/promise/seq.h +109 -74
- data/src/core/lib/promise/try_join.h +14 -6
- data/src/core/lib/promise/try_seq.h +76 -60
- data/src/core/lib/resource_quota/api.cc +7 -0
- data/src/core/lib/resource_quota/arena.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +4 -1
- data/src/core/lib/resource_quota/resource_quota.cc +2 -1
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/resource_quota/stream_quota.cc +77 -1
- data/src/core/lib/resource_quota/stream_quota.h +64 -1
- data/src/core/lib/resource_quota/telemetry.h +1 -1
- data/src/core/lib/surface/call.cc +13 -0
- data/src/core/lib/surface/call_utils.h +58 -43
- data/src/core/lib/surface/channel.h +1 -4
- data/src/core/lib/surface/completion_queue.cc +13 -6
- data/src/core/lib/surface/validate_metadata.cc +20 -15
- data/src/core/lib/surface/validate_metadata.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +1 -1
- data/src/core/lib/transport/promise_endpoint.h +1 -1
- data/src/core/lib/transport/transport.h +5 -0
- data/src/core/load_balancing/health_check_client.cc +1 -15
- data/src/core/load_balancing/health_check_client_internal.h +0 -2
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
- data/src/core/resolver/xds/xds_resolver.cc +162 -116
- data/src/core/server/server.cc +18 -1
- data/src/core/server/server.h +2 -0
- data/src/core/server/xds_server_config_fetcher.cc +4 -4
- data/src/core/telemetry/call_tracer.cc +87 -2
- data/src/core/telemetry/call_tracer.h +46 -8
- data/src/core/telemetry/instrument.cc +102 -40
- data/src/core/telemetry/instrument.h +246 -65
- data/src/core/tsi/fake_transport_security.cc +3 -1
- data/src/core/tsi/ssl_transport_security.cc +516 -137
- data/src/core/tsi/ssl_transport_security.h +28 -22
- 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/util/bitset.h +6 -0
- data/src/core/util/function_signature.h +3 -1
- data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
- data/src/core/util/json/json_reader.cc +0 -4
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
- data/src/core/xds/grpc/certificate_provider_store.h +3 -17
- data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
- data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
- data/src/core/xds/grpc/xds_client_grpc.h +10 -7
- data/src/core/xds/grpc/xds_cluster.cc +18 -4
- data/src/core/xds/grpc/xds_cluster.h +17 -2
- data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
- data/src/core/xds/grpc/xds_common_types.cc +45 -0
- data/src/core/xds/grpc/xds_common_types.h +31 -0
- data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
- data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
- data/src/core/xds/grpc/xds_http_filter.cc +38 -0
- data/src/core/xds/grpc/xds_http_filter.h +70 -47
- data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
- data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
- data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
- data/src/core/xds/grpc/xds_listener.cc +4 -1
- data/src/core/xds/grpc/xds_listener.h +10 -2
- data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
- data/src/core/xds/grpc/xds_matcher.cc +40 -5
- data/src/core/xds/grpc/xds_matcher.h +13 -0
- data/src/core/xds/grpc/xds_matcher_action.h +1 -1
- data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
- data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
- data/src/core/xds/grpc/xds_route_config.cc +12 -1
- data/src/core/xds/grpc/xds_route_config.h +15 -2
- data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
- data/src/core/xds/grpc/xds_routing.cc +181 -6
- data/src/core/xds/grpc/xds_routing.h +57 -0
- data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
- data/src/core/xds/grpc/xds_server_grpc.h +13 -6
- data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
- data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
- data/src/ruby/lib/grpc/grpc.rb +7 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
- data/src/ruby/spec/spec_helper.rb +1 -1
- metadata +64 -14
- data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
|
@@ -275,7 +275,7 @@ class ClientChannel::SubchannelWrapper::WatcherWrapper
|
|
|
275
275
|
<< subchannel_wrapper_->subchannel_.get()
|
|
276
276
|
<< " watcher=" << watcher_.get()
|
|
277
277
|
<< " state=" << ConnectivityStateName(state) << " status=" << status;
|
|
278
|
-
if (!
|
|
278
|
+
if (!IsSubchannelConnectionScalingEnabled()) {
|
|
279
279
|
auto keepalive_throttling = status.GetPayload(kKeepaliveThrottlingKey);
|
|
280
280
|
if (keepalive_throttling.has_value()) {
|
|
281
281
|
int new_keepalive_time_ms = -1;
|
|
@@ -679,7 +679,7 @@ ClientChannel::ClientChannel(
|
|
|
679
679
|
client_channel_factory_(client_channel_factory),
|
|
680
680
|
channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
|
|
681
681
|
idle_timeout_(GetClientIdleTimeout(channel_args_)),
|
|
682
|
-
resolver_data_for_calls_(
|
|
682
|
+
resolver_data_for_calls_(nullptr),
|
|
683
683
|
picker_(nullptr),
|
|
684
684
|
call_destination_(
|
|
685
685
|
call_destination_factory->CreateCallDestination(picker_)),
|
|
@@ -906,6 +906,72 @@ grpc_call* ClientChannel::CreateCall(
|
|
|
906
906
|
compression_options(), std::move(arena), Ref());
|
|
907
907
|
}
|
|
908
908
|
|
|
909
|
+
namespace {
|
|
910
|
+
|
|
911
|
+
class FilterChainImpl final : public FilterChain {
|
|
912
|
+
public:
|
|
913
|
+
explicit FilterChainImpl(RefCountedPtr<UnstartedCallDestination> destination)
|
|
914
|
+
: destination_(std::move(destination)) {}
|
|
915
|
+
|
|
916
|
+
UnstartedCallDestination* destination() const { return destination_.get(); }
|
|
917
|
+
|
|
918
|
+
private:
|
|
919
|
+
RefCountedPtr<UnstartedCallDestination> destination_;
|
|
920
|
+
};
|
|
921
|
+
|
|
922
|
+
class FilterChainBuilderImpl final : public FilterChainBuilder {
|
|
923
|
+
public:
|
|
924
|
+
FilterChainBuilderImpl(
|
|
925
|
+
bool enable_retries, const ChannelArgs& channel_args,
|
|
926
|
+
Blackboard* blackboard,
|
|
927
|
+
std::function<void(ServerMetadata&)> on_server_trailing_metadata,
|
|
928
|
+
RefCountedPtr<UnstartedCallDestination> destination)
|
|
929
|
+
: enable_retries_(enable_retries),
|
|
930
|
+
channel_args_(channel_args),
|
|
931
|
+
blackboard_(blackboard),
|
|
932
|
+
on_server_trailing_metadata_(std::move(on_server_trailing_metadata)),
|
|
933
|
+
destination_(std::move(destination)) {}
|
|
934
|
+
|
|
935
|
+
absl::StatusOr<RefCountedPtr<FilterChain>> Build() override {
|
|
936
|
+
if (builder_ == nullptr) InitBuilder();
|
|
937
|
+
if (enable_retries_) builder_->Add<RetryInterceptor>(nullptr);
|
|
938
|
+
auto top_of_stack_destination = builder_->Build(destination_);
|
|
939
|
+
if (!top_of_stack_destination.ok()) {
|
|
940
|
+
return MaybeRewriteIllegalStatusCode(top_of_stack_destination.status(),
|
|
941
|
+
"channel construction");
|
|
942
|
+
}
|
|
943
|
+
builder_.reset();
|
|
944
|
+
return MakeRefCounted<FilterChainImpl>(
|
|
945
|
+
std::move(*top_of_stack_destination));
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
private:
|
|
949
|
+
void AddFilter(const FilterHandle& filter_handle,
|
|
950
|
+
RefCountedPtr<const FilterConfig> config) override {
|
|
951
|
+
if (builder_ == nullptr) InitBuilder();
|
|
952
|
+
filter_handle.AddToBuilder(builder_.get(), std::move(config));
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
void InitBuilder() {
|
|
956
|
+
builder_ =
|
|
957
|
+
std::make_unique<InterceptionChainBuilder>(channel_args_, blackboard_);
|
|
958
|
+
if (on_server_trailing_metadata_ != nullptr) {
|
|
959
|
+
builder_->AddOnServerTrailingMetadata(on_server_trailing_metadata_);
|
|
960
|
+
}
|
|
961
|
+
CoreConfiguration::Get().channel_init().AddToInterceptionChainBuilder(
|
|
962
|
+
GRPC_CLIENT_CHANNEL, *builder_);
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
const bool enable_retries_;
|
|
966
|
+
const ChannelArgs channel_args_;
|
|
967
|
+
const Blackboard* blackboard_;
|
|
968
|
+
const std::function<void(ServerMetadata&)> on_server_trailing_metadata_;
|
|
969
|
+
const RefCountedPtr<UnstartedCallDestination> destination_;
|
|
970
|
+
std::unique_ptr<InterceptionChainBuilder> builder_;
|
|
971
|
+
};
|
|
972
|
+
|
|
973
|
+
} // namespace
|
|
974
|
+
|
|
909
975
|
void ClientChannel::StartCall(UnstartedCallHandler unstarted_handler) {
|
|
910
976
|
// Increment call count.
|
|
911
977
|
if (idle_timeout_ != Duration::Zero()) idle_state_.IncreaseCallCount();
|
|
@@ -924,31 +990,32 @@ void ClientChannel::StartCall(UnstartedCallHandler unstarted_handler) {
|
|
|
924
990
|
// Wait for the resolver result.
|
|
925
991
|
CheckDelayed(self->resolver_data_for_calls_.NextWhen(
|
|
926
992
|
[wait_for_ready](
|
|
927
|
-
const absl::StatusOr<
|
|
993
|
+
const absl::StatusOr<RefCountedPtr<ConfigSelector>>
|
|
994
|
+
config_selector) {
|
|
928
995
|
bool got_result = false;
|
|
929
996
|
// If the resolver reports an error but the call is
|
|
930
997
|
// wait_for_ready, keep waiting for the next result
|
|
931
998
|
// instead of failing the call.
|
|
932
|
-
if (!
|
|
999
|
+
if (!config_selector.ok()) {
|
|
933
1000
|
got_result = !wait_for_ready;
|
|
934
1001
|
} else {
|
|
935
1002
|
// Not an error. Make sure we actually have a result.
|
|
936
|
-
got_result =
|
|
1003
|
+
got_result = *config_selector != nullptr;
|
|
937
1004
|
}
|
|
938
1005
|
return got_result;
|
|
939
1006
|
})),
|
|
940
1007
|
// Handle resolver result.
|
|
941
1008
|
[self, unstarted_handler](
|
|
942
|
-
std::tuple<absl::StatusOr<
|
|
1009
|
+
std::tuple<absl::StatusOr<RefCountedPtr<ConfigSelector>>, bool>
|
|
943
1010
|
result_and_delayed) mutable {
|
|
944
|
-
auto&
|
|
945
|
-
|
|
946
|
-
if (!resolver_data.ok()) return resolver_data.status();
|
|
1011
|
+
auto& [config_selector, was_queued] = result_and_delayed;
|
|
1012
|
+
if (!config_selector.ok()) return config_selector.status();
|
|
947
1013
|
// Apply service config to call.
|
|
948
|
-
absl::
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
1014
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>> filter_chain =
|
|
1015
|
+
self->ApplyServiceConfigToCall(
|
|
1016
|
+
**config_selector,
|
|
1017
|
+
unstarted_handler.UnprocessedClientInitialMetadata());
|
|
1018
|
+
if (!filter_chain.ok()) return filter_chain.status();
|
|
952
1019
|
// If the call was queued, add trace annotation.
|
|
953
1020
|
if (was_queued) {
|
|
954
1021
|
auto* call_tracer = MaybeGetContext<CallSpan>();
|
|
@@ -959,8 +1026,10 @@ void ClientChannel::StartCall(UnstartedCallHandler unstarted_handler) {
|
|
|
959
1026
|
}
|
|
960
1027
|
// Start the call on the destination provided by the
|
|
961
1028
|
// resolver.
|
|
962
|
-
|
|
963
|
-
|
|
1029
|
+
auto destination =
|
|
1030
|
+
DownCast<const FilterChainImpl*>(filter_chain->get())
|
|
1031
|
+
->destination();
|
|
1032
|
+
destination->StartCall(std::move(unstarted_handler));
|
|
964
1033
|
return absl::OkStatus();
|
|
965
1034
|
});
|
|
966
1035
|
});
|
|
@@ -992,7 +1061,7 @@ void ClientChannel::DestroyResolverAndLbPolicyLocked() {
|
|
|
992
1061
|
resolver_.reset();
|
|
993
1062
|
saved_service_config_.reset();
|
|
994
1063
|
saved_config_selector_.reset();
|
|
995
|
-
resolver_data_for_calls_.Set(
|
|
1064
|
+
resolver_data_for_calls_.Set(nullptr);
|
|
996
1065
|
// Clear LB policy if set.
|
|
997
1066
|
if (lb_policy_ != nullptr) {
|
|
998
1067
|
GRPC_TRACE_LOG(client_channel, INFO)
|
|
@@ -1324,35 +1393,26 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked(
|
|
|
1324
1393
|
ChannelArgs new_args = args.SetObject(this).SetObject(saved_service_config_);
|
|
1325
1394
|
// Construct filter stack.
|
|
1326
1395
|
auto new_blackboard = MakeRefCounted<Blackboard>();
|
|
1327
|
-
InterceptionChainBuilder builder(new_args, new_blackboard.get());
|
|
1328
|
-
if (idle_timeout_ != Duration::Zero()) {
|
|
1329
|
-
builder.AddOnServerTrailingMetadata([this](ServerMetadata&) {
|
|
1330
|
-
if (idle_state_.DecreaseCallCount()) StartIdleTimer();
|
|
1331
|
-
});
|
|
1332
|
-
}
|
|
1333
|
-
CoreConfiguration::Get().channel_init().AddToInterceptionChainBuilder(
|
|
1334
|
-
GRPC_CLIENT_CHANNEL, builder);
|
|
1335
|
-
// Add filters returned by the config selector (e.g., xDS HTTP filters).
|
|
1336
|
-
config_selector->AddFilters(builder, blackboard_.get(), new_blackboard.get());
|
|
1337
1396
|
const bool enable_retries =
|
|
1338
1397
|
!channel_args_.WantMinimalStack() &&
|
|
1339
1398
|
channel_args_.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
|
|
1340
1399
|
if (enable_retries) {
|
|
1341
1400
|
RetryInterceptor::UpdateBlackboard(*saved_service_config_,
|
|
1342
1401
|
blackboard_.get(), new_blackboard.get());
|
|
1343
|
-
builder.Add<RetryInterceptor>(nullptr);
|
|
1344
1402
|
}
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
resolver_data_for_calls_.Set(MaybeRewriteIllegalStatusCode(
|
|
1351
|
-
top_of_stack_call_destination.status(), "channel construction"));
|
|
1352
|
-
} else {
|
|
1353
|
-
resolver_data_for_calls_.Set(ResolverDataForCalls{
|
|
1354
|
-
std::move(config_selector), std::move(*top_of_stack_call_destination)});
|
|
1403
|
+
std::function<void(ServerMetadata&)> on_server_trailing_metadata;
|
|
1404
|
+
if (idle_timeout_ != Duration::Zero()) {
|
|
1405
|
+
on_server_trailing_metadata = [this](ServerMetadata&) {
|
|
1406
|
+
if (idle_state_.DecreaseCallCount()) StartIdleTimer();
|
|
1407
|
+
};
|
|
1355
1408
|
}
|
|
1409
|
+
FilterChainBuilderImpl filter_chain_builder(
|
|
1410
|
+
enable_retries, new_args, new_blackboard.get(),
|
|
1411
|
+
std::move(on_server_trailing_metadata), call_destination_);
|
|
1412
|
+
config_selector->BuildFilterChains(filter_chain_builder, blackboard_.get(),
|
|
1413
|
+
new_blackboard.get());
|
|
1414
|
+
blackboard_ = std::move(new_blackboard);
|
|
1415
|
+
resolver_data_for_calls_.Set(std::move(config_selector));
|
|
1356
1416
|
}
|
|
1357
1417
|
|
|
1358
1418
|
void ClientChannel::UpdateStateLocked(grpc_connectivity_state state,
|
|
@@ -1423,7 +1483,8 @@ void ClientChannel::StartIdleTimer() {
|
|
|
1423
1483
|
std::move(arena)));
|
|
1424
1484
|
}
|
|
1425
1485
|
|
|
1426
|
-
absl::
|
|
1486
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>>
|
|
1487
|
+
ClientChannel::ApplyServiceConfigToCall(
|
|
1427
1488
|
ConfigSelector& config_selector,
|
|
1428
1489
|
ClientMetadata& client_initial_metadata) const {
|
|
1429
1490
|
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
@@ -1438,11 +1499,12 @@ absl::Status ClientChannel::ApplyServiceConfigToCall(
|
|
|
1438
1499
|
GetContext<Arena>()->New<ClientChannelServiceConfigCallData>(
|
|
1439
1500
|
GetContext<Arena>());
|
|
1440
1501
|
// Use the ConfigSelector to determine the config for the call.
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
if (!
|
|
1445
|
-
return MaybeRewriteIllegalStatusCode(
|
|
1502
|
+
auto filter_chain = config_selector.GetCallConfig({&client_initial_metadata,
|
|
1503
|
+
GetContext<Arena>(),
|
|
1504
|
+
service_config_call_data});
|
|
1505
|
+
if (!filter_chain.ok()) {
|
|
1506
|
+
return MaybeRewriteIllegalStatusCode(filter_chain.status(),
|
|
1507
|
+
"ConfigSelector");
|
|
1446
1508
|
}
|
|
1447
1509
|
// Apply our own method params to the call.
|
|
1448
1510
|
auto* method_params = DownCast<ClientChannelMethodParsedConfig*>(
|
|
@@ -1467,7 +1529,7 @@ absl::Status ClientChannel::ApplyServiceConfigToCall(
|
|
|
1467
1529
|
wait_for_ready->value = method_params->wait_for_ready().value();
|
|
1468
1530
|
}
|
|
1469
1531
|
}
|
|
1470
|
-
return
|
|
1532
|
+
return filter_chain;
|
|
1471
1533
|
}
|
|
1472
1534
|
|
|
1473
1535
|
} // namespace grpc_core
|
|
@@ -166,7 +166,7 @@ class ClientChannel : public Channel {
|
|
|
166
166
|
|
|
167
167
|
// Applies service config settings from config_selector to the call.
|
|
168
168
|
// May modify call context and client_initial_metadata.
|
|
169
|
-
absl::
|
|
169
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>> ApplyServiceConfigToCall(
|
|
170
170
|
ConfigSelector& config_selector,
|
|
171
171
|
ClientMetadata& client_initial_metadata) const;
|
|
172
172
|
|
|
@@ -192,11 +192,8 @@ class ClientChannel : public Channel {
|
|
|
192
192
|
//
|
|
193
193
|
// Fields related to name resolution.
|
|
194
194
|
//
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
RefCountedPtr<UnstartedCallDestination> call_destination;
|
|
198
|
-
};
|
|
199
|
-
Observable<absl::StatusOr<ResolverDataForCalls>> resolver_data_for_calls_;
|
|
195
|
+
Observable<absl::StatusOr<RefCountedPtr<ConfigSelector>>>
|
|
196
|
+
resolver_data_for_calls_;
|
|
200
197
|
|
|
201
198
|
//
|
|
202
199
|
// Fields related to LB picks.
|
|
@@ -217,7 +217,7 @@ class ClientChannelFilter::CallData {
|
|
|
217
217
|
grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
|
|
218
218
|
grpc_closure recv_trailing_metadata_ready_;
|
|
219
219
|
|
|
220
|
-
RefCountedPtr<DynamicFilters> dynamic_filters_;
|
|
220
|
+
RefCountedPtr<const DynamicFilters> dynamic_filters_;
|
|
221
221
|
RefCountedPtr<DynamicFilters::Call> dynamic_call_;
|
|
222
222
|
|
|
223
223
|
BufferedCall buffered_call_;
|
|
@@ -300,7 +300,7 @@ class DynamicTerminationFilter::CallData final {
|
|
|
300
300
|
const grpc_call_final_info* /*final_info*/,
|
|
301
301
|
grpc_closure* then_schedule_closure) {
|
|
302
302
|
auto* calld = static_cast<CallData*>(elem->call_data);
|
|
303
|
-
RefCountedPtr<
|
|
303
|
+
RefCountedPtr<Subchannel::Call> subchannel_call;
|
|
304
304
|
if (GPR_LIKELY(calld->lb_call_ != nullptr)) {
|
|
305
305
|
subchannel_call = calld->lb_call_->subchannel_call();
|
|
306
306
|
}
|
|
@@ -504,8 +504,13 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
504
504
|
watcher_map_.erase(it);
|
|
505
505
|
}
|
|
506
506
|
|
|
507
|
-
|
|
508
|
-
return subchannel_->
|
|
507
|
+
absl::Status Ping(grpc_closure* on_initiate, grpc_closure* on_ack) {
|
|
508
|
+
return subchannel_->Ping(on_initiate, on_ack);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
RefCountedPtr<Subchannel::Call> CreateCall(Subchannel::CreateCallArgs args,
|
|
512
|
+
grpc_error_handle* error) {
|
|
513
|
+
return subchannel_->CreateCall(args, error);
|
|
509
514
|
}
|
|
510
515
|
|
|
511
516
|
void RequestConnection() override { subchannel_->RequestConnection(); }
|
|
@@ -599,7 +604,7 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
599
604
|
<< parent_.get() << " subchannel " << parent_->subchannel_.get()
|
|
600
605
|
<< " watcher=" << watcher_.get()
|
|
601
606
|
<< " state=" << ConnectivityStateName(state) << " status=" << status;
|
|
602
|
-
if (!
|
|
607
|
+
if (!IsSubchannelConnectionScalingEnabled()) {
|
|
603
608
|
auto keepalive_throttling = status.GetPayload(kKeepaliveThrottlingKey);
|
|
604
609
|
if (keepalive_throttling.has_value()) {
|
|
605
610
|
int new_keepalive_time_ms = -1;
|
|
@@ -1412,6 +1417,46 @@ void ClientChannelFilter::UpdateServiceConfigInControlPlaneLocked(
|
|
|
1412
1417
|
<< saved_config_selector_.get();
|
|
1413
1418
|
}
|
|
1414
1419
|
|
|
1420
|
+
namespace {
|
|
1421
|
+
|
|
1422
|
+
// Filter chain builder impl to inject into ConfigSelector.
|
|
1423
|
+
class LegacyFilterChainBuilder final : public FilterChainBuilder {
|
|
1424
|
+
public:
|
|
1425
|
+
LegacyFilterChainBuilder(bool enable_retries, const ChannelArgs& channel_args,
|
|
1426
|
+
const Blackboard* blackboard)
|
|
1427
|
+
: enable_retries_(enable_retries),
|
|
1428
|
+
channel_args_(channel_args),
|
|
1429
|
+
blackboard_(blackboard) {}
|
|
1430
|
+
|
|
1431
|
+
absl::StatusOr<RefCountedPtr<FilterChain>> Build() override {
|
|
1432
|
+
if (enable_retries_) {
|
|
1433
|
+
filters_.push_back({&RetryFilter::kFilterVtable, nullptr});
|
|
1434
|
+
} else {
|
|
1435
|
+
filters_.push_back({&DynamicTerminationFilter::kFilterVtable, nullptr});
|
|
1436
|
+
}
|
|
1437
|
+
RefCountedPtr<DynamicFilters> dynamic_filters =
|
|
1438
|
+
DynamicFilters::Create(channel_args_, std::move(filters_), blackboard_);
|
|
1439
|
+
if (dynamic_filters == nullptr) {
|
|
1440
|
+
return absl::InternalError("error constructing dynamic filter stack");
|
|
1441
|
+
}
|
|
1442
|
+
filters_.clear();
|
|
1443
|
+
return dynamic_filters;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
private:
|
|
1447
|
+
void AddFilter(const FilterHandle& filter_handle,
|
|
1448
|
+
RefCountedPtr<const FilterConfig> config) override {
|
|
1449
|
+
filter_handle.AddToBuilder(&filters_, std::move(config));
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
const bool enable_retries_;
|
|
1453
|
+
const ChannelArgs channel_args_;
|
|
1454
|
+
const Blackboard* blackboard_;
|
|
1455
|
+
std::vector<FilterAndConfig> filters_;
|
|
1456
|
+
};
|
|
1457
|
+
|
|
1458
|
+
} // namespace
|
|
1459
|
+
|
|
1415
1460
|
void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked(
|
|
1416
1461
|
const ChannelArgs& args) {
|
|
1417
1462
|
// Grab ref to service config.
|
|
@@ -1432,19 +1477,15 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked(
|
|
|
1432
1477
|
new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
|
|
1433
1478
|
// Construct dynamic filter stack.
|
|
1434
1479
|
auto new_blackboard = MakeRefCounted<Blackboard>();
|
|
1435
|
-
std::vector<const grpc_channel_filter*> filters =
|
|
1436
|
-
config_selector->GetFilters(blackboard_.get(), new_blackboard.get());
|
|
1437
1480
|
if (enable_retries) {
|
|
1438
1481
|
RetryFilter::UpdateBlackboard(*service_config, blackboard_.get(),
|
|
1439
1482
|
new_blackboard.get());
|
|
1440
|
-
filters.push_back(&RetryFilter::kVtable);
|
|
1441
|
-
} else {
|
|
1442
|
-
filters.push_back(&DynamicTerminationFilter::kFilterVtable);
|
|
1443
1483
|
}
|
|
1484
|
+
LegacyFilterChainBuilder filter_chain_builder(enable_retries, new_args,
|
|
1485
|
+
new_blackboard.get());
|
|
1486
|
+
config_selector->BuildFilterChains(filter_chain_builder, blackboard_.get(),
|
|
1487
|
+
new_blackboard.get());
|
|
1444
1488
|
blackboard_ = std::move(new_blackboard);
|
|
1445
|
-
RefCountedPtr<DynamicFilters> dynamic_filters =
|
|
1446
|
-
DynamicFilters::Create(new_args, std::move(filters), blackboard_.get());
|
|
1447
|
-
GRPC_CHECK(dynamic_filters != nullptr);
|
|
1448
1489
|
// Grab data plane lock to update service config.
|
|
1449
1490
|
//
|
|
1450
1491
|
// We defer unreffing the old values (and deallocating memory) until
|
|
@@ -1457,7 +1498,6 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked(
|
|
|
1457
1498
|
// Old values will be unreffed after lock is released.
|
|
1458
1499
|
service_config_.swap(service_config);
|
|
1459
1500
|
config_selector_.swap(config_selector);
|
|
1460
|
-
dynamic_filters_.swap(dynamic_filters);
|
|
1461
1501
|
// Re-process queued calls asynchronously.
|
|
1462
1502
|
ReprocessQueuedResolverCalls();
|
|
1463
1503
|
}
|
|
@@ -1495,13 +1535,11 @@ void ClientChannelFilter::DestroyResolverAndLbPolicyLocked() {
|
|
|
1495
1535
|
// after we release the lock.
|
|
1496
1536
|
RefCountedPtr<ServiceConfig> service_config_to_unref;
|
|
1497
1537
|
RefCountedPtr<ConfigSelector> config_selector_to_unref;
|
|
1498
|
-
RefCountedPtr<DynamicFilters> dynamic_filters_to_unref;
|
|
1499
1538
|
{
|
|
1500
1539
|
MutexLock lock(&resolution_mu_);
|
|
1501
1540
|
received_service_config_data_ = false;
|
|
1502
1541
|
service_config_to_unref = std::move(service_config_);
|
|
1503
1542
|
config_selector_to_unref = std::move(config_selector_);
|
|
1504
|
-
dynamic_filters_to_unref = std::move(dynamic_filters_);
|
|
1505
1543
|
}
|
|
1506
1544
|
// Clear LB policy if set.
|
|
1507
1545
|
if (lb_policy_ != nullptr) {
|
|
@@ -1604,17 +1642,11 @@ grpc_error_handle ClientChannelFilter::DoPingLocked(grpc_transport_op* op) {
|
|
|
1604
1642
|
// Complete pick.
|
|
1605
1643
|
[op](LoadBalancingPolicy::PickResult::Complete* complete_pick)
|
|
1606
1644
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
|
1607
|
-
*ClientChannelFilter::work_serializer_) {
|
|
1608
|
-
SubchannelWrapper* subchannel =
|
|
1609
|
-
complete_pick->subchannel.get());
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
if (connected_subchannel == nullptr) {
|
|
1613
|
-
return GRPC_ERROR_CREATE("LB pick for ping not connected");
|
|
1614
|
-
}
|
|
1615
|
-
connected_subchannel->Ping(op->send_ping.on_initiate,
|
|
1616
|
-
op->send_ping.on_ack);
|
|
1617
|
-
return absl::OkStatus();
|
|
1645
|
+
*ClientChannelFilter::work_serializer_) -> grpc_error_handle {
|
|
1646
|
+
SubchannelWrapper* subchannel =
|
|
1647
|
+
DownCast<SubchannelWrapper*>(complete_pick->subchannel.get());
|
|
1648
|
+
return subchannel->Ping(op->send_ping.on_initiate,
|
|
1649
|
+
op->send_ping.on_ack);
|
|
1618
1650
|
},
|
|
1619
1651
|
// Queue pick.
|
|
1620
1652
|
[](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
|
|
@@ -1850,14 +1882,14 @@ grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked(
|
|
|
1850
1882
|
auto* service_config_call_data =
|
|
1851
1883
|
arena_->New<ClientChannelServiceConfigCallData>(arena_);
|
|
1852
1884
|
// Use the ConfigSelector to determine the config for the call.
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
if (!call_config_status.ok()) {
|
|
1885
|
+
auto filter_chain = (*config_selector)
|
|
1886
|
+
->GetCallConfig({send_initial_metadata(), arena_,
|
|
1887
|
+
service_config_call_data});
|
|
1888
|
+
if (!filter_chain.ok()) {
|
|
1858
1889
|
return absl_status_to_grpc_error(
|
|
1859
|
-
MaybeRewriteIllegalStatusCode(
|
|
1890
|
+
MaybeRewriteIllegalStatusCode(filter_chain.status(), "ConfigSelector"));
|
|
1860
1891
|
}
|
|
1892
|
+
dynamic_filters_ = filter_chain->TakeAsSubclass<const DynamicFilters>();
|
|
1861
1893
|
// Apply our own method params to the call.
|
|
1862
1894
|
auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
|
|
1863
1895
|
service_config_call_data->GetMethodParsedConfig(
|
|
@@ -1938,7 +1970,6 @@ bool ClientChannelFilter::CallData::CheckResolutionLocked(
|
|
|
1938
1970
|
}
|
|
1939
1971
|
// Result found.
|
|
1940
1972
|
*config_selector = chand()->config_selector_;
|
|
1941
|
-
dynamic_filters_ = chand()->dynamic_filters_;
|
|
1942
1973
|
return true;
|
|
1943
1974
|
}
|
|
1944
1975
|
|
|
@@ -2106,7 +2137,7 @@ void ClientChannelFilter::CallData::CreateDynamicCall() {
|
|
|
2106
2137
|
call_start_time_, deadline_,
|
|
2107
2138
|
arena_, call_combiner_};
|
|
2108
2139
|
grpc_error_handle error;
|
|
2109
|
-
DynamicFilters* channel_stack = args.channel_stack.get();
|
|
2140
|
+
const DynamicFilters* channel_stack = args.channel_stack.get();
|
|
2110
2141
|
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2111
2142
|
<< "chand=" << chand() << " calld=" << this
|
|
2112
2143
|
<< ": creating dynamic call stack on channel_stack=" << channel_stack;
|
|
@@ -2461,7 +2492,7 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
|
|
|
2461
2492
|
|
|
2462
2493
|
bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
2463
2494
|
LoadBalancingPolicy::SubchannelPicker* picker, grpc_error_handle* error) {
|
|
2464
|
-
GRPC_CHECK(
|
|
2495
|
+
GRPC_CHECK(subchannel_call_ == nullptr);
|
|
2465
2496
|
// Perform LB pick.
|
|
2466
2497
|
LoadBalancingPolicy::PickArgs pick_args;
|
|
2467
2498
|
Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
|
|
@@ -2475,7 +2506,7 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
|
2475
2506
|
return HandlePickResult<bool>(
|
|
2476
2507
|
&result,
|
|
2477
2508
|
// CompletePick
|
|
2478
|
-
[this](LoadBalancingPolicy::PickResult::Complete* complete_pick) {
|
|
2509
|
+
[this, &error](LoadBalancingPolicy::PickResult::Complete* complete_pick) {
|
|
2479
2510
|
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2480
2511
|
<< "chand=" << chand_ << " lb_call=" << this
|
|
2481
2512
|
<< ": LB pick succeeded: subchannel="
|
|
@@ -2485,12 +2516,24 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
|
2485
2516
|
// holding the data plane mutex.
|
|
2486
2517
|
SubchannelWrapper* subchannel =
|
|
2487
2518
|
static_cast<SubchannelWrapper*>(complete_pick->subchannel.get());
|
|
2488
|
-
|
|
2519
|
+
Subchannel::CreateCallArgs call_args = {
|
|
2520
|
+
pollent_, /*start_time=*/0, arena_->GetContext<Call>()->deadline(),
|
|
2521
|
+
// TODO(roth): When we implement hedging support, we will probably
|
|
2522
|
+
// need to use a separate call arena for each subchannel call.
|
|
2523
|
+
arena_, call_combiner_};
|
|
2524
|
+
subchannel_call_ = subchannel->CreateCall(call_args, error);
|
|
2525
|
+
if (subchannel_call_ != nullptr &&
|
|
2526
|
+
on_call_destruction_complete_ != nullptr) {
|
|
2527
|
+
subchannel_call_->SetAfterCallStackDestroy(
|
|
2528
|
+
on_call_destruction_complete_);
|
|
2529
|
+
on_call_destruction_complete_ = nullptr;
|
|
2530
|
+
}
|
|
2531
|
+
if (!error->ok()) return true;
|
|
2489
2532
|
// If the subchannel has no connected subchannel (e.g., if the
|
|
2490
2533
|
// subchannel has moved out of state READY but the LB policy hasn't
|
|
2491
2534
|
// yet seen that change and given us a new picker), then just
|
|
2492
2535
|
// queue the pick. We'll try again as soon as we get a new picker.
|
|
2493
|
-
if (
|
|
2536
|
+
if (subchannel_call_ == nullptr) {
|
|
2494
2537
|
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2495
2538
|
<< "chand=" << chand_ << " lb_call=" << this
|
|
2496
2539
|
<< ": subchannel returned by LB picker "
|
|
@@ -2726,7 +2769,7 @@ void ClientChannelFilter::LoadBalancedCall::TryPick(bool was_queued) {
|
|
|
2726
2769
|
buffered_call_.Fail(*result, BufferedCall::YieldCallCombiner);
|
|
2727
2770
|
return;
|
|
2728
2771
|
}
|
|
2729
|
-
|
|
2772
|
+
StartSubchannelCall();
|
|
2730
2773
|
}
|
|
2731
2774
|
}
|
|
2732
2775
|
|
|
@@ -2759,32 +2802,15 @@ void ClientChannelFilter::LoadBalancedCall::RetryPickLocked() {
|
|
|
2759
2802
|
absl::OkStatus());
|
|
2760
2803
|
}
|
|
2761
2804
|
|
|
2762
|
-
void ClientChannelFilter::LoadBalancedCall::
|
|
2763
|
-
SubchannelCall::Args call_args = {
|
|
2764
|
-
connected_subchannel_->Ref(), pollent_, /*start_time=*/0,
|
|
2765
|
-
arena_->GetContext<Call>()->deadline(),
|
|
2766
|
-
// TODO(roth): When we implement hedging support, we will probably
|
|
2767
|
-
// need to use a separate call arena for each subchannel call.
|
|
2768
|
-
arena_, call_combiner_};
|
|
2769
|
-
grpc_error_handle error;
|
|
2770
|
-
subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
|
|
2805
|
+
void ClientChannelFilter::LoadBalancedCall::StartSubchannelCall() {
|
|
2771
2806
|
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2772
2807
|
<< "chand=" << chand_ << " lb_call=" << this
|
|
2773
|
-
<< ":
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
}
|
|
2779
|
-
if (GPR_UNLIKELY(!error.ok())) {
|
|
2780
|
-
buffered_call_.Fail(error, BufferedCall::YieldCallCombiner);
|
|
2781
|
-
} else {
|
|
2782
|
-
buffered_call_.Resume([subchannel_call = subchannel_call_](
|
|
2783
|
-
grpc_transport_stream_op_batch* batch) {
|
|
2784
|
-
// Note: This will release the call combiner.
|
|
2785
|
-
subchannel_call->StartTransportStreamOpBatch(batch);
|
|
2786
|
-
});
|
|
2787
|
-
}
|
|
2808
|
+
<< ": starting subchannel_call=" << subchannel_call_.get();
|
|
2809
|
+
buffered_call_.Resume([subchannel_call = subchannel_call_](
|
|
2810
|
+
grpc_transport_stream_op_batch* batch) {
|
|
2811
|
+
// Note: This will release the call combiner.
|
|
2812
|
+
subchannel_call->StartTransportStreamOpBatch(batch);
|
|
2813
|
+
});
|
|
2788
2814
|
}
|
|
2789
2815
|
|
|
2790
2816
|
} // namespace grpc_core
|
|
@@ -276,8 +276,6 @@ class ClientChannelFilter final {
|
|
|
276
276
|
RefCountedPtr<ServiceConfig> service_config_ ABSL_GUARDED_BY(resolution_mu_);
|
|
277
277
|
RefCountedPtr<ConfigSelector> config_selector_
|
|
278
278
|
ABSL_GUARDED_BY(resolution_mu_);
|
|
279
|
-
RefCountedPtr<DynamicFilters> dynamic_filters_
|
|
280
|
-
ABSL_GUARDED_BY(resolution_mu_);
|
|
281
279
|
|
|
282
280
|
//
|
|
283
281
|
// Fields related to LB picks. Guarded by lb_mu_.
|
|
@@ -369,7 +367,7 @@ class ClientChannelFilter::LoadBalancedCall final
|
|
|
369
367
|
void RetryPickLocked()
|
|
370
368
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
|
|
371
369
|
|
|
372
|
-
RefCountedPtr<
|
|
370
|
+
RefCountedPtr<Subchannel::Call> subchannel_call() const {
|
|
373
371
|
return subchannel_call_;
|
|
374
372
|
}
|
|
375
373
|
|
|
@@ -423,7 +421,7 @@ class ClientChannelFilter::LoadBalancedCall final
|
|
|
423
421
|
// and when it is queued and the channel gets a new picker.
|
|
424
422
|
void TryPick(bool was_queued);
|
|
425
423
|
|
|
426
|
-
void
|
|
424
|
+
void StartSubchannelCall();
|
|
427
425
|
|
|
428
426
|
ClientChannelFilter* chand_;
|
|
429
427
|
// When we start a new attempt for a call, we might not have cleaned up the
|
|
@@ -443,7 +441,6 @@ class ClientChannelFilter::LoadBalancedCall final
|
|
|
443
441
|
|
|
444
442
|
absl::AnyInvocable<void()> on_commit_;
|
|
445
443
|
|
|
446
|
-
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
|
447
444
|
const BackendMetricData* backend_metric_data_ = nullptr;
|
|
448
445
|
std::unique_ptr<LoadBalancingPolicy::SubchannelCallTrackerInterface>
|
|
449
446
|
lb_subchannel_call_tracker_;
|
|
@@ -459,7 +456,7 @@ class ClientChannelFilter::LoadBalancedCall final
|
|
|
459
456
|
LbQueuedCallCanceller* lb_call_canceller_
|
|
460
457
|
ABSL_GUARDED_BY(&ClientChannelFilter::lb_mu_) = nullptr;
|
|
461
458
|
|
|
462
|
-
RefCountedPtr<
|
|
459
|
+
RefCountedPtr<Subchannel::Call> subchannel_call_;
|
|
463
460
|
|
|
464
461
|
// For intercepting recv_initial_metadata_ready.
|
|
465
462
|
grpc_metadata_batch* recv_initial_metadata_ = nullptr;
|
|
@@ -45,6 +45,11 @@
|
|
|
45
45
|
#define GRPC_ARG_MAX_CONNECTIONS_PER_SUBCHANNEL \
|
|
46
46
|
"grpc.internal.max_connections_per_subchannel"
|
|
47
47
|
|
|
48
|
+
// EXPERIMENTAL: Fail requests at the client if the client is over max
|
|
49
|
+
// concurrent streams, so they may be retried elsewhere.
|
|
50
|
+
#define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \
|
|
51
|
+
"grpc.http.max_concurrent_streams_reject_on_client"
|
|
52
|
+
|
|
48
53
|
namespace grpc_core {
|
|
49
54
|
|
|
50
55
|
// Internal type for LB call state interface. Provides an interface for
|