grpc 1.75.0 → 1.78.1

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 (839) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +24 -5
  3. data/include/grpc/credentials.h +27 -6
  4. data/include/grpc/event_engine/memory_allocator.h +2 -0
  5. data/include/grpc/event_engine/memory_request.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +5 -0
  7. data/include/grpc/support/metrics.h +7 -1
  8. data/src/core/call/call_filters.cc +5 -5
  9. data/src/core/call/call_filters.h +211 -37
  10. data/src/core/call/call_spine.cc +1 -1
  11. data/src/core/call/call_spine.h +54 -32
  12. data/src/core/call/channelz_context.h +30 -0
  13. data/src/core/call/client_call.cc +49 -10
  14. data/src/core/call/client_call.h +6 -3
  15. data/src/core/call/filter_fusion.h +9 -9
  16. data/src/core/call/interception_chain.h +7 -6
  17. data/src/core/call/metadata_batch.cc +49 -55
  18. data/src/core/call/metadata_batch.h +10 -9
  19. data/src/core/call/metadata_info.cc +1 -1
  20. data/src/core/call/parsed_metadata.h +2 -2
  21. data/src/core/call/request_buffer.cc +1 -1
  22. data/src/core/call/security_context.cc +2 -2
  23. data/src/core/call/security_context.h +1 -1
  24. data/src/core/call/server_call.cc +5 -5
  25. data/src/core/call/server_call.h +6 -4
  26. data/src/core/call/simple_slice_based_metadata.h +1 -1
  27. data/src/core/call/status_util.cc +1 -1
  28. data/src/core/channelz/channel_trace.cc +1 -1
  29. data/src/core/channelz/channel_trace.h +3 -3
  30. data/src/core/channelz/channelz.cc +25 -29
  31. data/src/core/channelz/channelz.h +73 -22
  32. data/src/core/channelz/channelz_registry.cc +2 -2
  33. data/src/core/channelz/channelz_registry.h +53 -2
  34. data/src/core/channelz/property_list.cc +18 -0
  35. data/src/core/channelz/property_list.h +15 -4
  36. data/src/core/channelz/text_encode.cc +66 -0
  37. data/src/core/channelz/text_encode.h +29 -0
  38. data/src/core/channelz/v2tov1/convert.cc +17 -6
  39. data/src/core/channelz/v2tov1/legacy_api.cc +18 -12
  40. data/src/core/channelz/v2tov1/property_list.cc +2 -1
  41. data/src/core/channelz/ztrace_collector.h +260 -87
  42. data/src/core/client_channel/backup_poller.cc +7 -8
  43. data/src/core/client_channel/buffered_call.cc +140 -0
  44. data/src/core/client_channel/buffered_call.h +104 -0
  45. data/src/core/client_channel/client_channel.cc +144 -84
  46. data/src/core/client_channel/client_channel.h +8 -11
  47. data/src/core/client_channel/client_channel_factory.h +1 -1
  48. data/src/core/client_channel/client_channel_filter.cc +424 -686
  49. data/src/core/client_channel/client_channel_filter.h +57 -150
  50. data/src/core/client_channel/client_channel_internal.h +8 -5
  51. data/src/core/client_channel/client_channel_service_config.cc +43 -3
  52. data/src/core/client_channel/client_channel_service_config.h +12 -1
  53. data/src/core/client_channel/config_selector.h +5 -5
  54. data/src/core/client_channel/connector.h +2 -0
  55. data/src/core/client_channel/dynamic_filters.cc +5 -5
  56. data/src/core/client_channel/global_subchannel_pool.cc +0 -37
  57. data/src/core/client_channel/global_subchannel_pool.h +1 -28
  58. data/src/core/client_channel/lb_metadata.h +1 -1
  59. data/src/core/client_channel/load_balanced_call_destination.cc +10 -12
  60. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  61. data/src/core/client_channel/local_subchannel_pool.cc +4 -4
  62. data/src/core/client_channel/retry_filter.cc +2 -2
  63. data/src/core/client_channel/retry_filter.h +3 -3
  64. data/src/core/client_channel/retry_filter_legacy_call_data.cc +11 -12
  65. data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
  66. data/src/core/client_channel/retry_service_config.cc +3 -3
  67. data/src/core/client_channel/retry_service_config.h +1 -1
  68. data/src/core/client_channel/subchannel.cc +114 -25
  69. data/src/core/client_channel/subchannel.h +24 -8
  70. data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
  71. data/src/core/client_channel/subchannel_pool_interface.h +1 -1
  72. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  73. data/src/core/client_channel/subchannel_stream_client.h +3 -3
  74. data/src/core/config/config_vars.cc +38 -3
  75. data/src/core/config/config_vars.h +26 -0
  76. data/src/core/config/core_configuration.cc +5 -5
  77. data/src/core/config/core_configuration.h +8 -8
  78. data/src/core/config/load_config.cc +13 -1
  79. data/src/core/config/load_config.h +2 -0
  80. data/src/core/credentials/call/call_credentials.h +4 -4
  81. data/src/core/credentials/call/call_creds_registry.h +1 -1
  82. data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
  83. data/src/core/credentials/call/call_creds_util.cc +7 -6
  84. data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
  85. data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
  86. data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
  87. data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
  88. data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
  89. data/src/core/credentials/call/external/external_account_credentials.h +1 -1
  90. data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
  91. data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
  92. data/src/core/credentials/call/external/url_external_account_credentials.cc +7 -7
  93. data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
  94. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
  95. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
  96. data/src/core/credentials/call/iam/iam_credentials.cc +6 -6
  97. data/src/core/credentials/call/iam/iam_credentials.h +1 -1
  98. data/src/core/credentials/call/json_util.cc +1 -1
  99. data/src/core/credentials/call/jwt/json_token.cc +7 -7
  100. data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
  101. data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
  102. data/src/core/credentials/call/jwt/jwt_verifier.cc +19 -18
  103. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
  104. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
  105. data/src/core/credentials/call/jwt_util.cc +3 -3
  106. data/src/core/credentials/call/jwt_util.h +1 -1
  107. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +49 -72
  108. data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
  109. data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
  110. data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
  111. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
  112. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
  113. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -5
  114. data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -15
  115. data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
  116. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +23 -3
  117. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
  118. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
  119. data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
  120. data/src/core/credentials/transport/channel_creds_registry.h +1 -1
  121. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  122. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +7 -7
  123. data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
  124. data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
  125. data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
  126. data/src/core/credentials/transport/fake/fake_security_connector.cc +7 -7
  127. data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
  128. data/src/core/credentials/transport/google_default/google_default_credentials.cc +83 -39
  129. data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
  130. data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
  131. data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
  132. data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
  133. data/src/core/credentials/transport/security_connector.cc +6 -6
  134. data/src/core/credentials/transport/security_connector.h +2 -2
  135. data/src/core/credentials/transport/ssl/ssl_credentials.cc +13 -13
  136. data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
  137. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -8
  138. data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
  139. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
  140. data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
  141. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -25
  142. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
  143. data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
  144. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +8 -8
  145. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -5
  146. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  147. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
  148. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
  149. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
  150. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
  151. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
  152. data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
  153. data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
  154. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -13
  155. data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
  156. data/src/core/credentials/transport/tls/tls_credentials.cc +3 -3
  157. data/src/core/credentials/transport/tls/tls_security_connector.cc +15 -15
  158. data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
  159. data/src/core/credentials/transport/transport_credentials.cc +3 -3
  160. data/src/core/credentials/transport/transport_credentials.h +4 -4
  161. data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
  162. data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
  163. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
  164. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
  165. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +6 -4
  166. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
  167. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
  168. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
  169. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
  170. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  171. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
  172. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  173. data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
  174. data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
  175. data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
  176. data/src/core/ext/filters/http/client_authority_filter.h +4 -1
  177. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
  178. data/src/core/ext/filters/http/message_compress/compression_filter.cc +11 -11
  179. data/src/core/ext/filters/http/message_compress/compression_filter.h +24 -5
  180. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  181. data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
  182. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
  183. data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
  184. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  185. data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
  186. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  187. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  188. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +14 -14
  189. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
  190. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  191. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
  192. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +58 -44
  193. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
  194. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +25 -24
  195. data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
  196. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
  197. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +306 -148
  199. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
  200. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -7
  201. data/src/core/ext/transport/chttp2/transport/flow_control.h +223 -83
  202. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
  203. data/src/core/ext/transport/chttp2/transport/frame.cc +175 -27
  204. data/src/core/ext/transport/chttp2/transport/frame.h +58 -10
  205. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  206. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  207. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
  208. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -6
  209. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  210. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
  211. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  213. data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
  214. data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
  215. data/src/core/ext/transport/chttp2/transport/header_assembler.h +194 -54
  216. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +3 -3
  217. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -6
  218. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
  219. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
  220. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
  221. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +34 -34
  222. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
  223. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -8
  224. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
  225. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1475 -632
  226. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +384 -373
  227. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  228. data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
  229. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -3
  230. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -5
  231. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
  232. data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
  233. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +337 -30
  234. data/src/core/ext/transport/chttp2/transport/http2_transport.h +196 -21
  235. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +172 -72
  236. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
  237. data/src/core/ext/transport/chttp2/transport/internal.h +31 -19
  238. data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
  239. data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
  240. data/src/core/ext/transport/chttp2/transport/message_assembler.h +30 -21
  241. data/src/core/ext/transport/chttp2/transport/parsing.cc +25 -23
  242. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  243. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
  244. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +70 -28
  245. data/src/core/ext/transport/chttp2/transport/ping_promise.h +63 -23
  246. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
  247. data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
  248. data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
  249. data/src/core/ext/transport/chttp2/transport/stream.h +287 -0
  250. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +476 -208
  251. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +8 -8
  252. data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
  253. data/src/core/ext/transport/chttp2/transport/transport_common.h +57 -0
  254. data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
  255. data/src/core/ext/transport/chttp2/transport/writable_streams.h +202 -84
  256. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
  257. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
  258. data/src/core/ext/transport/inproc/inproc_transport.cc +9 -3
  259. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +11 -8
  260. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
  261. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
  262. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
  263. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
  264. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
  267. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
  268. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
  269. data/src/core/filter/auth/auth_filters.h +7 -1
  270. data/src/core/filter/auth/client_auth_filter.cc +2 -2
  271. data/src/core/filter/auth/server_auth_filter.cc +5 -5
  272. data/src/core/filter/blackboard.h +2 -2
  273. data/src/core/filter/filter_args.h +40 -2
  274. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
  275. data/src/core/handshaker/handshaker.cc +8 -8
  276. data/src/core/handshaker/handshaker.h +2 -2
  277. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
  278. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +12 -12
  279. data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
  280. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
  282. data/src/core/handshaker/proxy_mapper.h +1 -1
  283. data/src/core/handshaker/proxy_mapper_registry.h +1 -1
  284. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -6
  285. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +38 -15
  286. data/src/core/handshaker/security/secure_endpoint.cc +31 -11
  287. data/src/core/handshaker/security/security_handshaker.cc +11 -8
  288. data/src/core/handshaker/security/security_handshaker.h +1 -1
  289. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -6
  290. data/src/core/lib/address_utils/parse_address.cc +5 -5
  291. data/src/core/lib/address_utils/parse_address.h +2 -2
  292. data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
  293. data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
  294. data/src/core/lib/channel/channel_args.cc +1 -1
  295. data/src/core/lib/channel/channel_args.h +2 -2
  296. data/src/core/lib/channel/channel_stack.cc +29 -25
  297. data/src/core/lib/channel/channel_stack.h +8 -3
  298. data/src/core/lib/channel/channel_stack_builder.cc +8 -4
  299. data/src/core/lib/channel/channel_stack_builder.h +10 -9
  300. data/src/core/lib/channel/channel_stack_builder_impl.cc +8 -13
  301. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
  302. data/src/core/lib/channel/connected_channel.cc +4 -4
  303. data/src/core/lib/channel/promise_based_filter.cc +132 -72
  304. data/src/core/lib/channel/promise_based_filter.h +39 -23
  305. data/src/core/lib/compression/compression_internal.cc +6 -6
  306. data/src/core/lib/compression/compression_internal.h +1 -1
  307. data/src/core/lib/compression/message_compress.cc +8 -8
  308. data/src/core/lib/debug/trace.cc +2 -5
  309. data/src/core/lib/debug/trace.h +10 -0
  310. data/src/core/lib/debug/trace_flags.cc +2 -2
  311. data/src/core/lib/debug/trace_flags.h +1 -1
  312. data/src/core/lib/event_engine/ares_resolver.cc +30 -28
  313. data/src/core/lib/event_engine/ares_resolver.h +4 -4
  314. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -3
  315. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
  316. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
  317. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +4 -4
  318. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
  319. data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
  320. data/src/core/lib/event_engine/default_event_engine.cc +1 -1
  321. data/src/core/lib/event_engine/event_engine.cc +1 -1
  322. data/src/core/lib/event_engine/extensions/channelz.h +3 -3
  323. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
  324. data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
  325. data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
  326. data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
  327. data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
  328. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -12
  329. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
  330. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -15
  331. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  332. data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
  333. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  334. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
  335. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
  336. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
  337. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
  338. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
  339. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
  340. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
  341. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
  342. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -27
  343. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -17
  344. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +175 -177
  345. data/src/core/lib/event_engine/posix_engine/posix_engine.h +40 -61
  346. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +11 -7
  347. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
  348. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +9 -9
  349. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
  350. data/src/core/lib/event_engine/posix_engine/posix_interface.h +2 -2
  351. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
  352. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  353. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
  354. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  355. data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
  356. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -4
  357. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  358. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
  359. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
  360. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
  361. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  362. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
  363. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  364. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
  365. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
  366. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
  367. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
  368. data/src/core/lib/event_engine/resolved_address.cc +3 -3
  369. data/src/core/lib/event_engine/shim.cc +8 -11
  370. data/src/core/lib/event_engine/shim.h +2 -1
  371. data/src/core/lib/event_engine/slice.cc +2 -2
  372. data/src/core/lib/event_engine/tcp_socket_utils.cc +15 -15
  373. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  374. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  375. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +11 -11
  376. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
  377. data/src/core/lib/event_engine/utils.cc +3 -3
  378. data/src/core/lib/event_engine/utils.h +1 -1
  379. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +32 -32
  380. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
  381. data/src/core/lib/event_engine/windows/iocp.cc +11 -11
  382. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  383. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
  384. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  385. data/src/core/lib/event_engine/windows/win_socket.h +2 -2
  386. data/src/core/lib/event_engine/windows/windows_endpoint.cc +16 -16
  387. data/src/core/lib/event_engine/windows/windows_engine.cc +20 -18
  388. data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
  389. data/src/core/lib/event_engine/windows/windows_listener.cc +10 -10
  390. data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
  391. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
  392. data/src/core/lib/experiments/config.cc +4 -4
  393. data/src/core/lib/experiments/experiments.cc +255 -42
  394. data/src/core/lib/experiments/experiments.h +105 -21
  395. data/src/core/lib/iomgr/buffer_list.cc +1 -1
  396. data/src/core/lib/iomgr/call_combiner.cc +4 -4
  397. data/src/core/lib/iomgr/call_combiner.h +2 -2
  398. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  399. data/src/core/lib/iomgr/closure.h +2 -2
  400. data/src/core/lib/iomgr/combiner.cc +2 -2
  401. data/src/core/lib/iomgr/endpoint.h +1 -1
  402. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -7
  403. data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
  404. data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
  405. data/src/core/lib/iomgr/error.cc +1 -1
  406. data/src/core/lib/iomgr/error.h +2 -2
  407. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  408. data/src/core/lib/iomgr/ev_apple.cc +1 -1
  409. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  410. data/src/core/lib/iomgr/ev_poll_posix.cc +14 -14
  411. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  412. data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
  413. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
  414. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +10 -9
  415. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
  416. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
  417. data/src/core/lib/iomgr/exec_ctx.cc +3 -3
  418. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  419. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  420. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  421. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  422. data/src/core/lib/iomgr/iomgr.cc +1 -1
  423. data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
  424. data/src/core/lib/iomgr/lockfree_event.cc +3 -3
  425. data/src/core/lib/iomgr/polling_entity.cc +4 -4
  426. data/src/core/lib/iomgr/resolve_address.cc +1 -1
  427. data/src/core/lib/iomgr/resolve_address.h +2 -2
  428. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
  429. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  430. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
  431. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -4
  432. data/src/core/lib/iomgr/socket_windows.cc +6 -6
  433. data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
  434. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -7
  435. data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
  436. data/src/core/lib/iomgr/tcp_posix.cc +47 -47
  437. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  438. data/src/core/lib/iomgr/tcp_server.h +7 -0
  439. data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
  440. data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
  441. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
  442. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
  443. data/src/core/lib/iomgr/tcp_server_windows.cc +70 -31
  444. data/src/core/lib/iomgr/tcp_windows.cc +8 -8
  445. data/src/core/lib/iomgr/timer_generic.cc +5 -5
  446. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  447. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  448. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
  449. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
  450. data/src/core/lib/iomgr/vsock.cc +1 -1
  451. data/src/core/lib/iomgr/vsock.h +1 -1
  452. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
  453. data/src/core/lib/promise/activity.cc +3 -3
  454. data/src/core/lib/promise/activity.h +11 -10
  455. data/src/core/lib/promise/all_ok.h +3 -3
  456. data/src/core/lib/promise/arena_promise.h +47 -6
  457. data/src/core/lib/promise/context.h +3 -3
  458. data/src/core/lib/promise/detail/join_state.h +10 -10
  459. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  460. data/src/core/lib/promise/detail/promise_like.h +1 -1
  461. data/src/core/lib/promise/detail/seq_state.h +16 -16
  462. data/src/core/lib/promise/detail/status.h +2 -2
  463. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
  464. data/src/core/lib/promise/for_each.h +8 -8
  465. data/src/core/lib/promise/if.h +1 -1
  466. data/src/core/lib/promise/inter_activity_latch.h +3 -3
  467. data/src/core/lib/promise/inter_activity_mutex.h +1 -1
  468. data/src/core/lib/promise/interceptor_list.h +5 -5
  469. data/src/core/lib/promise/latch.h +9 -9
  470. data/src/core/lib/promise/loop.h +2 -2
  471. data/src/core/lib/promise/map.h +2 -2
  472. data/src/core/lib/promise/mpsc.cc +31 -30
  473. data/src/core/lib/promise/mpsc.h +2 -2
  474. data/src/core/lib/promise/observable.h +6 -6
  475. data/src/core/lib/promise/party.cc +43 -30
  476. data/src/core/lib/promise/party.h +27 -23
  477. data/src/core/lib/promise/pipe.h +31 -17
  478. data/src/core/lib/promise/poll.h +6 -5
  479. data/src/core/lib/promise/promise.h +2 -4
  480. data/src/core/lib/promise/sleep.cc +3 -1
  481. data/src/core/lib/promise/sleep.h +1 -1
  482. data/src/core/lib/promise/status_flag.h +8 -8
  483. data/src/core/lib/promise/try_join.h +5 -5
  484. data/src/core/lib/promise/try_seq.h +5 -5
  485. data/src/core/lib/promise/wait_set.h +2 -2
  486. data/src/core/lib/resource_quota/api.cc +1 -1
  487. data/src/core/lib/resource_quota/arena.cc +1 -1
  488. data/src/core/lib/resource_quota/arena.h +15 -2
  489. data/src/core/lib/resource_quota/connection_quota.cc +9 -7
  490. data/src/core/lib/resource_quota/connection_quota.h +1 -1
  491. data/src/core/lib/resource_quota/memory_quota.cc +48 -27
  492. data/src/core/lib/resource_quota/memory_quota.h +56 -20
  493. data/src/core/lib/resource_quota/periodic_update.h +1 -1
  494. data/src/core/lib/resource_quota/resource_quota.cc +8 -0
  495. data/src/core/lib/resource_quota/resource_quota.h +2 -1
  496. data/src/core/lib/resource_quota/stream_quota.cc +22 -0
  497. data/src/core/lib/resource_quota/stream_quota.h +31 -0
  498. data/src/core/lib/resource_quota/telemetry.h +55 -0
  499. data/src/core/lib/resource_quota/thread_quota.cc +2 -2
  500. data/src/core/lib/resource_quota/thread_quota.h +1 -1
  501. data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
  502. data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
  503. data/src/core/lib/security/authorization/audit_logging.cc +7 -7
  504. data/src/core/lib/security/authorization/audit_logging.h +1 -1
  505. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  506. data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
  507. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  508. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
  509. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
  510. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
  511. data/src/core/lib/security/authorization/matchers.cc +2 -2
  512. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  513. data/src/core/lib/slice/percent_encoding.cc +1 -1
  514. data/src/core/lib/slice/slice.cc +1 -1
  515. data/src/core/lib/slice/slice.h +2 -2
  516. data/src/core/lib/slice/slice_buffer.cc +1 -1
  517. data/src/core/lib/slice/slice_internal.h +1 -1
  518. data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
  519. data/src/core/lib/surface/call.cc +58 -28
  520. data/src/core/lib/surface/call.h +13 -6
  521. data/src/core/lib/surface/call_log_batch.cc +2 -2
  522. data/src/core/lib/surface/call_utils.cc +7 -7
  523. data/src/core/lib/surface/call_utils.h +85 -20
  524. data/src/core/lib/surface/channel.cc +6 -5
  525. data/src/core/lib/surface/channel.h +13 -3
  526. data/src/core/lib/surface/channel_create.cc +12 -8
  527. data/src/core/lib/surface/channel_create.h +1 -1
  528. data/src/core/lib/surface/channel_init.cc +84 -27
  529. data/src/core/lib/surface/channel_init.h +30 -13
  530. data/src/core/lib/surface/completion_queue.cc +21 -20
  531. data/src/core/lib/surface/completion_queue_factory.cc +7 -7
  532. data/src/core/lib/surface/connection_context.h +45 -2
  533. data/src/core/lib/surface/filter_stack_call.cc +25 -31
  534. data/src/core/lib/surface/filter_stack_call.h +6 -7
  535. data/src/core/lib/surface/init.cc +4 -4
  536. data/src/core/lib/surface/lame_client.cc +2 -2
  537. data/src/core/lib/surface/lame_client.h +3 -3
  538. data/src/core/lib/surface/legacy_channel.cc +10 -10
  539. data/src/core/lib/surface/legacy_channel.h +1 -1
  540. data/src/core/lib/surface/validate_metadata.cc +2 -2
  541. data/src/core/lib/surface/validate_metadata.h +3 -3
  542. data/src/core/lib/surface/version.cc +2 -2
  543. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  544. data/src/core/lib/transport/bdp_estimator.h +5 -5
  545. data/src/core/lib/transport/connectivity_state.cc +1 -1
  546. data/src/core/lib/transport/connectivity_state.h +2 -2
  547. data/src/core/lib/transport/error_utils.h +1 -1
  548. data/src/core/lib/transport/promise_endpoint.cc +4 -4
  549. data/src/core/lib/transport/promise_endpoint.h +11 -11
  550. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  551. data/src/core/lib/transport/transport.cc +3 -3
  552. data/src/core/lib/transport/transport.h +62 -4
  553. data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
  554. data/src/core/lib/transport/transport_op_string.cc +2 -2
  555. data/src/core/load_balancing/address_filtering.cc +1 -1
  556. data/src/core/load_balancing/address_filtering.h +2 -2
  557. data/src/core/load_balancing/backend_metric_parser.cc +1 -1
  558. data/src/core/load_balancing/backend_metric_parser.h +1 -1
  559. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  560. data/src/core/load_balancing/child_policy_handler.h +2 -2
  561. data/src/core/load_balancing/delegating_helper.h +2 -2
  562. data/src/core/load_balancing/endpoint_list.cc +6 -6
  563. data/src/core/load_balancing/endpoint_list.h +2 -2
  564. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
  565. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
  566. data/src/core/load_balancing/grpclb/grpclb.cc +37 -48
  567. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
  568. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  569. data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
  570. data/src/core/load_balancing/health_check_client.cc +13 -9
  571. data/src/core/load_balancing/health_check_client_internal.h +5 -5
  572. data/src/core/load_balancing/lb_policy.h +11 -8
  573. data/src/core/load_balancing/lb_policy_factory.h +2 -2
  574. data/src/core/load_balancing/lb_policy_registry.cc +3 -3
  575. data/src/core/load_balancing/lb_policy_registry.h +2 -2
  576. data/src/core/load_balancing/oob_backend_metric.cc +11 -7
  577. data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
  578. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +9 -17
  579. data/src/core/load_balancing/pick_first/pick_first.cc +62 -32
  580. data/src/core/load_balancing/priority/priority.cc +29 -30
  581. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
  582. data/src/core/load_balancing/rls/rls.cc +23 -23
  583. data/src/core/load_balancing/round_robin/round_robin.cc +16 -16
  584. data/src/core/load_balancing/subchannel_interface.h +2 -2
  585. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
  586. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +42 -41
  587. data/src/core/load_balancing/weighted_target/weighted_target.cc +14 -14
  588. data/src/core/load_balancing/xds/cds.cc +81 -37
  589. data/src/core/load_balancing/xds/xds_cluster_impl.cc +24 -41
  590. data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
  591. data/src/core/load_balancing/xds/xds_override_host.cc +14 -14
  592. data/src/core/load_balancing/xds/xds_override_host.h +1 -1
  593. data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
  594. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
  595. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
  596. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  597. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  598. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +35 -35
  599. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +16 -16
  600. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
  601. data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
  602. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
  603. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
  604. data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
  605. data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
  606. data/src/core/resolver/endpoint_addresses.cc +6 -6
  607. data/src/core/resolver/endpoint_addresses.h +4 -1
  608. data/src/core/resolver/fake/fake_resolver.cc +3 -3
  609. data/src/core/resolver/fake/fake_resolver.h +3 -3
  610. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
  611. data/src/core/resolver/polling_resolver.cc +8 -8
  612. data/src/core/resolver/polling_resolver.h +1 -1
  613. data/src/core/resolver/resolver.h +2 -2
  614. data/src/core/resolver/resolver_factory.h +2 -2
  615. data/src/core/resolver/resolver_registry.cc +5 -4
  616. data/src/core/resolver/resolver_registry.h +1 -1
  617. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  618. data/src/core/resolver/xds/xds_config.cc +1 -1
  619. data/src/core/resolver/xds/xds_config.h +3 -3
  620. data/src/core/resolver/xds/xds_dependency_manager.cc +7 -7
  621. data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
  622. data/src/core/resolver/xds/xds_resolver.cc +25 -22
  623. data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
  624. data/src/core/server/add_port.cc +2 -2
  625. data/src/core/server/server.cc +47 -43
  626. data/src/core/server/server.h +8 -7
  627. data/src/core/server/server_call_tracer_filter.cc +1 -1
  628. data/src/core/server/server_call_tracer_filter.h +9 -5
  629. data/src/core/server/server_config_selector.h +2 -2
  630. data/src/core/server/server_config_selector_filter.cc +5 -5
  631. data/src/core/server/xds_channel_stack_modifier.cc +3 -2
  632. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  633. data/src/core/server/xds_server_config_fetcher.cc +19 -18
  634. data/src/core/service_config/service_config.h +1 -1
  635. data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
  636. data/src/core/service_config/service_config_impl.cc +3 -3
  637. data/src/core/service_config/service_config_impl.h +4 -4
  638. data/src/core/service_config/service_config_parser.h +1 -1
  639. data/src/core/telemetry/call_tracer.cc +39 -49
  640. data/src/core/telemetry/call_tracer.h +201 -24
  641. data/src/core/telemetry/default_tcp_tracer.h +3 -3
  642. data/src/core/telemetry/histogram.h +205 -0
  643. data/src/core/telemetry/instrument.cc +999 -0
  644. data/src/core/telemetry/instrument.h +1105 -0
  645. data/src/core/telemetry/metrics.cc +15 -5
  646. data/src/core/telemetry/metrics.h +36 -5
  647. data/src/core/telemetry/stats.h +2 -2
  648. data/src/core/telemetry/stats_data.cc +1 -20
  649. data/src/core/telemetry/stats_data.h +2 -21
  650. data/src/core/transport/auth_context.cc +3 -3
  651. data/src/core/transport/auth_context.h +2 -1
  652. data/src/core/transport/auth_context_comparator_registry.h +1 -1
  653. data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
  654. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
  655. data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
  656. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +81 -48
  657. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
  658. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
  659. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +46 -36
  660. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
  661. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  662. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +4 -4
  663. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
  664. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
  665. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +16 -8
  666. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
  667. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +18 -5
  668. data/src/core/tsi/fake_transport_security.cc +6 -5
  669. data/src/core/tsi/local_transport_security.cc +1 -1
  670. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  671. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
  672. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
  673. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
  674. data/src/core/tsi/ssl_transport_security.cc +30 -30
  675. data/src/core/tsi/ssl_transport_security.h +1 -1
  676. data/src/core/tsi/ssl_transport_security_utils.cc +10 -10
  677. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  678. data/src/core/tsi/transport_security_grpc.cc +8 -0
  679. data/src/core/tsi/transport_security_grpc.h +15 -0
  680. data/src/core/util/alloc.cc +1 -1
  681. data/src/core/util/backoff.h +1 -1
  682. data/src/core/util/chunked_vector.h +4 -4
  683. data/src/core/util/crash.h +1 -1
  684. data/src/core/util/dual_ref_counted.h +2 -2
  685. data/src/core/util/event_log.cc +2 -2
  686. data/src/core/util/event_log.h +3 -3
  687. data/src/core/util/gcp_metadata_query.cc +7 -7
  688. data/src/core/util/gcp_metadata_query.h +2 -2
  689. data/src/core/util/glob.cc +2 -0
  690. data/src/core/util/grpc_check.cc +24 -0
  691. data/src/core/util/grpc_check.h +103 -0
  692. data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
  693. data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
  694. data/src/core/util/http_client/format_request.cc +1 -1
  695. data/src/core/util/http_client/httpcli.cc +6 -6
  696. data/src/core/util/http_client/httpcli.h +4 -4
  697. data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
  698. data/src/core/util/http_client/parser.cc +4 -4
  699. data/src/core/util/json/json_channel_args.h +1 -1
  700. data/src/core/util/json/json_object_loader.h +6 -6
  701. data/src/core/util/json/json_reader.cc +2 -2
  702. data/src/core/util/json/json_reader.h +1 -1
  703. data/src/core/util/json/json_util.h +3 -3
  704. data/src/core/util/json/json_writer.cc +1 -1
  705. data/src/core/util/latent_see.cc +45 -24
  706. data/src/core/util/latent_see.h +199 -28
  707. data/src/core/util/linux/cpu.cc +1 -1
  708. data/src/core/util/load_file.cc +1 -1
  709. data/src/core/util/load_file.h +1 -1
  710. data/src/core/util/log.cc +3 -3
  711. data/src/core/util/lru_cache.h +4 -4
  712. data/src/core/util/matchers.h +1 -1
  713. data/src/core/util/memory_usage.h +17 -1
  714. data/src/core/util/mpscq.h +1 -1
  715. data/src/core/util/notification.h +1 -1
  716. data/src/core/util/posix/cpu.cc +1 -1
  717. data/src/core/util/posix/directory_reader.cc +3 -2
  718. data/src/core/util/posix/stat.cc +2 -2
  719. data/src/core/util/posix/sync.cc +24 -24
  720. data/src/core/util/posix/thd.cc +2 -2
  721. data/src/core/util/posix/tmpfile.cc +2 -2
  722. data/src/core/util/postmortem_emit.cc +52 -0
  723. data/src/core/util/postmortem_emit.h +30 -0
  724. data/src/core/util/ref_counted.h +2 -2
  725. data/src/core/util/ref_counted_ptr.h +6 -1
  726. data/src/core/util/ref_counted_string.h +1 -1
  727. data/src/core/util/single_set_ptr.h +3 -1
  728. data/src/core/util/status_helper.cc +8 -8
  729. data/src/core/util/status_helper.h +1 -1
  730. data/src/core/util/string.cc +2 -2
  731. data/src/core/util/sync_abseil.cc +1 -1
  732. data/src/core/util/table.h +1 -1
  733. data/src/core/util/time.cc +1 -1
  734. data/src/core/util/time_precise.cc +1 -1
  735. data/src/core/util/trie_lookup.h +170 -0
  736. data/src/core/util/unique_ptr_with_bitset.h +5 -5
  737. data/src/core/util/unique_type_name.h +1 -1
  738. data/src/core/util/upb_utils.h +6 -1
  739. data/src/core/util/validation_errors.cc +2 -2
  740. data/src/core/util/validation_errors.h +2 -3
  741. data/src/core/util/wait_for_single_owner.h +2 -2
  742. data/src/core/util/windows/directory_reader.cc +1 -1
  743. data/src/core/util/windows/stat.cc +2 -2
  744. data/src/core/util/windows/thd.cc +2 -2
  745. data/src/core/util/windows/time.cc +1 -1
  746. data/src/core/util/work_serializer.cc +3 -3
  747. data/src/core/util/work_serializer.h +2 -2
  748. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  749. data/src/core/xds/grpc/certificate_provider_store.h +2 -2
  750. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  751. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  752. data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
  753. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  754. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
  755. data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -3
  756. data/src/core/xds/grpc/xds_certificate_provider.cc +4 -4
  757. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  758. data/src/core/xds/grpc/xds_client_grpc.cc +39 -20
  759. data/src/core/xds/grpc/xds_client_grpc.h +6 -3
  760. data/src/core/xds/grpc/xds_cluster.cc +2 -2
  761. data/src/core/xds/grpc/xds_cluster.h +1 -1
  762. data/src/core/xds/grpc/xds_cluster_parser.cc +7 -7
  763. data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
  764. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
  765. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  766. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  767. data/src/core/xds/grpc/xds_common_types.h +1 -1
  768. data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
  769. data/src/core/xds/grpc/xds_endpoint.h +2 -2
  770. data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -7
  771. data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
  772. data/src/core/xds/grpc/xds_health_status.cc +1 -1
  773. data/src/core/xds/grpc/xds_health_status.h +1 -1
  774. data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
  775. data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
  776. data/src/core/xds/grpc/xds_http_filter.h +3 -3
  777. data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
  778. data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
  779. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
  780. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
  781. data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
  782. data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
  783. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
  784. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
  785. data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
  786. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  787. data/src/core/xds/grpc/xds_listener.cc +2 -2
  788. data/src/core/xds/grpc/xds_listener_parser.cc +9 -9
  789. data/src/core/xds/grpc/xds_listener_parser.h +1 -1
  790. data/src/core/xds/grpc/xds_matcher.cc +277 -0
  791. data/src/core/xds/grpc/xds_matcher.h +432 -0
  792. data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
  793. data/src/core/xds/grpc/xds_matcher_action.h +48 -0
  794. data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
  795. data/src/core/xds/grpc/xds_matcher_context.h +46 -0
  796. data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
  797. data/src/core/xds/grpc/xds_matcher_input.h +105 -0
  798. data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
  799. data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
  800. data/src/core/xds/grpc/xds_metadata.cc +4 -3
  801. data/src/core/xds/grpc/xds_metadata.h +3 -3
  802. data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
  803. data/src/core/xds/grpc/xds_route_config.cc +3 -3
  804. data/src/core/xds/grpc/xds_route_config_parser.cc +14 -14
  805. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  806. data/src/core/xds/grpc/xds_routing.cc +6 -6
  807. data/src/core/xds/grpc/xds_routing.h +2 -2
  808. data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
  809. data/src/core/xds/grpc/xds_transport_grpc.cc +11 -11
  810. data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
  811. data/src/core/xds/xds_client/lrs_client.cc +9 -9
  812. data/src/core/xds/xds_client/lrs_client.h +4 -4
  813. data/src/core/xds/xds_client/xds_api.h +1 -1
  814. data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
  815. data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
  816. data/src/core/xds/xds_client/xds_client.cc +17 -17
  817. data/src/core/xds/xds_client/xds_client.h +5 -5
  818. data/src/core/xds/xds_client/xds_locality.h +2 -2
  819. data/src/core/xds/xds_client/xds_resource_type.h +2 -2
  820. data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
  821. data/src/core/xds/xds_client/xds_transport.h +2 -2
  822. data/src/ruby/ext/grpc/extconf.rb +14 -12
  823. data/src/ruby/ext/grpc/rb_call.c +0 -1
  824. data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
  825. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  826. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  827. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  828. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  829. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  830. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  831. data/src/ruby/lib/grpc/grpc.rb +7 -9
  832. data/src/ruby/lib/grpc/version.rb +1 -1
  833. data/src/ruby/spec/client_server_spec.rb +1 -1
  834. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  835. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  836. data/src/ruby/spec/spec_helper.rb +1 -1
  837. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  838. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  839. metadata +67 -8
