grpc 1.76.0 → 1.78.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +11 -5
  3. data/include/grpc/credentials.h +6 -1
  4. data/include/grpc/event_engine/memory_allocator.h +2 -0
  5. data/include/grpc/impl/channel_arg_names.h +5 -0
  6. data/include/grpc/support/metrics.h +7 -1
  7. data/src/core/call/call_filters.cc +1 -1
  8. data/src/core/call/call_filters.h +175 -1
  9. data/src/core/call/call_spine.cc +1 -1
  10. data/src/core/call/call_spine.h +27 -5
  11. data/src/core/call/channelz_context.h +30 -0
  12. data/src/core/call/client_call.cc +43 -5
  13. data/src/core/call/client_call.h +6 -3
  14. data/src/core/call/filter_fusion.h +4 -4
  15. data/src/core/call/interception_chain.h +7 -6
  16. data/src/core/call/metadata_batch.cc +49 -55
  17. data/src/core/call/metadata_batch.h +7 -6
  18. data/src/core/call/metadata_info.cc +1 -1
  19. data/src/core/call/parsed_metadata.h +2 -2
  20. data/src/core/call/request_buffer.cc +1 -1
  21. data/src/core/call/security_context.cc +1 -1
  22. data/src/core/call/security_context.h +1 -1
  23. data/src/core/call/server_call.cc +1 -1
  24. data/src/core/call/server_call.h +5 -3
  25. data/src/core/call/simple_slice_based_metadata.h +1 -1
  26. data/src/core/call/status_util.cc +1 -1
  27. data/src/core/channelz/channel_trace.cc +1 -1
  28. data/src/core/channelz/channel_trace.h +3 -3
  29. data/src/core/channelz/channelz.cc +13 -11
  30. data/src/core/channelz/channelz.h +41 -6
  31. data/src/core/channelz/channelz_registry.cc +2 -2
  32. data/src/core/channelz/channelz_registry.h +42 -2
  33. data/src/core/channelz/property_list.h +6 -4
  34. data/src/core/channelz/v2tov1/convert.cc +6 -6
  35. data/src/core/channelz/v2tov1/legacy_api.cc +4 -5
  36. data/src/core/channelz/v2tov1/property_list.cc +1 -1
  37. data/src/core/channelz/ztrace_collector.h +14 -2
  38. data/src/core/client_channel/backup_poller.cc +2 -2
  39. data/src/core/client_channel/buffered_call.cc +140 -0
  40. data/src/core/client_channel/buffered_call.h +104 -0
  41. data/src/core/client_channel/client_channel.cc +124 -71
  42. data/src/core/client_channel/client_channel.h +8 -11
  43. data/src/core/client_channel/client_channel_factory.h +1 -1
  44. data/src/core/client_channel/client_channel_filter.cc +393 -663
  45. data/src/core/client_channel/client_channel_filter.h +57 -150
  46. data/src/core/client_channel/client_channel_internal.h +5 -1
  47. data/src/core/client_channel/client_channel_service_config.cc +43 -3
  48. data/src/core/client_channel/client_channel_service_config.h +12 -1
  49. data/src/core/client_channel/config_selector.h +2 -2
  50. data/src/core/client_channel/connector.h +2 -0
  51. data/src/core/client_channel/dynamic_filters.cc +2 -2
  52. data/src/core/client_channel/global_subchannel_pool.h +1 -1
  53. data/src/core/client_channel/lb_metadata.h +1 -1
  54. data/src/core/client_channel/load_balanced_call_destination.cc +3 -5
  55. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  56. data/src/core/client_channel/retry_filter.cc +2 -2
  57. data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -7
  58. data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
  59. data/src/core/client_channel/retry_service_config.cc +3 -3
  60. data/src/core/client_channel/retry_service_config.h +1 -1
  61. data/src/core/client_channel/subchannel.cc +106 -17
  62. data/src/core/client_channel/subchannel.h +24 -8
  63. data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
  64. data/src/core/client_channel/subchannel_pool_interface.h +1 -1
  65. data/src/core/client_channel/subchannel_stream_client.cc +1 -1
  66. data/src/core/client_channel/subchannel_stream_client.h +3 -3
  67. data/src/core/config/config_vars.cc +8 -2
  68. data/src/core/config/config_vars.h +5 -0
  69. data/src/core/config/core_configuration.h +1 -1
  70. data/src/core/config/load_config.cc +1 -1
  71. data/src/core/credentials/call/call_credentials.h +2 -2
  72. data/src/core/credentials/call/call_creds_registry.h +1 -1
  73. data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
  74. data/src/core/credentials/call/call_creds_util.cc +3 -3
  75. data/src/core/credentials/call/composite/composite_call_credentials.cc +2 -2
  76. data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
  77. data/src/core/credentials/call/external/aws_external_account_credentials.cc +6 -6
  78. data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
  79. data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
  80. data/src/core/credentials/call/external/external_account_credentials.h +1 -1
  81. data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
  82. data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
  83. data/src/core/credentials/call/external/url_external_account_credentials.cc +6 -6
  84. data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
  85. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
  86. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
  87. data/src/core/credentials/call/iam/iam_credentials.cc +2 -2
  88. data/src/core/credentials/call/iam/iam_credentials.h +1 -1
  89. data/src/core/credentials/call/json_util.cc +1 -1
  90. data/src/core/credentials/call/jwt/json_token.cc +4 -4
  91. data/src/core/credentials/call/jwt/jwt_credentials.cc +3 -3
  92. data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
  93. data/src/core/credentials/call/jwt/jwt_verifier.cc +5 -5
  94. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
  95. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
  96. data/src/core/credentials/call/jwt_util.cc +3 -3
  97. data/src/core/credentials/call/jwt_util.h +1 -1
  98. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +29 -60
  99. data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
  100. data/src/core/credentials/call/plugin/plugin_credentials.cc +4 -4
  101. data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
  102. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
  103. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
  104. data/src/core/credentials/transport/alts/alts_credentials.cc +3 -3
  105. data/src/core/credentials/transport/alts/alts_security_connector.cc +3 -3
  106. data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
  107. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +1 -1
  108. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +1 -1
  109. data/src/core/credentials/transport/channel_creds_registry.h +1 -1
  110. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  111. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +2 -2
  112. data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
  113. data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
  114. data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
  115. data/src/core/credentials/transport/fake/fake_security_connector.cc +5 -5
  116. data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
  117. data/src/core/credentials/transport/google_default/google_default_credentials.cc +5 -11
  118. data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
  119. data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
  120. data/src/core/credentials/transport/local/local_security_connector.cc +5 -5
  121. data/src/core/credentials/transport/security_connector.cc +1 -1
  122. data/src/core/credentials/transport/security_connector.h +2 -2
  123. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  124. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +5 -5
  125. data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
  126. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +1 -1
  127. data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
  128. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +1 -1
  129. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
  130. data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
  131. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +3 -3
  132. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +3 -3
  133. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +1 -1
  134. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
  135. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +1 -1
  136. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
  137. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
  138. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
  139. data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
  140. data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
  141. data/src/core/credentials/transport/tls/ssl_utils.cc +4 -4
  142. data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
  143. data/src/core/credentials/transport/tls/tls_credentials.cc +1 -1
  144. data/src/core/credentials/transport/tls/tls_security_connector.cc +4 -4
  145. data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
  146. data/src/core/credentials/transport/transport_credentials.cc +1 -1
  147. data/src/core/credentials/transport/transport_credentials.h +2 -2
  148. data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
  149. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
  150. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
  151. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +5 -5
  152. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
  153. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
  154. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
  155. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
  156. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
  157. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
  158. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  159. data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
  160. data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
  161. data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
  162. data/src/core/ext/filters/http/client_authority_filter.h +4 -1
  163. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
  164. data/src/core/ext/filters/http/message_compress/compression_filter.cc +3 -3
  165. data/src/core/ext/filters/http/message_compress/compression_filter.h +21 -2
  166. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  167. data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
  168. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
  169. data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
  170. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  171. data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
  172. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  173. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  174. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
  175. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
  176. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  177. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +50 -37
  178. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
  179. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -17
  180. data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
  181. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +2 -2
  182. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +210 -60
  183. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
  184. data/src/core/ext/transport/chttp2/transport/flow_control.cc +39 -4
  185. data/src/core/ext/transport/chttp2/transport/flow_control.h +213 -78
  186. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +46 -1
  187. data/src/core/ext/transport/chttp2/transport/frame.cc +147 -21
  188. data/src/core/ext/transport/chttp2/transport/frame.h +44 -10
  189. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
  190. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  191. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -2
  192. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
  193. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -5
  194. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
  195. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
  196. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
  197. data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
  198. data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
  199. data/src/core/ext/transport/chttp2/transport/header_assembler.h +175 -51
  200. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  201. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -4
  202. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +1 -1
  203. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
  204. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -7
  205. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -4
  206. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
  207. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
  208. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1177 -511
  209. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +264 -174
  210. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  211. data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
  212. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -6
  213. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -16
  214. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +320 -82
  215. data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
  216. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +286 -7
  217. data/src/core/ext/transport/chttp2/transport/http2_transport.h +187 -19
  218. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +57 -1
  219. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
  220. data/src/core/ext/transport/chttp2/transport/internal.h +25 -5
  221. data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
  222. data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
  223. data/src/core/ext/transport/chttp2/transport/message_assembler.h +24 -15
  224. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -8
  225. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +1 -1
  226. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
  227. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +11 -5
  228. data/src/core/ext/transport/chttp2/transport/ping_promise.h +7 -3
  229. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
  230. data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
  231. data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
  232. data/src/core/ext/transport/chttp2/transport/stream.h +139 -59
  233. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +225 -98
  234. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -1
  235. data/src/core/ext/transport/chttp2/transport/transport_common.cc +1 -1
  236. data/src/core/ext/transport/chttp2/transport/transport_common.h +5 -0
  237. data/src/core/ext/transport/chttp2/transport/writable_streams.h +27 -11
  238. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
  239. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -2
  240. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +8 -5
  241. data/src/core/filter/auth/auth_filters.h +7 -1
  242. data/src/core/filter/auth/client_auth_filter.cc +2 -2
  243. data/src/core/filter/auth/server_auth_filter.cc +3 -3
  244. data/src/core/filter/blackboard.h +2 -2
  245. data/src/core/filter/filter_args.h +40 -2
  246. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
  247. data/src/core/handshaker/handshaker.cc +5 -5
  248. data/src/core/handshaker/handshaker.h +2 -2
  249. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
  250. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +11 -11
  251. data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
  252. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  253. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
  254. data/src/core/handshaker/proxy_mapper.h +1 -1
  255. data/src/core/handshaker/proxy_mapper_registry.h +1 -1
  256. data/src/core/handshaker/security/legacy_secure_endpoint.cc +4 -4
  257. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +7 -7
  258. data/src/core/handshaker/security/secure_endpoint.cc +15 -5
  259. data/src/core/handshaker/security/security_handshaker.cc +8 -5
  260. data/src/core/handshaker/security/security_handshaker.h +1 -1
  261. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  262. data/src/core/lib/address_utils/parse_address.cc +5 -5
  263. data/src/core/lib/address_utils/parse_address.h +2 -2
  264. data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
  265. data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
  266. data/src/core/lib/channel/channel_args.cc +1 -1
  267. data/src/core/lib/channel/channel_args.h +2 -2
  268. data/src/core/lib/channel/channel_stack.cc +22 -21
  269. data/src/core/lib/channel/channel_stack.h +5 -3
  270. data/src/core/lib/channel/channel_stack_builder.cc +8 -4
  271. data/src/core/lib/channel/channel_stack_builder.h +10 -9
  272. data/src/core/lib/channel/channel_stack_builder_impl.cc +7 -13
  273. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
  274. data/src/core/lib/channel/connected_channel.cc +2 -2
  275. data/src/core/lib/channel/promise_based_filter.cc +63 -8
  276. data/src/core/lib/channel/promise_based_filter.h +23 -8
  277. data/src/core/lib/compression/compression_internal.cc +4 -4
  278. data/src/core/lib/compression/compression_internal.h +1 -1
  279. data/src/core/lib/compression/message_compress.cc +1 -1
  280. data/src/core/lib/debug/trace.cc +2 -5
  281. data/src/core/lib/debug/trace.h +10 -0
  282. data/src/core/lib/debug/trace_flags.cc +2 -2
  283. data/src/core/lib/debug/trace_flags.h +1 -1
  284. data/src/core/lib/event_engine/ares_resolver.cc +8 -8
  285. data/src/core/lib/event_engine/ares_resolver.h +4 -4
  286. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
  287. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
  288. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
  289. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
  290. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -1
  291. data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
  292. data/src/core/lib/event_engine/default_event_engine.cc +1 -1
  293. data/src/core/lib/event_engine/event_engine.cc +1 -1
  294. data/src/core/lib/event_engine/extensions/channelz.h +1 -1
  295. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
  296. data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
  297. data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
  298. data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
  299. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -4
  300. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
  301. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +5 -5
  302. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  303. data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
  304. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  305. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
  306. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
  307. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
  308. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
  309. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +1 -1
  310. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
  311. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
  312. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
  313. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +5 -5
  314. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +6 -6
  315. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -7
  316. data/src/core/lib/event_engine/posix_engine/posix_engine.h +7 -7
  317. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +7 -4
  318. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
  319. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -4
  320. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
  321. data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
  322. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
  323. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  324. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  325. data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
  326. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +2 -2
  327. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  328. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
  329. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
  330. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
  331. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  332. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
  333. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  334. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
  335. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
  336. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
  337. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
  338. data/src/core/lib/event_engine/tcp_socket_utils.cc +4 -4
  339. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  340. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  341. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -4
  342. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
  343. data/src/core/lib/event_engine/utils.cc +3 -3
  344. data/src/core/lib/event_engine/utils.h +1 -1
  345. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
  346. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
  347. data/src/core/lib/event_engine/windows/iocp.cc +1 -1
  348. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  349. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
  350. data/src/core/lib/event_engine/windows/win_socket.cc +1 -1
  351. data/src/core/lib/event_engine/windows/win_socket.h +2 -2
  352. data/src/core/lib/event_engine/windows/windows_endpoint.cc +5 -5
  353. data/src/core/lib/event_engine/windows/windows_engine.cc +4 -4
  354. data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
  355. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  356. data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
  357. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
  358. data/src/core/lib/experiments/config.cc +4 -4
  359. data/src/core/lib/experiments/experiments.cc +174 -48
  360. data/src/core/lib/experiments/experiments.h +76 -24
  361. data/src/core/lib/iomgr/buffer_list.cc +1 -1
  362. data/src/core/lib/iomgr/call_combiner.cc +1 -1
  363. data/src/core/lib/iomgr/call_combiner.h +2 -2
  364. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  365. data/src/core/lib/iomgr/closure.h +2 -2
  366. data/src/core/lib/iomgr/combiner.cc +2 -2
  367. data/src/core/lib/iomgr/endpoint.h +1 -1
  368. data/src/core/lib/iomgr/endpoint_cfstream.cc +1 -1
  369. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  370. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  371. data/src/core/lib/iomgr/error.cc +1 -1
  372. data/src/core/lib/iomgr/error.h +2 -2
  373. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  374. data/src/core/lib/iomgr/ev_apple.cc +1 -1
  375. data/src/core/lib/iomgr/ev_epoll1_linux.cc +4 -4
  376. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  377. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  378. data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
  379. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
  380. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -5
  381. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
  382. data/src/core/lib/iomgr/exec_ctx.cc +3 -3
  383. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  384. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  385. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  386. data/src/core/lib/iomgr/iocp_windows.cc +1 -1
  387. data/src/core/lib/iomgr/iomgr.cc +1 -1
  388. data/src/core/lib/iomgr/lockfree_event.cc +1 -1
  389. data/src/core/lib/iomgr/polling_entity.cc +1 -1
  390. data/src/core/lib/iomgr/resolve_address.cc +1 -1
  391. data/src/core/lib/iomgr/resolve_address.h +2 -2
  392. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
  393. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  394. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
  395. data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
  396. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  397. data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
  398. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  399. data/src/core/lib/iomgr/tcp_posix.cc +5 -5
  400. data/src/core/lib/iomgr/tcp_server_posix.cc +20 -9
  401. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  402. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -2
  403. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  404. data/src/core/lib/iomgr/tcp_server_windows.cc +2 -2
  405. data/src/core/lib/iomgr/tcp_windows.cc +1 -1
  406. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  407. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  408. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  409. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
  410. data/src/core/lib/iomgr/vsock.cc +1 -1
  411. data/src/core/lib/iomgr/vsock.h +1 -1
  412. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
  413. data/src/core/lib/promise/activity.cc +2 -2
  414. data/src/core/lib/promise/activity.h +5 -4
  415. data/src/core/lib/promise/all_ok.h +3 -3
  416. data/src/core/lib/promise/arena_promise.h +47 -6
  417. data/src/core/lib/promise/context.h +1 -1
  418. data/src/core/lib/promise/detail/join_state.h +1 -1
  419. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  420. data/src/core/lib/promise/detail/promise_like.h +1 -1
  421. data/src/core/lib/promise/detail/seq_state.h +3 -3
  422. data/src/core/lib/promise/detail/status.h +1 -1
  423. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
  424. data/src/core/lib/promise/for_each.h +3 -3
  425. data/src/core/lib/promise/if.h +1 -1
  426. data/src/core/lib/promise/inter_activity_latch.h +3 -3
  427. data/src/core/lib/promise/inter_activity_mutex.h +1 -1
  428. data/src/core/lib/promise/interceptor_list.h +3 -3
  429. data/src/core/lib/promise/latch.h +2 -2
  430. data/src/core/lib/promise/loop.h +2 -2
  431. data/src/core/lib/promise/map.h +2 -2
  432. data/src/core/lib/promise/mpsc.cc +5 -4
  433. data/src/core/lib/promise/observable.h +2 -2
  434. data/src/core/lib/promise/party.cc +14 -8
  435. data/src/core/lib/promise/party.h +11 -4
  436. data/src/core/lib/promise/pipe.h +16 -2
  437. data/src/core/lib/promise/poll.h +2 -2
  438. data/src/core/lib/promise/promise.h +2 -2
  439. data/src/core/lib/promise/sleep.h +1 -1
  440. data/src/core/lib/promise/status_flag.h +2 -2
  441. data/src/core/lib/promise/try_join.h +3 -3
  442. data/src/core/lib/promise/try_seq.h +3 -3
  443. data/src/core/lib/promise/wait_set.h +2 -2
  444. data/src/core/lib/resource_quota/api.cc +1 -1
  445. data/src/core/lib/resource_quota/arena.cc +1 -1
  446. data/src/core/lib/resource_quota/connection_quota.h +1 -1
  447. data/src/core/lib/resource_quota/memory_quota.cc +3 -3
  448. data/src/core/lib/resource_quota/memory_quota.h +9 -5
  449. data/src/core/lib/resource_quota/periodic_update.h +1 -1
  450. data/src/core/lib/resource_quota/resource_quota.cc +8 -0
  451. data/src/core/lib/resource_quota/resource_quota.h +2 -1
  452. data/src/core/lib/resource_quota/stream_quota.cc +22 -0
  453. data/src/core/lib/resource_quota/stream_quota.h +31 -0
  454. data/src/core/lib/resource_quota/telemetry.h +1 -0
  455. data/src/core/lib/resource_quota/thread_quota.h +1 -1
  456. data/src/core/lib/security/authorization/audit_logging.cc +3 -3
  457. data/src/core/lib/security/authorization/audit_logging.h +1 -1
  458. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  459. data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
  460. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  461. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
  462. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
  463. data/src/core/lib/security/authorization/matchers.cc +2 -2
  464. data/src/core/lib/security/authorization/stdout_logger.cc +1 -1
  465. data/src/core/lib/slice/percent_encoding.cc +1 -1
  466. data/src/core/lib/slice/slice.cc +1 -1
  467. data/src/core/lib/slice/slice.h +2 -2
  468. data/src/core/lib/slice/slice_buffer.cc +1 -1
  469. data/src/core/lib/slice/slice_internal.h +1 -1
  470. data/src/core/lib/surface/call.cc +42 -14
  471. data/src/core/lib/surface/call.h +12 -5
  472. data/src/core/lib/surface/call_log_batch.cc +2 -2
  473. data/src/core/lib/surface/call_utils.cc +5 -5
  474. data/src/core/lib/surface/call_utils.h +83 -18
  475. data/src/core/lib/surface/channel.cc +2 -1
  476. data/src/core/lib/surface/channel.h +13 -3
  477. data/src/core/lib/surface/channel_create.cc +2 -2
  478. data/src/core/lib/surface/channel_create.h +1 -1
  479. data/src/core/lib/surface/channel_init.cc +5 -5
  480. data/src/core/lib/surface/channel_init.h +4 -2
  481. data/src/core/lib/surface/completion_queue.cc +4 -4
  482. data/src/core/lib/surface/filter_stack_call.cc +13 -8
  483. data/src/core/lib/surface/filter_stack_call.h +3 -3
  484. data/src/core/lib/surface/init.cc +4 -4
  485. data/src/core/lib/surface/lame_client.cc +2 -2
  486. data/src/core/lib/surface/lame_client.h +3 -3
  487. data/src/core/lib/surface/legacy_channel.cc +3 -3
  488. data/src/core/lib/surface/legacy_channel.h +1 -1
  489. data/src/core/lib/surface/validate_metadata.cc +2 -2
  490. data/src/core/lib/surface/validate_metadata.h +1 -1
  491. data/src/core/lib/surface/version.cc +2 -2
  492. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  493. data/src/core/lib/transport/bdp_estimator.h +2 -2
  494. data/src/core/lib/transport/connectivity_state.cc +1 -1
  495. data/src/core/lib/transport/connectivity_state.h +2 -2
  496. data/src/core/lib/transport/error_utils.h +1 -1
  497. data/src/core/lib/transport/promise_endpoint.cc +1 -1
  498. data/src/core/lib/transport/promise_endpoint.h +3 -3
  499. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  500. data/src/core/lib/transport/transport.cc +3 -3
  501. data/src/core/lib/transport/transport.h +62 -4
  502. data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
  503. data/src/core/lib/transport/transport_op_string.cc +2 -2
  504. data/src/core/load_balancing/address_filtering.cc +1 -1
  505. data/src/core/load_balancing/address_filtering.h +2 -2
  506. data/src/core/load_balancing/backend_metric_parser.cc +1 -1
  507. data/src/core/load_balancing/backend_metric_parser.h +1 -1
  508. data/src/core/load_balancing/child_policy_handler.cc +4 -4
  509. data/src/core/load_balancing/child_policy_handler.h +2 -2
  510. data/src/core/load_balancing/delegating_helper.h +2 -2
  511. data/src/core/load_balancing/endpoint_list.cc +4 -4
  512. data/src/core/load_balancing/endpoint_list.h +2 -2
  513. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
  514. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
  515. data/src/core/load_balancing/grpclb/grpclb.cc +13 -24
  516. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
  517. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  518. data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
  519. data/src/core/load_balancing/health_check_client.cc +9 -5
  520. data/src/core/load_balancing/health_check_client_internal.h +3 -3
  521. data/src/core/load_balancing/lb_policy.h +11 -8
  522. data/src/core/load_balancing/lb_policy_factory.h +2 -2
  523. data/src/core/load_balancing/lb_policy_registry.cc +2 -2
  524. data/src/core/load_balancing/lb_policy_registry.h +2 -2
  525. data/src/core/load_balancing/oob_backend_metric.cc +7 -3
  526. data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
  527. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +7 -15
  528. data/src/core/load_balancing/pick_first/pick_first.cc +48 -18
  529. data/src/core/load_balancing/priority/priority.cc +6 -6
  530. data/src/core/load_balancing/ring_hash/ring_hash.cc +8 -8
  531. data/src/core/load_balancing/rls/rls.cc +10 -10
  532. data/src/core/load_balancing/round_robin/round_robin.cc +7 -7
  533. data/src/core/load_balancing/subchannel_interface.h +2 -2
  534. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +1 -1
  535. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +9 -15
  536. data/src/core/load_balancing/weighted_target/weighted_target.cc +9 -9
  537. data/src/core/load_balancing/xds/cds.cc +5 -5
  538. data/src/core/load_balancing/xds/xds_cluster_impl.cc +22 -39
  539. data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
  540. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  541. data/src/core/load_balancing/xds/xds_override_host.h +1 -1
  542. data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
  543. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
  544. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
  545. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  546. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  547. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -2
  548. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +6 -6
  549. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
  550. data/src/core/resolver/dns/dns_resolver_plugin.cc +2 -2
  551. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +8 -8
  552. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
  553. data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
  554. data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
  555. data/src/core/resolver/endpoint_addresses.cc +4 -4
  556. data/src/core/resolver/endpoint_addresses.h +1 -1
  557. data/src/core/resolver/fake/fake_resolver.cc +1 -1
  558. data/src/core/resolver/fake/fake_resolver.h +3 -3
  559. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +5 -5
  560. data/src/core/resolver/polling_resolver.cc +5 -5
  561. data/src/core/resolver/polling_resolver.h +1 -1
  562. data/src/core/resolver/resolver.h +2 -2
  563. data/src/core/resolver/resolver_factory.h +2 -2
  564. data/src/core/resolver/resolver_registry.cc +1 -1
  565. data/src/core/resolver/resolver_registry.h +1 -1
  566. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  567. data/src/core/resolver/xds/xds_config.cc +1 -1
  568. data/src/core/resolver/xds/xds_config.h +3 -3
  569. data/src/core/resolver/xds/xds_dependency_manager.cc +2 -2
  570. data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
  571. data/src/core/resolver/xds/xds_resolver.cc +16 -13
  572. data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
  573. data/src/core/server/add_port.cc +2 -2
  574. data/src/core/server/server.cc +9 -5
  575. data/src/core/server/server.h +8 -7
  576. data/src/core/server/server_call_tracer_filter.cc +1 -1
  577. data/src/core/server/server_call_tracer_filter.h +5 -1
  578. data/src/core/server/server_config_selector.h +2 -2
  579. data/src/core/server/server_config_selector_filter.cc +3 -3
  580. data/src/core/server/xds_channel_stack_modifier.cc +3 -2
  581. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  582. data/src/core/server/xds_server_config_fetcher.cc +10 -10
  583. data/src/core/service_config/service_config.h +1 -1
  584. data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
  585. data/src/core/service_config/service_config_impl.cc +3 -3
  586. data/src/core/service_config/service_config_impl.h +2 -2
  587. data/src/core/service_config/service_config_parser.h +1 -1
  588. data/src/core/telemetry/call_tracer.h +2 -2
  589. data/src/core/telemetry/default_tcp_tracer.h +3 -3
  590. data/src/core/telemetry/histogram.h +1 -1
  591. data/src/core/telemetry/instrument.cc +550 -270
  592. data/src/core/telemetry/instrument.h +301 -128
  593. data/src/core/telemetry/metrics.cc +2 -0
  594. data/src/core/telemetry/metrics.h +33 -4
  595. data/src/core/telemetry/stats.h +2 -2
  596. data/src/core/telemetry/stats_data.cc +1 -1
  597. data/src/core/telemetry/stats_data.h +2 -2
  598. data/src/core/transport/auth_context.cc +1 -1
  599. data/src/core/transport/auth_context.h +2 -1
  600. data/src/core/transport/auth_context_comparator_registry.h +1 -1
  601. data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
  602. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
  603. data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
  604. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  605. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  606. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +9 -7
  607. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +1 -1
  608. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  609. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +1 -1
  610. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
  611. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
  612. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +9 -1
  613. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
  614. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +15 -2
  615. data/src/core/tsi/fake_transport_security.cc +2 -1
  616. data/src/core/tsi/local_transport_security.cc +1 -1
  617. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
  618. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
  619. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  620. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
  621. data/src/core/tsi/ssl_transport_security.cc +6 -6
  622. data/src/core/tsi/ssl_transport_security.h +1 -1
  623. data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
  624. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  625. data/src/core/tsi/transport_security_grpc.cc +8 -0
  626. data/src/core/tsi/transport_security_grpc.h +15 -0
  627. data/src/core/util/alloc.cc +1 -1
  628. data/src/core/util/backoff.h +1 -1
  629. data/src/core/util/crash.h +1 -1
  630. data/src/core/util/dual_ref_counted.h +2 -2
  631. data/src/core/util/event_log.cc +1 -1
  632. data/src/core/util/event_log.h +3 -3
  633. data/src/core/util/gcp_metadata_query.cc +5 -5
  634. data/src/core/util/gcp_metadata_query.h +2 -2
  635. data/src/core/util/grpc_check.cc +2 -0
  636. data/src/core/util/grpc_check.h +1 -1
  637. data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
  638. data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
  639. data/src/core/util/http_client/format_request.cc +1 -1
  640. data/src/core/util/http_client/httpcli.cc +3 -3
  641. data/src/core/util/http_client/httpcli.h +4 -4
  642. data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
  643. data/src/core/util/http_client/parser.cc +1 -1
  644. data/src/core/util/json/json_channel_args.h +1 -1
  645. data/src/core/util/json/json_object_loader.h +6 -6
  646. data/src/core/util/json/json_reader.cc +2 -2
  647. data/src/core/util/json/json_reader.h +1 -1
  648. data/src/core/util/json/json_util.h +3 -3
  649. data/src/core/util/json/json_writer.cc +1 -1
  650. data/src/core/util/latent_see.cc +45 -24
  651. data/src/core/util/latent_see.h +192 -24
  652. data/src/core/util/linux/cpu.cc +1 -1
  653. data/src/core/util/load_file.cc +1 -1
  654. data/src/core/util/load_file.h +1 -1
  655. data/src/core/util/log.cc +3 -3
  656. data/src/core/util/lru_cache.h +1 -1
  657. data/src/core/util/matchers.h +1 -1
  658. data/src/core/util/memory_usage.h +3 -3
  659. data/src/core/util/mpscq.h +1 -1
  660. data/src/core/util/notification.h +1 -1
  661. data/src/core/util/posix/cpu.cc +1 -1
  662. data/src/core/util/posix/stat.cc +2 -2
  663. data/src/core/util/posix/thd.cc +2 -2
  664. data/src/core/util/posix/tmpfile.cc +2 -2
  665. data/src/core/util/ref_counted.h +2 -2
  666. data/src/core/util/ref_counted_ptr.h +1 -1
  667. data/src/core/util/ref_counted_string.h +1 -1
  668. data/src/core/util/single_set_ptr.h +3 -1
  669. data/src/core/util/status_helper.cc +8 -8
  670. data/src/core/util/status_helper.h +1 -1
  671. data/src/core/util/string.cc +2 -2
  672. data/src/core/util/sync_abseil.cc +1 -1
  673. data/src/core/util/table.h +1 -1
  674. data/src/core/util/time.cc +1 -1
  675. data/src/core/util/time_precise.cc +1 -1
  676. data/src/core/util/unique_ptr_with_bitset.h +1 -1
  677. data/src/core/util/unique_type_name.h +1 -1
  678. data/src/core/util/upb_utils.h +6 -1
  679. data/src/core/util/validation_errors.cc +2 -2
  680. data/src/core/util/validation_errors.h +2 -3
  681. data/src/core/util/wait_for_single_owner.h +2 -2
  682. data/src/core/util/windows/directory_reader.cc +1 -1
  683. data/src/core/util/windows/stat.cc +2 -2
  684. data/src/core/util/windows/thd.cc +2 -2
  685. data/src/core/util/windows/time.cc +1 -1
  686. data/src/core/util/work_serializer.cc +3 -3
  687. data/src/core/util/work_serializer.h +2 -2
  688. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  689. data/src/core/xds/grpc/certificate_provider_store.h +2 -2
  690. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  691. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  692. data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
  693. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  694. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
  695. data/src/core/xds/grpc/xds_bootstrap_grpc.h +2 -2
  696. data/src/core/xds/grpc/xds_certificate_provider.cc +1 -1
  697. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  698. data/src/core/xds/grpc/xds_client_grpc.cc +5 -5
  699. data/src/core/xds/grpc/xds_client_grpc.h +2 -2
  700. data/src/core/xds/grpc/xds_cluster.cc +2 -2
  701. data/src/core/xds/grpc/xds_cluster.h +1 -1
  702. data/src/core/xds/grpc/xds_cluster_parser.cc +5 -5
  703. data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
  704. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  705. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  706. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  707. data/src/core/xds/grpc/xds_common_types.h +1 -1
  708. data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
  709. data/src/core/xds/grpc/xds_endpoint.h +2 -2
  710. data/src/core/xds/grpc/xds_endpoint_parser.cc +5 -5
  711. data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
  712. data/src/core/xds/grpc/xds_health_status.cc +1 -1
  713. data/src/core/xds/grpc/xds_health_status.h +1 -1
  714. data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
  715. data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
  716. data/src/core/xds/grpc/xds_http_filter.h +3 -3
  717. data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
  718. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
  719. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
  720. data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
  721. data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
  722. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
  723. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
  724. data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
  725. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  726. data/src/core/xds/grpc/xds_listener.cc +2 -2
  727. data/src/core/xds/grpc/xds_listener_parser.cc +6 -6
  728. data/src/core/xds/grpc/xds_listener_parser.h +1 -1
  729. data/src/core/xds/grpc/xds_matcher.cc +1 -1
  730. data/src/core/xds/grpc/xds_matcher.h +3 -3
  731. data/src/core/xds/grpc/xds_matcher_input.h +1 -1
  732. data/src/core/xds/grpc/xds_metadata.cc +1 -1
  733. data/src/core/xds/grpc/xds_metadata.h +3 -3
  734. data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
  735. data/src/core/xds/grpc/xds_route_config.cc +3 -3
  736. data/src/core/xds/grpc/xds_route_config_parser.cc +8 -8
  737. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  738. data/src/core/xds/grpc/xds_routing.cc +4 -4
  739. data/src/core/xds/grpc/xds_routing.h +2 -2
  740. data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
  741. data/src/core/xds/grpc/xds_transport_grpc.cc +1 -1
  742. data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
  743. data/src/core/xds/xds_client/lrs_client.cc +3 -3
  744. data/src/core/xds/xds_client/lrs_client.h +4 -4
  745. data/src/core/xds/xds_client/xds_api.h +1 -1
  746. data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
  747. data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
  748. data/src/core/xds/xds_client/xds_client.cc +8 -8
  749. data/src/core/xds/xds_client/xds_client.h +5 -5
  750. data/src/core/xds/xds_client/xds_locality.h +2 -2
  751. data/src/core/xds/xds_client/xds_resource_type.h +2 -2
  752. data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
  753. data/src/core/xds/xds_client/xds_transport.h +2 -2
  754. data/src/ruby/ext/grpc/extconf.rb +14 -12
  755. data/src/ruby/ext/grpc/rb_call.c +0 -1
  756. data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
  757. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  758. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  759. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  760. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  761. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  762. data/src/ruby/lib/grpc/version.rb +1 -1
  763. metadata +16 -6
