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.
Files changed (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +22 -8
  3. data/include/grpc/credentials.h +47 -37
  4. data/include/grpc/credentials_cpp.h +39 -0
  5. data/include/grpc/event_engine/event_engine.h +8 -3
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/impl/call.h +9 -0
  8. data/include/grpc/impl/channel_arg_names.h +7 -0
  9. data/include/grpc/module.modulemap +2 -0
  10. data/include/grpc/private_key_signer.h +104 -0
  11. data/include/grpc/support/port_platform.h +6 -0
  12. data/src/core/call/call_filters.h +101 -78
  13. data/src/core/call/call_spine.h +91 -68
  14. data/src/core/call/call_state.h +60 -4
  15. data/src/core/call/client_call.cc +9 -9
  16. data/src/core/call/client_call.h +1 -1
  17. data/src/core/call/metadata_batch.cc +2 -0
  18. data/src/core/call/metadata_batch.h +48 -1
  19. data/src/core/call/metadata_info.cc +35 -0
  20. data/src/core/call/metadata_info.h +2 -0
  21. data/src/core/call/simple_slice_based_metadata.h +2 -1
  22. data/src/core/channelz/channelz.cc +9 -6
  23. data/src/core/channelz/channelz.h +7 -4
  24. data/src/core/channelz/property_list.h +5 -0
  25. data/src/core/channelz/v2tov1/convert.cc +1 -1
  26. data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
  27. data/src/core/client_channel/buffered_call.cc +7 -3
  28. data/src/core/client_channel/buffered_call.h +11 -5
  29. data/src/core/client_channel/client_channel.cc +106 -44
  30. data/src/core/client_channel/client_channel.h +3 -6
  31. data/src/core/client_channel/client_channel_filter.cc +90 -64
  32. data/src/core/client_channel/client_channel_filter.h +3 -6
  33. data/src/core/client_channel/client_channel_internal.h +5 -0
  34. data/src/core/client_channel/config_selector.h +17 -12
  35. data/src/core/client_channel/dynamic_filters.cc +8 -7
  36. data/src/core/client_channel/dynamic_filters.h +7 -5
  37. data/src/core/client_channel/retry_filter.cc +1 -1
  38. data/src/core/client_channel/retry_filter.h +2 -2
  39. data/src/core/client_channel/subchannel.cc +1682 -266
  40. data/src/core/client_channel/subchannel.h +411 -134
  41. data/src/core/client_channel/subchannel_stream_client.cc +22 -18
  42. data/src/core/client_channel/subchannel_stream_client.h +8 -9
  43. data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
  44. data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
  45. data/src/core/config/config_vars.cc +9 -1
  46. data/src/core/config/config_vars.h +6 -0
  47. data/src/core/credentials/call/call_creds_registry.h +51 -22
  48. data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
  49. data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
  50. data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
  51. data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
  52. data/src/core/credentials/transport/channel_creds_registry.h +71 -20
  53. data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
  54. data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
  55. data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
  56. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
  57. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
  58. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
  59. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
  60. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
  61. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
  62. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
  63. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
  64. data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
  65. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
  66. data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
  67. data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
  68. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
  69. data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
  70. data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
  73. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
  74. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
  76. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
  77. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
  78. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  79. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
  80. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
  81. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  82. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
  83. data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
  84. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  85. data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
  86. data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
  87. data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
  88. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
  89. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  90. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
  91. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
  92. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
  93. data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
  94. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
  95. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
  96. data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
  97. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
  98. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
  99. data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
  100. data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
  101. data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
  102. data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
  103. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
  104. data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
  105. data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
  106. data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
  107. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
  108. data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
  109. data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
  110. data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
  111. data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
  112. data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
  113. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
  114. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
  115. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
  116. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
  117. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
  118. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
  119. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
  120. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
  121. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
  122. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
  123. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
  124. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
  125. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
  126. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
  127. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
  128. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
  129. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
  130. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
  131. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
  132. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
  133. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
  134. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
  135. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
  136. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
  137. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
  138. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
  139. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
  140. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
  141. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
  142. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
  143. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
  144. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
  145. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
  146. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
  147. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
  148. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
  149. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
  150. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
  151. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
  152. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
  153. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  154. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
  155. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
  156. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
  157. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
  158. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
  159. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
  160. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
  161. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
  162. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
  163. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
  164. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
  165. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
  166. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
  167. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
  168. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
  169. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
  170. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
  171. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
  172. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
  173. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
  174. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
  175. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
  176. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
  177. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
  178. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
  179. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
  180. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
  181. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
  182. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
  183. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
  184. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
  185. 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
  186. 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
  187. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
  188. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
  189. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
  190. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
  191. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
  192. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
  193. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
  194. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
  195. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
  196. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
  197. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
  198. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
  199. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
  200. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
  201. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
  202. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
  203. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
  204. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
  205. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
  206. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
  207. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
  208. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
  209. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
  210. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
  211. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
  212. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
  213. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
  214. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
  215. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
  216. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
  217. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
  218. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
  219. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
  220. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
  221. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
  222. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
  223. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
  224. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
  225. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
  226. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
  227. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
  228. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
  229. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
  230. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
  231. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
  232. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
  233. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
  234. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
  235. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
  236. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
  237. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
  238. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  239. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
  240. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
  241. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
  242. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
  243. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
  244. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
  245. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
  246. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
  247. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
  248. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
  249. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
  250. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
  251. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
  252. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
  253. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
  254. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  255. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
  256. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
  257. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
  258. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
  259. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
  260. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
  261. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
  262. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
  263. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
  264. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
  267. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
  268. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
  269. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
  270. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
  271. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
  272. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
  273. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
  274. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
  275. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
  276. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
  277. data/src/core/filter/filter_chain.h +95 -0
  278. data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
  279. data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
  280. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  282. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
  283. data/src/core/handshaker/security/secure_endpoint.cc +282 -68
  284. data/src/core/handshaker/security/secure_endpoint.h +0 -7
  285. data/src/core/lib/channel/channel_args.h +1 -1
  286. data/src/core/lib/channel/promise_based_filter.cc +17 -4
  287. data/src/core/lib/channel/promise_based_filter.h +3 -2
  288. data/src/core/lib/debug/trace_flags.cc +2 -0
  289. data/src/core/lib/debug/trace_flags.h +1 -0
  290. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
  291. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
  292. data/src/core/lib/event_engine/event_engine.cc +9 -0
  293. data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
  294. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
  295. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
  296. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
  297. data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
  298. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
  299. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
  300. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
  301. data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
  302. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
  303. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
  304. data/src/core/lib/experiments/experiments.cc +309 -201
  305. data/src/core/lib/experiments/experiments.h +141 -80
  306. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  307. data/src/core/lib/iomgr/resolve_address.h +0 -2
  308. data/src/core/lib/iomgr/resolved_address.h +0 -2
  309. data/src/core/lib/iomgr/tcp_posix.cc +13 -5
  310. data/src/core/lib/iomgr/tcp_server.cc +0 -5
  311. data/src/core/lib/iomgr/tcp_server.h +0 -7
  312. data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
  313. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
  314. data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
  315. data/src/core/lib/promise/all_ok.h +17 -12
  316. data/src/core/lib/promise/cancel_callback.h +12 -13
  317. data/src/core/lib/promise/detail/join_state.h +626 -0
  318. data/src/core/lib/promise/detail/promise_factory.h +14 -14
  319. data/src/core/lib/promise/for_each.h +32 -8
  320. data/src/core/lib/promise/if.h +9 -7
  321. data/src/core/lib/promise/loop.h +18 -16
  322. data/src/core/lib/promise/map.h +54 -47
  323. data/src/core/lib/promise/mpsc.h +11 -10
  324. data/src/core/lib/promise/observable.h +6 -6
  325. data/src/core/lib/promise/party.h +25 -19
  326. data/src/core/lib/promise/poll.h +5 -5
  327. data/src/core/lib/promise/prioritized_race.h +10 -7
  328. data/src/core/lib/promise/promise.h +16 -11
  329. data/src/core/lib/promise/race.h +6 -5
  330. data/src/core/lib/promise/seq.h +109 -74
  331. data/src/core/lib/promise/try_join.h +14 -6
  332. data/src/core/lib/promise/try_seq.h +76 -60
  333. data/src/core/lib/resource_quota/api.cc +7 -0
  334. data/src/core/lib/resource_quota/arena.h +1 -1
  335. data/src/core/lib/resource_quota/memory_quota.cc +4 -1
  336. data/src/core/lib/resource_quota/resource_quota.cc +2 -1
  337. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  338. data/src/core/lib/resource_quota/stream_quota.cc +77 -1
  339. data/src/core/lib/resource_quota/stream_quota.h +64 -1
  340. data/src/core/lib/resource_quota/telemetry.h +1 -1
  341. data/src/core/lib/surface/call.cc +13 -0
  342. data/src/core/lib/surface/call_utils.h +58 -43
  343. data/src/core/lib/surface/channel.h +1 -4
  344. data/src/core/lib/surface/completion_queue.cc +13 -6
  345. data/src/core/lib/surface/validate_metadata.cc +20 -15
  346. data/src/core/lib/surface/validate_metadata.h +3 -1
  347. data/src/core/lib/surface/version.cc +2 -2
  348. data/src/core/lib/transport/promise_endpoint.cc +1 -1
  349. data/src/core/lib/transport/promise_endpoint.h +1 -1
  350. data/src/core/lib/transport/transport.h +5 -0
  351. data/src/core/load_balancing/health_check_client.cc +1 -15
  352. data/src/core/load_balancing/health_check_client_internal.h +0 -2
  353. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  354. data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
  355. data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
  356. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
  357. data/src/core/resolver/xds/xds_resolver.cc +162 -116
  358. data/src/core/server/server.cc +18 -1
  359. data/src/core/server/server.h +2 -0
  360. data/src/core/server/xds_server_config_fetcher.cc +4 -4
  361. data/src/core/telemetry/call_tracer.cc +87 -2
  362. data/src/core/telemetry/call_tracer.h +46 -8
  363. data/src/core/telemetry/instrument.cc +102 -40
  364. data/src/core/telemetry/instrument.h +246 -65
  365. data/src/core/tsi/fake_transport_security.cc +3 -1
  366. data/src/core/tsi/ssl_transport_security.cc +516 -137
  367. data/src/core/tsi/ssl_transport_security.h +28 -22
  368. data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
  369. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  370. data/src/core/util/bitset.h +6 -0
  371. data/src/core/util/function_signature.h +3 -1
  372. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  373. data/src/core/util/json/json_reader.cc +0 -4
  374. data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
  375. data/src/core/xds/grpc/certificate_provider_store.h +3 -17
  376. data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
  377. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
  378. data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
  379. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
  380. data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
  381. data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
  382. data/src/core/xds/grpc/xds_client_grpc.h +10 -7
  383. data/src/core/xds/grpc/xds_cluster.cc +18 -4
  384. data/src/core/xds/grpc/xds_cluster.h +17 -2
  385. data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
  386. data/src/core/xds/grpc/xds_common_types.cc +45 -0
  387. data/src/core/xds/grpc/xds_common_types.h +31 -0
  388. data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
  389. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  390. data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
  391. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
  392. data/src/core/xds/grpc/xds_http_filter.cc +38 -0
  393. data/src/core/xds/grpc/xds_http_filter.h +70 -47
  394. data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
  395. data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
  396. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
  397. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
  398. data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
  399. data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
  400. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
  401. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
  402. data/src/core/xds/grpc/xds_listener.cc +4 -1
  403. data/src/core/xds/grpc/xds_listener.h +10 -2
  404. data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
  405. data/src/core/xds/grpc/xds_matcher.cc +40 -5
  406. data/src/core/xds/grpc/xds_matcher.h +13 -0
  407. data/src/core/xds/grpc/xds_matcher_action.h +1 -1
  408. data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
  409. data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
  410. data/src/core/xds/grpc/xds_route_config.cc +12 -1
  411. data/src/core/xds/grpc/xds_route_config.h +15 -2
  412. data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
  413. data/src/core/xds/grpc/xds_routing.cc +181 -6
  414. data/src/core/xds/grpc/xds_routing.h +57 -0
  415. data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
  416. data/src/core/xds/grpc/xds_server_grpc.h +13 -6
  417. data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
  418. data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
  419. data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
  420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
  422. data/src/ruby/lib/grpc/grpc.rb +7 -9
  423. data/src/ruby/lib/grpc/version.rb +1 -1
  424. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  425. data/src/ruby/spec/client_server_spec.rb +1 -1
  426. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  427. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  428. data/src/ruby/spec/spec_helper.rb +1 -1
  429. metadata +64 -14
  430. data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
  431. data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
@@ -207,7 +207,6 @@ class OrcaProducer::OrcaStreamEventHandler final
207
207
 
208
208
  void OrcaProducer::Start(WeakRefCountedPtr<Subchannel> subchannel) {
209
209
  subchannel_ = std::move(subchannel);
210
- connected_subchannel_ = subchannel_->connected_subchannel();
211
210
  auto connectivity_watcher =
212
211
  MakeRefCounted<ConnectivityWatcher>(WeakRefAsSubclass<OrcaProducer>());
213
212
  connectivity_watcher_ = connectivity_watcher.get();
@@ -260,9 +259,8 @@ Duration OrcaProducer::GetMinIntervalLocked() const {
260
259
  }
261
260
 
262
261
  void OrcaProducer::MaybeStartStreamLocked() {
263
- if (connected_subchannel_ == nullptr) return;
264
262
  stream_client_ = MakeOrphanable<SubchannelStreamClient>(
265
- connected_subchannel_, subchannel_->pollset_set(),
263
+ subchannel_,
266
264
  std::make_unique<OrcaStreamEventHandler>(
267
265
  WeakRefAsSubclass<OrcaProducer>(), report_interval_),
268
266
  GRPC_TRACE_FLAG_ENABLED(orca_client) ? "OrcaClient" : nullptr);
@@ -281,10 +279,8 @@ void OrcaProducer::NotifyWatchers(
281
279
  void OrcaProducer::OnConnectivityStateChange(grpc_connectivity_state state) {
282
280
  MutexLock lock(&mu_);
283
281
  if (state == GRPC_CHANNEL_READY) {
284
- connected_subchannel_ = subchannel_->connected_subchannel();
285
282
  if (!watchers_.empty()) MaybeStartStreamLocked();
286
283
  } else {
287
- connected_subchannel_.reset();
288
284
  stream_client_.reset();
289
285
  }
290
286
  }
@@ -80,7 +80,6 @@ class OrcaProducer final : public Subchannel::DataProducerInterface {
80
80
  void NotifyWatchers(const BackendMetricData& backend_metric_data);
81
81
 
82
82
  WeakRefCountedPtr<Subchannel> subchannel_;
83
- RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
84
83
  ConnectivityWatcher* connectivity_watcher_;
85
84
  Mutex mu_;
86
85
  std::set<OrcaWatcher*> watchers_ ABSL_GUARDED_BY(mu_);
@@ -666,8 +666,8 @@ XdsClusterImplLb::MaybeCreateCertificateProviderLocked(
666
666
  RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider;
667
667
  bool use_system_root_certs = false;
668
668
  absl::Status status = Match(
669
- cluster_resource.common_tls_context.certificate_validation_context
670
- .ca_certs,
669
+ cluster_resource.upstream_tls_context.common_tls_context
670
+ .certificate_validation_context.ca_certs,
671
671
  [](const std::monostate&) {
672
672
  // No root cert configured.
673
673
  return absl::OkStatus();
@@ -693,11 +693,11 @@ XdsClusterImplLb::MaybeCreateCertificateProviderLocked(
693
693
  if (!status.ok()) return status;
694
694
  // Configure identity cert.
695
695
  absl::string_view identity_provider_instance_name =
696
- cluster_resource.common_tls_context.tls_certificate_provider_instance
697
- .instance_name;
696
+ cluster_resource.upstream_tls_context.common_tls_context
697
+ .tls_certificate_provider_instance.instance_name;
698
698
  absl::string_view identity_cert_name =
699
- cluster_resource.common_tls_context.tls_certificate_provider_instance
700
- .certificate_name;
699
+ cluster_resource.upstream_tls_context.common_tls_context
700
+ .tls_certificate_provider_instance.certificate_name;
701
701
  RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider;
702
702
  if (!identity_provider_instance_name.empty()) {
703
703
  identity_cert_provider =
@@ -711,12 +711,15 @@ XdsClusterImplLb::MaybeCreateCertificateProviderLocked(
711
711
  }
712
712
  // Configure SAN matchers.
713
713
  const std::vector<StringMatcher>& san_matchers =
714
- cluster_resource.common_tls_context.certificate_validation_context
715
- .match_subject_alt_names;
714
+ cluster_resource.upstream_tls_context.common_tls_context
715
+ .certificate_validation_context.match_subject_alt_names;
716
716
  // Create xds cert provider.
717
717
  return MakeRefCounted<XdsCertificateProvider>(
718
718
  std::move(root_cert_provider), root_cert_name, use_system_root_certs,
719
- std::move(identity_cert_provider), identity_cert_name, san_matchers);
719
+ std::move(identity_cert_provider), identity_cert_name, san_matchers,
720
+ cluster_resource.upstream_tls_context.sni,
721
+ cluster_resource.upstream_tls_context.auto_host_sni,
722
+ cluster_resource.upstream_tls_context.auto_sni_san_validation);
720
723
  }
721
724
 
722
725
  void XdsClusterImplLb::MaybeUpdatePickerLocked() {
@@ -21,7 +21,7 @@
21
21
 
22
22
  #include "src/core/config/core_configuration.h"
23
23
  #include "src/core/handshaker/endpoint_info/endpoint_info_handshaker.h"
24
- #include "src/core/handshaker/http_connect/http_connect_handshaker.h"
24
+ #include "src/core/handshaker/http_connect/http_connect_client_handshaker.h"
25
25
  #include "src/core/handshaker/tcp_connect/tcp_connect_handshaker.h"
26
26
  #include "src/core/lib/surface/channel_stack_type.h"
27
27
  #include "src/core/lib/surface/lame_client.h"
@@ -41,6 +41,7 @@ extern void BuildClientChannelConfiguration(
41
41
  CoreConfiguration::Builder* builder);
42
42
  extern void SecurityRegisterHandshakerFactories(
43
43
  CoreConfiguration::Builder* builder);
44
+ extern void RegisterAuthComparators(CoreConfiguration::Builder* builder);
44
45
  extern void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder);
45
46
  extern void RegisterLegacyChannelIdleFilters(
46
47
  CoreConfiguration::Builder* builder);
@@ -98,7 +99,7 @@ void BuildCoreConfiguration(CoreConfiguration::Builder* builder) {
98
99
  // We want TCP connect handshaker to be registered last so that it is added
99
100
  // to the start of the handshaker list.
100
101
  RegisterEndpointInfoHandshaker(builder);
101
- RegisterHttpConnectHandshaker(builder);
102
+ RegisterHttpConnectClientHandshaker(builder);
102
103
  RegisterTCPConnectHandshaker(builder);
103
104
  RegisterChttp2Transport(builder);
104
105
  #ifndef GRPC_MINIMAL_LB_POLICY
@@ -191,36 +191,25 @@ class XdsResolver final : public Resolver {
191
191
  struct ClusterWeightState {
192
192
  uint32_t range_end;
193
193
  absl::string_view cluster;
194
+ absl::StatusOr<RefCountedPtr<const FilterChain>> filter_chain;
195
+ // TODO(roth): Remove this field as part of removing the
196
+ // xds_channel_filter_chain_per_route experiment.
194
197
  RefCountedPtr<ServiceConfig> method_config;
195
-
196
- bool operator==(const ClusterWeightState& other) const {
197
- return range_end == other.range_end && cluster == other.cluster &&
198
- MethodConfigsEqual(method_config.get(),
199
- other.method_config.get());
200
- }
201
198
  };
202
199
 
203
200
  XdsRouteConfigResource::Route route;
201
+ // TODO(roth): Remove this field as part of removing the
202
+ // xds_channel_filter_chain_per_route experiment.
204
203
  RefCountedPtr<ServiceConfig> method_config;
204
+ absl::StatusOr<RefCountedPtr<const FilterChain>> filter_chain;
205
205
  std::vector<ClusterWeightState> weighted_cluster_state;
206
206
 
207
207
  explicit RouteEntry(const XdsRouteConfigResource::Route& r) : route(r) {}
208
-
209
- bool operator==(const RouteEntry& other) const {
210
- return route == other.route &&
211
- weighted_cluster_state == other.weighted_cluster_state &&
212
- MethodConfigsEqual(method_config.get(),
213
- other.method_config.get());
214
- }
215
208
  };
216
209
 
217
210
  static absl::StatusOr<RefCountedPtr<RouteConfigData>> Create(
218
211
  XdsResolver* resolver, const Duration& default_max_stream_duration);
219
212
 
220
- bool operator==(const RouteConfigData& other) const {
221
- return clusters_ == other.clusters_ && routes_ == other.routes_;
222
- }
223
-
224
213
  RefCountedPtr<ClusterRef> FindClusterRef(absl::string_view name) const {
225
214
  auto it = clusters_.find(name);
226
215
  if (it == clusters_.end()) {
@@ -232,21 +221,22 @@ class XdsResolver final : public Resolver {
232
221
  RouteEntry* GetRouteForRequest(absl::string_view path,
233
222
  grpc_metadata_batch* initial_metadata);
234
223
 
224
+ void BuildFilterChains(const XdsConfig& xds_config,
225
+ const XdsHttpFilterRegistry& http_filter_registry,
226
+ FilterChainBuilder& builder,
227
+ const Blackboard* old_blackboard,
228
+ Blackboard* new_blackboard);
229
+
235
230
  private:
236
231
  class RouteListIterator;
237
232
 
238
233
  static absl::StatusOr<RefCountedPtr<ServiceConfig>> CreateMethodConfig(
239
234
  XdsResolver* resolver, const XdsRouteConfigResource::Route& route,
235
+ // TODO(roth): Remove this field as part of removing the
236
+ // xds_channel_filter_chain_per_route experiment.
240
237
  const XdsRouteConfigResource::Route::RouteAction::ClusterWeight*
241
238
  cluster_weight);
242
239
 
243
- static bool MethodConfigsEqual(const ServiceConfig* sc1,
244
- const ServiceConfig* sc2) {
245
- if (sc1 == nullptr) return sc2 == nullptr;
246
- if (sc2 == nullptr) return false;
247
- return sc1->json_string() == sc2->json_string();
248
- }
249
-
250
240
  absl::Status AddRouteEntry(XdsResolver* resolver,
251
241
  const XdsRouteConfigResource::Route& route,
252
242
  const Duration& default_max_stream_duration);
@@ -268,25 +258,27 @@ class XdsResolver final : public Resolver {
268
258
 
269
259
  bool Equals(const ConfigSelector* other) const override {
270
260
  const auto* other_xds = static_cast<const XdsConfigSelector*>(other);
271
- // Don't need to compare resolver_, since that will always be the same.
272
- return *route_config_data_ == *other_xds->route_config_data_ &&
273
- filters_ == other_xds->filters_;
261
+ // Only need to compare LDS and RDS resources, since all of our
262
+ // other state is derived from those.
263
+ return *xds_config_->listener == *other_xds->xds_config_->listener &&
264
+ *xds_config_->route_config ==
265
+ *other_xds->xds_config_->route_config;
274
266
  }
275
267
 
276
- absl::Status GetCallConfig(GetCallConfigArgs args) override;
277
-
278
- void AddFilters(InterceptionChainBuilder& builder,
279
- const Blackboard* old_blackboard,
280
- Blackboard* new_blackboard) override;
268
+ void BuildFilterChains(FilterChainBuilder& builder,
269
+ const Blackboard* old_blackboard,
270
+ Blackboard* new_blackboard) override;
281
271
 
282
- std::vector<const grpc_channel_filter*> GetFilters(
283
- const Blackboard* old_blackboard, Blackboard* new_blackboard) override;
272
+ absl::StatusOr<RefCountedPtr<const FilterChain>> GetCallConfig(
273
+ GetCallConfigArgs args) override;
284
274
 
285
275
  private:
286
276
  RefCountedPtr<XdsResolver> resolver_;
287
- std::shared_ptr<const XdsListenerResource> listener_;
277
+ RefCountedPtr<const XdsConfig> xds_config_;
288
278
  RefCountedPtr<RouteConfigData> route_config_data_;
289
- std::vector<const XdsHttpFilterImpl*> filters_;
279
+ // TODO(roth): Remove this field as part of removing the
280
+ // xds_channel_filter_chain_per_route experiment.
281
+ absl::StatusOr<RefCountedPtr<const FilterChain>> filter_chain_;
290
282
  };
291
283
 
292
284
  class XdsRouteStateAttributeImpl final : public XdsRouteStateAttribute {
@@ -315,7 +307,7 @@ class XdsResolver final : public Resolver {
315
307
  class ClusterSelectionFilter final
316
308
  : public ImplementChannelFilter<ClusterSelectionFilter> {
317
309
  public:
318
- const static grpc_channel_filter kFilter;
310
+ const static grpc_channel_filter kFilterVtable;
319
311
 
320
312
  static absl::string_view TypeName() { return "cluster_selection_filter"; }
321
313
 
@@ -439,6 +431,61 @@ XdsResolver::RouteConfigData::GetRouteForRequest(
439
431
  return &routes_[*route_index];
440
432
  }
441
433
 
434
+ RefCountedPtr<const FilterConfig> GetOverrideConfig(
435
+ const XdsHttpFilterImpl* filter_impl,
436
+ const XdsRouteConfigResource::TypedPerFilterConfig& typed_per_filter_config,
437
+ const std::string& name) {
438
+ auto it = typed_per_filter_config.find(name);
439
+ if (it == typed_per_filter_config.end()) return nullptr;
440
+ if (it->second.config_proto_type != filter_impl->OverrideConfigProtoName()) {
441
+ return nullptr;
442
+ }
443
+ return it->second.filter_config;
444
+ }
445
+
446
+ void XdsResolver::RouteConfigData::BuildFilterChains(
447
+ const XdsConfig& xds_config,
448
+ const XdsHttpFilterRegistry& http_filter_registry,
449
+ FilterChainBuilder& builder, const Blackboard* old_blackboard,
450
+ Blackboard* new_blackboard) {
451
+ const auto& hcm = std::get<XdsListenerResource::HttpConnectionManager>(
452
+ xds_config.listener->listener);
453
+ XdsRouting::PerRouteFilterChainBuilder per_route_builder(
454
+ hcm.http_filters, http_filter_registry, *xds_config.virtual_host, builder,
455
+ [](FilterChainBuilder& builder) {
456
+ builder.AddFilter<ClusterSelectionFilter>(nullptr);
457
+ },
458
+ old_blackboard, new_blackboard);
459
+ // Set the filter chain for each route.
460
+ for (auto& route_entry : routes_) {
461
+ const auto* route_action =
462
+ std::get_if<XdsRouteConfigResource::Route::RouteAction>(
463
+ &route_entry.route.action);
464
+ if (route_action == nullptr) continue;
465
+ // If the route uses WeightedClusters, construct a filter chain for
466
+ // each ClusterWeight entry.
467
+ if (const auto* weighted_clusters = std::get_if<std::vector<
468
+ XdsRouteConfigResource::Route::RouteAction::ClusterWeight>>(
469
+ &route_action->action);
470
+ weighted_clusters != nullptr) {
471
+ per_route_builder.BuildFilterChainForRouteWithWeightedClusters(
472
+ route_entry.route,
473
+ [&](size_t index,
474
+ absl::StatusOr<RefCountedPtr<const FilterChain>> filter_chain) {
475
+ GRPC_CHECK_LT(index, route_entry.weighted_cluster_state.size());
476
+ route_entry.weighted_cluster_state[index].filter_chain =
477
+ std::move(filter_chain);
478
+ });
479
+ }
480
+ // If the route does not use WeightedClusters, then we generate a
481
+ // filter chain for the route.
482
+ else {
483
+ route_entry.filter_chain =
484
+ per_route_builder.BuildFilterChainForRoute(route_entry.route);
485
+ }
486
+ }
487
+ }
488
+
442
489
  absl::StatusOr<RefCountedPtr<ServiceConfig>>
443
490
  XdsResolver::RouteConfigData::CreateMethodConfig(
444
491
  XdsResolver* resolver, const XdsRouteConfigResource::Route& route,
@@ -491,18 +538,22 @@ XdsResolver::RouteConfigData::CreateMethodConfig(
491
538
  absl::StrFormat(" \"timeout\": \"%s\"",
492
539
  route_action.max_stream_duration->ToJsonString()));
493
540
  }
494
- // Handle xDS HTTP filters.
495
- const auto& hcm = std::get<XdsListenerResource::HttpConnectionManager>(
496
- resolver->current_config_->listener->listener);
497
- auto result = XdsRouting::GeneratePerHTTPFilterConfigsForMethodConfig(
498
- DownCast<const GrpcXdsBootstrap&>(resolver->xds_client_->bootstrap())
499
- .http_filter_registry(),
500
- hcm.http_filters, *resolver->current_config_->virtual_host, route,
501
- cluster_weight, resolver->args_);
502
- if (!result.ok()) return result.status();
503
- for (const auto& [name, config] : result->per_filter_configs) {
504
- fields.emplace_back(absl::StrCat(" \"", name, "\": [\n",
505
- absl::StrJoin(config, ",\n"), "\n ]"));
541
+ ChannelArgs args = resolver->args_;
542
+ if (!IsXdsChannelFilterChainPerRouteEnabled()) {
543
+ // Handle xDS HTTP filters.
544
+ const auto& hcm = std::get<XdsListenerResource::HttpConnectionManager>(
545
+ resolver->current_config_->listener->listener);
546
+ auto result = XdsRouting::GeneratePerHTTPFilterConfigsForMethodConfig(
547
+ DownCast<const GrpcXdsBootstrap&>(resolver->xds_client_->bootstrap())
548
+ .http_filter_registry(),
549
+ hcm.http_filters, *resolver->current_config_->virtual_host, route,
550
+ cluster_weight, resolver->args_);
551
+ if (!result.ok()) return result.status();
552
+ for (const auto& [name, config] : result->per_filter_configs) {
553
+ fields.emplace_back(absl::StrCat(
554
+ " \"", name, "\": [\n", absl::StrJoin(config, ",\n"), "\n ]"));
555
+ }
556
+ args = result->args;
506
557
  }
507
558
  // Construct service config.
508
559
  if (!fields.empty()) {
@@ -516,7 +567,7 @@ XdsResolver::RouteConfigData::CreateMethodConfig(
516
567
  absl::StrJoin(fields, ",\n"),
517
568
  "\n } ]\n"
518
569
  "}");
519
- return ServiceConfigImpl::Create(result->args, json.c_str());
570
+ return ServiceConfigImpl::Create(args, json.c_str());
520
571
  }
521
572
  return nullptr;
522
573
  }
@@ -614,26 +665,10 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
614
665
  RefCountedPtr<XdsResolver> resolver,
615
666
  RefCountedPtr<RouteConfigData> route_config_data)
616
667
  : resolver_(std::move(resolver)),
617
- listener_(resolver_->current_config_->listener),
668
+ xds_config_(resolver_->current_config_),
618
669
  route_config_data_(std::move(route_config_data)) {
619
670
  GRPC_TRACE_LOG(xds_resolver, INFO) << "[xds_resolver " << resolver_.get()
620
671
  << "] creating XdsConfigSelector " << this;
621
- // Populate filter list.
622
- const auto& http_filter_registry =
623
- DownCast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
624
- .http_filter_registry();
625
- const auto& hcm =
626
- std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
627
- for (const auto& http_filter : hcm.http_filters) {
628
- // Find filter. This is guaranteed to succeed, because it's checked
629
- // at config validation time.
630
- const XdsHttpFilterImpl* filter_impl =
631
- http_filter_registry.GetFilterForType(
632
- http_filter.config.config_proto_type_name);
633
- GRPC_CHECK_NE(filter_impl, nullptr);
634
- // Add filter to list.
635
- filters_.push_back(filter_impl);
636
- }
637
672
  }
638
673
 
639
674
  XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
@@ -667,8 +702,8 @@ std::optional<uint64_t> HeaderHashHelper(
667
702
  return XXH64(header_value->data(), header_value->size(), 0);
668
703
  }
669
704
 
670
- absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
671
- GetCallConfigArgs args) {
705
+ absl::StatusOr<RefCountedPtr<const FilterChain>>
706
+ XdsResolver::XdsConfigSelector::GetCallConfig(GetCallConfigArgs args) {
672
707
  Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata());
673
708
  GRPC_CHECK_NE(path, nullptr);
674
709
  auto* entry = route_config_data_->GetRouteForRequest(path->as_string_view(),
@@ -686,6 +721,7 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
686
721
  }
687
722
  std::string cluster_name;
688
723
  RefCountedPtr<ServiceConfig> method_config;
724
+ absl::StatusOr<RefCountedPtr<const FilterChain>> filter_chain;
689
725
  Match(
690
726
  route_action->action,
691
727
  // cluster name
@@ -694,6 +730,7 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
694
730
  cluster_name =
695
731
  absl::StrCat("cluster:", action_cluster_name.cluster_name);
696
732
  method_config = entry->method_config;
733
+ filter_chain = entry->filter_chain;
697
734
  },
698
735
  // WeightedClusters
699
736
  [&](const std::vector<
@@ -718,10 +755,11 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
718
755
  }
719
756
  }
720
757
  if (index == 0) index = start_index;
721
- GRPC_CHECK(entry->weighted_cluster_state[index].range_end > key);
722
- cluster_name = absl::StrCat(
723
- "cluster:", entry->weighted_cluster_state[index].cluster);
724
- method_config = entry->weighted_cluster_state[index].method_config;
758
+ const auto& cluster_weight = entry->weighted_cluster_state[index];
759
+ GRPC_CHECK(cluster_weight.range_end > key);
760
+ cluster_name = absl::StrCat("cluster:", cluster_weight.cluster);
761
+ method_config = cluster_weight.method_config;
762
+ filter_chain = cluster_weight.filter_chain;
725
763
  },
726
764
  // ClusterSpecifierPlugin
727
765
  [&](const XdsRouteConfigResource::Route::RouteAction::
@@ -730,7 +768,11 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
730
768
  "cluster_specifier_plugin:",
731
769
  cluster_specifier_plugin_name.cluster_specifier_plugin_name);
732
770
  method_config = entry->method_config;
771
+ filter_chain = entry->filter_chain;
733
772
  });
773
+ if (IsXdsChannelFilterChainPerRouteEnabled() && !filter_chain.ok()) {
774
+ return filter_chain.status();
775
+ }
734
776
  auto cluster = route_config_data_->FindClusterRef(cluster_name);
735
777
  GRPC_CHECK(cluster != nullptr);
736
778
  // Generate a hash.
@@ -776,41 +818,41 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
776
818
  args.service_config_call_data->SetCallAttribute(
777
819
  args.arena->ManagedNew<XdsRouteStateAttributeImpl>(route_config_data_,
778
820
  entry));
779
- return absl::OkStatus();
821
+ if (!IsXdsChannelFilterChainPerRouteEnabled()) return filter_chain_;
822
+ return filter_chain;
780
823
  }
781
824
 
782
- void XdsResolver::XdsConfigSelector::AddFilters(
783
- InterceptionChainBuilder& builder, const Blackboard* old_blackboard,
825
+ void XdsResolver::XdsConfigSelector::BuildFilterChains(
826
+ FilterChainBuilder& builder, const Blackboard* old_blackboard,
784
827
  Blackboard* new_blackboard) {
785
- const auto& hcm =
786
- std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
787
- GRPC_CHECK_EQ(filters_.size(), hcm.http_filters.size());
788
- for (size_t i = 0; i < filters_.size(); ++i) {
789
- auto* filter = filters_[i];
790
- filter->AddFilter(builder);
791
- filter->UpdateBlackboard(hcm.http_filters[i].config, old_blackboard,
792
- new_blackboard);
793
- }
794
- builder.Add<ClusterSelectionFilter>(nullptr);
795
- }
796
-
797
- std::vector<const grpc_channel_filter*>
798
- XdsResolver::XdsConfigSelector::GetFilters(const Blackboard* old_blackboard,
799
- Blackboard* new_blackboard) {
800
- const auto& hcm =
801
- std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
802
- GRPC_CHECK_EQ(filters_.size(), hcm.http_filters.size());
803
- std::vector<const grpc_channel_filter*> filters;
804
- for (size_t i = 0; i < filters_.size(); ++i) {
805
- auto* filter = filters_[i];
806
- if (filter->channel_filter() != nullptr) {
807
- filters.push_back(filter->channel_filter());
828
+ if (!IsXdsChannelFilterChainPerRouteEnabled()) {
829
+ const auto& http_filter_registry =
830
+ DownCast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
831
+ .http_filter_registry();
832
+ const auto& hcm = std::get<XdsListenerResource::HttpConnectionManager>(
833
+ xds_config_->listener->listener);
834
+ for (const auto& http_filter : hcm.http_filters) {
835
+ // Find filter. This is guaranteed to succeed, because it's checked
836
+ // at config validation time.
837
+ const XdsHttpFilterImpl* filter_impl =
838
+ http_filter_registry.GetFilterForTopLevelType(
839
+ http_filter.config_proto_type);
840
+ GRPC_CHECK_NE(filter_impl, nullptr);
841
+ filter_impl->AddFilter(builder, nullptr);
842
+ filter_impl->UpdateBlackboard(http_filter.config, old_blackboard,
843
+ new_blackboard);
808
844
  }
809
- filter->UpdateBlackboard(hcm.http_filters[i].config, old_blackboard,
810
- new_blackboard);
845
+ builder.AddFilter<ClusterSelectionFilter>(nullptr);
846
+ filter_chain_ = builder.Build();
847
+ return;
811
848
  }
812
- filters.push_back(&ClusterSelectionFilter::kFilter);
813
- return filters;
849
+ // Build filter chains.
850
+ const auto& http_filter_registry =
851
+ DownCast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
852
+ .http_filter_registry();
853
+ route_config_data_->BuildFilterChains(*xds_config_, http_filter_registry,
854
+ builder, old_blackboard,
855
+ new_blackboard);
814
856
  }
815
857
 
816
858
  //
@@ -858,7 +900,7 @@ XdsResolver::XdsRouteStateAttributeImpl::LockAndGetCluster(
858
900
  // XdsResolver::ClusterSelectionFilter
859
901
  //
860
902
 
861
- const grpc_channel_filter XdsResolver::ClusterSelectionFilter::kFilter =
903
+ const grpc_channel_filter XdsResolver::ClusterSelectionFilter::kFilterVtable =
862
904
  MakePromiseBasedFilter<ClusterSelectionFilter, FilterEndpoint::kClient,
863
905
  kFilterExaminesServerInitialMetadata>();
864
906
 
@@ -1019,20 +1061,24 @@ XdsResolver::CreateServiceConfig() {
1019
1061
  " }\n"
1020
1062
  " } }\n"
1021
1063
  " ]"));
1022
- auto& hcm = std::get<XdsListenerResource::HttpConnectionManager>(
1023
- current_config_->listener->listener);
1024
- auto filter_configs =
1025
- XdsRouting::GeneratePerHTTPFilterConfigsForServiceConfig(
1026
- static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1027
- .http_filter_registry(),
1028
- hcm.http_filters, args_);
1029
- if (!filter_configs.ok()) return filter_configs.status();
1030
- for (const auto& [name, config] : filter_configs->per_filter_configs) {
1031
- config_parts.emplace_back(absl::StrCat(
1032
- " \"", name, "\": [\n", absl::StrJoin(config, ",\n"), "\n ]"));
1064
+ ChannelArgs args = args_;
1065
+ if (!IsXdsChannelFilterChainPerRouteEnabled()) {
1066
+ auto& hcm = std::get<XdsListenerResource::HttpConnectionManager>(
1067
+ current_config_->listener->listener);
1068
+ auto filter_configs =
1069
+ XdsRouting::GeneratePerHTTPFilterConfigsForServiceConfig(
1070
+ static_cast<const GrpcXdsBootstrap&>(xds_client_->bootstrap())
1071
+ .http_filter_registry(),
1072
+ hcm.http_filters, args_);
1073
+ if (!filter_configs.ok()) return filter_configs.status();
1074
+ for (const auto& [name, config] : filter_configs->per_filter_configs) {
1075
+ config_parts.emplace_back(absl::StrCat(
1076
+ " \"", name, "\": [\n", absl::StrJoin(config, ",\n"), "\n ]"));
1077
+ }
1078
+ args = filter_configs->args;
1033
1079
  }
1034
1080
  std::string json = absl::StrCat("{", absl::StrJoin(config_parts, ",\n"), "}");
1035
- return ServiceConfigImpl::Create(filter_configs->args, json.c_str());
1081
+ return ServiceConfigImpl::Create(args, json.c_str());
1036
1082
  }
1037
1083
 
1038
1084
  void XdsResolver::GenerateResult() {
@@ -1047,6 +1047,7 @@ class Server::TransportConnectivityWatcher
1047
1047
  MutexLock lock(&server_->mu_global_);
1048
1048
  server_->connections_.erase(transport_.get());
1049
1049
  --server_->connections_open_;
1050
+ server_->stream_quota_->DecrementOpenChannels();
1050
1051
  server_->MaybeFinishShutdown();
1051
1052
  }
1052
1053
 
@@ -1201,7 +1202,8 @@ Server::Server(const ChannelArgs& args)
1201
1202
  max_time_in_pending_queue_(Duration::Seconds(
1202
1203
  channel_args_
1203
1204
  .GetInt(GRPC_ARG_SERVER_MAX_UNREQUESTED_TIME_IN_SERVER_SECONDS)
1204
- .value_or(30))) {
1205
+ .value_or(30))),
1206
+ stream_quota_(channel_args_.GetObject<ResourceQuota>()->stream_quota()) {
1205
1207
  SourceConstructed();
1206
1208
  }
1207
1209
 
@@ -1340,6 +1342,7 @@ grpc_error_handle Server::SetupTransport(Transport* transport,
1340
1342
  GRPC_TRACE_LOG(server_channel, INFO) << "Adding connection";
1341
1343
  connections_.emplace(std::move(t));
1342
1344
  ++connections_open_;
1345
+ stream_quota_->IncrementOpenChannels();
1343
1346
  } else {
1344
1347
  GRPC_CHECK(transport->filter_stack_transport() != nullptr);
1345
1348
  absl::StatusOr<RefCountedPtr<Channel>> channel = LegacyChannel::Create(
@@ -1369,9 +1372,12 @@ grpc_error_handle Server::SetupTransport(Transport* transport,
1369
1372
  channelz_socket_uuid = socket_node->uuid();
1370
1373
  socket_node->AddParent(channelz_node_.get());
1371
1374
  }
1375
+
1372
1376
  // Initialize chand.
1373
1377
  chand->InitTransport(Ref(), std::move(*channel), cq_idx, transport,
1374
1378
  channelz_socket_uuid);
1379
+
1380
+ stream_quota_->IncrementOpenChannels();
1375
1381
  }
1376
1382
  return absl::OkStatus();
1377
1383
  }
@@ -1705,6 +1711,7 @@ class Server::ChannelData::ConnectivityWatcher
1705
1711
  const absl::Status& /*status*/) override {
1706
1712
  // Don't do anything until we are being shut down.
1707
1713
  if (new_state != GRPC_CHANNEL_SHUTDOWN) return;
1714
+ chand_->server_->stream_quota_->DecrementOpenChannels();
1708
1715
  // Shut down channel.
1709
1716
  MutexLock lock(&chand_->server_->mu_global_);
1710
1717
  chand_->Destroy();
@@ -1720,6 +1727,7 @@ class Server::ChannelData::ConnectivityWatcher
1720
1727
 
1721
1728
  Server::ChannelData::~ChannelData() {
1722
1729
  if (server_ != nullptr) {
1730
+ server_->stream_quota_->DecrementOpenChannels();
1723
1731
  MutexLock lock(&server_->mu_global_);
1724
1732
  if (list_position_.has_value()) {
1725
1733
  server_->channels_.erase(*list_position_);
@@ -1743,6 +1751,7 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
1743
1751
  server_->channels_.push_front(this);
1744
1752
  list_position_ = server_->channels_.begin();
1745
1753
  }
1754
+
1746
1755
  // Start accept_stream transport op.
1747
1756
  grpc_transport_op* op = grpc_make_transport_op(nullptr);
1748
1757
  GRPC_CHECK(transport->filter_stack_transport() != nullptr);
@@ -1880,12 +1889,20 @@ Server::CallData::CallData(grpc_call_element* elem,
1880
1889
  elem, grpc_schedule_on_exec_ctx);
1881
1890
  GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady,
1882
1891
  elem, grpc_schedule_on_exec_ctx);
1892
+
1893
+ // TODO(snohria): Add the same for Call-V3 as well.
1894
+ server_->stream_quota_->IncrementOutstandingRequests();
1883
1895
  }
1884
1896
 
1885
1897
  Server::CallData::~CallData() {
1886
1898
  GRPC_CHECK(state_.load(std::memory_order_relaxed) != CallState::PENDING);
1887
1899
  grpc_metadata_array_destroy(&initial_metadata_);
1888
1900
  grpc_byte_buffer_destroy(payload_);
1901
+
1902
+ if (server_ != nullptr) {
1903
+ // TODO(snohria): Add the same for Call-V3 as well.
1904
+ server_->stream_quota_->DecrementOutstandingRequests();
1905
+ }
1889
1906
  }
1890
1907
 
1891
1908
  void Server::CallData::SetState(CallState state) {
@@ -729,6 +729,8 @@ class Server : public ServerInterface,
729
729
 
730
730
  // The last time we printed a shutdown progress message.
731
731
  gpr_timespec last_shutdown_message_time_;
732
+
733
+ StreamQuotaRefPtr stream_quota_;
732
734
  };
733
735
 
734
736
  } // namespace grpc_core
@@ -1051,8 +1051,8 @@ absl::StatusOr<ChannelArgs> XdsServerConfigFetcher::ListenerWatcher::
1051
1051
  // Find filter. This is guaranteed to succeed, because it's checked
1052
1052
  // at config validation time in the XdsApi code.
1053
1053
  const XdsHttpFilterImpl* filter_impl =
1054
- http_filter_registry.GetFilterForType(
1055
- http_filter.config.config_proto_type_name);
1054
+ http_filter_registry.GetFilterForTopLevelType(
1055
+ http_filter.config_proto_type);
1056
1056
  GRPC_CHECK_NE(filter_impl, nullptr);
1057
1057
  // Some filters like the router filter are no-op filters and do not have
1058
1058
  // an implementation.
@@ -1119,8 +1119,8 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1119
1119
  auto& hcm = filter_chain_data.http_connection_manager;
1120
1120
  for (const auto& http_filter : hcm.http_filters) {
1121
1121
  const XdsHttpFilterImpl* filter_impl =
1122
- http_filter_registry.GetFilterForType(
1123
- http_filter.config.config_proto_type_name);
1122
+ http_filter_registry.GetFilterForTopLevelType(
1123
+ http_filter.config_proto_type);
1124
1124
  GRPC_CHECK_NE(filter_impl,
1125
1125
  nullptr); // Enforced in config validation.
1126
1126
  filter_impl->UpdateBlackboard(http_filter.config, old_blackboard,