@@ -0,0 +1,128 @@
1
+ //
2
+ //
3
+ // Copyright 2025 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
20
+ #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
21
+
22
+ #include <cstdint>
23
+ #include <string>
24
+
25
+ #include "src/core/call/metadata_info.h"
26
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
27
+ #include "src/core/util/grpc_check.h"
28
+ #include "absl/strings/str_cat.h"
29
+
30
+ namespace grpc_core {
31
+ namespace http2 {
32
+
33
+ class IncomingMetadataTracker {
34
+ // Manages transport-wide state for incoming HEADERS and CONTINUATION frames.
35
+ // RFC 9113 (Section 6.10) requires that if a HEADERS frame does not have
36
+ // END_HEADERS set, it must be followed by a contiguous sequence of
37
+ // CONTINUATION frames for the same stream, ending with END_HEADERS. No other
38
+ // frame types or frames for other streams may be interleaved during this
39
+ // sequence. This constraint makes tracking header sequence state a
40
+ // transport-level concern, as only one stream can be receiving headers at
41
+ // a time. This class is distinct from HeaderAssembler, which buffers header
42
+ // payloads on a per-stream basis.
43
+ public:
44
+ IncomingMetadataTracker() = default;
45
+ ~IncomingMetadataTracker() = default;
46
+
47
+ IncomingMetadataTracker(IncomingMetadataTracker&& rvalue) = delete;
48
+ IncomingMetadataTracker& operator=(IncomingMetadataTracker&& rvalue) = delete;
49
+ IncomingMetadataTracker(const IncomingMetadataTracker&) = delete;
50
+ IncomingMetadataTracker& operator=(const IncomingMetadataTracker&) = delete;
51
+
52
+ void set_soft_limit(uint32_t limit) {
53
+ max_header_list_size_soft_limit_ = limit;
54
+ }
55
+ uint32_t soft_limit() const { return max_header_list_size_soft_limit_; }
56
+
57
+ //////////////////////////////////////////////////////////////////////////////
58
+ // Writing Header and Continuation State
59
+
60
+ // Called when a HEADER frame is received.
61
+ void OnHeaderReceived(const Http2HeaderFrame& frame) {
62
+ GRPC_CHECK(!incoming_header_in_progress_);
63
+ incoming_header_in_progress_ = !frame.end_headers;
64
+ incoming_header_stream_id_ = frame.stream_id;
65
+ incoming_header_end_stream_ = frame.end_stream;
66
+ }
67
+
68
+ // Called when a CONTINUATION frame is received.
69
+ void OnContinuationReceived(const Http2ContinuationFrame& frame) {
70
+ GRPC_CHECK(incoming_header_in_progress_);
71
+ GRPC_CHECK_EQ(frame.stream_id, incoming_header_stream_id_);
72
+ incoming_header_in_progress_ = !frame.end_headers;
73
+ }
74
+
75
+ //////////////////////////////////////////////////////////////////////////////
76
+ // Reading Header and Continuation State
77
+
78
+ // Returns true if we are in the middle of receiving a header block
79
+ // (i.e., HEADERS without END_HEADERS was received, and we are waiting for
80
+ // CONTINUATION frames).
81
+ bool IsWaitingForContinuationFrame() const {
82
+ return incoming_header_in_progress_;
83
+ }
84
+
85
+ // Returns true if end_stream was set in the received header.
86
+ bool HeaderHasEndStream() const { return incoming_header_end_stream_; }
87
+
88
+ // Returns stream id of stream for which headers are being received.
89
+ uint32_t GetStreamId() const { return incoming_header_stream_id_; }
90
+
91
+ bool ClientReceivedDuplicateMetadata(
92
+ const bool did_receive_initial_metadata,
93
+ const bool did_receive_trailing_metadata) const {
94
+ const bool is_duplicate_initial_metadata =
95
+ !incoming_header_end_stream_ && did_receive_initial_metadata;
96
+ const bool is_duplicate_trailing_metadata =
97
+ incoming_header_end_stream_ && did_receive_trailing_metadata;
98
+ return is_duplicate_initial_metadata || is_duplicate_trailing_metadata;
99
+ }
100
+
101
+ bool ServerReceivedDuplicateMetadata(
102
+ const bool did_receive_initial_metadata) const {
103
+ // TODO(tjagtap) : [PH2][P2] : Verify this when implementing Server.
104
+ // Also write a small unit test for it.
105
+ return !incoming_header_end_stream_ && did_receive_initial_metadata;
106
+ }
107
+
108
+ std::string DebugString() const {
109
+ return absl::StrCat(
110
+ "{ incoming_header_in_progress : ",
111
+ incoming_header_in_progress_ ? "true" : "false",
112
+ ", incoming_header_end_stream : ",
113
+ incoming_header_end_stream_ ? "true" : "false",
114
+ ", incoming_header_stream_id : ", incoming_header_stream_id_, "}");
115
+ }
116
+
117
+ private:
118
+ bool incoming_header_in_progress_ = false;
119
+ bool incoming_header_end_stream_ = false;
120
+ uint32_t incoming_header_stream_id_ = 0;
121
+ uint32_t max_header_list_size_soft_limit_ =
122
+ DEFAULT_MAX_HEADER_LIST_SIZE_SOFT_LIMIT;
123
+ };
124
+
125
+ } // namespace http2
126
+ } // namespace grpc_core
127
+
128
+ #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INCOMING_METADATA_TRACKER_H
@@ -34,10 +34,6 @@
34
34
  #include <utility>