@@ -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
@@ -288,6 +289,19 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
288
289
  void WriteSecurityFrame(grpc_core::SliceBuffer* data);
289
290
  void WriteSecurityFrameLocked(grpc_core::SliceBuffer* data);
290
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
+
291
305
  // We depend on the ep being available for the life of the transport in
292
306
  // at least one place - event callback in WriteEventSink. Hence, this should
293
307
  // only be orphaned in the destructor.
@@ -316,7 +330,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
316
330
  // starts a connectivity watch.
317
331
  grpc_pollset_set* interested_parties_until_recv_settings = nullptr;
318
332
 
319
- grpc_closure* notify_on_receive_settings = nullptr;
333
+ absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> notify_on_receive_settings;
320
334
  grpc_closure* notify_on_close = nullptr;
321
335
 
322
336
  /// has the upper layer closed the transport?
@@ -375,7 +389,12 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
375
389
  void* user_data, grpc_core::ServerMetadata* metadata) = nullptr;
376
390
  void* accept_stream_cb_user_data;
377
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;
378
396
  /// connectivity tracking
397
+ // TODO(roth): Get rid of this in favor of the new state watcher.
379
398
  grpc_core::ConnectivityStateTracker state_tracker;
380
399
 
381
400
  /// data to write now
@@ -593,6 +612,7 @@ struct grpc_chttp2_transport final : public grpc_core::FilterStackTransport,
593
612
 
