grpc 1.75.0 → 1.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (834) 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/version.rb +1 -1
  832. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  833. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  834. metadata +51 -6
@@ -29,13 +29,9 @@
29
29
  #include <string>
30
30
  #include <utility>
31
31
 
32
- #include "absl/base/thread_annotations.h"
33
- #include "absl/container/flat_hash_set.h"
34
- #include "absl/functional/any_invocable.h"
35
- #include "absl/status/status.h"
36
- #include "absl/strings/string_view.h"
37
32
  #include "src/core/call/metadata_batch.h"
38
33
  #include "src/core/channelz/channelz.h"
34
+ #include "src/core/client_channel/buffered_call.h"
39
35
  #include "src/core/client_channel/client_channel_args.h"
40
36
  #include "src/core/client_channel/client_channel_factory.h"
41
37
  #include "src/core/client_channel/config_selector.h"
@@ -67,6 +63,12 @@
67
63
  #include "src/core/util/time.h"
68
64
  #include "src/core/util/time_precise.h"
69
65
  #include "src/core/util/work_serializer.h"
66
+ #include "absl/base/thread_annotations.h"
67
+ #include "absl/container/flat_hash_map.h"
68
+ #include "absl/container/flat_hash_set.h"
69
+ #include "absl/functional/any_invocable.h"
70
+ #include "absl/status/status.h"
71
+ #include "absl/strings/string_view.h"
70
72
 
71
73
  //
72
74
  // Client channel filter
@@ -79,16 +81,6 @@
79
81
  // Calls on a disconnected client channel are queued until a connection is
80
82
  // established.
81
83
 