35
35
  #include <variant>
36
36
 
37
- #include "absl/container/flat_hash_map.h"
38
- #include "absl/random/random.h"
39
- #include "absl/status/status.h"
40
- #include "absl/strings/string_view.h"
41
37
  #include "src/core/call/metadata_batch.h"
42
38
  #include "src/core/channelz/channelz.h"
43
39
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
@@ -68,6 +64,7 @@
68
64
  #include "src/core/lib/iomgr/iomgr_fwd.h"
69
65
  #include "src/core/lib/resource_quota/arena.h"
70
66
  #include "src/core/lib/resource_quota/memory_quota.h"
67
+ #include "src/core/lib/resource_quota/stream_quota.h"
71
68
  #include "src/core/lib/slice/slice.h"
72
69
  #include "src/core/lib/slice/slice_buffer.h"
73
70
  #include "src/core/lib/surface/init_internally.h"
@@ -83,6 +80,10 @@
83
80
  #include "src/core/util/ref_counted.h"
84
81
  #include "src/core/util/ref_counted_ptr.h"
85
82
  #include "src/core/util/time.h"
83
+ #include "absl/container/flat_hash_map.h"
84
+ #include "absl/random/random.h"
85
+ #include "absl/status/status.h"
86
+ #include "absl/strings/string_view.h"
86
87
 