594
613
  std::shared_ptr<grpc_core::Http2StatsCollector> http2_stats;
595
614
  grpc_core::Http2ZTraceCollector http2_ztrace_collector;
615
+ grpc_core::Timestamp last_ztrace_time = grpc_core::Timestamp::InfPast();
596
616
 
597
617
  GPR_NO_UNIQUE_ADDRESS grpc_core::latent_see::Flow write_flow;
598
618
  };
@@ -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,6 +19,8 @@
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
 
@@ -30,10 +32,13 @@
30
32
  #include "src/core/lib/slice/slice_buffer.h"
31
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
 
@@ -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
@@ -141,9 +148,11 @@ class GrpcMessageDisassembler {
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
- GRPC_DCHECK_LE(GetBufferedLength(), kMaxMessageBatchSize)
146
- << "Avoid batches larger than " << kMaxMessageBatchSize << "bytes";
147
156
  }
148
157
 
149
158
  size_t GetBufferedLength() const { return message_.Length(); }
@@ -31,14 +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/log.h"
37
- #include "absl/random/bit_gen_ref.h"
38
- #include "absl/status/status.h"
39
- #include "absl/strings/str_cat.h"
40
- #include "absl/strings/str_format.h"
41
- #include "absl/strings/string_view.h"
42
34
  #include "src/core/call/metadata_batch.h"