82
- // Max number of batches that can be pending on a call at any given
83
- // time. This includes one batch for each of the following ops:
84
- // recv_initial_metadata
85
- // send_initial_metadata
86
- // recv_message
87
- // send_message
88
- // recv_trailing_metadata
89
- // send_trailing_metadata
90
- #define MAX_PENDING_BATCHES 6
91
-
92
84
  namespace grpc_core {
93
85
 
94
86
  class ClientChannelFilter final {
@@ -96,7 +88,6 @@ class ClientChannelFilter final {
96
88
  static const grpc_channel_filter kFilter;
97
89
 
98
90
  class LoadBalancedCall;
99
- class FilterBasedLoadBalancedCall;
100
91
 
101
92
  // Flag that this object gets stored in channel args as a raw pointer.
102
93
  struct RawPointerChannelArgTag {};
@@ -143,14 +134,13 @@ class ClientChannelFilter final {
143
134
  void RemoveConnectivityWatcher(
144
135
  AsyncConnectivityStateWatcherInterface* watcher);
145
136
 
146
- OrphanablePtr<FilterBasedLoadBalancedCall> CreateLoadBalancedCall(
137
+ OrphanablePtr<LoadBalancedCall> CreateLoadBalancedCall(
147
138
  const grpc_call_element_args& args, grpc_polling_entity* pollent,
148
139
  grpc_closure* on_call_destruction_complete,
149
140
  absl::AnyInvocable<void()> on_commit, bool is_transparent_retry);
150
141
 
151
142
  private:
152
143
  class CallData;
153
- class FilterBasedCallData;
154
144
  class ResolverResultHandler;
155
145
  class SubchannelWrapper;
156
146
  class ClientChannelControlHelper;
@@ -318,15 +308,12 @@ class ClientChannelFilter final {
318
308
  ABSL_GUARDED_BY(*work_serializer_);
319
309
  RefCountedPtr<SubchannelPoolInterface> subchannel_pool_
320
310
  ABSL_GUARDED_BY(*work_serializer_);
321
- // The number of SubchannelWrapper instances referencing a given Subchannel.
322
- std::map<Subchannel*, int> subchannel_refcount_map_
323
- ABSL_GUARDED_BY(*work_serializer_);
324
- // The set of SubchannelWrappers that currently exist.
325
- // No need to hold a ref, since the map is updated in the control-plane
311
+ // The set of SubchannelWrapper instances referencing a given Subchannel.
312
+ // No need to hold refs, since the map is updated in the control-plane
326
313
  // work_serializer when the SubchannelWrappers are created and destroyed.
327
- absl::flat_hash_set<SubchannelWrapper*> subchannel_wrappers_
328
- ABSL_GUARDED_BY(*work_serializer_);
329
- int keepalive_time_ ABSL_GUARDED_BY(*work_serializer_) = -1;
314
+ absl::flat_hash_map<Subchannel*, absl::flat_hash_set<SubchannelWrapper*>>
315
+ subchannel_map_ ABSL_GUARDED_BY(*work_serializer_);
316
+ Duration keepalive_time_ ABSL_GUARDED_BY(*work_serializer_);
330
317
  grpc_error_handle disconnect_error_ ABSL_GUARDED_BY(*work_serializer_);
331
318
 
332
319
  //
@@ -352,15 +339,26 @@ class ClientChannelFilter final {
352
339
 
353
340
  // TODO(roth): As part of simplifying cancellation in the filter stack,
354
341
  // this should no longer need to be ref-counted.
355
- class ClientChannelFilter::LoadBalancedCall
342
+ class ClientChannelFilter::LoadBalancedCall final
356
343
  : public InternallyRefCounted<LoadBalancedCall, UnrefCallDtor> {
357
344
  public:
358
- LoadBalancedCall(ClientChannelFilter* chand, Arena* arena,
345
+ // If on_call_destruction_complete is non-null, then it will be
346
+ // invoked once the LoadBalancedCall is completely destroyed.
347
+ // If it is null, then the caller is responsible for checking whether
348
+ // the LB call has a subchannel call and ensuring that the
349
+ // on_call_destruction_complete closure passed down from the surface
350
+ // is not invoked until after the subchannel call stack is destroyed.
351
+ LoadBalancedCall(ClientChannelFilter* chand,
352
+ const grpc_call_element_args& args,
353
+ grpc_polling_entity* pollent,
354
+ grpc_closure* on_call_destruction_complete,
359
355
  absl::AnyInvocable<void()> on_commit,
360
356
  bool is_transparent_retry);
361
357
  ~LoadBalancedCall() override;
362
358
 
363
- void Orphan() override { Unref(); }
359
+ void Orphan() override;
360
+
361
+ void StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch);
364
362
 
365
363
  // Called by channel when removing a call from the list of queued calls.
366
364
  void RemoveCallFromLbQueuedCallsLocked()
@@ -368,22 +366,22 @@ class ClientChannelFilter::LoadBalancedCall
368
366
 
369
367
  // Called by the channel for each queued call when a new picker
370
368
  // becomes available.
371
- virtual void RetryPickLocked()
372
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_) = 0;
369
+ void RetryPickLocked()
370
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
373
371
 
374
- protected:
375
- ClientChannelFilter* chand() const { return chand_; }
376
- ClientCallTracerInterface::CallAttemptTracer* call_attempt_tracer() const {
377
- return call_attempt_tracer_;
378
- }
379
- ConnectedSubchannel* connected_subchannel() const {
380
- return connected_subchannel_.get();
372
+ RefCountedPtr<SubchannelCall> subchannel_call() const {
373
+ return subchannel_call_;
381
374
  }
382
- LoadBalancingPolicy::SubchannelCallTrackerInterface*
383
- lb_subchannel_call_tracker() const {
384
- return lb_subchannel_call_tracker_.get();
375
+
376
+ private:
377
+ class LbCallState;
378
+ class Metadata;
379
+ class BackendMetricAccessor;
380
+ class LbQueuedCallCanceller;
381
+
382
+ grpc_metadata_batch* send_initial_metadata() const {
383
+ return buffered_call_.send_initial_metadata();
385
384
  }
386
- Arena* arena() const { return arena_; }
387
385
 
388
386
  void Commit() {
389
387
  auto on_commit = std::move(on_commit_);
@@ -409,14 +407,6 @@ class ClientChannelFilter::LoadBalancedCall
409
407
 
410
408
  void RecordLatency();
411
409
 
412
- private:
413
- class LbCallState;
414
- class Metadata;
415
- class BackendMetricAccessor;
416
-
417
- virtual grpc_polling_entity* pollent() = 0;
418
- virtual grpc_metadata_batch* send_initial_metadata() const = 0;
419
-
420
410
  // Helper function for performing an LB pick with a specified picker.
421
411
  // Returns true if the pick is complete.
422
412
  bool PickSubchannelImpl(LoadBalancingPolicy::SubchannelPicker* picker,
@@ -425,94 +415,6 @@ class ClientChannelFilter::LoadBalancedCall
425
415
  void AddCallToLbQueuedCallsLocked()
426
416
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
427
417
 
428
- // Called when adding the call to the LB queue.
429
- virtual void OnAddToQueueLocked()
430
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_) = 0;
431
-
432
- ClientChannelFilter* chand_;
433
- // When we start a new attempt for a call, we might not have cleaned up the
434
- // previous attempt yet leading to a situation where we have two active call
435
- // attempt tracers, and so we cannot rely on the arena to give us the right
436
- // tracer when performing cleanup.
437
- ClientCallTracerInterface::CallAttemptTracer* call_attempt_tracer_;
438
-
439
- absl::AnyInvocable<void()> on_commit_;
440
-
441
- RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
442
- const BackendMetricData* backend_metric_data_ = nullptr;
443
- std::unique_ptr<LoadBalancingPolicy::SubchannelCallTrackerInterface>
444
- lb_subchannel_call_tracker_;
445
- Arena* const arena_;
446
- };
447
-
448
- class ClientChannelFilter::FilterBasedLoadBalancedCall final
449
- : public ClientChannelFilter::LoadBalancedCall {
450
- public:
451
- // If on_call_destruction_complete is non-null, then it will be
452
- // invoked once the LoadBalancedCall is completely destroyed.
453
- // If it is null, then the caller is responsible for checking whether
454
- // the LB call has a subchannel call and ensuring that the
455
- // on_call_destruction_complete closure passed down from the surface
456
- // is not invoked until after the subchannel call stack is destroyed.
457
- FilterBasedLoadBalancedCall(ClientChannelFilter* chand,
458
- const grpc_call_element_args& args,
459
- grpc_polling_entity* pollent,
460
- grpc_closure* on_call_destruction_complete,
461
- absl::AnyInvocable<void()> on_commit,
462
- bool is_transparent_retry);
463
- ~FilterBasedLoadBalancedCall() override;
464
-
465
- void Orphan() override;
466
-
467
- void StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch);
468
-
469
- RefCountedPtr<SubchannelCall> subchannel_call() const {
470
- return subchannel_call_;
471
- }
472
-
473
- private:
474
- class LbQueuedCallCanceller;
475
-
476
- // Work-around for Windows compilers that don't allow nested classes
477
- // to access protected members of the enclosing class's parent class.
478
- using LoadBalancedCall::chand;
479
- using LoadBalancedCall::Commit;
480
-
481
- grpc_polling_entity* pollent() override { return pollent_; }
482
- grpc_metadata_batch* send_initial_metadata() const override {
483
- return pending_batches_[0]
484
- ->payload->send_initial_metadata.send_initial_metadata;
485
- }
486
-
487
- // Returns the index into pending_batches_ to be used for batch.
488
- static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
489
- void PendingBatchesAdd(grpc_transport_stream_op_batch* batch);
490
- static void FailPendingBatchInCallCombiner(void* arg,
491
- grpc_error_handle error);
492
- // A predicate type and some useful implementations for PendingBatchesFail().
493
- typedef bool (*YieldCallCombinerPredicate)(
494
- const CallCombinerClosureList& closures);
495
- static bool YieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
496
- return true;
497
- }
498
- static bool NoYieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
499
- return false;
500
- }
501
- static bool YieldCallCombinerIfPendingBatchesFound(
502
- const CallCombinerClosureList& closures) {
503
- return closures.size() > 0;
504
- }
505
- // Fails all pending batches.
506
- // If yield_call_combiner_predicate returns true, assumes responsibility for
507
- // yielding the call combiner.
508
- void PendingBatchesFail(
509
- grpc_error_handle error,
510
- YieldCallCombinerPredicate yield_call_combiner_predicate);
511
- static void ResumePendingBatchInCallCombiner(void* arg,
512
- grpc_error_handle ignored);
513
- // Resumes all pending batches on subchannel_call_.
514
- void PendingBatchesResume();
515
-
516
418
  static void SendInitialMetadataOnComplete(void* arg, grpc_error_handle error);
517
419
  static void RecvInitialMetadataReady(void* arg, grpc_error_handle error);
518
420
  static void RecvTrailingMetadataReady(void* arg, grpc_error_handle error);
@@ -521,14 +423,15 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall final
521
423
  // and when it is queued and the channel gets a new picker.
522
424
  void TryPick(bool was_queued);
523
425
 
524
- void OnAddToQueueLocked() override
525
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
526
-
527
- void RetryPickLocked() override
528
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
529
-
530
426
  void CreateSubchannelCall();
531
427
 
428
+ ClientChannelFilter* chand_;
429
+ // When we start a new attempt for a call, we might not have cleaned up the
430
+ // previous attempt yet leading to a situation where we have two active call
431
+ // attempt tracers, and so we cannot rely on the arena to give us the right
432
+ // tracer when performing cleanup.
433
+ CallAttemptTracer* call_attempt_tracer_;
434
+
532
435
  // TODO(roth): Instead of duplicating these fields in every filter
533
436
  // that uses any one of them, we should store them in the call
534
437
  // context. This will save per-call memory overhead.
@@ -536,6 +439,15 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall final
536
439
  CallCombiner* call_combiner_;
537
440
  grpc_polling_entity* pollent_;
538
441
  grpc_closure* on_call_destruction_complete_;
442
+ Arena* const arena_;
443
+
444
+ absl::AnyInvocable<void()> on_commit_;
445
+
446
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
447
+ const BackendMetricData* backend_metric_data_ = nullptr;
448
+ std::unique_ptr<LoadBalancingPolicy::SubchannelCallTrackerInterface>
449
+ lb_subchannel_call_tracker_;
450
+
539
451
  std::optional<Slice> peer_string_;
540
452
 
541
453
  // Set when we get a cancel_stream op.
@@ -560,12 +472,7 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall final
560
472
  grpc_closure recv_trailing_metadata_ready_;
561
473
  grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
562
474
 
563
- // Batches are added to this list when received from above.
564
- // They are removed when we are done handling the batch (i.e., when
565
- // either we have invoked all of the batch's callbacks or we have
566
- // passed the batch down to the subchannel call and are not
567
- // intercepting any of its callbacks).
568
- grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
475
+ BufferedCall buffered_call_;
569
476
  };
570
477
 
571
478
  } // namespace grpc_core
@@ -21,15 +21,15 @@
21
21
 
22
22
  #include <utility>
23
23
 
24
- #include "absl/functional/any_invocable.h"
25
- #include "absl/log/check.h"
26
24
  #include "src/core/call/call_destination.h"
27
25
  #include "src/core/lib/resource_quota/arena.h"
28
26
  #include "src/core/load_balancing/lb_policy.h"
29
27
  #include "src/core/service_config/service_config_call_data.h"
30
28
  #include "src/core/telemetry/call_tracer.h"
31
29
  #include "src/core/util/down_cast.h"
30
+ #include "src/core/util/grpc_check.h"
32
31
  #include "src/core/util/unique_type_name.h"
32
+ #include "absl/functional/any_invocable.h"
33
33
 
34
34
  //
35
35
  // This file contains internal interfaces used to allow various plugins
@@ -41,6 +41,10 @@
41
41
  #define GRPC_ARG_HEALTH_CHECK_SERVICE_NAME \
42
42
  "grpc.internal.health_check_service_name"
43
43
 
44
+ // Max number of connections per subchannel.
45
+ #define GRPC_ARG_MAX_CONNECTIONS_PER_SUBCHANNEL \
46
+ "grpc.internal.max_connections_per_subchannel"
47
+
44
48
  namespace grpc_core {
45
49
 
46
50
  // Internal type for LB call state interface. Provides an interface for
@@ -54,8 +58,7 @@ class ClientChannelLbCallState : public LoadBalancingPolicy::CallState {
54
58
 
55
59
  virtual ServiceConfigCallData::CallAttributeInterface* GetCallAttribute(
56
60
  UniqueTypeName type) const = 0;
57
- virtual ClientCallTracerInterface::CallAttemptTracer* GetCallAttemptTracer()
58
- const = 0;
61
+ virtual CallAttemptTracer* GetCallAttemptTracer() const = 0;
59
62
  };
60
63
 
61
64
  // Internal type for ServiceConfigCallData. Handles call commits.
@@ -65,7 +68,7 @@ class ClientChannelServiceConfigCallData final : public ServiceConfigCallData {
65
68
  : ServiceConfigCallData(arena) {}
66
69
 
67
70
  void SetOnCommit(absl::AnyInvocable<void()> on_commit) {
68
- CHECK(on_commit_ == nullptr);
71
+ GRPC_CHECK(on_commit_ == nullptr);
69
72
  on_commit_ = std::move(on_commit);
70
73
  }
71
74
 
@@ -22,11 +22,12 @@
22
22
  #include <optional>
23
23
  #include <utility>
24
24
 
25
+ #include "src/core/load_balancing/lb_policy_registry.h"
26
+ #include "src/core/util/env.h"
25
27
  #include "absl/status/status.h"
26
28
  #include "absl/status/statusor.h"
27
29
  #include "absl/strings/ascii.h"
28
30
  #include "absl/strings/str_cat.h"
29
- #include "src/core/load_balancing/lb_policy_registry.h"
30
31
 
31
32
  // As per the retry design, we do not allow more than 5 retry attempts.
32
33
  #define MAX_MAX_RETRY_ATTEMPTS 5
@@ -34,6 +35,27 @@
34
35
  namespace grpc_core {
35
36
  namespace internal {
36
37
 
38
+ namespace {
39
+
40
+ bool ConnectionScalingEnabled() {
41
+ auto value =
42
+ GetEnv("GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING");
43
+ if (!value.has_value()) return false;
44
+ bool parsed_value;
45
+ bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
46
+ return parse_succeeded && parsed_value;
47
+ }
48
+
49
+ class ConnectionScalingJsonArgs final : public JsonArgs {
50
+ public:
51
+ bool IsEnabled(absl::string_view key) const override {
52
+ if (key == "connection_scaling") return ConnectionScalingEnabled();
53
+ return true;
54
+ }
55
+ };
56
+
57
+ } // namespace
58
+
37
59
  //
38
60
  // ClientChannelGlobalParsedConfig::HealthCheckConfig
39
61
  //
@@ -48,6 +70,21 @@ ClientChannelGlobalParsedConfig::HealthCheckConfig::JsonLoader(
48
70
  return loader;
49
71
  }
50
72
 
73
+ //
74
+ // ClientChannelGlobalParsedConfig::ConnectionScaling
75
+ //
76
+
77
+ const JsonLoaderInterface*
78
+ ClientChannelGlobalParsedConfig::ConnectionScaling::JsonLoader(
79
+ const JsonArgs&) {
80
+ static const auto* loader =
81
+ JsonObjectLoader<ConnectionScaling>()
82
+ .OptionalField("maxConnectionsPerSubchannel",
83
+ &ConnectionScaling::max_connections_per_subchannel)
84
+ .Finish();
85
+ return loader;
86
+ }
87
+
51
88
  //
52
89
  // ClientChannelGlobalParsedConfig
53
90
  //
@@ -63,6 +100,9 @@ const JsonLoaderInterface* ClientChannelGlobalParsedConfig::JsonLoader(
63
100
  &ClientChannelGlobalParsedConfig::parsed_deprecated_lb_policy_)
64
101
  .OptionalField("healthCheckConfig",
65
102
  &ClientChannelGlobalParsedConfig::health_check_config_)
103
+ .OptionalField("connectionScaling",
104
+ &ClientChannelGlobalParsedConfig::connection_scaling_,
105
+ "connection_scaling")
66
106
  .Finish();
67
107
  return loader;
68
108
  }
@@ -138,14 +178,14 @@ ClientChannelServiceConfigParser::ParseGlobalParams(const ChannelArgs& /*args*/,
138
178
  const Json& json,
139
179
  ValidationErrors* errors) {
140
180
  return LoadFromJson<std::unique_ptr<ClientChannelGlobalParsedConfig>>(
141
- json, JsonArgs(), errors);
181
+ json, ConnectionScalingJsonArgs(), errors);
142
182
  }
143
183
 
144
184
  std::unique_ptr<ServiceConfigParser::ParsedConfig>
145
185
  ClientChannelServiceConfigParser::ParsePerMethodParams(
146
186
  const ChannelArgs& /*args*/, const Json& json, ValidationErrors* errors) {
147
187
  return LoadFromJson<std::unique_ptr<ClientChannelMethodParsedConfig>>(
148
- json, JsonArgs(), errors);
188
+ json, ConnectionScalingJsonArgs(), errors);
149
189
  }
150
190
 
151
191
  } // namespace internal
@@ -24,7 +24,6 @@
24
24
  #include <optional>
25
25
  #include <string>
26
26
 
27
- #include "absl/strings/string_view.h"
28
27
  #include "src/core/config/core_configuration.h"
29
28
  #include "src/core/lib/channel/channel_args.h"
30
29
  #include "src/core/load_balancing/lb_policy.h"
@@ -35,6 +34,7 @@
35
34
  #include "src/core/util/ref_counted_ptr.h"
36
35
  #include "src/core/util/time.h"
37
36
  #include "src/core/util/validation_errors.h"
37
+ #include "absl/strings/string_view.h"
38
38
 
39
39
  namespace grpc_core {
40
40
  namespace internal {
@@ -54,6 +54,10 @@ class ClientChannelGlobalParsedConfig final
54
54
  return health_check_config_.service_name;
55
55
  }
56
56
 
57
+ uint32_t max_connections_per_subchannel() const {
58
+ return connection_scaling_.max_connections_per_subchannel;
59
+ }
60
+
57
61
  static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
58
62
  void JsonPostLoad(const Json& json, const JsonArgs&,
59
63
  ValidationErrors* errors);
@@ -65,9 +69,16 @@ class ClientChannelGlobalParsedConfig final
65
69
  static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
66
70
  };
67
71
 
72
+ struct ConnectionScaling {
73
+ uint32_t max_connections_per_subchannel = 0;
74
+
75
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
76
+ };
77
+
68
78
  RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config_;
69
79
  std::string parsed_deprecated_lb_policy_;
70
80
  HealthCheckConfig health_check_config_;
81
+ ConnectionScaling connection_scaling_;
71
82
  };
72
83
 
73
84
  class ClientChannelMethodParsedConfig final
@@ -24,9 +24,6 @@
24
24
  #include <utility>
25
25
  #include <vector>
26
26
 
27
- #include "absl/log/check.h"
28
- #include "absl/status/status.h"
29
- #include "absl/strings/string_view.h"
30
27
  #include "src/core/call/interception_chain.h"
31
28
  #include "src/core/call/metadata_batch.h"
32
29
  #include "src/core/client_channel/client_channel_internal.h"
@@ -35,10 +32,13 @@
35
32
  #include "src/core/lib/resource_quota/arena.h"
36
33
  #include "src/core/lib/slice/slice.h"
37
34
  #include "src/core/service_config/service_config.h"
35
+ #include "src/core/util/grpc_check.h"
38
36
  #include "src/core/util/ref_counted.h"
39
37
  #include "src/core/util/ref_counted_ptr.h"
40
38
  #include "src/core/util/unique_type_name.h"
41
39
  #include "src/core/util/useful.h"
40
+ #include "absl/status/status.h"
41
+ #include "absl/strings/string_view.h"
42
42
 
43
43
  // Channel arg key for ConfigSelector.
44
44
  #define GRPC_ARG_CONFIG_SELECTOR "grpc.internal.config_selector"
@@ -100,7 +100,7 @@ class DefaultConfigSelector final : public ConfigSelector {
100
100
  // The client channel code ensures that this will never be null.
101
101
  // If neither the resolver nor the client application provide a
102
102
  // config, a default empty config will be used.
103
- DCHECK(service_config_ != nullptr);
103
+ GRPC_DCHECK(service_config_ != nullptr);
104
104
  }
105
105
 
106
106
  UniqueTypeName name() const override {
@@ -110,7 +110,7 @@ class DefaultConfigSelector final : public ConfigSelector {
110
110
 
111
111
  absl::Status GetCallConfig(GetCallConfigArgs args) override {
112
112
  Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata());
113
- CHECK_NE(path, nullptr);
113
+ GRPC_CHECK_NE(path, nullptr);
114
114
  auto* parsed_method_configs =
115
115
  service_config_->GetMethodParsedConfigVector(path->c_slice());
116
116
  args.service_config_call_data->SetServiceConfig(service_config_,
@@ -53,6 +53,8 @@ class SubchannelConnector : public InternallyRefCounted<SubchannelConnector> {
53
53
  Transport* transport = nullptr;
54
54
  // Channel args to be passed to filters.
55
55
  ChannelArgs channel_args;
56
+ // Initial MAX_CONCURRENT_STREAMS value.
57
+ uint32_t max_concurrent_streams;
56
58
 
57
59
  void Reset() {
58
60
  if (transport != nullptr) {
@@ -22,9 +22,6 @@
22
22
  #include <new>
23
23
  #include <utility>
24
24
 
25
- #include "absl/log/check.h"
26
- #include "absl/log/log.h"
27
- #include "absl/status/statusor.h"
28
25
  #include "src/core/lib/channel/channel_args.h"
29
26
  #include "src/core/lib/channel/channel_stack.h"
30
27
  #include "src/core/lib/channel/channel_stack_builder_impl.h"
@@ -32,7 +29,10 @@
32
29
  #include "src/core/lib/surface/channel_stack_type.h"
33
30
  #include "src/core/lib/surface/lame_client.h"
34
31
  #include "src/core/util/alloc.h"
32
+ #include "src/core/util/grpc_check.h"
35
33
  #include "src/core/util/status_helper.h"
34
+ #include "absl/log/log.h"
35
+ #include "absl/status/statusor.h"
36
36
 
37
37
  // Conversion between call and call stack.
38
38
  #define CALL_TO_CALL_STACK(call) \
@@ -80,8 +80,8 @@ void DynamicFilters::Call::StartTransportStreamOpBatch(
80
80
  }
81
81
 
82
82
  void DynamicFilters::Call::SetAfterCallStackDestroy(grpc_closure* closure) {
83
- CHECK_EQ(after_call_stack_destroy_, nullptr);
84
- CHECK_NE(closure, nullptr);
83
+ GRPC_CHECK_EQ(after_call_stack_destroy_, nullptr);
84
+ GRPC_CHECK_NE(closure, nullptr);
85
85
  after_call_stack_destroy_ = closure;
86
86
  }
87
87
 
@@ -26,43 +26,6 @@
26
26
 
27
27
  namespace grpc_core {
28
28
 
29
- RefCountedPtr<LegacyGlobalSubchannelPool>
30
- LegacyGlobalSubchannelPool::instance() {
31
- static LegacyGlobalSubchannelPool* p = new LegacyGlobalSubchannelPool();
32
- return p->RefAsSubclass<LegacyGlobalSubchannelPool>();
33
- }
34
-
35
- RefCountedPtr<Subchannel> LegacyGlobalSubchannelPool::RegisterSubchannel(
36
- const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) {
37
- MutexLock lock(&mu_);
38
- auto it = subchannel_map_.find(key);
39
- if (it != subchannel_map_.end()) {
40
- RefCountedPtr<Subchannel> existing = it->second->RefIfNonZero();
41
- if (existing != nullptr) return existing;
42
- }
43
- subchannel_map_[key] = constructed.get();
44
- return constructed;
45
- }
46
-
47
- void LegacyGlobalSubchannelPool::UnregisterSubchannel(const SubchannelKey& key,
48
- Subchannel* subchannel) {
49
- MutexLock lock(&mu_);
50
- auto it = subchannel_map_.find(key);
51
- // delete only if key hasn't been re-registered to a different subchannel
52
- // between strong-unreffing and unregistration of subchannel.
53
- if (it != subchannel_map_.end() && it->second == subchannel) {
54
- subchannel_map_.erase(it);
55
- }
56
- }
57
-
58
- RefCountedPtr<Subchannel> LegacyGlobalSubchannelPool::FindSubchannel(
59
- const SubchannelKey& key) {
60
- MutexLock lock(&mu_);
61
- auto it = subchannel_map_.find(key);
62
- if (it == subchannel_map_.end()) return nullptr;
63
- return it->second->RefIfNonZero();
64
- }
65
-
66
29
  RefCountedPtr<GlobalSubchannelPool> GlobalSubchannelPool::instance() {
67
30
  static GlobalSubchannelPool* p = new GlobalSubchannelPool();
68
31
  return p->RefAsSubclass<GlobalSubchannelPool>();
@@ -23,40 +23,13 @@
23
23
 
24
24
  #include <map>
25
25
 
26
- #include "absl/base/thread_annotations.h"
27
26
  #include "src/core/client_channel/subchannel_pool_interface.h"
28
27
  #include "src/core/util/ref_counted_ptr.h"
29
28
  #include "src/core/util/sync.h"
29
+ #include "absl/base/thread_annotations.h"
30
30
 
31
31
  namespace grpc_core {
32
32
 
33
- // The global subchannel pool. It shares subchannels among channels. There
34
- // should be only one instance of this class.
35
- class LegacyGlobalSubchannelPool final : public SubchannelPoolInterface {
36
- public:
37
- // Gets the singleton instance.
38
- static RefCountedPtr<LegacyGlobalSubchannelPool> instance();
39
-
40
- // Implements interface methods.
41
- RefCountedPtr<Subchannel> RegisterSubchannel(
42
- const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) override
43
- ABSL_LOCKS_EXCLUDED(mu_);
44
- void UnregisterSubchannel(const SubchannelKey& key,
45
- Subchannel* subchannel) override
46
- ABSL_LOCKS_EXCLUDED(mu_);
47
- RefCountedPtr<Subchannel> FindSubchannel(const SubchannelKey& key) override
48
- ABSL_LOCKS_EXCLUDED(mu_);
49
-
50
- private:
51
- LegacyGlobalSubchannelPool() {}
52
- ~LegacyGlobalSubchannelPool() override {}
53
-
54
- // A map from subchannel key to subchannel.
55
- std::map<SubchannelKey, Subchannel*> subchannel_map_ ABSL_GUARDED_BY(mu_);
56
- // To protect subchannel_map_.
57
- Mutex mu_;
58
- };
59
-
60
33
  // The global subchannel pool. It shares subchannels among channels. There
61
34
  // should be only one instance of this class.
62
35
  class GlobalSubchannelPool final : public SubchannelPoolInterface {
@@ -21,9 +21,9 @@
21
21
  #include <string>
22
22
  #include <vector>
23
23
 
24
- #include "absl/strings/string_view.h"
25
24
  #include "src/core/call/metadata_batch.h"
26
25
  #include "src/core/load_balancing/lb_policy.h"
26
+ #include "absl/strings/string_view.h"
27
27
 
28
28
  namespace grpc_core {
29
29