grpc 1.76.0 → 1.78.0.pre1

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