43
35
  #include "src/core/channelz/channelz.h"
44
36
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
@@ -77,6 +69,14 @@
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;
@@ -18,9 +18,9 @@
18
18
 
19
19
  #include <utility>
20
20
 
21
+ #include "src/core/util/grpc_check.h"
21
22
  #include "absl/meta/type_traits.h"
22
23
  #include "absl/random/distributions.h"
23
- #include "src/core/util/grpc_check.h"
24
24
 
25
25
  namespace grpc_core {
26
26
 
@@ -24,13 +24,13 @@
24
24
  #include <optional>
25
25
  #include <vector>
26
26
 
27
+ #include "src/core/channelz/property_list.h"
28
+ #include "src/core/lib/debug/trace.h"
29
+ #include "src/core/util/time.h"
27
30
  #include "absl/container/flat_hash_map.h"
28
31
  #include "absl/functional/any_invocable.h"
29
32
  #include "absl/hash/hash.h"
30
33
  #include "absl/random/bit_gen_ref.h"
31
- #include "src/core/channelz/property_list.h"
32
- #include "src/core/lib/debug/trace.h"
33
- #include "src/core/util/time.h"
34
34
 
35
35
  namespace grpc_core {
36
36
 
@@ -17,12 +17,17 @@
17
17
  //
18
18
  #include "src/core/ext/transport/chttp2/transport/ping_promise.h"
19
19
 
20
+ #include <memory>
21
+ #include <utility>
22
+
23
+ #include "src/core/lib/channel/channel_args.h"
20
24
  #include "src/core/lib/promise/latch.h"
21
25
  #include "src/core/lib/promise/map.h"
22
26
  #include "src/core/lib/promise/party.h"
23
27
  #include "src/core/lib/promise/race.h"
24
28
  #include "src/core/lib/promise/sleep.h"
25
29
  #include "src/core/lib/promise/try_seq.h"
30
+ #include "src/core/util/grpc_check.h"
26
31
  #include "src/core/util/match.h"
27
32
  #include "src/core/util/time.h"
28
33
 
@@ -54,13 +59,14 @@ Promise<absl::Status> PingManager::PingPromiseCallbacks::WaitForPingAck() {
54
59
  }
55
60
 
56
61
  // Ping System implementation
57
- PingManager::PingManager(const ChannelArgs& channel_args,
62
+ PingManager::PingManager(const ChannelArgs& channel_args, Duration ping_timeout,
58
63
  std::unique_ptr<PingInterface> ping_interface,
59
64
  std::shared_ptr<EventEngine> event_engine)
60
65
  : ping_callbacks_(event_engine),
61
66
  ping_abuse_policy_(channel_args),
62
67
  ping_rate_policy_(channel_args, /*is_client=*/true),
63
- ping_interface_(std::move(ping_interface)) {}
68
+ ping_interface_(std::move(ping_interface)),
69
+ ping_timeout_(ping_timeout) {}
64
70
 
65
71
  void PingManager::TriggerDelayedPing(const Duration wait) {
66
72
  // Spawn at most once.
@@ -146,7 +152,7 @@ void PingManager::MaybeGetSerializedPingFrames(
146
152
  << pending_ping_acks_.size()
147
153
  << " next_allowed_ping_interval: "
148
154
  << next_allowed_ping_interval;
149
- DCHECK(!opaque_data_.has_value());
155
+ GRPC_DCHECK(!opaque_data_.has_value());
150
156
  std::vector<Http2Frame> frames;
151
157
  frames.reserve(pending_ping_acks_.size() + 1); // +1 for the ping frame.
152
158
 
@@ -170,9 +176,9 @@ void PingManager::MaybeGetSerializedPingFrames(
170
176
  }
171
177
  }
172
178
 
173
- void PingManager::NotifyPingSent(const Duration ping_timeout) {
179
+ void PingManager::NotifyPingSent() {
174
180
  if (opaque_data_.has_value()) {
175
- SpawnTimeout(ping_timeout, opaque_data_.value());
181
+ SpawnTimeout(ping_timeout_, opaque_data_.value());
176
182
  SentPing();
177
183
  opaque_data_.reset();
178
184
  }
@@ -29,6 +29,7 @@
29
29
  #include "src/core/lib/promise/map.h"
30
30
  #include "src/core/lib/promise/promise.h"
31
31
  #include "src/core/lib/slice/slice_buffer.h"
32
+ #include "src/core/util/grpc_check.h"
32
33
  #include "src/core/util/shared_bit_gen.h"
33
34
  #include "src/core/util/time.h"
34
35
 
@@ -71,7 +72,7 @@ class PingInterface {
71
72
  // returned by this class on the same transport party.
72
73
  class PingManager {
73
74
  public:
74
- PingManager(const ChannelArgs& channel_args,
75
+ PingManager(const ChannelArgs& channel_args, Duration ping_timeout,
75
76
  std::unique_ptr<PingInterface> ping_interface,
76
77
  std::shared_ptr<grpc_event_engine::experimental::EventEngine>
77
78
  event_engine);
@@ -83,7 +84,7 @@ class PingManager {
83
84
 
84
85
  // Notify the ping system that a ping has been sent. This will spawn a ping
85
86
  // timeout promise.
86
- void NotifyPingSent(Duration ping_timeout);
87
+ void NotifyPingSent();
87
88
 
88
89
  // Ping Rate policy wrapper
89
90
  void ReceivedDataFrame() { ping_rate_policy_.ReceivedDataFrame(); }
@@ -132,7 +133,7 @@ class PingManager {
132
133
 
133
134
  std::optional<uint64_t> TestOnlyMaybeGetSerializedPingFrames(
134
135
  SliceBuffer& output_buffer, Duration next_allowed_ping_interval) {
135
- DCHECK(!opaque_data_.has_value());
136
+ GRPC_DCHECK(!opaque_data_.has_value());
136
137
  if (NeedToPing(next_allowed_ping_interval)) {
137
138
  uint64_t opaque_data = ping_callbacks_.StartPing();
138
139
  Http2Frame frame = GetHttp2PingFrame(/*ack*/ false, opaque_data);
@@ -153,6 +154,7 @@ class PingManager {
153
154
  std::shared_ptr<grpc_event_engine::experimental::EventEngine>
154
155
  event_engine)
155
156
  : event_engine_(event_engine) {}
157
+ ~PingPromiseCallbacks() { CancelCallbacks(); }
156
158
  Promise<absl::Status> RequestPing(absl::AnyInvocable<void()> on_initiate,
157
159
  bool important);
158
160
  Promise<absl::Status> WaitForPingAck();
@@ -220,6 +222,8 @@ class PingManager {
220
222
  std::optional<uint64_t> opaque_data_;
221
223
  std::unique_ptr<PingInterface> ping_interface_;
222
224
  std::vector<uint64_t> pending_ping_acks_;
225
+ // Duration to wait before triggering a ping timeout.
226
+ Duration ping_timeout_;
223
227
 
224
228
  void TriggerDelayedPing(Duration wait);
225
229
  bool NeedToPing(Duration next_allowed_ping_interval);
@@ -21,9 +21,9 @@
21
21
  #include <optional>
22
22
  #include <ostream>
23
23
 
24
- #include "absl/strings/str_cat.h"
25
24
  #include "src/core/lib/experiments/experiments.h"
26
25
  #include "src/core/util/match.h"
26
+ #include "absl/strings/str_cat.h"
27
27
 
28
28
  namespace grpc_core {
29
29
 
@@ -0,0 +1,31 @@
1
+ //
2
+ // Copyright 2025 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include "src/core/ext/transport/chttp2/transport/security_frame.h"
18
+
19
+ #include <cstddef>
20
+ #include <cstdint>
21
+
22
+ #include "src/core/lib/slice/slice.h"
23
+ #include "src/core/lib/slice/slice_buffer.h"
24
+ #include "src/core/lib/transport/transport_framing_endpoint_extension.h"
25
+ #include "absl/status/status.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ // TODO(tjagtap) [PH2][P1] Implement
30
+
31
+ } // namespace grpc_core
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2025 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H
18
+ #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H
19
+
20
+ #include <grpc/slice.h>
21
+ #include <stdint.h>
22
+
23
+ #include "src/core/lib/slice/slice_buffer.h"
24
+ #include "src/core/lib/transport/transport_framing_endpoint_extension.h"
25
+
26
+ namespace grpc_core {
27
+
28
+ // TODO(tjagtap) [PH2][P1] Implement
29
+
30
+ } // namespace grpc_core
31
+
32
+ #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_SECURITY_FRAME_H