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
@@ -20,13 +20,13 @@
20
20
 
21
21
  #include <grpc/support/port_platform.h>
22
22
 
23
- #include "absl/log/check.h"
24
- #include "absl/log/log.h"
25
23
  #include "src/core/ext/transport/chttp2/transport/internal.h"
26
24
  #include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
27
25
  #include "src/core/lib/debug/trace.h"
28
26
  #include "src/core/lib/experiments/experiments.h"
29
27
  #include "src/core/util/bitset.h"
28
+ #include "src/core/util/grpc_check.h"
29
+ #include "absl/log/log.h"
30
30
 
31
31
  static const char* stream_list_id_string(grpc_chttp2_stream_list_id id) {
32
32
  switch (id) {
@@ -59,7 +59,7 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
59
59
  grpc_chttp2_stream* s = t->lists[id].head;
60
60
  if (s) {
61
61
  grpc_chttp2_stream* new_head = s->links[id].next;
62
- CHECK(s->included.is_set(id));
62
+ GRPC_CHECK(s->included.is_set(id));
63
63
  if (new_head) {
64
64
  t->lists[id].head = new_head;
65
65
  new_head->links[id].prev = nullptr;
@@ -79,12 +79,12 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
79
79
 
80
80
  static void stream_list_remove(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
81
81
  grpc_chttp2_stream_list_id id) {
82
- CHECK(s->included.is_set(id));
82
+ GRPC_CHECK(s->included.is_set(id));
83
83
  s->included.clear(id);
84
84
  if (s->links[id].prev) {
85
85
  s->links[id].prev->links[id].next = s->links[id].next;
86
86
  } else {
87
- CHECK(t->lists[id].head == s);
87
+ GRPC_CHECK(t->lists[id].head == s);
88
88
  t->lists[id].head = s->links[id].next;
89
89
  }
90
90
  if (s->links[id].next) {
@@ -112,7 +112,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
112
112
  grpc_chttp2_stream* s,
113
113
  grpc_chttp2_stream_list_id id) {
114
114
  grpc_chttp2_stream* old_tail;
115
- CHECK(!s->included.is_set(id));
115
+ GRPC_CHECK(!s->included.is_set(id));
116
116
  old_tail = t->lists[id].tail;
117
117
  s->links[id].next = nullptr;
118
118
  s->links[id].prev = old_tail;
@@ -132,7 +132,7 @@ static void stream_list_add_head(grpc_chttp2_transport* t,
132
132
  grpc_chttp2_stream* s,
133
133
  grpc_chttp2_stream_list_id id) {
134
134
  grpc_chttp2_stream* old_head;
135
- CHECK(!s->included.is_set(id));
135
+ GRPC_CHECK(!s->included.is_set(id));
136
136
  old_head = t->lists[id].head;
137
137
  s->links[id].next = old_head;
138
138
  s->links[id].prev = nullptr;
@@ -170,7 +170,7 @@ static bool stream_list_prepend(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
170
170
 
171
171
  bool grpc_chttp2_list_add_writable_stream(grpc_chttp2_transport* t,
172
172
  grpc_chttp2_stream* s) {
173
- CHECK_NE(s->id, 0u);
173
+ GRPC_CHECK_NE(s->id, 0u);
174
174
  if (grpc_core::IsPrioritizeFinishedRequestsEnabled() &&
175
175
  s->send_trailing_metadata != nullptr) {
176
176
  return stream_list_prepend(t, s, GRPC_CHTTP2_LIST_WRITABLE);
@@ -16,4 +16,20 @@
16
16
  //
17
17
  //
18
18
 
19
- namespace grpc_core {} // namespace grpc_core
19
+ #include "src/core/ext/transport/chttp2/transport/transport_common.h"
20
+
21
+ #include <cstdint>
22
+
23
+ #include "src/core/util/shared_bit_gen.h"
24
+ #include "src/core/util/time.h"
25
+ #include "absl/random/random.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ Duration TarpitDuration(const int min_tarpit_duration_ms,
30
+ const int max_tarpit_duration_ms) {
31
+ return Duration::Milliseconds(absl::LogUniform<int>(
32
+ SharedBitGen(), min_tarpit_duration_ms, max_tarpit_duration_ms));
33
+ }
34
+
35
+ } // namespace grpc_core
@@ -19,9 +19,66 @@
19
19
  #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TRANSPORT_COMMON_H
20
20
  #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TRANSPORT_COMMON_H
21
21
 
22
+ #include <cstdint>
23
+
24
+ #include "src/core/util/time.h"
25
+
22
26
  // For an HTTP2 connection, this must be sent before the settings frame is sent.
23
27
  #define GRPC_CHTTP2_CLIENT_CONNECT_STRING "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
24
28
  #define GRPC_CHTTP2_CLIENT_CONNECT_STRLEN \
25
29
  (sizeof(GRPC_CHTTP2_CLIENT_CONNECT_STRING) - 1)
26
30
 
31
+ // EXPERIMENTAL: control tarpitting in chttp2
32
+ #define GRPC_ARG_HTTP_ALLOW_TARPIT "grpc.http.tarpit"
33
+ #define GRPC_ARG_HTTP_TARPIT_MIN_DURATION_MS "grpc.http.tarpit_min_duration_ms"
34
+ #define GRPC_ARG_HTTP_TARPIT_MAX_DURATION_MS "grpc.http.tarpit_max_duration_ms"
35
+
36
+ // EXPERIMENTAL: provide protection against overloading a server with too many
37
+ // requests: wait for streams to be deallocated before they stop counting
38
+ // against MAX_CONCURRENT_STREAMS
39
+ #define GRPC_ARG_MAX_CONCURRENT_STREAMS_OVERLOAD_PROTECTION \
40
+ "grpc.http.overload_protection"
41
+
42
+ // EXPERIMENTAL: Fail requests at the client if the client is over max
43
+ // concurrent streams, so they may be retried elsewhere.
44
+ #define GRPC_ARG_MAX_CONCURRENT_STREAMS_REJECT_ON_CLIENT \
45
+ "grpc.http.max_concurrent_streams_reject_on_client"
46
+
47
+ #define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
48
+
49
+ #define GRPC_CHTTP2_PING_TIMEOUT_STR "ping timeout"
50
+ #define GRPC_CHTTP2_KEEPALIVE_TIMEOUT_STR "keepalive timeout"
51
+
52
+ namespace grpc_core {
53
+
54
+ Duration TarpitDuration(int min_tarpit_duration_ms, int max_tarpit_duration_ms);
55
+
56
+ namespace http2 {
57
+ enum class WritableStreamPriority : uint8_t {
58
+ // Highest priority
59
+ kStreamClosed = 0,
60
+ kWaitForTransportFlowControl,
61
+ // Lowest Priority
62
+ kDefault,
63
+ kLastPriority
64
+ };
65
+
66
+ // Debug helper function to convert a WritableStreamPriority to a string.
67
+ inline std::string GetWritableStreamPriorityString(
68
+ const WritableStreamPriority priority) {
69
+ switch (priority) {
70
+ case WritableStreamPriority::kStreamClosed:
71
+ return "StreamClosed";
72
+ case WritableStreamPriority::kWaitForTransportFlowControl:
73
+ return "WaitForTransportFlowControl";
74
+ case WritableStreamPriority::kDefault:
75
+ return "Default";
76
+ default:
77
+ return "unknown";
78
+ }
79
+ }
80
+ } // namespace http2
81
+
82
+ } // namespace grpc_core
83
+
27
84
  #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TRANSPORT_COMMON_H
@@ -23,7 +23,7 @@
23
23
  #include <stdint.h>
24
24
  #include <stdlib.h>
25
25
 
26
- #include "absl/log/check.h"
26
+ #include "src/core/util/grpc_check.h"
27
27
 
28
28
  // Helpers for hpack varint encoding
29
29
 
@@ -49,7 +49,7 @@ class VarintWriter {
49
49
  explicit VarintWriter(size_t value)
50
50
  : value_(value),
51
51
  length_(value < kMaxInPrefix ? 1 : VarintLength(value - kMaxInPrefix)) {
52
- CHECK(value <= UINT32_MAX);
52
+ GRPC_CHECK(value <= UINT32_MAX);
53
53
  }
54
54
 
55
55
  size_t value() const { return value_; }
@@ -19,30 +19,51 @@
19
19
  #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_WRITABLE_STREAMS_H
20
20
  #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_WRITABLE_STREAMS_H
21
21
 
22
+ #include <cstdint>
23
+ #include <limits>
24
+ #include <optional>
22
25
  #include <queue>
26
+ #include <vector>
23
27
 
24
- #include "absl/log/check.h"
25
- #include "absl/log/log.h"
28
+ #include "src/core/ext/transport/chttp2/transport/transport_common.h"
26
29
  #include "src/core/lib/promise/if.h"
27
30
  #include "src/core/lib/promise/mpsc.h"
28
31
  #include "src/core/lib/promise/race.h"
32
+ #include "src/core/lib/promise/status_flag.h"
29
33
  #include "src/core/lib/promise/try_seq.h"
34
+ #include "src/core/util/grpc_check.h"
35
+ #include "absl/log/log.h"
36
+ #include "absl/status/status.h"
37
+ #include "absl/strings/str_cat.h"
30
38
 
31
39
  namespace grpc_core {
32
40
  namespace http2 {
33
41
 
42
+ namespace writable_streams_internal {
43
+ template <typename StreamPtr, typename = void>
44
+ struct HasGetStreamId {
45
+ static constexpr bool value = false;
46
+ };
47
+
48
+ template <typename StreamPtr>
49
+ struct HasGetStreamId<
50
+ StreamPtr,
51
+ absl::void_t<decltype(std::declval<StreamPtr>()->GetStreamId())>> {
52
+ static constexpr bool value =
53
+ std::is_same_v<decltype(std::declval<StreamPtr>()->GetStreamId()),
54
+ uint32_t>;
55
+ };
56
+
57
+ } // namespace writable_streams_internal
58
+
34
59
  #define GRPC_WRITABLE_STREAMS_DEBUG VLOG(2)
35
60
 
61
+ template <typename StreamPtr>
36
62
  class WritableStreams {
63
+ static_assert(writable_streams_internal::HasGetStreamId<StreamPtr>::value,
64
+ "StreamPtr must have a GetStreamId() function");
65
+
37
66
  public:
38
- enum class StreamPriority : uint8_t {
39
- // Highest priority
40
- kStreamClosed = 0,
41
- kWaitForTransportFlowControl,
42
- // Lowest Priority
43
- kDefault,
44
- kLastPriority
45
- };
46
67
  explicit WritableStreams(
47
68
  const uint32_t max_queue_size = std::numeric_limits<uint32_t>::max())
48
69
  : queue_(max_queue_size), sender_(queue_.MakeSender()) {}
@@ -53,34 +74,46 @@ class WritableStreams {
53
74
  WritableStreams(WritableStreams&&) = delete;
54
75
  WritableStreams& operator=(WritableStreams&&) = delete;
55
76
 
77
+ absl::Status EnqueueWrapper(const StreamPtr stream,
78
+ const WritableStreamPriority priority,
79
+ bool transport_tokens_available) {
80
+ if (transport_tokens_available) {
81
+ return Enqueue(stream, priority);
82
+ } else {
83
+ return BlockedOnTransportFlowControl(stream);
84
+ }
85
+ }
86
+
56
87
  // Enqueues a stream id with the given priority.
57
88
  // If this returns error, transport MUST be closed.
58
- absl::Status Enqueue(const uint32_t stream_id,
59
- const StreamPriority priority) {
89
+ absl::Status Enqueue(const StreamPtr stream,
90
+ const WritableStreamPriority priority) {
60
91
  // Streams waiting for transport flow control MUST not be added to list of
61
92
  // writable streams via this API, instead they MUST be added via
62
93
  // BlockedOnTransportFlowControl. The reason being there is no merit in
63
94
  // re-adding the stream to mpsc queue while it can be immediately enqueued
64
95
  // to the prioritized queue.
65
- DCHECK(priority != StreamPriority::kWaitForTransportFlowControl);
96
+ GRPC_DCHECK(priority !=
97
+ WritableStreamPriority::kWaitForTransportFlowControl);
66
98
  StatusFlag status = sender_.UnbufferedImmediateSend(
67
- StreamIDAndPriority{stream_id, priority}, /*tokens*/ 1);
68
- GRPC_WRITABLE_STREAMS_DEBUG << "UnbufferedImmediateEnqueue stream id "
69
- << stream_id << " with priority "
70
- << GetPriorityString(priority) << " status "
71
- << status;
72
- return (status.ok()) ? absl::OkStatus()
73
- : absl::InternalError(absl::StrCat(
74
- "Failed to enqueue stream id ", stream_id));
99
+ StreamIDAndPriority{stream, priority}, /*tokens*/ 1);
100
+ GRPC_WRITABLE_STREAMS_DEBUG
101
+ << "UnbufferedImmediateEnqueue stream with priority "
102
+ << GetWritableStreamPriorityString(priority) << " status " << status;
103
+
104
+ return (status.ok())
105
+ ? absl::OkStatus()
106
+ : absl::InternalError(absl::StrCat(
107
+ "Failed to enqueue stream to list of writable streams "));
75
108
  }
76
109
 
77
110
  // A synchronous function to add a stream id to the transport flow control
78
111
  // wait list.
79
- absl::Status BlockedOnTransportFlowControl(const uint32_t stream_id) {
80
- prioritized_queue_.Push(stream_id,
81
- StreamPriority::kWaitForTransportFlowControl);
82
- GRPC_WRITABLE_STREAMS_DEBUG << "BlockedOnTransportFlowControl stream id "
83
- << stream_id;
112
+ absl::Status BlockedOnTransportFlowControl(const StreamPtr stream) {
113
+ prioritized_queue_.Push(
114
+ stream, WritableStreamPriority::kWaitForTransportFlowControl);
115
+ GRPC_WRITABLE_STREAMS_DEBUG << "Enqueuing a stream with priority "
116
+ "kWaitForTransportFlowControl ";
84
117
  return absl::OkStatus();
85
118
  }
86
119
 
@@ -100,29 +133,33 @@ class WritableStreams {
100
133
  // prioritized queue.
101
134
  // 6. Return the stream id with the highest priority.
102
135
  // If this returns error, transport MUST be closed.
136
+ // TODO(akshitpatel) : [PH2][P2] - This will be deprecated in favor of
137
+ // WaitForReady.
103
138
  auto Next(const bool transport_tokens_available) {
104
139
  // TODO(akshitpatel) : [PH2][P2] - Need to add an immediate dequeue option
105
140
  // for the mpsc queue in favor of the race.
106
141
 
107
- return AssertResultType<absl::StatusOr<uint32_t>>(TrySeq(
142
+ return AssertResultType<absl::StatusOr<StreamPtr>>(TrySeq(
108
143
  // The current MPSC queue does not have a version of NextBatch that
109
144
  // resolves immediately. So we made this Race to ensure that the
110
145
  // "Dequeue" from the mpsc resolves immediately - Either with data , or
111
146
  // empty.
112
- Race(queue_.NextBatch(kMaxBatchSize),
113
- Immediate(ValueOrFailure<std::vector<StreamIDAndPriority>>(
114
- std::vector<StreamIDAndPriority>()))),
115
- [this,
116
- transport_tokens_available](std::vector<StreamIDAndPriority> batch) {
147
+ Race(
148
+ queue_.NextBatch(kMaxBatchSize),
149
+ Immediate(
150
+ ValueOrFailure<std::vector<std::optional<StreamIDAndPriority>>>(
151
+ std::vector<std::optional<StreamIDAndPriority>>()))),
152
+ [this, transport_tokens_available](
153
+ std::vector<std::optional<StreamIDAndPriority>> batch) {
117
154
  AddToPrioritizedQueue(batch);
118
- std::optional<uint32_t> stream_id =
155
+ std::optional<StreamPtr> stream =
119
156
  prioritized_queue_.Pop(transport_tokens_available);
120
157
  return If(
121
- stream_id.has_value(),
122
- [stream_id]() -> absl::StatusOr<uint32_t> {
123
- GRPC_WRITABLE_STREAMS_DEBUG << "Next stream id "
124
- << stream_id.value();
125
- return stream_id.value();
158
+ stream.has_value(),
159
+ [stream]() -> absl::StatusOr<StreamPtr> {
160
+ GRPC_WRITABLE_STREAMS_DEBUG << "Next stream id: "
161
+ << (*stream)->GetStreamId();
162
+ return stream.value();
126
163
  },
127
164
  [this, transport_tokens_available] {
128
165
  GRPC_WRITABLE_STREAMS_DEBUG << "Query queue for next batch";
@@ -131,22 +168,24 @@ class WritableStreams {
131
168
  // on mpsc queue to get a new batch of stream ids.
132
169
  queue_.NextBatch(kMaxBatchSize),
133
170
  [this, transport_tokens_available](
134
- ValueOrFailure<std::vector<StreamIDAndPriority>> batch)
135
- -> absl::StatusOr<uint32_t> {
171
+ ValueOrFailure<
172
+ std::vector<std::optional<StreamIDAndPriority>>>
173
+ batch) -> absl::StatusOr<StreamPtr> {
136
174
  if (batch.ok()) {
137
175
  GRPC_WRITABLE_STREAMS_DEBUG << "Next batch size "
138
176
  << batch.value().size();
139
177
  AddToPrioritizedQueue(batch.value());
140
- std::optional<uint32_t> stream_id =
178
+ std::optional<StreamPtr> stream =
141
179
  prioritized_queue_.Pop(transport_tokens_available);
142
- // TODO(akshitpatel) : [PH2][P4] - This DCHECK should
143
- // ideally be fine. But in case if queue_.NextBatch
144
- // spuriously returns an empty batch, move to a Loop
145
- // to avoid this.
146
- DCHECK(stream_id.has_value());
147
- GRPC_WRITABLE_STREAMS_DEBUG << "Next stream id "
148
- << stream_id.value();
149
- return stream_id.value();
180
+ // TODO(akshitpatel) : [PH2][P4] - This GRPC_DCHECK
181
+ // should ideally be fine. But in case if
182
+ // queue_.NextBatch spuriously returns an empty batch,
183
+ // move to a Loop to avoid this.
184
+ GRPC_DCHECK(stream.has_value());
185
+ GRPC_WRITABLE_STREAMS_DEBUG
186
+ << "Next stream id: "
187
+ << stream.value()->GetStreamId();
188
+ return stream.value();
150
189
  }
151
190
  return absl::InternalError("Failed to read from queue");
152
191
  });
@@ -154,18 +193,55 @@ class WritableStreams {
154
193
  }));
155
194
  }
156
195
 
157
- // Debug helper function to convert a StreamPriority to a string.
158
- static inline std::string GetPriorityString(const StreamPriority priority) {
159
- switch (priority) {
160
- case StreamPriority::kStreamClosed:
161
- return "StreamClosed";
162
- case StreamPriority::kWaitForTransportFlowControl:
163
- return "WaitForTransportFlowControl";
164
- case StreamPriority::kDefault:
165
- return "Default";
166
- default:
167
- return "unknown";
168
- }
196
+ // Wait for a stream to be ready to be dequeued. This is a blocking call.
197
+ // This returns a promise that resolves when there is a writeable stream ready
198
+ // to be dequeued or ForceReadyForWrite() is called.
199
+ auto WaitForReady(const bool transport_tokens_available) {
200
+ return TrySeq(
201
+ If(
202
+ PrioritizedQueueHasWritableStreams(transport_tokens_available),
203
+ [this]() {
204
+ // TODO(akshitpatel) : [PH2][P3] - This is temporary. Replace with
205
+ // native MPSC::ImmediateNextBatch.
206
+ // We already have writable streams in the prioritized queue.
207
+ // We check for any newly added streams to the un-prioritised
208
+ // queue. We dequeue to honor the priority of any newly enqueued
209
+ // streams.
210
+ return Race(
211
+ queue_.NextBatch(kMaxBatchSize),
212
+ Immediate(ValueOrFailure<
213
+ std::vector<std::optional<StreamIDAndPriority>>>(
214
+ std::vector<std::optional<StreamIDAndPriority>>())));
215
+ },
216
+ // The prioritised queue is empty. So we wait for something to
217
+ // enter the un-prioritised queue and then dequeue it.
218
+ [this]() { return queue_.NextBatch(kMaxBatchSize); }),
219
+ [this](std::vector<std::optional<StreamIDAndPriority>> batch) {
220
+ AddToPrioritizedQueue(batch);
221
+ return Empty{};
222
+ });
223
+ }
224
+
225
+ // Synchronously drain the prioritized queue.
226
+ std::optional<StreamPtr> ImmediateNext(
227
+ const bool transport_tokens_available) {
228
+ return prioritized_queue_.Pop(transport_tokens_available);
229
+ }
230
+
231
+ // Force resolve WaitForReady. This is used to induce a write cycle on the
232
+ // transport.
233
+ absl::Status ForceReadyForWrite() {
234
+ StatusFlag status =
235
+ sender_.UnbufferedImmediateSend(std::nullopt, /*tokens*/ 1);
236
+ GRPC_WRITABLE_STREAMS_DEBUG << "ForceReadyForWrite status " << status;
237
+ return (status.ok()) ? absl::OkStatus()
238
+ : absl::InternalError(
239
+ "Failed to enqueue to list of writable streams");
240
+ }
241
+
242
+ bool TestOnlyPriorityQueueHasWritableStreams(
243
+ const bool transport_tokens_available) const {
244
+ return !prioritized_queue_.HasNoWritableStreams(transport_tokens_available);
169
245
  }
170
246
 
171
247
  private:
@@ -176,21 +252,26 @@ class WritableStreams {
176
252
  // Pushes a stream id with the given priority to the queue. Sorting is done
177
253
  // based on the priority. If the priority is higher than the max priority,
178
254
  // it will be set to the default priority.
179
- void Push(const uint32_t stream_id, StreamPriority priority) {
180
- if (priority >= StreamPriority::kLastPriority) {
181
- priority = StreamPriority::kDefault;
255
+ void Push(const StreamPtr stream, WritableStreamPriority priority) {
256
+ if (priority >= WritableStreamPriority::kLastPriority) {
257
+ priority = WritableStreamPriority::kDefault;
182
258
  }
183
259
 
184
- GRPC_WRITABLE_STREAMS_DEBUG << "Pushing stream id " << stream_id
185
- << " with priority "
186
- << GetPriorityString(priority);
187
- buckets_[static_cast<uint8_t>(priority)].push(stream_id);
260
+ total_streams_++;
261
+ GRPC_WRITABLE_STREAMS_DEBUG
262
+ << "Pushing stream id: " << stream->GetStreamId() << " with priority "
263
+ << GetWritableStreamPriorityString(priority) << " with total streams "
264
+ << total_streams_;
265
+ buckets_[static_cast<uint8_t>(priority)].push(stream);
188
266
  }
189
267
 
190
268
  // Pops a stream id from the queue based on the priority. If the priority is
191
269
  // kWaitForTransportFlowControl, transport_tokens_available is checked to
192
270
  // see if the stream id can be popped.
193
- std::optional<uint32_t> Pop(const bool transport_tokens_available) {
271
+ std::optional<StreamPtr> Pop(const bool transport_tokens_available) {
272
+ if (HasNoWritableStreams(transport_tokens_available)) {
273
+ return std::nullopt;
274
+ }
194
275
  for (uint8_t i = 0; i < buckets_.size(); ++i) {
195
276
  auto& bucket = buckets_[i];
196
277
  if (!bucket.empty()) {
@@ -202,36 +283,73 @@ class WritableStreams {
202
283
  continue;
203
284
  }
204
285
 
205
- uint32_t stream_id = bucket.front();
286
+ StreamPtr stream = bucket.front();
206
287
  bucket.pop();
288
+ total_streams_--;
207
289
  GRPC_WRITABLE_STREAMS_DEBUG
208
- << "Popping stream id " << stream_id << " from priority "
209
- << GetPriorityString(static_cast<StreamPriority>(i));
210
- return stream_id;
290
+ << "Popping stream id: " << stream->GetStreamId()
291
+ << " from priority "
292
+ << GetWritableStreamPriorityString(
293
+ static_cast<WritableStreamPriority>(i))
294
+ << " with " << total_streams_ << " streams remaining";
295
+ return stream;
211
296
  }
212
297
  }
213
298
  return std::nullopt;
214
299
  }
215
300
 
301
+ // Returns true if the queue does not have any stream that can be popped.
302
+ // If transport_tokens_available is false, streams with priority of
303
+ // kWaitForTransportFlowControl are not considered.
304
+ inline bool HasNoWritableStreams(
305
+ const bool transport_tokens_available) const {
306
+ return (transport_tokens_available)
307
+ ? (total_streams_ == 0)
308
+ : (total_streams_ -
309
+ buckets_[kWaitForTransportFlowControlIndex].size() ==
310
+ 0);
311
+ }
312
+
216
313
  static constexpr uint8_t kLastPriority =
217
- static_cast<uint8_t>(StreamPriority::kLastPriority);
314
+ static_cast<uint8_t>(WritableStreamPriority::kLastPriority);
218
315
  static constexpr uint8_t kWaitForTransportFlowControlIndex =
219
- static_cast<uint8_t>(StreamPriority::kWaitForTransportFlowControl);
220
- std::vector<std::queue<uint32_t>> buckets_;
316
+ static_cast<uint8_t>(
317
+ WritableStreamPriority::kWaitForTransportFlowControl);
318
+ std::vector<std::queue<StreamPtr>> buckets_;
319
+ uint32_t total_streams_ = 0u;
221
320
  };
222
321
 
223
322
  struct StreamIDAndPriority {
224
- const uint32_t stream_id;
225
- const StreamPriority priority;
323
+ const StreamPtr stream;
324
+ const WritableStreamPriority priority;
226
325
  };
227
326
 
228
- void AddToPrioritizedQueue(const std::vector<StreamIDAndPriority>& batch) {
229
- for (auto stream_id_priority : batch) {
230
- prioritized_queue_.Push(stream_id_priority.stream_id,
231
- stream_id_priority.priority);
327
+ void AddToPrioritizedQueue(
328
+ const std::vector<std::optional<StreamIDAndPriority>>& batch) {
329
+ GRPC_WRITABLE_STREAMS_DEBUG << "AddToPrioritizedQueue batch size "
330
+ << batch.size();
331
+ for (const std::optional<StreamIDAndPriority>& stream_id_priority : batch) {
332
+ // Ignore stream id kInvalidStreamID. These are used to force resolve
333
+ // WaitForReady().
334
+ if (!stream_id_priority.has_value()) {
335
+ GRPC_WRITABLE_STREAMS_DEBUG << "Skipping nullopt from batch";
336
+ continue;
337
+ }
338
+ prioritized_queue_.Push(stream_id_priority->stream,
339
+ stream_id_priority->priority);
232
340
  }
233
341
  }
234
342
 
343
+ // Returns true if the prioritized queue has any stream that can be popped.
344
+ bool PrioritizedQueueHasWritableStreams(
345
+ const bool transport_tokens_available) const {
346
+ GRPC_WRITABLE_STREAMS_DEBUG
347
+ << "PrioritizedQueueHasWritableStreams "
348
+ << !prioritized_queue_.HasNoWritableStreams(transport_tokens_available)
349
+ << " transport_tokens_available " << transport_tokens_available;
350
+ return !prioritized_queue_.HasNoWritableStreams(transport_tokens_available);
351
+ }
352
+
235
353
  // TODO(akshitpatel) : [PH2][P4] - Verify if this works for large number of
236
354
  // active streams based on the load tests. The reasoning to use max uint32_t
237
355
  // is that even when the streams are dequeued from the queue, the streams
@@ -243,8 +361,8 @@ class WritableStreams {
243
361
  static constexpr uint32_t kMaxBatchSize =
244
362
  std::numeric_limits<uint32_t>::max();
245
363
 
246
- MpscReceiver<StreamIDAndPriority> queue_;
247
- MpscSender<StreamIDAndPriority> sender_;
364
+ MpscReceiver<std::optional<StreamIDAndPriority>> queue_;
365
+ MpscSender<std::optional<StreamIDAndPriority>> sender_;
248
366
  PrioritizedQueue prioritized_queue_;
249
367
  };
250
368
 
@@ -18,14 +18,14 @@
18
18
 
19
19
  #include <algorithm>
20
20
 
21
- #include "absl/log/check.h"
21
+ #include "src/core/util/grpc_check.h"
22
22
 
23
23
  namespace grpc_core {
24
24
 
25
25
  size_t Chttp2WriteSizePolicy::WriteTargetSize() { return current_target_; }
26
26
 
27
27
  void Chttp2WriteSizePolicy::BeginWrite(size_t size) {
28
- CHECK(experiment_start_time_ == Timestamp::InfFuture());
28
+ GRPC_CHECK_EQ(experiment_start_time_, Timestamp::InfFuture());
29
29
  if (size < current_target_ * 7 / 10) {
30
30
  // If we were trending fast but stopped getting enough data to verify, then
31
31
  // reset back to the default state.
@@ -30,10 +30,6 @@
30
30
  #include <string>
31
31
  #include <utility>
32
32
 
33
- #include "absl/container/flat_hash_map.h"
34
- #include "absl/log/check.h"
35
- #include "absl/log/log.h"
36
- #include "absl/status/status.h"
37
33
  #include "src/core/call/metadata_batch.h"
38
34
  #include "src/core/channelz/channelz.h"
39
35
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
@@ -69,12 +65,16 @@
69
65
  #include "src/core/telemetry/stats.h"
70
66
  #include "src/core/telemetry/stats_data.h"
71
67
  #include "src/core/telemetry/tcp_tracer.h"
68
+ #include "src/core/util/grpc_check.h"
72
69
  #include "src/core/util/match.h"
73
70
  #include "src/core/util/ref_counted.h"
74
71
  #include "src/core/util/ref_counted_ptr.h"
75
72
  #include "src/core/util/shared_bit_gen.h"
76
73
  #include "src/core/util/time.h"
77
74
  #include "src/core/util/useful.h"
75
+ #include "absl/container/flat_hash_map.h"
76
+ #include "absl/log/log.h"
77
+ #include "absl/status/status.h"
78
78
 
79
79
  // IWYU pragma: no_include "src/core/util/orphanable.h"
80
80
 
@@ -273,7 +273,7 @@ class WriteContext {
273
273
  grpc_core::Http2Frame frame(std::move(*update));
274
274
  Serialize(absl::Span<grpc_core::Http2Frame>(&frame, 1), t_->outbuf);
275
275
  if (t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
276
- CHECK(
276
+ GRPC_CHECK(
277
277
  t_->settings_ack_watchdog ==
278
278
  grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid);
279
279
  // We base settings timeout on keepalive timeout, but double it to allow
@@ -293,7 +293,7 @@ class WriteContext {
293
293
  // simple writes are queued to qbuf, and flushed here
294
294
  grpc_slice_buffer_move_into(&t_->qbuf, t_->outbuf.c_slice_buffer());
295
295
  t_->num_pending_induced_frames = 0;
296
- CHECK_EQ(t_->qbuf.count, 0u);
296
+ GRPC_CHECK_EQ(t_->qbuf.count, 0u);
297
297
  }
298
298
 
299
299
  void FlushWindowUpdates() {