87
88
  // Flag that this closure barrier may be covering a write in a pollset, and so
88
89
  // we should not complete this closure until we can prove that the write got
@@ -115,6 +116,7 @@ typedef enum {
115
116
  GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
116
117
  } grpc_chttp2_write_state;
117
118
 
119
+ // Not getting used anywhere AFAIK
118
120
  typedef enum {
119
121
  GRPC_CHTTP2_OPTIMIZE_FOR_LATENCY,
120
122
  GRPC_CHTTP2_OPTIMIZE_FOR_THROUGHPUT,
@@ -238,7 +240,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
238
240
  public:
239
241
  explicit ChannelzDataSource(grpc_chttp2_transport* transport)
240
242
  : grpc_core::channelz::DataSource(transport->channelz_socket),
241
- transport_(transport) {
243
+ transport_(transport->Ref()) { // Take a ref
242
244
  SourceConstructed();
243
245
  }
244
246
  ~ChannelzDataSource() { SourceDestructing(); }
@@ -248,7 +250,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
248
250
  absl::string_view name) override;
249
251
 
250
252
  private:
251
- grpc_chttp2_transport* transport_;
253
+ grpc_core::RefCountedPtr<grpc_chttp2_transport> transport_;
252
254
  };
253
255
 
254
256
  void Orphan() override;
