grpc 1.81.1 → 1.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (948) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +15 -9
  3. data/etc/roots.pem +10400 -3855
  4. data/include/grpc/grpc.h +6 -7
  5. data/include/grpc/grpc_audit_logging.h +2 -2
  6. data/include/grpc/grpc_security_constants.h +2 -0
  7. data/include/grpc/impl/channel_arg_names.h +26 -1
  8. data/src/core/call/call_filters.h +21 -5
  9. data/src/core/call/call_spine.h +4 -4
  10. data/src/core/call/client_call.cc +2 -2
  11. data/src/core/call/interception_chain.h +6 -9
  12. data/src/core/call/metadata.cc +7 -2
  13. data/src/core/call/metadata.h +1 -1
  14. data/src/core/call/metadata_batch.cc +1 -1
  15. data/src/core/call/metadata_batch.h +17 -1
  16. data/src/core/call/parsed_metadata.h +7 -2
  17. data/src/core/call/server_call.cc +16 -4
  18. data/src/core/call/server_call.h +14 -5
  19. data/src/core/call/status_util.cc +0 -4
  20. data/src/core/call/status_util.h +0 -3
  21. data/src/core/channelz/channel_trace.cc +3 -1
  22. data/src/core/client_channel/backup_poller.cc +2 -17
  23. data/src/core/client_channel/client_channel.cc +23 -28
  24. data/src/core/client_channel/client_channel.h +5 -3
  25. data/src/core/client_channel/client_channel_filter.cc +19 -30
  26. data/src/core/client_channel/client_channel_filter.h +2 -2
  27. data/src/core/client_channel/client_channel_plugin.cc +1 -1
  28. data/src/core/client_channel/client_channel_service_config.cc +5 -13
  29. data/src/core/client_channel/config_selector.h +2 -7
  30. data/src/core/client_channel/direct_channel.cc +5 -1
  31. data/src/core/client_channel/direct_channel.h +3 -1
  32. data/src/core/client_channel/dynamic_filters.cc +4 -7
  33. data/src/core/client_channel/dynamic_filters.h +1 -3
  34. data/src/core/client_channel/retry_filter.cc +2 -25
  35. data/src/core/client_channel/retry_filter.h +3 -7
  36. data/src/core/client_channel/retry_filter_legacy_call_data.cc +1 -1
  37. data/src/core/client_channel/retry_filter_legacy_call_data.h +2 -2
  38. data/src/core/client_channel/retry_interceptor.cc +7 -35
  39. data/src/core/client_channel/retry_interceptor.h +11 -14
  40. data/src/core/client_channel/retry_service_config.cc +0 -2
  41. data/src/core/client_channel/retry_service_config.h +0 -2
  42. data/src/core/client_channel/retry_throttle.cc +19 -7
  43. data/src/core/client_channel/retry_throttle.h +24 -7
  44. data/src/core/client_channel/subchannel.cc +1 -1
  45. data/src/core/{filter/blackboard.cc → config/experiment_env_var.cc} +11 -14
  46. data/src/core/config/experiment_env_var.h +26 -0
  47. data/src/core/credentials/call/external/external_account_credentials.cc +125 -12
  48. data/src/core/credentials/call/external/external_account_credentials.h +6 -1
  49. data/src/core/credentials/call/jwt/jwt_credentials.cc +11 -1
  50. data/src/core/credentials/call/jwt/jwt_credentials.h +3 -0
  51. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +64 -11
  52. data/src/core/credentials/call/oauth2/oauth2_credentials.h +0 -1
  53. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +411 -0
  54. data/src/core/credentials/call/regional_access_boundary_fetcher.h +158 -0
  55. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +1 -1
  56. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +7 -1
  57. data/src/core/credentials/transport/insecure/insecure_security_connector.h +1 -1
  58. data/src/core/credentials/transport/local/local_security_connector.cc +1 -1
  59. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +14 -2
  60. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.cc +172 -0
  61. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +103 -0
  62. data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +3 -2
  63. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +10 -3
  64. data/src/core/credentials/transport/tls/tls_security_connector.cc +14 -2
  65. data/src/core/credentials/transport/xds/xds_credentials.cc +4 -12
  66. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +6 -0
  67. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +28 -66
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -8
  69. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +24 -58
  70. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +24 -19
  71. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -81
  72. data/src/core/ext/filters/message_size/message_size_filter.h +1 -50
  73. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -1
  74. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +13 -56
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -14
  76. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +184 -54
  78. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +84 -15
  80. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  81. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  82. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -2
  83. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +2 -4
  84. data/src/core/ext/transport/chttp2/transport/frame.cc +120 -13
  85. data/src/core/ext/transport/chttp2/transport/frame.h +57 -10
  86. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -1
  87. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +13 -7
  88. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -1
  89. data/src/core/ext/transport/chttp2/transport/frame_security.cc +10 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_security.h +2 -1
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  92. data/src/core/ext/transport/chttp2/transport/goaway.cc +11 -1
  93. data/src/core/ext/transport/chttp2/transport/goaway.h +17 -1
  94. data/src/core/ext/transport/chttp2/transport/header_assembler.h +54 -22
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +53 -5
  96. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +22 -0
  97. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +20 -0
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +42 -1
  99. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  100. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +219 -417
  101. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +49 -29
  102. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +2073 -0
  103. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +746 -0
  104. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  105. data/src/core/ext/transport/chttp2/transport/http2_settings.h +49 -15
  106. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +0 -2
  107. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +74 -26
  108. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +39 -15
  109. data/src/core/ext/transport/chttp2/transport/http2_transport.h +18 -48
  110. data/src/core/ext/transport/chttp2/transport/internal.h +18 -0
  111. data/src/core/ext/transport/chttp2/transport/message_assembler.h +1 -2
  112. data/src/core/ext/transport/chttp2/transport/parsing.cc +85 -26
  113. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +1 -1
  114. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +4 -10
  115. data/src/core/ext/transport/chttp2/transport/read_context.h +494 -0
  116. data/src/core/ext/transport/chttp2/transport/security_frame.h +13 -3
  117. data/src/core/ext/transport/chttp2/transport/stream.h +287 -137
  118. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +83 -65
  119. data/src/core/ext/transport/chttp2/transport/write_cycle.h +9 -1
  120. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +16 -2
  121. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +621 -432
  122. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +264 -166
  123. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +0 -13
  124. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +708 -497
  125. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +294 -176
  126. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +0 -15
  127. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +262 -181
  128. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +84 -58
  129. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h +0 -5
  130. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +254 -190
  131. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +107 -53
  132. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.h +0 -4
  133. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +271 -190
  134. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +88 -64
  135. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.h +0 -5
  136. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +1035 -730
  137. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +384 -260
  138. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.h +0 -19
  139. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +87 -56
  140. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +26 -16
  141. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.h +0 -2
  142. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +105 -71
  143. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +30 -22
  144. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.h +0 -2
  145. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +31 -29
  146. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +19 -7
  147. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.h +0 -1
  148. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +25 -23
  149. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +15 -7
  150. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.h +0 -1
  151. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +25 -23
  152. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +15 -7
  153. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.h +0 -1
  154. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +201 -165
  155. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +79 -31
  156. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.h +0 -2
  157. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +29 -26
  158. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +17 -11
  159. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.h +0 -1
  160. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +46 -29
  161. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +37 -19
  162. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.h +4 -4
  163. data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +34 -27
  164. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +34 -13
  165. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.h +1 -2
  166. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +617 -452
  167. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +221 -163
  168. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.h +0 -16
  169. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +1339 -970
  170. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +484 -324
  171. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.h +0 -23
  172. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +181 -135
  173. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +59 -43
  174. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.h +0 -3
  175. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +1353 -1028
  176. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +535 -361
  177. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.h +0 -25
  178. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +37 -33
  179. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +19 -13
  180. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.h +0 -1
  181. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +234 -196
  182. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +77 -57
  183. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.h +0 -1
  184. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +695 -502
  185. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +246 -186
  186. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.h +0 -15
  187. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +140 -116
  188. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +53 -43
  189. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +0 -3
  190. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +363 -269
  191. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +131 -89
  192. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.h +0 -8
  193. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +35 -31
  194. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +15 -13
  195. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.h +0 -1
  196. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +1073 -769
  197. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +515 -293
  198. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +0 -30
  199. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +25 -23
  200. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +15 -7
  201. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +0 -1
  202. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +375 -267
  203. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +142 -86
  204. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.h +0 -7
  205. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +32 -27
  206. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +13 -11
  207. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.h +0 -1
  208. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +29 -26
  209. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +17 -11
  210. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.h +0 -1
  211. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +87 -56
  212. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +26 -16
  213. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.h +0 -2
  214. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +634 -468
  215. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +255 -161
  216. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.h +0 -14
  217. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +672 -474
  218. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +228 -130
  219. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.h +0 -9
  220. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +56 -40
  221. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +15 -13
  222. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.h +0 -1
  223. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +34 -29
  224. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +19 -11
  225. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.h +0 -1
  226. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +811 -635
  227. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +347 -221
  228. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.h +0 -16
  229. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +174 -118
  230. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +62 -38
  231. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +0 -4
  232. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +78 -57
  233. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +28 -18
  234. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.h +0 -2
  235. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +37 -33
  236. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +22 -14
  237. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +0 -1
  238. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +159 -119
  239. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +47 -35
  240. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +0 -5
  241. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +101 -76
  242. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +41 -23
  243. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.h +0 -2
  244. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +35 -31
  245. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +15 -13
  246. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.h +0 -1
  247. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +189 -127
  248. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +79 -49
  249. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.h +0 -4
  250. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +378 -283
  251. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +156 -98
  252. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +0 -8
  253. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +354 -255
  254. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +125 -69
  255. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.h +0 -6
  256. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +27 -24
  257. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +13 -11
  258. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.h +0 -1
  259. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +611 -451
  260. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +159 -119
  261. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +0 -11
  262. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +468 -321
  263. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +157 -99
  264. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -6
  265. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +146 -119
  266. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +55 -35
  267. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.h +0 -1
  268. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +61 -51
  269. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +16 -16
  270. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.h +0 -2
  271. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +43 -39
  272. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +25 -13
  273. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.h +0 -1
  274. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +341 -247
  275. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +130 -84
  276. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.h +0 -8
  277. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +452 -313
  278. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +144 -100
  279. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.h +0 -10
  280. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +666 -493
  281. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +251 -181
  282. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +0 -12
  283. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +327 -197
  284. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +92 -48
  285. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.h +0 -3
  286. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +3583 -2532
  287. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +1340 -816
  288. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +0 -60
  289. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +111 -82
  290. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +48 -28
  291. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.h +0 -3
  292. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +548 -410
  293. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +214 -148
  294. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.h +0 -12
  295. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +59 -50
  296. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +30 -20
  297. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.h +0 -2
  298. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +29 -26
  299. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +17 -11
  300. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.h +0 -1
  301. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +60 -49
  302. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +28 -20
  303. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.h +0 -2
  304. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +50 -36
  305. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +19 -11
  306. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.h +0 -1
  307. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +82 -63
  308. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +27 -19
  309. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.h +0 -1
  310. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +27 -24
  311. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +13 -11
  312. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.h +0 -1
  313. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +70 -58
  314. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +32 -22
  315. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.h +0 -2
  316. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +2 -5
  317. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +1 -1
  318. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +73 -62
  319. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +39 -25
  320. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.h +0 -2
  321. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +49 -45
  322. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +33 -13
  323. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.h +0 -1
  324. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +771 -588
  325. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +383 -185
  326. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.h +0 -16
  327. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +66 -47
  328. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +31 -17
  329. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +0 -2
  330. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb.h +69 -58
  331. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.c +27 -23
  332. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.h +0 -2
  333. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +151 -119
  334. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +45 -39
  335. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.h +0 -5
  336. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb.h +19 -17
  337. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.c +1 -3
  338. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.h +0 -1
  339. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb.h +144 -109
  340. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.c +46 -38
  341. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.h +0 -4
  342. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +184 -139
  343. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +65 -35
  344. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.h +0 -3
  345. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +129 -106
  346. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +69 -41
  347. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.h +0 -4
  348. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +83 -71
  349. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +40 -26
  350. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.h +0 -2
  351. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +148 -101
  352. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +45 -27
  353. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.h +0 -2
  354. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +62 -51
  355. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +35 -21
  356. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.h +0 -2
  357. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1362 -1024
  358. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +508 -336
  359. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +0 -22
  360. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +21 -19
  361. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +13 -7
  362. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +0 -1
  363. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +35 -31
  364. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +15 -13
  365. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +0 -1
  366. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +27 -24
  367. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +13 -11
  368. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +0 -1
  369. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +27 -24
  370. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +13 -11
  371. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.h +0 -1
  372. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +94 -74
  373. 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 +35 -23
  374. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.h +0 -1
  375. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +231 -179
  376. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +88 -66
  377. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +0 -6
  378. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +21 -19
  379. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +13 -7
  380. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.h +0 -1
  381. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +63 -56
  382. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +31 -19
  383. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.h +0 -1
  384. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +27 -24
  385. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +13 -11
  386. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.h +0 -1
  387. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +27 -24
  388. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +13 -11
  389. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.h +0 -1
  390. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -5
  391. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb_minitable.c +1 -1
  392. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +538 -364
  393. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +157 -95
  394. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.h +0 -8
  395. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -110
  396. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +69 -49
  397. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +0 -4
  398. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +517 -389
  399. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +182 -116
  400. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h +0 -7
  401. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +84 -62
  402. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +30 -22
  403. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h +0 -2
  404. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +340 -256
  405. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +92 -82
  406. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +0 -5
  407. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +19 -17
  408. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +1 -3
  409. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h +0 -1
  410. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +857 -566
  411. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +288 -182
  412. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +0 -15
  413. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +105 -72
  414. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +36 -22
  415. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.h +0 -2
  416. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +312 -226
  417. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +132 -78
  418. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.h +0 -5
  419. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +82 -61
  420. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -19
  421. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +0 -2
  422. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +123 -89
  423. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +25 -25
  424. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.h +0 -4
  425. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb.h +48 -33
  426. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.c +13 -11
  427. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.h +0 -1
  428. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +42 -36
  429. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +19 -13
  430. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.h +0 -1
  431. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +101 -79
  432. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +61 -31
  433. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.h +0 -5
  434. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +83 -60
  435. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +37 -19
  436. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.h +0 -2
  437. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +56 -40
  438. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +15 -13
  439. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.h +0 -1
  440. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +34 -29
  441. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +13 -11
  442. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.h +0 -1
  443. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +32 -27
  444. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +13 -11
  445. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.h +0 -1
  446. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +88 -71
  447. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +48 -30
  448. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.h +0 -3
  449. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +37 -30
  450. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +1 -5
  451. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.h +0 -2
  452. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +95 -71
  453. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +36 -22
  454. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.h +0 -2
  455. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +79 -56
  456. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +26 -18
  457. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.h +0 -2
  458. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +164 -124
  459. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +54 -40
  460. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.h +0 -4
  461. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +200 -147
  462. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +47 -41
  463. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.h +0 -7
  464. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +160 -130
  465. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +89 -47
  466. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.h +0 -5
  467. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +78 -62
  468. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +26 -20
  469. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.h +0 -3
  470. data/src/core/ext/upb-gen/envoy/type/v3/http.upb.h +2 -5
  471. data/src/core/ext/upb-gen/envoy/type/v3/http.upb_minitable.c +1 -1
  472. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +21 -19
  473. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +13 -7
  474. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.h +0 -1
  475. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +43 -36
  476. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +22 -12
  477. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.h +0 -2
  478. data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +67 -55
  479. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +36 -18
  480. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.h +0 -3
  481. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +62 -51
  482. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +33 -19
  483. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.h +0 -2
  484. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb.h +2 -5
  485. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb_minitable.c +1 -1
  486. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +25 -23
  487. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +15 -7
  488. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.h +0 -1
  489. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +37 -33
  490. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +19 -13
  491. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.h +0 -1
  492. data/src/core/ext/upb-gen/google/api/annotations.upb.h +15 -13
  493. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +22 -7
  494. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.h +1 -1
  495. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +619 -430
  496. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +260 -168
  497. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.h +0 -13
  498. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +734 -518
  499. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +312 -182
  500. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.h +0 -16
  501. data/src/core/ext/upb-gen/google/api/http.upb.h +146 -105
  502. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +65 -29
  503. data/src/core/ext/upb-gen/google/api/http.upb_minitable.h +0 -3
  504. data/src/core/ext/upb-gen/google/api/httpbody.upb.h +52 -37
  505. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +19 -11
  506. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.h +0 -1
  507. data/src/core/ext/upb-gen/google/protobuf/any.upb.h +23 -21
  508. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +15 -7
  509. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.h +0 -1
  510. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +2236 -1514
  511. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +824 -406
  512. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +0 -34
  513. data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +23 -21
  514. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +15 -7
  515. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.h +0 -1
  516. data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +19 -17
  517. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +1 -3
  518. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.h +0 -1
  519. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +149 -100
  520. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +59 -43
  521. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.h +0 -4
  522. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +23 -21
  523. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +15 -7
  524. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.h +0 -1
  525. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +181 -139
  526. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +99 -53
  527. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.h +0 -9
  528. data/src/core/ext/upb-gen/google/rpc/status.upb.h +52 -37
  529. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +19 -11
  530. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.h +0 -1
  531. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +1553 -1157
  532. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +712 -410
  533. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +0 -39
  534. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +189 -125
  535. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +59 -35
  536. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +0 -3
  537. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +454 -343
  538. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +204 -130
  539. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +0 -11
  540. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +369 -243
  541. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +109 -79
  542. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +0 -7
  543. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +256 -175
  544. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +122 -68
  545. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +0 -8
  546. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +71 -51
  547. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +39 -19
  548. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.h +0 -2
  549. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +583 -407
  550. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +259 -145
  551. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.h +0 -12
  552. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +114 -84
  553. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +52 -30
  554. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +0 -4
  555. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +41 -34
  556. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +25 -13
  557. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.h +0 -2
  558. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +309 -230
  559. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +123 -79
  560. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.h +0 -9
  561. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +98 -63
  562. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +51 -23
  563. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.h +0 -3
  564. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +505 -312
  565. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +159 -87
  566. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.h +0 -9
  567. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +128 -91
  568. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +82 -41
  569. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.h +5 -8
  570. data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +36 -29
  571. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +36 -13
  572. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.h +1 -2
  573. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +13 -11
  574. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +22 -7
  575. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.h +1 -1
  576. data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +36 -29
  577. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +36 -13
  578. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.h +1 -2
  579. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +34 -27
  580. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +34 -13
  581. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.h +1 -2
  582. data/src/core/ext/upb-gen/validate/validate.upb.h +1682 -1130
  583. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +587 -247
  584. data/src/core/ext/upb-gen/validate/validate.upb_minitable.h +4 -27
  585. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +128 -91
  586. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +82 -41
  587. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.h +5 -8
  588. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +36 -29
  589. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +36 -13
  590. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.h +1 -2
  591. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +13 -11
  592. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +22 -7
  593. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.h +1 -1
  594. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +122 -90
  595. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +82 -39
  596. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.h +3 -7
  597. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +34 -27
  598. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +34 -13
  599. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.h +1 -2
  600. data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +21 -19
  601. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +13 -7
  602. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.h +0 -1
  603. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +29 -26
  604. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +17 -11
  605. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.h +0 -1
  606. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +70 -58
  607. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +32 -22
  608. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.h +0 -2
  609. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +53 -34
  610. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +26 -16
  611. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.h +0 -2
  612. data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +29 -26
  613. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +17 -11
  614. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.h +0 -1
  615. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +37 -33
  616. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +22 -14
  617. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.h +0 -1
  618. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +102 -76
  619. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +43 -23
  620. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.h +0 -2
  621. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +33 -30
  622. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +19 -11
  623. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.h +0 -1
  624. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +136 -83
  625. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +41 -33
  626. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.h +0 -4
  627. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +46 -32
  628. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +20 -12
  629. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.h +0 -1
  630. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +29 -26
  631. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +20 -12
  632. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.h +0 -1
  633. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +93 -61
  634. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +28 -20
  635. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.h +0 -2
  636. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +19 -17
  637. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +1 -3
  638. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.h +0 -1
  639. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +105 -71
  640. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +32 -22
  641. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.h +0 -2
  642. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +430 -314
  643. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +153 -123
  644. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.h +0 -10
  645. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +307 -199
  646. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +74 -62
  647. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.h +0 -6
  648. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +52 -42
  649. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +19 -13
  650. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.h +0 -2
  651. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +95 -71
  652. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +36 -22
  653. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.h +0 -2
  654. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +92 -77
  655. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +42 -28
  656. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.h +0 -2
  657. data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +67 -55
  658. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +36 -18
  659. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h +0 -3
  660. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +29 -26
  661. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +17 -11
  662. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h +0 -1
  663. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +885 -855
  664. data/src/core/filter/composite/composite_filter.cc +10 -3
  665. data/src/core/filter/composite/composite_filter.h +11 -1
  666. data/src/core/filter/filter_args.h +4 -22
  667. data/src/core/handshaker/handshaker.cc +10 -2
  668. data/src/core/handshaker/security/secure_endpoint.cc +60 -5
  669. data/src/core/lib/channel/channel_args.h +12 -6
  670. data/src/core/lib/channel/channel_stack.cc +1 -2
  671. data/src/core/lib/channel/channel_stack.h +1 -7
  672. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  673. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -7
  674. data/src/core/lib/channel/promise_based_filter.cc +90 -4
  675. data/src/core/lib/channel/promise_based_filter.h +241 -188
  676. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +0 -13
  677. data/src/core/lib/event_engine/extensions/receive_coalescing_extension.h +44 -0
  678. data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
  679. data/src/core/lib/event_engine/posix.h +2 -0
  680. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +2 -1
  681. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +11 -8
  682. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +9 -18
  683. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  684. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +2 -1
  685. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +10 -10
  686. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  687. data/src/core/lib/event_engine/shim.cc +2 -16
  688. data/src/core/lib/event_engine/shim.h +0 -4
  689. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
  690. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -4
  691. data/src/core/lib/experiments/experiments.cc +303 -183
  692. data/src/core/lib/experiments/experiments.h +166 -90
  693. data/src/core/lib/iomgr/buffer_list.h +1 -1
  694. data/src/core/lib/iomgr/error.cc +3 -73
  695. data/src/core/lib/iomgr/error.h +8 -6
  696. data/src/core/lib/iomgr/error_cfstream.cc +1 -2
  697. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -7
  698. data/src/core/lib/iomgr/ev_poll_posix.cc +2 -6
  699. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  700. data/src/core/lib/iomgr/tcp_posix.cc +4 -7
  701. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  702. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
  703. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  704. data/src/core/lib/promise/interceptor_list.h +1 -1
  705. data/src/core/lib/promise/try_seq.h +2 -2
  706. data/src/core/lib/resource_quota/telemetry.cc +54 -0
  707. data/src/core/lib/resource_quota/telemetry.h +5 -23
  708. data/src/core/lib/security/authorization/audit_logging.cc +2 -2
  709. data/src/core/lib/security/authorization/audit_logging.h +3 -3
  710. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +11 -13
  711. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  712. data/src/core/lib/security/authorization/matchers.cc +20 -20
  713. data/src/core/lib/security/authorization/matchers.h +15 -16
  714. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  715. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  716. data/src/core/lib/security/authorization/stdout_logger.h +6 -5
  717. data/src/core/lib/surface/call.cc +6 -9
  718. data/src/core/lib/surface/call.h +11 -0
  719. data/src/core/lib/surface/channel.cc +21 -2
  720. data/src/core/lib/surface/channel.h +14 -6
  721. data/src/core/lib/surface/filter_stack_call.cc +10 -29
  722. data/src/core/lib/surface/legacy_channel.cc +7 -7
  723. data/src/core/lib/surface/legacy_channel.h +3 -1
  724. data/src/core/lib/surface/version.cc +2 -2
  725. data/src/core/lib/transport/bdp_estimator.cc +13 -13
  726. data/src/core/lib/transport/bdp_estimator.h +9 -5
  727. data/src/core/lib/transport/error_utils.cc +26 -138
  728. data/src/core/lib/transport/promise_endpoint.h +8 -8
  729. data/src/core/lib/transport/transport.h +31 -4
  730. data/src/core/load_balancing/grpclb/grpclb.cc +2 -1
  731. data/src/core/load_balancing/pick_first/pick_first.cc +33 -2
  732. data/src/core/load_balancing/pick_first/pick_first.h +6 -0
  733. data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -10
  734. data/src/core/load_balancing/rls/rls.cc +2 -1
  735. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +141 -74
  736. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +88 -0
  737. data/src/core/load_balancing/xds/cds.cc +80 -56
  738. data/src/core/load_balancing/xds/cds.h +21 -0
  739. data/src/core/mitigation_engine/mitigation.h +53 -0
  740. data/src/core/mitigation_engine/mitigation_engine.h +81 -0
  741. data/src/core/mitigation_engine/mitigation_provider.h +62 -0
  742. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  743. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -5
  744. data/src/core/resolver/dns/dns_resolver_plugin.cc +1 -6
  745. data/src/core/resolver/xds/xds_resolver.cc +37 -144
  746. data/src/core/server/server.cc +40 -18
  747. data/src/core/server/server.h +26 -18
  748. data/src/core/server/server_config_selector.h +5 -4
  749. data/src/core/server/server_config_selector_filter.cc +135 -26
  750. data/src/core/server/server_config_selector_filter.h +1 -0
  751. data/src/core/server/xds_server_config_fetcher.cc +687 -692
  752. data/src/core/server/xds_server_config_fetcher_legacy.cc +1336 -0
  753. data/src/core/telemetry/call_tracer.cc +49 -2
  754. data/src/core/telemetry/call_tracer.h +1 -0
  755. data/src/core/telemetry/histogram.h +10 -89
  756. data/src/core/telemetry/instrument.h +42 -28
  757. data/src/core/telemetry/tcp_tracer.h +38 -0
  758. data/src/core/transport/message_size_service_config.cc +123 -0
  759. data/src/core/transport/message_size_service_config.h +85 -0
  760. data/src/core/transport/session_endpoint.cc +29 -4
  761. data/src/core/transport/session_endpoint.h +4 -0
  762. data/src/core/tsi/alts/crypt/gsec.h +4 -2
  763. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  764. data/src/core/tsi/ssl_telemetry_utils.cc +343 -0
  765. data/src/core/tsi/ssl_telemetry_utils.h +74 -0
  766. data/src/core/tsi/ssl_transport_security.cc +583 -305
  767. data/src/core/tsi/ssl_transport_security.h +22 -6
  768. data/src/core/tsi/ssl_transport_security_utils.cc +2 -0
  769. data/src/core/tsi/transport_security.h +7 -0
  770. data/src/core/util/http_client/httpcli.cc +1 -4
  771. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  772. data/src/core/util/http_client/parser.cc +1 -1
  773. data/src/core/util/lru_cache.h +2 -0
  774. data/src/core/util/ref_counted_string.h +1 -1
  775. data/src/core/util/status_helper.cc +71 -192
  776. data/src/core/util/status_helper.h +16 -21
  777. data/src/core/util/tchar.cc +13 -7
  778. data/src/core/util/trie_lookup.h +1 -1
  779. data/src/core/xds/grpc/blackboard.cc +58 -0
  780. data/src/core/{filter → xds/grpc}/blackboard.h +30 -11
  781. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +2 -11
  782. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -7
  783. data/src/core/xds/grpc/xds_cluster_parser.cc +5 -16
  784. data/src/core/xds/grpc/xds_common_types.cc +96 -0
  785. data/src/core/xds/grpc/xds_common_types.h +35 -7
  786. data/src/core/xds/grpc/xds_common_types_parser.cc +205 -134
  787. data/src/core/xds/grpc/xds_common_types_parser.h +18 -1
  788. data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -18
  789. data/src/core/xds/grpc/xds_http_composite_filter.cc +34 -18
  790. data/src/core/xds/grpc/xds_http_composite_filter.h +6 -3
  791. data/src/core/xds/grpc/xds_http_fault_filter.cc +0 -149
  792. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -8
  793. data/src/core/xds/grpc/xds_http_filter.cc +2 -1
  794. data/src/core/xds/grpc/xds_http_filter.h +6 -16
  795. data/src/core/xds/grpc/xds_http_filter_registry.cc +2 -12
  796. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +25 -119
  797. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +27 -15
  798. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -12
  799. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +0 -149
  800. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -8
  801. data/src/core/xds/grpc/xds_lb_policy_registry.cc +18 -0
  802. data/src/core/xds/grpc/xds_listener_parser.cc +13 -9
  803. data/src/core/xds/grpc/xds_metadata_parser.cc +0 -2
  804. data/src/core/xds/grpc/xds_route_config.h +1 -1
  805. data/src/core/xds/grpc/xds_route_config_parser.cc +10 -16
  806. data/src/core/xds/grpc/xds_routing.cc +115 -90
  807. data/src/core/xds/grpc/xds_routing.h +73 -24
  808. data/src/core/xds/grpc/xds_server_grpc.cc +22 -13
  809. data/src/core/xds/grpc/xds_server_grpc.h +16 -2
  810. data/src/core/xds/grpc/xds_server_grpc_interface.h +10 -0
  811. data/src/core/xds/grpc/xds_transport_grpc.cc +123 -18
  812. data/src/core/xds/grpc/xds_transport_grpc.h +28 -4
  813. data/src/core/xds/xds_client/lrs_client.cc +4 -8
  814. data/src/core/xds/xds_client/xds_bootstrap.cc +4 -16
  815. data/src/core/xds/xds_client/xds_client.cc +2 -15
  816. data/src/core/xds/xds_client/xds_transport.h +3 -0
  817. data/src/ruby/ext/grpc/rb_byte_buffer.c +1 -0
  818. data/src/ruby/ext/grpc/rb_call.c +3 -0
  819. data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
  820. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  821. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  822. data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
  823. data/src/ruby/ext/grpc/rb_completion_queue.c +1 -0
  824. data/src/ruby/ext/grpc/rb_compression_options.c +1 -0
  825. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
  826. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -6
  827. data/src/ruby/ext/grpc/rb_server.c +1 -0
  828. data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
  829. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
  830. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
  831. data/src/ruby/lib/grpc/core/call_credentials.rb +86 -0
  832. data/src/ruby/lib/grpc/core/channel_credentials.rb +69 -0
  833. data/src/ruby/lib/grpc/core/credentials_helper.rb +126 -0
  834. data/src/ruby/lib/grpc/generic/client_stub.rb +86 -73
  835. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  836. data/src/ruby/lib/grpc/version.rb +1 -1
  837. data/src/ruby/lib/grpc.rb +25 -0
  838. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -1
  839. data/src/ruby/spec/call_credentials_spec.rb +52 -2
  840. data/src/ruby/spec/credentials_helper_spec.rb +80 -0
  841. data/src/ruby/spec/generic/client_stub_spec.rb +27 -4
  842. data/src/ruby/spec/generic/server_interceptors_spec.rb +17 -3
  843. data/third_party/upb/upb/base/error_handler.h +79 -0
  844. data/third_party/upb/upb/base/internal/log2.h +29 -5
  845. data/third_party/upb/upb/generated_code_support.h +1 -0
  846. data/third_party/upb/upb/hash/common.c +129 -14
  847. data/third_party/upb/upb/hash/common.h +1 -1
  848. data/third_party/upb/upb/hash/ext_table.h +65 -0
  849. data/third_party/upb/upb/lex/strtod.c +14 -5
  850. data/third_party/upb/upb/mem/arena.c +113 -95
  851. data/third_party/upb/upb/mem/internal/arena.h +13 -8
  852. data/third_party/upb/upb/message/accessors.c +2 -3
  853. data/third_party/upb/upb/message/accessors.h +32 -12
  854. data/third_party/upb/upb/message/array.c +51 -2
  855. data/third_party/upb/upb/message/array.h +10 -0
  856. data/third_party/upb/upb/message/copy.c +18 -34
  857. data/third_party/upb/upb/message/internal/accessors.h +15 -49
  858. data/third_party/upb/upb/message/internal/array.h +1 -1
  859. data/third_party/upb/upb/message/internal/map.h +1 -1
  860. data/third_party/upb/upb/message/internal/message.c +8 -1
  861. data/third_party/upb/upb/message/internal/message.h +40 -10
  862. data/third_party/upb/upb/message/message.c +3 -2
  863. data/third_party/upb/upb/message/value.h +0 -6
  864. data/third_party/upb/upb/mini_descriptor/decode.c +78 -59
  865. data/third_party/upb/upb/mini_descriptor/link.c +8 -6
  866. data/third_party/upb/upb/mini_table/extension_registry.c +17 -49
  867. data/third_party/upb/upb/mini_table/extension_registry.h +5 -17
  868. data/third_party/upb/upb/mini_table/generated_registry.c +180 -0
  869. data/third_party/upb/upb/mini_table/generated_registry.h +66 -0
  870. data/third_party/upb/upb/mini_table/internal/extension.h +5 -3
  871. data/third_party/upb/upb/mini_table/internal/field.h +7 -5
  872. data/third_party/upb/upb/mini_table/internal/generated_registry.h +37 -0
  873. data/third_party/upb/upb/mini_table/internal/message.c +0 -18
  874. data/third_party/upb/upb/mini_table/internal/message.h +24 -41
  875. data/third_party/upb/upb/mini_table/internal/size_log2.h +2 -1
  876. data/third_party/upb/upb/mini_table/internal/sub.h +2 -5
  877. data/third_party/upb/upb/mini_table/message.h +34 -13
  878. data/third_party/upb/upb/port/atomic.h +180 -74
  879. data/third_party/upb/upb/port/def.inc +194 -29
  880. data/third_party/upb/upb/port/sanitizers.h +15 -0
  881. data/third_party/upb/upb/port/undef.inc +6 -2
  882. data/third_party/upb/upb/reflection/common.h +0 -6
  883. data/third_party/upb/upb/reflection/def.hpp +8 -12
  884. data/third_party/upb/upb/reflection/def_pool.c +85 -33
  885. data/third_party/upb/upb/reflection/def_pool.h +38 -8
  886. data/third_party/upb/upb/reflection/def_type.h +3 -0
  887. data/third_party/upb/upb/reflection/enum_def.c +45 -33
  888. data/third_party/upb/upb/reflection/enum_def.h +8 -4
  889. data/third_party/upb/upb/reflection/enum_reserved_range.c +7 -3
  890. data/third_party/upb/upb/reflection/enum_value_def.c +14 -29
  891. data/third_party/upb/upb/reflection/enum_value_def.h +5 -4
  892. data/third_party/upb/upb/reflection/extension_range.c +15 -14
  893. data/third_party/upb/upb/reflection/extension_range.h +7 -4
  894. data/third_party/upb/upb/reflection/field_def.c +114 -96
  895. data/third_party/upb/upb/reflection/field_def.h +3 -3
  896. data/third_party/upb/upb/reflection/file_def.c +71 -65
  897. data/third_party/upb/upb/reflection/file_def.h +4 -5
  898. data/third_party/upb/upb/reflection/internal/def_builder.c +22 -14
  899. data/third_party/upb/upb/reflection/internal/def_builder.h +44 -38
  900. data/third_party/upb/upb/reflection/internal/def_pool.h +5 -1
  901. data/third_party/upb/upb/reflection/internal/enum_def.h +6 -4
  902. data/third_party/upb/upb/reflection/internal/enum_reserved_range.h +3 -2
  903. data/third_party/upb/upb/reflection/internal/enum_value_def.h +7 -4
  904. data/third_party/upb/upb/reflection/internal/extension_range.h +4 -3
  905. data/third_party/upb/upb/reflection/internal/field_def.h +15 -12
  906. data/third_party/upb/upb/reflection/internal/file_def.h +8 -1
  907. data/third_party/upb/upb/reflection/internal/message_def.h +10 -7
  908. data/third_party/upb/upb/reflection/internal/message_reserved_range.h +3 -1
  909. data/third_party/upb/upb/reflection/internal/method_def.h +6 -6
  910. data/third_party/upb/upb/reflection/internal/oneof_def.h +6 -6
  911. data/third_party/upb/upb/reflection/internal/service_def.h +9 -6
  912. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  913. data/third_party/upb/upb/reflection/message_def.c +46 -53
  914. data/third_party/upb/upb/reflection/message_def.h +6 -7
  915. data/third_party/upb/upb/reflection/message_reserved_range.c +7 -6
  916. data/third_party/upb/upb/reflection/method_def.c +22 -20
  917. data/third_party/upb/upb/reflection/method_def.h +4 -4
  918. data/third_party/upb/upb/reflection/oneof_def.c +17 -15
  919. data/third_party/upb/upb/reflection/oneof_def.h +6 -3
  920. data/third_party/upb/upb/reflection/service_def.c +50 -23
  921. data/third_party/upb/upb/reflection/service_def.h +7 -4
  922. data/third_party/upb/upb/text/internal/encode.c +7 -10
  923. data/third_party/upb/upb/wire/decode.c +269 -430
  924. data/third_party/upb/upb/wire/decode.h +6 -45
  925. data/third_party/upb/upb/wire/decode_fast/combinations.h +7 -3
  926. data/third_party/upb/upb/wire/decode_fast/select.c +7 -2
  927. data/third_party/upb/upb/wire/encode.c +144 -106
  928. data/third_party/upb/upb/wire/encode.h +6 -2
  929. data/third_party/upb/upb/wire/eps_copy_input_stream.c +36 -7
  930. data/third_party/upb/upb/wire/eps_copy_input_stream.h +94 -380
  931. data/third_party/upb/upb/wire/internal/decoder.c +1 -14
  932. data/third_party/upb/upb/wire/internal/decoder.h +84 -24
  933. data/third_party/upb/upb/wire/internal/eps_copy_input_stream.h +339 -0
  934. data/third_party/upb/upb/wire/internal/reader.h +29 -12
  935. data/third_party/upb/upb/wire/reader.c +35 -22
  936. data/third_party/upb/upb/wire/reader.h +11 -18
  937. data/third_party/utf8_range/utf8_range.c +1 -1
  938. data/third_party/utf8_range/utf8_range.h +2 -1
  939. metadata +35 -13
  940. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +0 -117
  941. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +0 -109
  942. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +0 -80
  943. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +0 -86
  944. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +0 -83
  945. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +0 -91
  946. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +0 -217
  947. data/third_party/upb/upb/message/internal/tagged_ptr.h +0 -56
  948. data/third_party/upb/upb/message/tagged_ptr.h +0 -48