@@ -287,6 +289,19 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
287
289
  void WriteSecurityFrame(grpc_core::SliceBuffer* data);
288
290
  void WriteSecurityFrameLocked(grpc_core::SliceBuffer* data);
289
291
 
292
+ void StartWatch(grpc_core::RefCountedPtr<StateWatcher> watcher) override;
293
+ void StopWatch(grpc_core::RefCountedPtr<StateWatcher> watcher) override;
294
+
295
+ void NotifyStateWatcherOnDisconnectLocked(
296
+ absl::Status status, StateWatcher::DisconnectInfo disconnect_info);
297
+
298
+ void OnPeerMaxConcurrentStreamsUpdateComplete();
299
+ void MaybeNotifyStateWatcherOfPeerMaxConcurrentStreamsLocked();
300
+ void NotifyStateWatcherOnPeerMaxConcurrentStreamsUpdateLocked();
301
+
302
+ void MaybeNotifyOnReceiveSettingsLocked(
303
+ absl::StatusOr<uint32_t> max_concurrent_streams);
304
+
290
305
  // We depend on the ep being available for the life of the transport in
291
306
  // at least one place - event callback in WriteEventSink. Hence, this should
292
307
  // only be orphaned in the destructor.
@@ -301,6 +316,8 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
301
316
  grpc_core::MemoryOwner memory_owner;
302
317
  const grpc_core::MemoryAllocator::Reservation self_reservation;
303
318
  grpc_core::ReclamationSweep active_reclamation;
319
+ grpc_core::InstrumentStorageRefPtr<grpc_core::ResourceQuotaDomain>
320
+ resource_quota_telemetry_storage;
304
321
 
305
322
  std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine;
306
323
  grpc_core::Combiner* combiner;
@@ -313,7 +330,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
313
330
  // starts a connectivity watch.
314
331
  grpc_pollset_set* interested_parties_until_recv_settings = nullptr;
315
332
 
316
- grpc_closure* notify_on_receive_settings = nullptr;
333
+ absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> notify_on_receive_settings;
317
334
  grpc_closure* notify_on_close = nullptr;
318
335
 
319
336
  /// has the upper layer closed the transport?
@@ -372,7 +389,12 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
372
389
  void* user_data, grpc_core::ServerMetadata* metadata) = nullptr;
373
390
  void* accept_stream_cb_user_data;
374
391
 
392
+ // There should be only a single watcher in use at any given time.
393
+ grpc_core::RefCountedPtr<StateWatcher> watcher;
394
+ uint32_t last_reported_max_concurrent_streams;
395
+ bool max_concurrent_streams_notification_in_flight;
375
396
  /// connectivity tracking
397
+ // TODO(roth): Get rid of this in favor of the new state watcher.
376
398
  grpc_core::ConnectivityStateTracker state_tracker;
377
399
 
378
400
  /// data to write now
@@ -590,6 +612,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
590
612
 
591
613
  std::shared_ptr<grpc_core::Http2StatsCollector> http2_stats;
592
614
  grpc_core::Http2ZTraceCollector http2_ztrace_collector;
615
+ grpc_core::Timestamp last_ztrace_time = grpc_core::Timestamp::InfPast();
593
616
 
594
617
  GPR_NO_UNIQUE_ADDRESS grpc_core::latent_see::Flow write_flow;
595
618
  };
@@ -714,7 +737,7 @@ struct grpc_chttp2_stream {
714
737
  // annotations as soon as we have parsed initial metadata, but in our legacy
715
738
  // stack, we create the stream before parsing headers. In the new v3 stack,
716
739
  // that won't be an issue.
717
- grpc_core::CallTracerInterface* call_tracer = nullptr;
740
+ grpc_core::CallTracer* call_tracer = nullptr;
718
741
  // TODO(yashykt): Remove this once call_tracer_transport_fix is rolled out
719
742
  grpc_core::CallTracerAnnotationInterface* parent_call_tracer = nullptr;
720
743
 
@@ -740,17 +763,6 @@ struct grpc_chttp2_stream {
740
763
  grpc_core::Timestamp::InfPast();
741
764
  };
742
765
 
743
- // EXPERIMENTAL: provide protection against overloading a server with too many
744
- // requests: wait for streams to be deallocated before they stop counting
745
- // against MAX_CONCURRENT_STREAMS
746
- #define GRPC_ARG_MAX_CONCURRENT_STREAMS_OVERLOAD_PROTECTION \
747
- "grpc.http.overload_protection"
748
-
749
- // EXPERIMENTAL: Fail requests at the client if the client is over max
750
- // concurrent streams, so they may be retried elsewhere.
751
- #define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \
752
- "grpc.http.max_concurrent_streams_reject_on_client"
753
-
754
766
  /// Transport writing call flow:
755
767
  /// grpc_chttp2_initiate_write() is called anywhere that we know bytes need to
756
768
  /// go out on the wire.
@@ -17,21 +17,28 @@
17
17
  //
18
18
  #include "src/core/ext/transport/chttp2/transport/keepalive.h"
19
19
 
20
+ #include <utility>
21
+
20
22
  #include "src/core/lib/promise/all_ok.h"
21
23
  #include "src/core/lib/promise/if.h"
22
24
  #include "src/core/lib/promise/loop.h"
25
+ #include "src/core/lib/promise/party.h"
23
26
  #include "src/core/lib/promise/race.h"
24
27
  #include "src/core/lib/promise/sleep.h"
25
28
  #include "src/core/lib/promise/try_seq.h"
29
+ #include "src/core/util/grpc_check.h"
30
+ #include "src/core/util/time.h"
26
31
 
27
32
  namespace grpc_core {
28
33
  namespace http2 {
29
34
  KeepaliveManager::KeepaliveManager(
30
35
  std::unique_ptr<KeepAliveInterface> keep_alive_interface,
31
- Duration keepalive_timeout, const Duration keepalive_time)
36
+ Duration keepalive_timeout, const Duration keepalive_time, Party* party)
32
37
  : keep_alive_interface_(std::move(keep_alive_interface)),
33
38
  keepalive_timeout_(keepalive_timeout),
34
- keepalive_time_(keepalive_time) {}
39
+ keepalive_time_(keepalive_time) {
40
+ MaybeSpawnKeepaliveLoop(party);
41
+ }
35
42
 
36
43
  auto KeepaliveManager::WaitForKeepAliveTimeout() {
37
44
  return AssertResultType<absl::Status>(
@@ -59,8 +66,8 @@ auto KeepaliveManager::WaitForKeepAliveTimeout() {
59
66
  }));
60
67
  }
61
68
  auto KeepaliveManager::TimeoutAndSendPing() {
62
- DCHECK(!data_received_in_last_cycle_);
63
- DCHECK(keepalive_timeout_ != Duration::Infinity());
69
+ GRPC_DCHECK(!data_received_in_last_cycle_);
70
+ GRPC_DCHECK(keepalive_timeout_ != Duration::Infinity());
64
71
 
65
72
  return AllOk<absl::Status>(Race(WaitForData(), WaitForKeepAliveTimeout()),
66
73
  SendPingAndWaitForAck());
@@ -83,7 +90,7 @@ auto KeepaliveManager::MaybeSendKeepAlivePing() {
83
90
  }));
84
91
  }
85
92
 