@@ -47,10 +47,10 @@
47
47
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
48
48
  #include "src/core/ext/transport/chttp2/transport/http2_transport.h"
49
49
  #include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
50
- #include "src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h"
51
50
  #include "src/core/ext/transport/chttp2/transport/keepalive.h"
52
51
  #include "src/core/ext/transport/chttp2/transport/message_assembler.h"
53
52
  #include "src/core/ext/transport/chttp2/transport/ping_promise.h"
53
+ #include "src/core/ext/transport/chttp2/transport/read_context.h"
54
54
  #include "src/core/ext/transport/chttp2/transport/security_frame.h"
55
55
  #include "src/core/ext/transport/chttp2/transport/stream.h"
56
56
  #include "src/core/ext/transport/chttp2/transport/stream_data_queue.h"
@@ -243,15 +243,18 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(Http2DataFrame&& frame) {
243
243
 
244
244
  RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
245
245
 
246
- ValueOrHttp2Status<chttp2::FlowControlAction> flow_control_action =
247
- ProcessIncomingDataFrameFlowControl(current_frame_header_, flow_control_,
248
- stream.get());
249
- if (!flow_control_action.IsOk()) {
250
- return ValueOrHttp2Status<chttp2::FlowControlAction>::TakeStatus(
251
- std::move(flow_control_action));
246
+ if (frame.payload.Length() > 0) {
247
+ // DATA frames with empty payload are legitimate frames. CHTTP2 and PH2 send
248
+ // empty DATA frames with END_Stream flag set to true.
249
+ ValueOrHttp2Status<chttp2::FlowControlAction> flow_control_action =
250
+ ProcessIncomingDataFrameFlowControl(
251
+ read_context_.GetCurrentFrameHeader(), flow_control_, stream.get());
252
+ if (!flow_control_action.IsOk()) {
253
+ return ValueOrHttp2Status<chttp2::FlowControlAction>::TakeStatus(
254
+ std::move(flow_control_action));
255
+ }
256
+ ActOnFlowControlAction(flow_control_action.value(), stream.get());
252
257
  }
253
- ActOnFlowControlAction(flow_control_action.value(), stream.get());
254
-
255
258
  if (stream == nullptr) {
256
259
  // TODO(tjagtap) : [PH2][P2] : Implement the correct behaviour later.
257
260
  // RFC9113 : If a DATA frame is received whose stream is not in the "open"
@@ -263,9 +266,6 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(Http2DataFrame&& frame) {
263
266
  return Http2Status::Ok();
264
267
  }
265
268
 
266
- // TODO(akshitpatel) : [PH2][P3] : We should add a check to reset stream if
267
- // the stream state is kIdle as well.
268
-
269
269
  Http2Status stream_status = stream->CanStreamReceiveDataFrames();
270
270
  if (!stream_status.IsOk()) {
271
271
  return stream_status;
@@ -300,8 +300,7 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(Http2DataFrame&& frame) {
300
300
  if (message != nullptr) {
301
301
  GRPC_HTTP2_CLIENT_DLOG
302
302
  << "Http2ClientTransport::ProcessIncomingFrame(DataFrame) "
303
- "SpawnPushMessage "
304
- << message->DebugString();
303
+ "SpawnPushMessage ";
305
304
  stream->GetCallHandler().SpawnPushMessage(std::move(message));
306
305
  continue;
307
306
  }
@@ -310,26 +309,20 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(Http2DataFrame&& frame) {
310
309
  break;
311
310
  }
312
311
 
313
- // TODO(tjagtap) : [PH2][P2] : List of Tests:
314
- // 1. Data frame with unknown stream ID
315
- // 2. Data frame with only half a message and then end stream
316
- // 3. One data frame with a full message
317
- // 4. Three data frames with one full message
318
- // 5. One data frame with three full messages. All messages should be pushed.
319
- // Will need to mock the call_handler object and test this along with the
320
- // Header reading code. Because we need a stream in place for the lookup to
321
- // work.
322
312
  return Http2Status::Ok();
323
313
  }
324
314
 
325
315
  template <typename T>
326
316
  Http2Status Http2ClientTransport::ProcessIncomingMetadata(T&& frame) {
327
- // State update MUST happen before processing the frame.
328
- incoming_headers_.UpdateState(frame);
329
-
317
+ GRPC_HTTP2_CLIENT_DLOG
318
+ << "Http2ClientTransport::ProcessIncomingMetadata { stream_id="
319
+ << frame.stream_id << ", end_headers=" << frame.end_headers << " }";
330
320
  ping_manager_->ReceivedDataFrame();
331
321
 
332
322
  RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
323
+ // State update MUST happen before processing the frame.
324
+ read_context_.UpdateState(frame, /*is_existing_stream=*/(stream != nullptr));
325
+
333
326
  if (stream == nullptr) {
334
327
  // TODO(tjagtap) : [PH2][P3] : Implement this.
335
328
  // RFC9113 : The identifier of a newly established stream MUST be
@@ -338,36 +331,33 @@ Http2Status Http2ClientTransport::ProcessIncomingMetadata(T&& frame) {
338
331
  // frame and streams that are reserved using PUSH_PROMISE. An endpoint that
339
332
  // receives an unexpected stream identifier MUST respond with a connection
340
333
  // error (Section 5.4.1) of type PROTOCOL_ERROR.
341
- GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::ProcessIncomingMetadata { "
342
- "stream_id="
343
- << frame.stream_id << "} Lookup Failed";
344
- return incoming_headers_.ParseAndDiscardHeaders(
345
- std::move(frame.payload), frame.end_headers, /*stream=*/nullptr,
346
- Http2Status::Ok(), settings_->acked().max_header_list_size());
334
+ return read_context_.ParseAndDiscardHeaders(
335
+ std::move(frame.payload), frame.end_headers, Http2Status::Ok(),
336
+ settings_->acked().max_header_list_size());
347
337
  }
348
338
 
349
- Http2Status validation_status =
350
- ValidateMetadataFrameState(frame, *stream, incoming_headers_,
351
- settings_->acked().max_header_list_size());
339
+ Http2Status validation_status = ValidateMetadataFrameState(
340
+ frame, *stream, read_context_, settings_->acked().max_header_list_size());
352
341
  if (!validation_status.IsOk()) {
353
342
  return validation_status;
354
343
  }
355
344
 
356
- Http2Status append_result = stream->GetHeaderAssembler().AppendFrame(frame);
345
+ Http2Status append_result =
346
+ read_context_.header_assembler().AppendFrame(frame);
357
347
  if (!append_result.IsOk()) {
358
348
  // Frame payload is not consumed if AppendFrame returns a non-OK
359
349
  // status. We need to process it to keep our in consistent state.
360
- return incoming_headers_.ParseAndDiscardHeaders(
361
- std::move(frame.payload), frame.end_headers, stream.get(),
362
- std::move(append_result), settings_->acked().max_header_list_size());
350
+ return read_context_.ParseAndDiscardHeaders(
351
+ std::move(frame.payload), frame.end_headers, std::move(append_result),
352
+ settings_->acked().max_header_list_size());
363
353
  }
364
354
 
365
355
  Http2Status status = ProcessMetadata(stream);
366
356
  if (!status.IsOk()) {
367
357
  // Frame payload has been moved to the HeaderAssembler. So calling
368
358
  // ParseAndDiscardHeaders with an empty buffer.
369
- return incoming_headers_.ParseAndDiscardHeaders(
370
- SliceBuffer(), frame.end_headers, stream.get(), std::move(status),
359
+ return read_context_.ParseAndDiscardHeaders(
360
+ SliceBuffer(), frame.end_headers, std::move(status),
371
361
  settings_->acked().max_header_list_size());
372
362
  }
373
363
 
@@ -379,9 +369,8 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
379
369
  Http2HeaderFrame&& frame) {
380
370
  // https://www.rfc-editor.org/rfc/rfc9113.html#name-headers
381
371
  GRPC_HTTP2_CLIENT_DLOG
382
- << "Http2ClientTransport::ProcessIncomingFrame(HeaderFrame) { stream_id="
383
- << frame.stream_id << ", end_headers=" << frame.end_headers
384
- << ", end_stream=" << frame.end_stream << " }";
372
+ << "Http2ClientTransport::ProcessIncomingFrame(HeaderFrame) end_stream="
373
+ << frame.end_stream;
385
374
  return ProcessIncomingMetadata(std::forward<Http2HeaderFrame>(frame));
386
375
  }
387
376
 
@@ -393,15 +382,13 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
393
382
  "stream_id="
394
383
  << frame.stream_id << ", error_code=" << frame.error_code << " }";
395
384
 
385
+ read_context_.OnResetFrameReceived();
396
386
  Http2ErrorCode error_code = FrameErrorCodeToHttp2ErrorCode(frame.error_code);
397
387
  absl::Status status = absl::Status(ErrorCodeToAbslStatusCode(error_code),
398
388
  "Reset stream frame received.");
399
389
  RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
400
390
  if (stream != nullptr) {
401
- stream->MarkHalfClosedRemote();
402
- BeginCloseStream(std::move(stream),
403
- /*reset_stream_error_code=*/std::nullopt,
404
- CancelledServerMetadataFromStatus(status));
391
+ HandleStreamStateChange(*stream, stream->OnResetReceived(status));
405
392
  }
406
393
 
407
394
  // In case of stream error, we do not want the Read Loop to be broken. Hence
@@ -418,33 +405,30 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
418
405
  << frame.ack << ", settings length=" << frame.settings.size() << "}";
419
406
 
420
407
  if (!frame.ack) {
421
- Http2Status status = ValidateSettingsValues(frame.settings);
422
- if (!status.IsOk()) {
423
- return status;
408
+ read_context_.OnSettingsFrameReceived();
409
+ Http2Status s = settings_->BufferPeerSettings(std::move(frame.settings));
410
+ if (!s.IsOk()) {
411
+ return s;
424
412
  }
425
- settings_->BufferPeerSettings(std::move(frame.settings));
426
413
  absl::Status trigger_write_status = TriggerWriteCycle();
427
414
  if (!trigger_write_status.ok()) {
428
415
  return ToHttpOkOrConnError(trigger_write_status);
429
416
  }
430
-
431
417
  if (GPR_UNLIKELY(!settings_->IsFirstPeerSettingsApplied())) {
432
418
  // Apply the first settings before we read any other frames.
433
- reader_state_.SetPauseReadLoop();
419
+ read_context_.SetPauseReadLoop();
434
420
  }
435
421
  } else {
436
- if (settings_->OnSettingsAckReceived()) {
437
- incoming_headers_.SetMaxHeaderTableSize(
438
- settings_->acked().header_table_size());
439
- ActOnFlowControlAction(flow_control_.SetAckedInitialWindow(
440
- settings_->acked().initial_window_size()),
441
- /*stream=*/nullptr);
442
- } else {
443
- // CHTTP2 returns a connection error for an unsolicited SETTINGS ACK.
444
- // However, we ignore it in PH2 since RFC 9113 doesn't explicitly mandate
445
- // an error.
446
- LOG(ERROR) << "Settings ack received without sending settings. Ignore.";
422
+ Http2Status status = settings_->OnSettingsAckReceived();
423
+ if (!status.IsOk()) {
424
+ return status;
447
425
  }
426
+ read_context_.SetMaxHeaderTableSize(settings_->acked().header_table_size());
427
+ read_context_.header_assembler().MaybeSetAllowTrueBinaryMetadataAcked(
428
+ settings_->acked().allow_true_binary_metadata());
429
+ ActOnFlowControlAction(flow_control_.SetAckedInitialWindow(
430
+ settings_->acked().initial_window_size()),
431
+ /*stream=*/nullptr);
448
432
  }
449
433
 
450
434
  return Http2Status::Ok();
@@ -458,17 +442,9 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(Http2PingFrame&& frame) {
458
442
  if (frame.ack) {
459
443
  return ToHttpOkOrConnError(AckPing(frame.opaque));
460
444
  } else {
445
+ read_context_.OnPingFrameReceived();
461
446
  if (test_only_ack_pings_) {
462
- // TODO(akshitpatel) : [PH2][P2] : Have a counter to track number
463
- // of pending induced frames (Ping/Settings Ack). This is to
464
- // ensure that if write is taking a long time, we can stop reads
465
- // and prioritize writes. RFC9113: PING responses SHOULD be given
466
- // higher priority than any other frame.
467
447
  ping_manager_->AddPendingPingAck(frame.opaque);
468
- // TODO(akshitpatel) : [PH2][P2] : This is done assuming that the
469
- // other ProcessFrame promises may return stream or connection
470
- // failures. If this does not turn out to be true, consider
471
- // returning absl::Status here.
472
448
  return ToHttpOkOrConnError(TriggerWriteCycle());
473
449
  } else {
474
450
  GRPC_HTTP2_CLIENT_DLOG
@@ -504,17 +480,6 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
504
480
  }
505
481
  SetMaxAllowedStreamId(last_stream_id);
506
482
 
507
- bool close_transport = false;
508
- {
509
- MutexLock lock(&transport_mutex_);
510
- if (CanCloseTransportLocked()) {
511
- close_transport = true;
512
- GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::ProcessIncomingFrame("
513
- "GoawayFrame) "
514
- "stream_list_ is empty";
515
- }
516
- }
517
-
518
483
  StateWatcher::DisconnectInfo disconnect_info;
519
484
  disconnect_info.reason = Transport::StateWatcher::kGoaway;
520
485
  disconnect_info.http2_error_code =
@@ -544,21 +509,6 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
544
509
  Duration::Milliseconds(throttled_keepalive_time);
545
510
  }
546
511
 
547
- if (close_transport) {
548
- // TODO(akshitpatel) : [PH2][P3] : Ideally the error here should be
549
- // kNoError. However, Http2Status does not support kNoError. We should
550
- // revisit this and update the error code.
551
- MaybeSpawnCloseTransport(Http2Status::Http2ConnectionError(
552
- FrameErrorCodeToHttp2ErrorCode((
553
- frame.error_code ==
554
- Http2ErrorCodeToFrameErrorCode(Http2ErrorCode::kNoError)
555
- ? Http2ErrorCodeToFrameErrorCode(Http2ErrorCode::kInternalError)
556
- : frame.error_code)),
557
- frame.debug_data.empty()
558
- ? std::string("GOAWAY received")
559
- : std::string(frame.debug_data.as_string_view())));
560
- }
561
-
562
512
  // lie: use transient failure from the transport to indicate goaway has been
563
513
  // received.
564
514
  ReportDisconnection(status, disconnect_info, "got_goaway");
@@ -604,16 +554,12 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
604
554
  Http2ContinuationFrame&& frame) {
605
555
  // https://www.rfc-editor.org/rfc/rfc9113.html#name-continuation
606
556
  GRPC_HTTP2_CLIENT_DLOG
607
- << "Http2ClientTransport::ProcessIncomingFrame(ContinuationFrame) { "
608
- "stream_id="
609
- << frame.stream_id << ", end_headers=" << frame.end_headers << " }";
557
+ << "Http2ClientTransport::ProcessIncomingFrame(ContinuationFrame)";
610
558
  return ProcessIncomingMetadata(std::forward<Http2ContinuationFrame>(frame));
611
559
  }
612
560
 
613
561
  Http2Status Http2ClientTransport::ProcessIncomingFrame(
614
562
  Http2SecurityFrame&& frame) {
615
- GRPC_HTTP2_CLIENT_DLOG
616
- << "Http2ClientTransport::ProcessIncomingFrame(SecurityFrame) ";
617
563
  if (settings_->IsSecurityFrameExpected()) {
618
564
  security_frame_handler_->ProcessPayload(std::move(frame.payload));
619
565
  }
@@ -637,30 +583,27 @@ Http2Status Http2ClientTransport::ProcessIncomingFrame(
637
583
 
638
584
  Http2Status Http2ClientTransport::ProcessMetadata(
639
585
  RefCountedPtr<Stream> stream) {
640
- HeaderAssembler& assembler = stream->GetHeaderAssembler();
586
+ HeaderAssembler& assembler = read_context_.header_assembler();
641
587
  CallHandler& call = stream->GetCallHandler();
642
588
 
643
589
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::ProcessMetadata";
644
590
  if (assembler.IsReady()) {
645
591
  ValueOrHttp2Status<ServerMetadataHandle> read_result =
646
- assembler.ReadMetadata(incoming_headers_.parser(),
647
- !incoming_headers_.HeaderHasEndStream(),
592
+ assembler.ReadMetadata(read_context_.parser(),
593
+ !read_context_.HeaderHasEndStream(),
648
594
  /*max_header_list_size_soft_limit=*/
649
- incoming_headers_.soft_limit(),
595
+ read_context_.soft_limit(),
650
596
  /*max_header_list_size_hard_limit=*/
651
597
  settings_->acked().max_header_list_size());
652
598
  if (read_result.IsOk()) {
653
599
  ServerMetadataHandle metadata = TakeValue(std::move(read_result));
654
- if (incoming_headers_.HeaderHasEndStream()) {
655
- stream->MarkHalfClosedRemote();
656
- stream->SetTrailingMetadataReceived();
657
- BeginCloseStream(std::move(stream),
658
- /*reset_stream_error_code=*/std::nullopt,
659
- std::move(metadata));
600
+ if (read_context_.HeaderHasEndStream()) {
601
+ HandleStreamStateChange(
602
+ *stream, stream->OnTrailingMetadataReceived(std::move(metadata)));
660
603
  } else {
661
604
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::ProcessMetadata "
662
605
  "SpawnPushServerInitialMetadata";
663
- metadata->Set(PeerString(), incoming_headers_.peer_string());
606
+ metadata->Set(PeerString(), read_context_.peer_string());
664
607
  stream->SetInitialMetadataReceived();
665
608
  call.SpawnPushServerInitialMetadata(std::move(metadata));
666
609
  }
@@ -684,66 +627,64 @@ auto Http2ClientTransport::ReadAndProcessOneFrame() {
684
627
  EndpointReadSlice(kFrameHeaderSize),
685
628
  // Parse the frame header.
686
629
  [this](Slice header_bytes) {
687
- GRPC_HTTP2_CLIENT_DLOG
688
- << "Http2ClientTransport::ReadAndProcessOneFrame Parse "
689
- << header_bytes.as_string_view();
690
630
  Http2FrameHeader header = Http2FrameHeader::Parse(header_bytes.begin());
691
631
  // Validate the incoming frame as per the current state of the transport
692
- Http2Status status = ValidateFrameHeader(
693
- /*max_frame_size_setting*/ settings_->acked().max_frame_size(),
694
- /*incoming_header_in_progress*/
695
- incoming_headers_.IsWaitingForContinuationFrame(),
696
- /*incoming_header_stream_id*/
697
- incoming_headers_.GetStreamId(),
698
- /*current_frame_header*/ header,
632
+ Http2Status status = read_context_.ValidateHeader(
633
+ /*max_frame_size_setting=*/settings_->acked().max_frame_size(),
634
+ /*current_frame_header=*/header,
699
635
  /*last_stream_id=*/GetLastStreamId(),
700
- /*is_client=*/kIsClient, /*is_first_settings_processed=*/
636
+ /*is_first_settings_processed=*/
701
637
  settings_->IsFirstPeerSettingsApplied());
702
638
 
703
639
  if (GPR_UNLIKELY(!status.IsOk())) {
704
640
  GRPC_DCHECK(status.GetType() ==
705
641
  Http2Status::Http2ErrorType::kConnectionError);
706
- return HandleError(std::nullopt, std::move(status));
642
+ return HandleError(/*stream=*/nullptr, std::move(status));
707
643
  }
708
- GRPC_HTTP2_CLIENT_DLOG
709
- << "Http2ClientTransport::ReadAndProcessOneFrame "
710
- "Validated Frame Header:"
711
- << header.ToString();
712
- current_frame_header_ = header;
644
+ read_context_.SetCurrentFrameHeader(header);
713
645
  return absl::OkStatus();
714
646
  },
715
647
  // Read the payload of the frame.
716
648
  [this]() {
717
649
  GRPC_HTTP2_CLIENT_DLOG
718
650
  << "Http2ClientTransport::ReadAndProcessOneFrame Read Frame ";
719
- return AssertResultType<absl::Status>(Map(
720
- EndpointRead(current_frame_header_.length),
721
- [this](absl::StatusOr<SliceBuffer>&& payload) {
722
- if (GPR_UNLIKELY(!payload.ok())) {
723
- return payload.status();
724
- }
725
- GRPC_HTTP2_CLIENT_DLOG
726
- << "Http2ClientTransport::ReadAndProcessOneFrame "
727
- "ParseFramePayload payload length: "
728
- << payload.value().Length();
729
- ValueOrHttp2Status<Http2Frame> frame = ParseFramePayload(
730
- current_frame_header_, TakeValue(std::move(payload)));
731
- if (GPR_UNLIKELY(!frame.IsOk())) {
732
- return HandleError(current_frame_header_.stream_id,
733
- ValueOrHttp2Status<Http2Frame>::TakeStatus(
734
- std::move(frame)));
735
- }
736
- Http2Status status =
737
- ProcessOneIncomingFrame(TakeValue(std::move(frame)));
738
- if (GPR_UNLIKELY(!status.IsOk())) {
739
- return HandleError(current_frame_header_.stream_id,
740
- std::move(status));
741
- }
742
- return absl::OkStatus();
743
- }));
651
+ return AssertResultType<absl::Status>(
652
+ Map(EndpointRead(read_context_.GetCurrentFrameHeader().length),
653
+ [this](absl::StatusOr<SliceBuffer>&& payload) {
654
+ if (GPR_UNLIKELY(!payload.ok())) {
655
+ return payload.status();
656
+ }
657
+ GRPC_HTTP2_CLIENT_DLOG
658
+ << "Http2ClientTransport::ReadAndProcessOneFrame "
659
+ "ParseFramePayload payload length: "
660
+ << payload.value().Length();
661
+ ValueOrHttp2Status<Http2Frame> frame =
662
+ ParseFramePayload(read_context_.GetCurrentFrameHeader(),
663
+ TakeValue(std::move(payload)));
664
+ if (GPR_UNLIKELY(!frame.IsOk())) {
665
+ return HandleError(
666
+ LookupStream(
667
+ read_context_.GetCurrentFrameHeader().stream_id),
668
+ ValueOrHttp2Status<Http2Frame>::TakeStatus(
669
+ std::move(frame)));
670
+ }
671
+ Http2Status status =
672
+ ProcessOneIncomingFrame(TakeValue(std::move(frame)));
673
+ if (GPR_UNLIKELY(!status.IsOk())) {
674
+ return HandleError(
675
+ LookupStream(
676
+ read_context_.GetCurrentFrameHeader().stream_id),
677
+ std::move(status));
678
+ }
679
+ return absl::OkStatus();
680
+ }));
744
681
  },
745
682
  [this]() -> Poll<absl::Status> {
746
- return reader_state_.MaybePauseReadLoop();
683
+ Poll<absl::Status> poll_result = read_context_.MaybePauseReadLoop();
684
+ if (poll_result.pending()) {
685
+ TriggerWriteCycleOrHandleError();
686
+ }
687
+ return poll_result;
747
688
  }));
748
689
  }
749
690
 
@@ -816,9 +757,7 @@ void Http2ClientTransport::ActOnFlowControlAction(
816
757
  }
817
758
  }
818
759
 
819
- ActOnFlowControlActionSettings(
820
- action, settings_->mutable_local(),
821
- enable_preferred_rx_crypto_frame_advertisement_);
760
+ ActOnFlowControlActionSettings(action, settings_->mutable_local());
822
761
 
823
762
  if (action.AnyUpdateImmediately()) {
824
763
  // Prioritize sending flow control updates over reading data. If we
@@ -826,7 +765,7 @@ void Http2ClientTransport::ActOnFlowControlAction(
826
765
  // exhaust the flow control window. This prevents us from sending window
827
766
  // updates to the peer, causing the peer to block unnecessarily while
828
767
  // waiting for flow control tokens.
829
- reader_state_.SetPauseReadLoop();
768
+ read_context_.SetPauseReadLoop();
830
769
  if (!TriggerWriteCycleOrHandleError()) {
831
770
  return;
832
771
  }
@@ -911,14 +850,13 @@ absl::Status Http2ClientTransport::PrepareControlFrames() {
911
850
  // 5. Custom gRPC security frame
912
851
 
913
852
  goaway_manager_.MaybeGetSerializedGoawayFrame(frame_sender);
914
- bool should_spawn_security_frame_loop = false;
853
+ ApplySettingsResult apply_settings_result;
915
854
 
916
855
  const uint32_t old_initial_window_size =
917
856
  settings_->peer().initial_window_size();
918
- http2::Http2ErrorCode apply_status =
919
- settings_->MaybeReportAndApplyBufferedPeerSettings(
920
- event_engine_.get(), should_spawn_security_frame_loop);
921
-
857
+ const http2::Http2ErrorCode apply_status =
858
+ settings_->MaybeReportAndApplyBufferedPeerSettings(event_engine_.get(),
859
+ apply_settings_result);
922
860
  if (apply_status == http2::Http2ErrorCode::kNoError) {
923
861
  const uint32_t new_initial_window_size =
924
862
  settings_->peer().initial_window_size();
@@ -936,7 +874,7 @@ absl::Status Http2ClientTransport::PrepareControlFrames() {
936
874
  }
937
875
  }
938
876
 
939
- if (should_spawn_security_frame_loop) {
877
+ if (apply_settings_result.should_spawn_security_frame_loop) {
940
878
  const SecurityFrameHandler::EndpointExtensionState state =
941
879
  security_frame_handler_->Initialize(event_engine_);
942
880
  if (state.is_set) {
@@ -957,7 +895,7 @@ absl::Status Http2ClientTransport::PrepareControlFrames() {
957
895
  }
958
896
 
959
897
  if (apply_status != http2::Http2ErrorCode::kNoError) {
960
- return HandleError(std::nullopt,
898
+ return HandleError(/*stream=*/nullptr,
961
899
  Http2Status::Http2ConnectionError(
962
900
  apply_status, "Failed to apply incoming settings"));
963
901
  }
@@ -985,7 +923,7 @@ void Http2ClientTransport::NotifyFramesWriteDone() {
985
923
  // Notify Control modules that we have sent the frames.
986
924
  // All notifications are expected to be synchronous.
987
925
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::NotifyFramesWriteDone";
988
- reader_state_.ResumeReadLoopIfPaused();
926
+ read_context_.ResumeReadLoopIfPaused();
989
927
  MaybeSpawnPingTimeout(ping_manager_->NotifyPingSent());
990
928
  goaway_manager_.NotifyGoawaySent();
991
929
  MaybeSpawnWaitForSettingsTimeout();
@@ -1043,7 +981,7 @@ absl::Status Http2ClientTransport::DequeueStreamFrames(
1043
981
  "enqueue stream "
1044
982
  << stream->GetStreamId() << " with status: " << status;
1045
983
  // Close transport if we fail to enqueue stream.
1046
- return HandleError(std::nullopt, ToHttpOkOrConnError(status));
984
+ return HandleError(/*stream=*/nullptr, ToHttpOkOrConnError(status));
1047
985
  }
1048
986
  }
1049
987
 
@@ -1060,7 +998,7 @@ absl::Status Http2ClientTransport::DequeueStreamFrames(
1060
998
  << "Http2ClientTransport::DequeueStreamFrames InitialMetadataDequeued "
1061
999
  "stream_id = "
1062
1000
  << stream->GetStreamId();
1063
- stream->SentInitialMetadata();
1001
+ stream->OnInitialMetadataSent();
1064
1002
  // After this point, initial metadata is guaranteed to be sent out.
1065
1003
  AddToStreamList(stream);
1066
1004
  }
@@ -1069,28 +1007,16 @@ absl::Status Http2ClientTransport::DequeueStreamFrames(
1069
1007
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::DequeueStreamFrames "
1070
1008
  "HalfCloseDequeued stream_id = "
1071
1009
  << stream->GetStreamId();
1072
- stream->MarkHalfClosedLocal();
1073
-
1074
- if (stream->IsTrailingMetadataReceived()) {
1075
- CloseStream(*stream, CloseStreamArgs{/*close_reads=*/true,
1076
- /*close_writes=*/true});
1077
- }
1010
+ HandleStreamStateChange(*stream, stream->OnHalfCloseSent());
1078
1011
  }
1079
1012
  if (result.IsResetStreamDequeued()) {
1080
1013
  GRPC_HTTP2_CLIENT_DLOG
1081
1014
  << "Http2ClientTransport::DequeueStreamFrames ResetStreamDequeued "
1082
1015
  "stream_id = "
1083
1016
  << stream->GetStreamId();
1084
- stream->MarkHalfClosedLocal();
1085
- CloseStream(*stream, CloseStreamArgs{/*close_reads=*/true,
1086
- /*close_writes=*/true});
1017
+ HandleStreamStateChange(*stream, stream->OnResetSent());
1087
1018
  }
1088
1019
 
1089
- // Update the write_bytes_remaining_ based on the bytes consumed
1090
- // in the current dequeue.
1091
- // Note: We do tend to overestimate the bytes consumed here. This may result
1092
- // in sending less data than target_write_size_.
1093
-
1094
1020
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::DequeueStreamFrames "
1095
1021
  "After dequeue: "
1096
1022
  << write_cycle.DebugString()
@@ -1126,10 +1052,6 @@ auto Http2ClientTransport::MultiplexerLoop() {
1126
1052
  }
1127
1053
  NotifyUrgentFramesWriteDone();
1128
1054
  WriteCycle& write_cycle = transport_write_context_.GetWriteCycle();
1129
- GRPC_HTTP2_CLIENT_DLOG
1130
- << "Http2ClientTransport::MultiplexerLoop "
1131
- << "Starting to iterate over writable stream list "
1132
- << write_cycle.DebugString();
1133
1055
  // Drain all the writable streams till we have written
1134
1056
  // max_write_size_ bytes of data or there is no more data to send.
1135
1057
  // In some cases, we may write more than max_write_size_ bytes(like
@@ -1163,9 +1085,7 @@ auto Http2ClientTransport::MultiplexerLoop() {
1163
1085
  "Failed to assign stream id and add to stream list for"
1164
1086
  " stream: "
1165
1087
  << stream.get() << " closing this stream.";
1166
- BeginCloseStream(std::move(stream),
1167
- /*reset_stream_error_code=*/std::nullopt,
1168
- CancelledServerMetadataFromStatus(status));
1088
+ HandleStreamStateChange(*stream, stream->ForceClose(status));
1169
1089
  continue;
1170
1090
  }
1171
1091
  }
@@ -1226,9 +1146,8 @@ absl::Status Http2ClientTransport::InitializeStream(Stream& stream) {
1226
1146
  << next_stream_id.value() << " to stream: " << &stream
1227
1147
  << ", allow_true_binary_metadata:"
1228
1148
  << settings_->peer().allow_true_binary_metadata();
1229
- stream.InitializeClientStream(
1230
- next_stream_id.value(), settings_->peer().allow_true_binary_metadata(),
1231
- settings_->acked().allow_true_binary_metadata());
1149
+ stream.InitializeClientStream(next_stream_id.value(),
1150
+ settings_->peer().allow_true_binary_metadata());
1232
1151
  return absl::OkStatus();
1233
1152
  }
1234
1153
 
@@ -1266,9 +1185,9 @@ auto Http2ClientTransport::WaitForSettingsTimeoutOnDone() {
1266
1185
  return [self = RefAsSubclass<Http2ClientTransport>()](absl::Status status) {
1267
1186
  if (!status.ok()) {
1268
1187
  GRPC_UNUSED absl::Status result = self->HandleError(
1269
- std::nullopt, Http2Status::Http2ConnectionError(
1270
- Http2ErrorCode::kProtocolError,
1271
- std::string(RFC9113::kSettingsTimeout)));
1188
+ /*stream=*/nullptr, Http2Status::Http2ConnectionError(
1189
+ Http2ErrorCode::kProtocolError,
1190
+ std::string(RFC9113::kSettingsTimeout)));
1272
1191
  }
1273
1192
  };
1274
1193
  }
@@ -1308,23 +1227,23 @@ Http2ClientTransport::Http2ClientTransport(
1308
1227
  event_engine_(std::move(event_engine)),
1309
1228
  endpoint_(std::move(endpoint)),
1310
1229
  settings_(MakeRefCounted<SettingsPromiseManager>(
1311
- std::move(on_receive_settings))),
1230
+ kIsClient, std::move(on_receive_settings))),
1312
1231
  next_stream_id_(/*Initial Stream ID*/ 1),
1313
1232
  should_reset_ping_clock_(false),
1314
- incoming_headers_(IncomingMetadataTracker::GetPeerString(endpoint_),
1315
- kIsClient),
1233
+ read_context_(MaxNewStreamsPerRead(channel_args), endpoint_, kIsClient,
1234
+ GetMaxSecurityFrameSize(channel_args)),
1316
1235
  transport_write_context_(kIsClient),
1317
1236
  ping_manager_(std::nullopt),
1318
1237
  keepalive_manager_(std::nullopt),
1319
1238
  goaway_manager_(GoawayInterfaceImpl::Make(this)),
1320
- security_frame_handler_(MakeRefCounted<SecurityFrameHandler>()),
1321
1239
  memory_owner_(channel_args.GetObject<ResourceQuota>()
1322
1240
  ->memory_quota()
1323
1241
  ->CreateMemoryOwner()),
1324
1242
  flow_control_(
1325
- "PH2_Client",
1243
+ /*peer_name=*/read_context_.peer_string().as_string_view(),
1326
1244
  channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
1327
1245
  &memory_owner_),
1246
+ security_frame_handler_(MakeRefCounted<SecurityFrameHandler>()),
1328
1247
  ztrace_collector_(std::make_shared<PromiseHttp2ZTraceCollector>()) {
1329
1248
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::Http2ClientTransport Begin";
1330
1249
  // Initialize the general party and write party.
@@ -1365,7 +1284,6 @@ void Http2ClientTransport::SpawnTransportLoops() {
1365
1284
  // For Client, write happens before read. So MultiplexerLoop is spawned first.
1366
1285
  // ReadLoop is spawned after the first write.
1367
1286
  // For Server, read happens before write. So ReadLoop is spawned first.
1368
- // MultiplexerLoop is spawned after the first read.
1369
1287
  SpawnGuardedTransportParty("MultiplexerLoop",
1370
1288
  UntilTransportClosed(MultiplexerLoop()));
1371
1289
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::SpawnTransportLoops End";
@@ -1379,10 +1297,8 @@ void Http2ClientTransport::ReadChannelArgs(const ChannelArgs& channel_args,
1379
1297
 
1380
1298
  // Assign the channel args to the member variables.
1381
1299
  keepalive_time_ = args.keepalive_time;
1382
- incoming_headers_.set_soft_limit(args.max_header_list_size_soft_limit);
1300
+ read_context_.set_soft_limit(args.max_header_list_size_soft_limit);
1383
1301
  keepalive_permit_without_calls_ = args.keepalive_permit_without_calls;
1384
- enable_preferred_rx_crypto_frame_advertisement_ =
1385
- args.enable_preferred_rx_crypto_frame_advertisement;
1386
1302
  test_only_ack_pings_ = args.test_only_ack_pings;
1387
1303
 
1388
1304
  if (args.initial_sequence_number > 0) {
@@ -1395,9 +1311,9 @@ void Http2ClientTransport::ReadChannelArgs(const ChannelArgs& channel_args,
1395
1311
  }
1396
1312
  }
1397
1313
 
1398
- absl::Status Http2ClientTransport::HandleError(
1399
- const std::optional<uint32_t> stream_id, Http2Status status,
1400
- DebugLocation whence) {
1314
+ absl::Status Http2ClientTransport::HandleError(RefCountedPtr<Stream> stream,
1315
+ Http2Status status,
1316
+ DebugLocation whence) {
1401
1317
  Http2Status::Http2ErrorType error_type = status.GetType();
1402
1318
  GRPC_DCHECK(error_type != Http2Status::Http2ErrorType::kOk);
1403
1319
 
@@ -1405,13 +1321,13 @@ absl::Status Http2ClientTransport::HandleError(
1405
1321
  GRPC_HTTP2_CLIENT_ERROR_DLOG
1406
1322
  << "Http2ClientTransport::HandleError Stream Error:"
1407
1323
  << status.DebugString();
1408
- GRPC_DCHECK(stream_id.has_value());
1324
+ GRPC_DCHECK(stream != nullptr);
1409
1325
  // Passing a cancelled server metadata handle to propagate the error
1410
1326
  // to the upper layers.
1411
1327
  BeginCloseStream(
1412
- LookupStream(stream_id.value()),
1328
+ std::move(stream),
1413
1329
  Http2ErrorCodeToFrameErrorCode(status.GetStreamErrorCode()),
1414
- CancelledServerMetadataFromStatus(status.GetAbslStreamError()), whence);
1330
+ status.GetAbslStreamError(), whence);
1415
1331
  return absl::OkStatus();
1416
1332
  } else if (error_type == Http2Status::Http2ErrorType::kConnectionError) {
1417
1333
  GRPC_HTTP2_CLIENT_ERROR_DLOG
@@ -1424,186 +1340,73 @@ absl::Status Http2ClientTransport::HandleError(
1424
1340
  GPR_UNREACHABLE_CODE(return absl::InternalError("Invalid error type"));
1425
1341
  }
1426
1342
 
1427
- // This function MUST be idempotent. This function MUST be called from the
1428
- // transport party.
1429
- void Http2ClientTransport::CloseStream(Stream& stream, CloseStreamArgs args,
1430
- DebugLocation whence) {
1431
- std::optional<Http2Status> close_transport_error;
1432
-
1433
- {
1434
- // TODO(akshitpatel) : [PH2][P3] : Measure the impact of holding mutex
1435
- // throughout this function.
1436
- MutexLock lock(&transport_mutex_);
1437
- GRPC_HTTP2_CLIENT_DLOG
1438
- << "Http2ClientTransport::CloseStream for stream id: "
1439
- << stream.GetStreamId() << " close_reads=" << args.close_reads
1440
- << " close_writes=" << args.close_writes
1441
- << " incoming_headers_=" << incoming_headers_.DebugString()
1442
- << " location=" << whence.file() << ":" << whence.line();
1443
-
1444
- if (args.close_writes) {
1445
- stream.SetWriteClosed();
1446
- }
1447
-
1448
- if (args.close_reads) {
1449
- GRPC_HTTP2_CLIENT_DLOG
1450
- << "Http2ClientTransport::CloseStream for stream id: "
1451
- << stream.GetStreamId() << " closing stream for reads.";
1452
- // If the stream is closed while reading HEADER/CONTINUATION frames, we
1453
- // should still parse the enqueued buffer to maintain HPACK state between
1454
- // peers.
1455
- if (incoming_headers_.IsWaitingForContinuationFrame()) {
1456
- Http2Status result = incoming_headers_.ParseAndDiscardHeaders(
1457
- SliceBuffer(), /*is_end_headers=*/false, &stream,
1458
- /*original_status=*/Http2Status::Ok(),
1459
- settings_->acked().max_header_list_size());
1460
- if (result.GetType() == Http2Status::Http2ErrorType::kConnectionError) {
1461
- GRPC_HTTP2_CLIENT_DLOG
1462
- << "Http2ClientTransport::CloseStream for stream id: "
1463
- << stream.GetStreamId() << " failed to partially process header: "
1464
- << result.DebugString();
1465
- close_transport_error.emplace(std::move(result));
1466
- }
1467
- }
1468
-
1469
- stream_list_.erase(stream.GetStreamId());
1470
- if (!close_transport_error.has_value() && CanCloseTransportLocked()) {
1471
- // TODO(akshitpatel) : [PH2][P3] : Is kInternalError the right error
1472
- // code to use here? IMO it should be kNoError.
1473
- close_transport_error.emplace(Http2Status::Http2ConnectionError(
1474
- Http2ErrorCode::kInternalError,
1475
- std::string(RFC9113::kLastStreamClosed)));
1343
+ void Http2ClientTransport::HandleStreamStateChange(Stream& stream,
1344
+ StreamStateChange change) {
1345
+ if (change.reads_became_closed) {
1346
+ // If a stream is closing for reads and was actively waiting for a
1347
+ // continuation frame, parse the buffered HEADER/CONTINUATION frames
1348
+ if (read_context_.IsWaitingForContinuationFrame() &&
1349
+ read_context_.GetStreamId() == stream.GetStreamId()) {
1350
+ Http2Status result = read_context_.ParseAndDiscardHeaders(
1351
+ SliceBuffer(), /*is_end_headers=*/false,
1352
+ /*original_status=*/Http2Status::Ok(),
1353
+ settings_->acked().max_header_list_size());
1354
+ if (GPR_UNLIKELY(result.GetType() ==
1355
+ Http2Status::Http2ErrorType::kConnectionError)) {
1356
+ GRPC_HTTP2_CLIENT_DLOG
1357
+ << "Http2ClientTransport::HandleStreamStateChange (DiscardHeaders) "
1358
+ "for "
1359
+ "stream id: "
1360
+ << stream.GetStreamId()
1361
+ << " failed to partially process header: " << result.DebugString();
1362
+ GRPC_UNUSED absl::Status unused =
1363
+ HandleError(/*stream=*/nullptr, std::move(result));
1364
+ return;
1476
1365
  }
1477
1366
  }
1478
1367
  }
1479
-
1480
- if (close_transport_error.has_value()) {
1481
- GRPC_UNUSED absl::Status status = HandleError(
1482
- /*stream_id=*/std::nullopt, std::move(*close_transport_error));
1368
+ if (change.stream_became_closed) {
1369
+ CleanupStream(stream);
1483
1370
  }
1484
1371
  }
1485
1372
 
1486
- // This function is idempotent and MUST be called from the transport party.
1487
- // All the scenarios that can lead to this function being called are:
1488
- // 1. Reading a RST stream frame: In this case, the stream is immediately
1489
- // closed for reads and writes and removed from the stream_list_.
1490
- // 2. Reading a Trailing Metadata frame: There are two possible scenarios:
1491
- // a. The stream is closed for writes: Close the stream for reads and writes
1492
- // and remove the stream from the stream_list_.
1493
- // b. The stream is NOT closed for writes: Stream is kept open for reads and
1494
- // writes. CallHandler OnDone will trigger sending a half close frame. If
1495
- // before the multiplexer loop triggers sending a half close a RST stream
1496
- // is read, the stream is closed for reads and writes immediately and the
1497
- // half close is discarded. If no RST stream is read, the stream is closed
1498
- // for reads and writes upon sending the half close frame from the
1499
- // multiplexer loop.
1500
- // 3. Hitting error condition in the transport: In this case, RST stream is
1501
- // enqueued and the stream is closed for reads immediately. This implies we
1502
- // reduce the number of active streams inline. When multiplexer loop
1503
- // processes the RST stream frame, the stream ref will dropped. The other
1504
- // stream ref will be dropped when CallHandler's OnDone is executed causing
1505
- // the stream to be destroyed. CallHandlers OnDone also tries to enqueue a
1506
- // RST stream frame. This is a no-op at this point.
1507
- // 4. Application abort: In this case, CallHandler OnDone will enqueue RST
1508
- // stream frame to the stream data queue. The multiplexer loop will send the
1509
- // reset stream frame and close the stream from reads and writes.
1510
- // 5. Transport close: This takes up the same path as case 3.
1511
- // In all the above cases, trailing metadata is pushed to the call spine.
1512
- // Note: The stream ref is held in atmost 3 places:
1513
- // 1. stream_list_ : This is released when the stream is closed for reads.
1514
- // 2. CallHandler OnDone : This is released when Trailing Metadata is pushed to
1515
- // the call spine.
1516
- // 3. List of writable streams : This is released after the final frame is
1517
- // dequeued from the StreamDataQueue.
1373
+ void Http2ClientTransport::CleanupStream(Stream& stream) {
1374
+ MutexLock lock(&transport_mutex_);
1375
+ stream_list_.erase(stream.GetStreamId());
1376
+ }
1377
+
1518
1378
  void Http2ClientTransport::BeginCloseStream(
1519
- RefCountedPtr<Stream> stream,
1520
- std::optional<uint32_t> reset_stream_error_code,
1521
- ServerMetadataHandle&& metadata, DebugLocation whence) {
1379
+ RefCountedPtr<Stream> stream, uint32_t reset_stream_error_code,
1380
+ absl::Status trailing_metadata_status, DebugLocation whence) {
1381
+ GRPC_DCHECK(!trailing_metadata_status.ok());
1522
1382
  if (stream == nullptr) {
1523
1383
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::BeginCloseStream stream "
1524
1384
  "is null reset_stream_error_code="
1525
- << (reset_stream_error_code.has_value()
1526
- ? absl::StrCat(*reset_stream_error_code)
1527
- : "nullopt")
1528
- << " metadata=" << metadata->DebugString();
1385
+ << reset_stream_error_code;
1529
1386
  return;
1530
1387
  }
1531
1388
 
1532
1389
  GRPC_HTTP2_CLIENT_DLOG
1533
1390
  << "Http2ClientTransport::BeginCloseStream for stream id: "
1534
- << stream->GetStreamId() << " error_code="
1535
- << (reset_stream_error_code.has_value()
1536
- ? absl::StrCat(*reset_stream_error_code)
1537
- : "nullopt")
1538
- << " ServerMetadata=" << metadata->DebugString()
1539
- << " location=" << whence.file() << ":" << whence.line();
1540
-
1541
- bool close_reads = false;
1542
- bool close_writes = false;
1543
- if (metadata->get(GrpcCallWasCancelled())) {
1544
- if (!reset_stream_error_code) {
1545
- // Callers taking this path:
1546
- // 1. Reading a RST stream frame (will not send any frame out).
1547
- // 2. Closing a stream before initial metadata is sent.
1548
- close_reads = true;
1549
- close_writes = true;
1550
- GRPC_HTTP2_CLIENT_DLOG
1551
- << "Http2ClientTransport::BeginCloseStream for stream id: "
1552
- << stream->GetStreamId() << " close_reads= " << close_reads
1553
- << " close_writes= " << close_writes;
1554
- } else {
1555
- // Callers taking this path:
1556
- // 1. Processing Error in transport (will send reset stream from here).
1557
- absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1558
- stream->EnqueueResetStream(reset_stream_error_code.value());
1559
- GRPC_HTTP2_CLIENT_DLOG << "Enqueued ResetStream with error code="
1560
- << reset_stream_error_code.value()
1561
- << " status=" << enqueue_result.status();
1562
- if (enqueue_result.ok()) {
1563
- GRPC_UNUSED absl::Status status =
1564
- MaybeAddStreamToWritableStreamList(stream, enqueue_result.value());
1565
- }
1566
- close_reads = true;
1567
- GRPC_HTTP2_CLIENT_DLOG
1568
- << "Http2ClientTransport::BeginCloseStream for stream id: "
1569
- << stream->GetStreamId() << " close_reads= " << close_reads
1570
- << " close_writes= " << close_writes;
1571
- }
1572
- } else {
1573
- // Callers taking this path:
1574
- // 1. Reading Trailing Metadata (MAY send half close from OnDone).
1575
- // If a half close frame has already been sent, we should close the stream
1576
- // for reads and writes.
1577
- if (stream->IsHalfClosedLocal() || stream->IsStreamClosed()) {
1578
- close_reads = true;
1579
- close_writes = true;
1580
- GRPC_HTTP2_CLIENT_DLOG
1581
- << "Http2ClientTransport::BeginCloseStream for stream id: "
1582
- << stream->GetStreamId() << " close_reads= " << close_reads
1583
- << " close_writes= " << close_writes;
1584
- }
1585
- }
1586
-
1587
- if (close_reads || close_writes) {
1588
- CloseStream(*stream, CloseStreamArgs{close_reads, close_writes}, whence);
1589
- }
1590
-
1591
- // If the call was cancelled, the stream MUST be closed for reads.
1592
- GRPC_DCHECK(metadata->get(GrpcCallWasCancelled()) ? close_reads : true);
1593
-
1594
- // This maybe called multiple times while closing a stream. In CallV3, the
1595
- // flow for pushing server trailing metadata is idempotent. However, there is
1596
- // a subtle difference. When we push server trailing metadata with a cancelled
1597
- // status PushServerTrailingMetadata is spawned inline on the Call party
1598
- // whereas for the non-cancelled status, PushServerTrailingMetadata is
1599
- // spawned in the server_to_client spawn serializer. Because of this, in
1600
- // case when the server pushes trailing metadata (non-cancelled) followed by a
1601
- // RST stream with cancelled status, it is possible that the cancelled
1602
- // trailing metadata (for RST stream) is processed before. This would result
1603
- // in losing the actual status/message pushed by the server.
1604
- // To address this, we push the server trailing metadata to the stream only
1605
- // if it is not pushed already.
1606
- stream->MaybePushServerTrailingMetadata(std::move(metadata));
1391
+ << stream->GetStreamId() << " error_code=" << reset_stream_error_code
1392
+ << " status=" << trailing_metadata_status << " location=" << whence.file()
1393
+ << ":" << whence.line();
1394
+
1395
+ // Enqueue RST_STREAM.
1396
+ absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1397
+ stream->EnqueueResetStream(reset_stream_error_code);
1398
+ GRPC_HTTP2_CLIENT_DLOG << "Enqueued ResetStream with error code="
1399
+ << reset_stream_error_code
1400
+ << " status=" << enqueue_result.status();
1401
+ if (enqueue_result.ok()) {
1402
+ GRPC_UNUSED absl::Status status =
1403
+ MaybeAddStreamToWritableStreamList(stream, enqueue_result.value());
1404
+ }
1405
+ // Close reads immediately. Writes will be closed by the write loop after
1406
+ // the RST_STREAM frame is written.
1407
+ HandleStreamStateChange(*stream,
1408
+ stream->OnInitiateReset(trailing_metadata_status));
1409
+ read_context_.OnResetFrameEnqueued(reset_stream_error_code);
1607
1410
  }
1608
1411
 
1609
1412
  void Http2ClientTransport::CloseTransport() {
@@ -1661,8 +1464,7 @@ void Http2ClientTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
1661
1464
  self->BeginCloseStream(std::move(stream),
1662
1465
  Http2ErrorCodeToFrameErrorCode(
1663
1466
  http2_status.GetConnectionErrorCode()),
1664
- CancelledServerMetadataFromStatus(
1665
- http2_status.GetAbslConnectionError()));
1467
+ http2_status.GetAbslConnectionError());
1666
1468
  }
1667
1469
 
1668
1470
  // RFC9113 : A GOAWAY frame might not immediately precede closing of
@@ -1691,20 +1493,6 @@ void Http2ClientTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
1691
1493
  });
1692
1494
  }
1693
1495
 
1694
- bool Http2ClientTransport::CanCloseTransportLocked() const {
1695
- // If there are no more streams and next stream id is greater than the
1696
- // max allowed stream id, then no more streams can be created and it is
1697
- // safe to close the transport.
1698
- GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CanCloseTransportLocked "
1699
- "GetActiveStreamCountLocked="
1700
- << GetActiveStreamCountLocked()
1701
- << " PeekNextStreamId=" << PeekNextStreamId()
1702
- << " GetMaxAllowedStreamId="
1703
- << GetMaxAllowedStreamId();
1704
- return GetActiveStreamCountLocked() == 0 &&
1705
- PeekNextStreamId() > GetMaxAllowedStreamId();
1706
- }
1707
-
1708
1496
  Http2ClientTransport::~Http2ClientTransport() {
1709
1497
  GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::~Http2ClientTransport Begin";
1710
1498
  GRPC_DCHECK(stream_list_.empty());
@@ -1726,6 +1514,8 @@ void Http2ClientTransport::SpawnAddChannelzData(RefCountedPtr<Party> party,
1726
1514
  .Set("keepalive_time", self->keepalive_time_)
1727
1515
  .Set("keepalive_permit_without_calls",
1728
1516
  self->keepalive_permit_without_calls_)
1517
+ .Set("max_requests_per_read",
1518
+ self->read_context_.max_new_streams_per_read_cycle())
1729
1519
  .Set("settings", self->settings_->ChannelzProperties())
1730
1520
  .Set("flow_control",
1731
1521
  self->flow_control_.stats().ChannelzProperties()));
@@ -1777,8 +1567,8 @@ RefCountedPtr<channelz::SocketNode> Http2ClientTransport::GetSocketNode()
1777
1567
 
1778
1568
  absl::StatusOr<uint32_t> Http2ClientTransport::NextStreamId() {
1779
1569
  if (next_stream_id_ > GetMaxAllowedStreamId()) {
1780
- // TODO(tjagtap) : [PH2][P3] : Handle case if transport runs out of stream
1781
- // ids
1570
+ // TODO(tjagtap) : [PH2][P2] : Handle case if transport runs out of stream
1571
+ // ids. Similar check is there in the same function. Check what to do.
1782
1572
  // RFC9113 : Stream identifiers cannot be reused. Long-lived connections
1783
1573
  // can result in an endpoint exhausting the available range of stream
1784
1574
  // identifiers. A client that is unable to establish a new stream
@@ -1824,16 +1614,16 @@ absl::Status Http2ClientTransport::MaybeAddStreamToWritableStreamList(
1824
1614
  << "Http2ClientTransport::MaybeAddStreamToWritableStreamList Stream "
1825
1615
  "id: "
1826
1616
  << stream->GetStreamId() << " became writable";
1827
- // TODO(akshitpatel) [Perf]: Might be worth exploring if this funciton
1828
- // should take a raw stream ptr and take a ref here.
1617
+ // TODO(akshitpatel) [PH2][P4][Perf]: Might be worth exploring if this
1618
+ // function should take a raw stream ptr and take a ref here.
1829
1619
  absl::Status status =
1830
1620
  writable_stream_list_.Enqueue(std::move(stream), result.priority);
1831
1621
  if (!status.ok()) {
1832
1622
  return HandleError(
1833
- std::nullopt,
1623
+ /*stream=*/nullptr,
1834
1624
  Http2Status::Http2ConnectionError(
1835
1625
  Http2ErrorCode::kRefusedStream,
1836
- "Failed to enqueue stream to writable stream list"));
1626
+ std::string(GrpcErrors::kFailedToEnqueueStream)));
1837
1627
  }
1838
1628
  }
1839
1629
  return absl::OkStatus();
@@ -1932,14 +1722,10 @@ void Http2ClientTransport::SetMaxAllowedStreamId(
1932
1722
  if (GPR_LIKELY(max_allowed_stream_id <= old_max_allowed_stream_id)) {
1933
1723
  max_allowed_stream_id_ = max_allowed_stream_id;
1934
1724
  } else {
1725
+ GRPC_DCHECK_LE(max_allowed_stream_id, old_max_allowed_stream_id);
1935
1726
  LOG_IF(ERROR, max_allowed_stream_id > old_max_allowed_stream_id)
1936
1727
  << "Endpoints MUST NOT increase the value they send in the last "
1937
- "stream "
1938
- "identifier";
1939
- GRPC_DCHECK_LE(max_allowed_stream_id, old_max_allowed_stream_id)
1940
- << "Endpoints MUST NOT increase the value they send in the last "
1941
- "stream "
1942
- "identifier";
1728
+ "stream identifier";
1943
1729
  }
1944
1730
  }
1945
1731
 
@@ -1968,7 +1754,7 @@ auto Http2ClientTransport::CallOutboundLoop(RefCountedPtr<Stream> stream) {
1968
1754
  if (GPR_UNLIKELY(!enqueue_result.ok())) {
1969
1755
  return enqueue_result.status();
1970
1756
  }
1971
- GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport CallOutboundLoop "
1757
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CallOutboundLoop "
1972
1758
  "Enqueued Initial Metadata";
1973
1759
  return MaybeAddStreamToWritableStreamList(std::move(stream),
1974
1760
  enqueue_result.value());
@@ -1980,7 +1766,7 @@ auto Http2ClientTransport::CallOutboundLoop(RefCountedPtr<Stream> stream) {
1980
1766
  if (GPR_UNLIKELY(!enqueue_result.ok())) {
1981
1767
  return enqueue_result.status();
1982
1768
  }
1983
- GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport CallOutboundLoop "
1769
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CallOutboundLoop "
1984
1770
  "Enqueued Half Closed";
1985
1771
  return MaybeAddStreamToWritableStreamList(std::move(stream),
1986
1772
  enqueue_result.value());
@@ -2004,15 +1790,31 @@ auto Http2ClientTransport::CallOutboundLoop(RefCountedPtr<Stream> stream) {
2004
1790
  [send_half_closed = std::move(send_half_closed)]() mutable {
2005
1791
  return std::move(send_half_closed)();
2006
1792
  },
2007
- [stream]() mutable {
1793
+ [this, stream]() mutable {
2008
1794
  return Map(
2009
- stream->GetCallHandler().WasCancelled(), [](bool cancelled) {
1795
+ stream->GetCallHandler().WasCancelled(),
1796
+ [this, stream](bool cancelled) mutable {
2010
1797
  GRPC_HTTP2_CLIENT_DLOG
2011
1798
  << "Http2ClientTransport::CallOutboundLoop End with "
2012
1799
  "cancelled="
2013
1800
  << cancelled;
2014
- return (cancelled) ? absl::CancelledError()
2015
- : absl::OkStatus();
1801
+ if (cancelled) {
1802
+ // Enqueue an RST_STREAM frame immediately upon call
1803
+ // cancellation rather than waiting for CallHandler::OnDone.
1804
+ absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1805
+ stream->EnqueueResetStream(
1806
+ static_cast<uint32_t>(Http2ErrorCode::kCancel));
1807
+ GRPC_HTTP2_CLIENT_DLOG
1808
+ << "Enqueued ResetStream with error code="
1809
+ << static_cast<uint32_t>(Http2ErrorCode::kCancel)
1810
+ << " status=" << enqueue_result.status();
1811
+ if (GPR_LIKELY(enqueue_result.ok())) {
1812
+ GRPC_UNUSED absl::Status status =
1813
+ MaybeAddStreamToWritableStreamList(
1814
+ std::move(stream), enqueue_result.value());
1815
+ }
1816
+ }
1817
+ return absl::OkStatus();
2016
1818
  });
2017
1819
  }));
2018
1820
  }
@@ -2112,7 +1914,7 @@ Http2ClientTransport::PingSystemInterfaceImpl::PingTimeout() {
2112
1914
  // kRefusedStream doesn't seem to fit this case. We should revisit this
2113
1915
  // and update the error code.
2114
1916
  return Immediate(transport_->HandleError(
2115
- std::nullopt,
1917
+ nullptr,
2116
1918
  Http2Status::Http2ConnectionError(Http2ErrorCode::kRefusedStream,
2117
1919
  GRPC_CHTTP2_PING_TIMEOUT_STR)));
2118
1920
  }
@@ -2144,7 +1946,7 @@ Http2ClientTransport::KeepAliveInterfaceImpl::OnKeepAliveTimeout() {
2144
1946
  // kRefusedStream doesn't seem to fit this case. We should revisit this
2145
1947
  // and update the error code.
2146
1948
  return Immediate(transport_->HandleError(
2147
- std::nullopt,
1949
+ nullptr,
2148
1950
  Http2Status::Http2ConnectionError(Http2ErrorCode::kRefusedStream,
2149
1951
  GRPC_CHTTP2_KEEPALIVE_TIMEOUT_STR)));
2150
1952
  }
@@ -2177,7 +1979,7 @@ uint32_t Http2ClientTransport::GoawayInterfaceImpl::GetLastAcceptedStreamId() {
2177
1979
  // TODO(akshitpatel) : [PH2][P2] : Eventually there should be a separate ref
2178
1980
  // counted struct/class passed to all the transport promises/members. This
2179
1981
  // will help removing back references from the transport members to
2180
- // transport and greatly simpilfy the cleanup path. Need to do this for
1982
+ // transport and greatly simplify the cleanup path. Need to do this for
2181
1983
  // PingSystemInterfaceImpl, KeepAliveInterfaceImpl and GoawayInterfaceImpl.
2182
1984
 
2183
1985
  } // namespace http2