86
- void KeepaliveManager::Spawn(Party* party) {
93
+ void KeepaliveManager::MaybeSpawnKeepaliveLoop(Party* party) {
87
94
  if (!IsKeepAliveNeeded()) {
88
95
  GRPC_HTTP2_KEEPALIVE_LOG << "Not spawning keepalive loop.";
89
96
  return;
@@ -18,9 +18,10 @@
18
18
  #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_KEEPALIVE_H
19
19
  #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_KEEPALIVE_H
20
20
 
21
- #include "absl/status/status.h"
22
21
  #include "src/core/lib/promise/party.h"
23
22
  #include "src/core/lib/promise/promise.h"
23
+ #include "src/core/util/grpc_check.h"
24
+ #include "absl/status/status.h"
24
25
 
25
26
  namespace grpc_core {
26
27
  namespace http2 {
@@ -44,11 +45,8 @@ class KeepAliveInterface {
44
45
  class KeepaliveManager {
45
46
  public:
46
47
  KeepaliveManager(std::unique_ptr<KeepAliveInterface> keep_alive_interface,
47
- Duration keepalive_timeout, Duration keepalive_time);
48
-
49
- // Spawns the keepalive loop on the given party. This MUST be called at most
50
- // once during the lifetime of the keepalive manager.
51
- void Spawn(Party* party);
48
+ Duration keepalive_timeout, Duration keepalive_time,
49
+ Party* party);
52
50
 
53
51
  // Needs to be called when any data is read from the endpoint.
54
52
  void GotData() {
@@ -69,6 +67,10 @@ class KeepaliveManager {
69
67
  }
70
68
 
71
69
  private:
70
+ // Spawns the keepalive loop on the given party. This MUST be called at most
71
+ // once during the lifetime of the keepalive manager.
72
+ void MaybeSpawnKeepaliveLoop(Party* party);
73
+
72
74
  // Returns a promise that sleeps for the keepalive_timeout_ and triggers the
73
75
  // keepalive timeout unless data is read within the keepalive timeout.
74
76
  auto WaitForKeepAliveTimeout();
@@ -104,7 +106,7 @@ class KeepaliveManager {
104
106
  };
105
107
  }
106
108
  auto SendPingAndWaitForAck() {
107
- DCHECK_EQ(data_received_in_last_cycle_, false);
109
+ GRPC_DCHECK_EQ(data_received_in_last_cycle_, false);
108
110
  return keep_alive_interface_->SendPingAndWaitForAck();
109
111
  }
110
112
 
@@ -121,10 +123,12 @@ class KeepaliveManager {
121
123
  }
122
124
 
123
125
  std::unique_ptr<KeepAliveInterface> keep_alive_interface_;
124
- // If the keepalive_timeout_ is set to infinity, then the timeout is dictated
125
- // by the ping timeout. Otherwise, this field can be used to set a specific
126
- // timeout for keepalive pings.
126
+ // Duration to wait before triggering a keepalive timeout. If the
127
+ // keepalive_timeout_ is set to infinity, then the timeout is dictated by the
128
+ // ping timeout. Otherwise, this field can be used to set a specific timeout
129
+ // for keepalive pings.
127
130
  Duration keepalive_timeout_;
131
+ // Duration between two consecutive keepalive pings.
128
132
  const Duration keepalive_time_;
129
133
  bool data_received_in_last_cycle_ = false;
130
134
  bool keep_alive_timeout_triggered_ = false;
@@ -19,21 +19,26 @@
19
19
  #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_MESSAGE_ASSEMBLER_H
20
20
  #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_MESSAGE_ASSEMBLER_H
21
21
 
22
+ #include <grpc/support/port_platform.h>
23
+
22
24
  #include <cstdint>
23
25
  #include <utility>
24
26
 
25
- #include "absl/log/check.h"
26
27
  #include "src/core/call/message.h"
27
28
  #include "src/core/ext/transport/chttp2/transport/frame.h"
28
29
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
29
30
  #include "src/core/lib/resource_quota/arena.h"
30
31
  #include "src/core/lib/slice/slice.h"
31
32
  #include "src/core/lib/slice/slice_buffer.h"
33
+ #include "src/core/util/grpc_check.h"
32
34
  #include "src/core/util/ref_counted_ptr.h"
35
+ #include "absl/log/log.h"
33
36
 
34
37
  namespace grpc_core {
35
38
  namespace http2 {
36
39
 
40
+ #define GRPC_MESSAGE_ASSEMBLER_DEBUG VLOG(2)
41
+
37
42
  // TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
38
43
  // assembler and disassembler code
39
44
 
@@ -53,7 +58,7 @@ class GrpcMessageAssembler {
53
58
  // This function will move the payload into an internal buffer.
54
59
  Http2Status AppendNewDataFrame(SliceBuffer& payload,
55
60
  const bool is_end_stream) {
56
- DCHECK(!is_end_stream_)
61
+ GRPC_DCHECK(!is_end_stream_)
57
62
  << "Calling this function when a previous frame was marked as the last "
58
63
  "frame does not make sense.";
59
64
  is_end_stream_ = is_end_stream;
@@ -66,7 +71,7 @@ class GrpcMessageAssembler {
66
71
  }
67
72
  }
68
73
  payload.MoveFirstNBytesIntoSliceBuffer(payload.Length(), message_buffer_);
69
- DCHECK_EQ(payload.Length(), 0u);
74
+ GRPC_DCHECK_EQ(payload.Length(), 0u);
70
75
  return Http2Status::Ok();
71
76
  }
72
77
 
@@ -79,15 +84,21 @@ class GrpcMessageAssembler {
79
84
  // TODO(tjagtap) : [PH2][P3] : Write a test for this.
80
85
  return ReturnNullOrError();
81
86
  }
82
- GrpcMessageHeader header = ExtractGrpcHeader(message_buffer_);
87
+ ValueOrHttp2Status<GrpcMessageHeader> header =
88
+ ExtractGrpcHeader(message_buffer_);
89
+ if (!header.IsOk()) {
90
+ return header.TakeStatus(std::move(header));
91
+ }
92
+ const uint32_t header_length = header.value().length;
93
+
83
94
  if constexpr (sizeof(size_t) == 4) {
84
- if (GPR_UNLIKELY(header.length > kOneGb)) {
95
+ if (GPR_UNLIKELY(header_length > kOneGb)) {
85
96
  return Http2Status::Http2StreamError(
86
97
  Http2ErrorCode::kInternalError,
87
98
  "Stream Error: SliceBuffer overflow for 32 bit platforms.");
88
99
  }
89
100
  }
90
- if (GPR_LIKELY(current_len - kGrpcHeaderSizeInBytes >= header.length)) {
101
+ if (GPR_LIKELY(current_len - kGrpcHeaderSizeInBytes >= header_length)) {
91
102
  SliceBuffer discard;
92
103
  message_buffer_.MoveFirstNBytesIntoSliceBuffer(kGrpcHeaderSizeInBytes,
93
104
  discard);
@@ -98,9 +109,8 @@ class GrpcMessageAssembler {
98
109
  // bounds.
99
110
  MessageHandle grpc_message = Arena::MakePooled<Message>();
100
111
  message_buffer_.MoveFirstNBytesIntoSliceBuffer(
101
- header.length, *(grpc_message->payload()));
102
- uint32_t& flag = grpc_message->mutable_flags();
103
- flag = header.flags;
112
+ header_length, *(grpc_message->payload()));
113
+ grpc_message->mutable_flags() = header.value().flags;
104
114
  return std::move(grpc_message);
105
115
  }
106
116
  return ReturnNullOrError();
@@ -112,21 +122,18 @@ class GrpcMessageAssembler {
112
122
  return Http2Status::Http2StreamError(Http2ErrorCode::kInternalError,
113
123
  "Incomplete gRPC frame received");
114
124
  }
115
- VLOG(2) << "Incomplete gRPC message received. Return nullptr";
125
+ GRPC_MESSAGE_ASSEMBLER_DEBUG
126
+ << "Incomplete gRPC message received. Return nullptr";
116
127
  return ValueOrHttp2Status<MessageHandle>(nullptr);
117
128
  }
129
+
118
130
  bool is_end_stream_ = false;
119
131
  SliceBuffer message_buffer_;
120
132
  };
121
133
 
122
- constexpr uint32_t kMaxMessageBatchSize = (16 * 1024u);
123
-
124
134
  // This class is meant to convert gRPC Messages into Http2DataFrame ensuring
125
135
  // that the payload size of the data frame is configurable.
126
- // This class is not responsible for queueing or backpressure. That will be done
127
- // by other classes.
128
- // TODO(tjagtap) : [PH2][P2] Edit comment once this
129
- // class is integrated and exercised.
136
+ // This class is not responsible for queueing or backpressure.
130
137
  class GrpcMessageDisassembler {
131
138
  public:
132
139
  // One GrpcMessageDisassembler instance MUST be associated with one stream
@@ -135,15 +142,17 @@ class GrpcMessageDisassembler {
135
142
 
136
143
  // GrpcMessageDisassembler object will take ownership of the message.
137
144
  void PrepareSingleMessageForSending(MessageHandle message) {
138
- DCHECK_EQ(GetBufferedLength(), 0u);
145
+ GRPC_DCHECK_EQ(GetBufferedLength(), 0u);
139
146
  PrepareMessageForSending(std::move(message));
140
147
  }
141
148
 
142
149
  // GrpcMessageDisassembler object will take ownership of the message.
143
150
  void PrepareBatchedMessageForSending(MessageHandle message) {
151
+ // The size of the message is controlled by the application (and by using
152
+ // GRPC_ARG_MAX_SEND_MESSAGE_LENGTH). PH2 ensures that if the the message
153
+ // size is larger than the default stream queue size kStreamQueueSize, at
154
+ // max one message will be buffered in the disassembler.
144
155
  PrepareMessageForSending(std::move(message));
145
- DCHECK_LE(GetBufferedLength(), kMaxMessageBatchSize)
146
- << "Avoid batches larger than " << kMaxMessageBatchSize << "bytes";
147
156
  }
148
157
 
149
158
  size_t GetBufferedLength() const { return message_.Length(); }
@@ -152,8 +161,8 @@ class GrpcMessageDisassembler {
152
161
  Http2DataFrame GenerateNextFrame(const uint32_t stream_id,
153
162
  const uint32_t max_length,
154
163
  const bool is_end_stream = false) {
155
- DCHECK_GT(max_length, 0u);
156
- DCHECK_GT(GetBufferedLength(), 0u);
164
+ GRPC_DCHECK_GT(max_length, 0u);
165
+ GRPC_DCHECK_GT(GetBufferedLength(), 0u);
157
166
  SliceBuffer temp;
158
167
  const uint32_t current_length =
159
168
  message_.Length() >= max_length ? max_length : message_.Length();
@@ -31,15 +31,6 @@
31
31
  #include <utility>
32
32
  #include <variant>
33
33
 
34
- #include "absl/base/attributes.h"
35
- #include "absl/container/flat_hash_map.h"
36
- #include "absl/log/check.h"
37
- #include "absl/log/log.h"
38
- #include "absl/random/bit_gen_ref.h"
39
- #include "absl/status/status.h"
40
- #include "absl/strings/str_cat.h"
41
- #include "absl/strings/str_format.h"
42
- #include "absl/strings/string_view.h"
43
34
  #include "src/core/call/metadata_batch.h"
44
35
  #include "src/core/channelz/channelz.h"
45
36
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
@@ -73,10 +64,19 @@
73
64
  #include "src/core/telemetry/call_tracer.h"
74
65
  #include "src/core/telemetry/stats.h"
75
66
  #include "src/core/telemetry/stats_data.h"
67
+ #include "src/core/util/grpc_check.h"
76
68
  #include "src/core/util/random_early_detection.h"
77
69
  #include "src/core/util/ref_counted_ptr.h"
78
70
  #include "src/core/util/shared_bit_gen.h"
79
71
  #include "src/core/util/status_helper.h"
72
+ #include "absl/base/attributes.h"
73
+ #include "absl/container/flat_hash_map.h"
74
+ #include "absl/log/log.h"
75
+ #include "absl/random/bit_gen_ref.h"
76
+ #include "absl/status/status.h"
77
+ #include "absl/strings/str_cat.h"
78
+ #include "absl/strings/str_format.h"
79
+ #include "absl/strings/string_view.h"
80
80
 
81
81
  using grpc_core::HPackParser;
82
82
  using grpc_core::http2::Http2ErrorCode;
@@ -274,7 +274,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
274
274
  }
275
275
  [[fallthrough]];
276
276
  case GRPC_DTS_FH_0:
277
- DCHECK_LT(cur, end);
277
+ GRPC_DCHECK_LT(cur, end);
278
278
  t->incoming_frame_size = (static_cast<uint32_t>(*cur)) << 16;
279
279
  if (++cur == end) {
280
280
  t->deframe_state = GRPC_DTS_FH_1;
@@ -282,7 +282,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
282
282
  }
283
283
  [[fallthrough]];
284
284
  case GRPC_DTS_FH_1:
285
- DCHECK_LT(cur, end);
285
+ GRPC_DCHECK_LT(cur, end);
286
286
  t->incoming_frame_size |= (static_cast<uint32_t>(*cur)) << 8;
287
287
  if (++cur == end) {
288
288
  t->deframe_state = GRPC_DTS_FH_2;
@@ -290,7 +290,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
290
290
  }
291
291
  [[fallthrough]];
292
292
  case GRPC_DTS_FH_2:
293
- DCHECK_LT(cur, end);
293
+ GRPC_DCHECK_LT(cur, end);
294
294
  t->incoming_frame_size |= *cur;
295
295
  if (++cur == end) {
296
296
  t->deframe_state = GRPC_DTS_FH_3;
@@ -298,7 +298,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
298
298
  }
299
299
  [[fallthrough]];
300
300
  case GRPC_DTS_FH_3:
301
- DCHECK_LT(cur, end);
301
+ GRPC_DCHECK_LT(cur, end);
302
302
  t->incoming_frame_type = *cur;
303
303
  if (++cur == end) {
304
304
  t->deframe_state = GRPC_DTS_FH_4;
@@ -306,7 +306,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
306
306
  }
307
307
  [[fallthrough]];
308
308
  case GRPC_DTS_FH_4:
309
- DCHECK_LT(cur, end);
309
+ GRPC_DCHECK_LT(cur, end);
310
310
  t->incoming_frame_flags = *cur;
311
311
  if (++cur == end) {
312
312
  t->deframe_state = GRPC_DTS_FH_5;
@@ -314,7 +314,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
314
314
  }
315
315
  [[fallthrough]];
316
316
  case GRPC_DTS_FH_5:
317
- DCHECK_LT(cur, end);
317
+ GRPC_DCHECK_LT(cur, end);
318
318
  t->incoming_stream_id = ((static_cast<uint32_t>(*cur)) & 0x7f) << 24;
319
319
  if (++cur == end) {
320
320
  t->deframe_state = GRPC_DTS_FH_6;
@@ -322,7 +322,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
322
322
  }
323
323
  [[fallthrough]];
324
324
  case GRPC_DTS_FH_6:
325
- DCHECK_LT(cur, end);
325
+ GRPC_DCHECK_LT(cur, end);
326
326
  t->incoming_stream_id |= (static_cast<uint32_t>(*cur)) << 16;
327
327
  if (++cur == end) {
328
328
  t->deframe_state = GRPC_DTS_FH_7;
@@ -330,7 +330,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
330
330
  }
331
331
  [[fallthrough]];
332
332
  case GRPC_DTS_FH_7:
333
- DCHECK_LT(cur, end);
333
+ GRPC_DCHECK_LT(cur, end);
334
334
  t->incoming_stream_id |= (static_cast<uint32_t>(*cur)) << 8;
335
335
  if (++cur == end) {
336
336
  t->deframe_state = GRPC_DTS_FH_8;
@@ -338,7 +338,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
338
338
  }
339
339
  [[fallthrough]];
340
340
  case GRPC_DTS_FH_8:
341
- DCHECK_LT(cur, end);
341
+ GRPC_DCHECK_LT(cur, end);
342
342
  t->incoming_stream_id |= (static_cast<uint32_t>(*cur));
343
343
  GRPC_TRACE_LOG(http, INFO)
344
344
  << "INCOMING[" << t << "]: "
@@ -372,7 +372,7 @@ std::variant<size_t, absl::Status> grpc_chttp2_perform_read(
372
372
  }
373
373
  [[fallthrough]];
374
374
  case GRPC_DTS_FRAME:
375
- DCHECK_LT(cur, end);
375
+ GRPC_DCHECK_LT(cur, end);
376
376
  if (static_cast<uint32_t>(end - cur) == t->incoming_frame_size) {
377
377
  err = parse_frame_slice(
378
378
  t,
@@ -671,10 +671,12 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
671
671
  nullptr, &t->http2_ztrace_collector));
672
672
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
673
673
  return init_header_skip_frame_parser(t, priority_type, is_eoh);
674
- } else if (GPR_UNLIKELY(t->memory_owner.IsMemoryPressureHigh())) {
674
+ } else if (GPR_UNLIKELY(
675
+ t->memory_owner.RejectNewStreamsUnderHighMemoryPressure())) {
675
676
  // We have more streams allocated than we'd like, so apply some pushback
676
677
  // by refusing this stream.
677
- grpc_core::global_stats().IncrementRqCallsRejected();
678
+ t->memory_owner.telemetry_storage()->Increment(
679
+ grpc_core::ResourceQuotaDomain::kCallsRejected);
678
680
  ++t->num_pending_induced_frames;
679
681
  grpc_slice_buffer_add(
680
682
  &t->qbuf, grpc_chttp2_rst_stream_create(
@@ -766,7 +768,7 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
766
768
  } else {
767
769
  t->incoming_stream = s;
768
770
  }
769
- DCHECK_NE(s, nullptr);
771
+ GRPC_DCHECK_NE(s, nullptr);
770
772
  s->call_tracer_wrapper.RecordIncomingBytes({9, 0, 0});
771
773
  if (GPR_UNLIKELY(s->read_closed)) {
772
774
  GRPC_CHTTP2_IF_TRACING(ERROR)
@@ -976,7 +978,7 @@ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
976
978
  const grpc_slice& slice,
977
979
  int is_last) {
978
980
  auto* parser = static_cast<grpc_core::HPackParser*>(hpack_parser);
979
- grpc_core::CallTracerAnnotationInterface* call_tracer = nullptr;
981
+ grpc_core::CallSpan* call_tracer = nullptr;
980
982
  if (s != nullptr) {
981
983
  s->call_tracer_wrapper.RecordIncomingBytes(
982
984
  {0, 0, GRPC_SLICE_LENGTH(slice)});