grpc 1.75.0 → 1.78.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (839) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +24 -5
  3. data/include/grpc/credentials.h +27 -6
  4. data/include/grpc/event_engine/memory_allocator.h +2 -0
  5. data/include/grpc/event_engine/memory_request.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +5 -0
  7. data/include/grpc/support/metrics.h +7 -1
  8. data/src/core/call/call_filters.cc +5 -5
  9. data/src/core/call/call_filters.h +211 -37
  10. data/src/core/call/call_spine.cc +1 -1
  11. data/src/core/call/call_spine.h +54 -32
  12. data/src/core/call/channelz_context.h +30 -0
  13. data/src/core/call/client_call.cc +49 -10
  14. data/src/core/call/client_call.h +6 -3
  15. data/src/core/call/filter_fusion.h +9 -9
  16. data/src/core/call/interception_chain.h +7 -6
  17. data/src/core/call/metadata_batch.cc +49 -55
  18. data/src/core/call/metadata_batch.h +10 -9
  19. data/src/core/call/metadata_info.cc +1 -1
  20. data/src/core/call/parsed_metadata.h +2 -2
  21. data/src/core/call/request_buffer.cc +1 -1
  22. data/src/core/call/security_context.cc +2 -2
  23. data/src/core/call/security_context.h +1 -1
  24. data/src/core/call/server_call.cc +5 -5
  25. data/src/core/call/server_call.h +6 -4
  26. data/src/core/call/simple_slice_based_metadata.h +1 -1
  27. data/src/core/call/status_util.cc +1 -1
  28. data/src/core/channelz/channel_trace.cc +1 -1
  29. data/src/core/channelz/channel_trace.h +3 -3
  30. data/src/core/channelz/channelz.cc +25 -29
  31. data/src/core/channelz/channelz.h +73 -22
  32. data/src/core/channelz/channelz_registry.cc +2 -2
  33. data/src/core/channelz/channelz_registry.h +53 -2
  34. data/src/core/channelz/property_list.cc +18 -0
  35. data/src/core/channelz/property_list.h +15 -4
  36. data/src/core/channelz/text_encode.cc +66 -0
  37. data/src/core/channelz/text_encode.h +29 -0
  38. data/src/core/channelz/v2tov1/convert.cc +17 -6
  39. data/src/core/channelz/v2tov1/legacy_api.cc +18 -12
  40. data/src/core/channelz/v2tov1/property_list.cc +2 -1
  41. data/src/core/channelz/ztrace_collector.h +260 -87
  42. data/src/core/client_channel/backup_poller.cc +7 -8
  43. data/src/core/client_channel/buffered_call.cc +140 -0
  44. data/src/core/client_channel/buffered_call.h +104 -0
  45. data/src/core/client_channel/client_channel.cc +144 -84
  46. data/src/core/client_channel/client_channel.h +8 -11
  47. data/src/core/client_channel/client_channel_factory.h +1 -1
  48. data/src/core/client_channel/client_channel_filter.cc +424 -686
  49. data/src/core/client_channel/client_channel_filter.h +57 -150
  50. data/src/core/client_channel/client_channel_internal.h +8 -5
  51. data/src/core/client_channel/client_channel_service_config.cc +43 -3
  52. data/src/core/client_channel/client_channel_service_config.h +12 -1
  53. data/src/core/client_channel/config_selector.h +5 -5
  54. data/src/core/client_channel/connector.h +2 -0
  55. data/src/core/client_channel/dynamic_filters.cc +5 -5
  56. data/src/core/client_channel/global_subchannel_pool.cc +0 -37
  57. data/src/core/client_channel/global_subchannel_pool.h +1 -28
  58. data/src/core/client_channel/lb_metadata.h +1 -1
  59. data/src/core/client_channel/load_balanced_call_destination.cc +10 -12
  60. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  61. data/src/core/client_channel/local_subchannel_pool.cc +4 -4
  62. data/src/core/client_channel/retry_filter.cc +2 -2
  63. data/src/core/client_channel/retry_filter.h +3 -3
  64. data/src/core/client_channel/retry_filter_legacy_call_data.cc +11 -12
  65. data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
  66. data/src/core/client_channel/retry_service_config.cc +3 -3
  67. data/src/core/client_channel/retry_service_config.h +1 -1
  68. data/src/core/client_channel/subchannel.cc +114 -25
  69. data/src/core/client_channel/subchannel.h +24 -8
  70. data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
  71. data/src/core/client_channel/subchannel_pool_interface.h +1 -1
  72. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  73. data/src/core/client_channel/subchannel_stream_client.h +3 -3
  74. data/src/core/config/config_vars.cc +38 -3
  75. data/src/core/config/config_vars.h +26 -0
  76. data/src/core/config/core_configuration.cc +5 -5
  77. data/src/core/config/core_configuration.h +8 -8
  78. data/src/core/config/load_config.cc +13 -1
  79. data/src/core/config/load_config.h +2 -0
  80. data/src/core/credentials/call/call_credentials.h +4 -4
  81. data/src/core/credentials/call/call_creds_registry.h +1 -1
  82. data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
  83. data/src/core/credentials/call/call_creds_util.cc +7 -6
  84. data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
  85. data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
  86. data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
  87. data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
  88. data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
  89. data/src/core/credentials/call/external/external_account_credentials.h +1 -1
  90. data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
  91. data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
  92. data/src/core/credentials/call/external/url_external_account_credentials.cc +7 -7
  93. data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
  94. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
  95. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
  96. data/src/core/credentials/call/iam/iam_credentials.cc +6 -6
  97. data/src/core/credentials/call/iam/iam_credentials.h +1 -1
  98. data/src/core/credentials/call/json_util.cc +1 -1
  99. data/src/core/credentials/call/jwt/json_token.cc +7 -7
  100. data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
  101. data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
  102. data/src/core/credentials/call/jwt/jwt_verifier.cc +19 -18
  103. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
  104. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
  105. data/src/core/credentials/call/jwt_util.cc +3 -3
  106. data/src/core/credentials/call/jwt_util.h +1 -1
  107. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +49 -72
  108. data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
  109. data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
  110. data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
  111. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
  112. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
  113. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -5
  114. data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -15
  115. data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
  116. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +23 -3
  117. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
  118. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
  119. data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
  120. data/src/core/credentials/transport/channel_creds_registry.h +1 -1
  121. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  122. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +7 -7
  123. data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
  124. data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
  125. data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
  126. data/src/core/credentials/transport/fake/fake_security_connector.cc +7 -7
  127. data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
  128. data/src/core/credentials/transport/google_default/google_default_credentials.cc +83 -39
  129. data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
  130. data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
  131. data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
  132. data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
  133. data/src/core/credentials/transport/security_connector.cc +6 -6
  134. data/src/core/credentials/transport/security_connector.h +2 -2
  135. data/src/core/credentials/transport/ssl/ssl_credentials.cc +13 -13
  136. data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
  137. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -8
  138. data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
  139. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
  140. data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
  141. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -25
  142. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
  143. data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
  144. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +8 -8
  145. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -5
  146. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  147. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
  148. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
  149. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
  150. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
  151. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
  152. data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
  153. data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
  154. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -13
  155. data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
  156. data/src/core/credentials/transport/tls/tls_credentials.cc +3 -3
  157. data/src/core/credentials/transport/tls/tls_security_connector.cc +15 -15
  158. data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
  159. data/src/core/credentials/transport/transport_credentials.cc +3 -3
  160. data/src/core/credentials/transport/transport_credentials.h +4 -4
  161. data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
  162. data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
  163. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
  164. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
  165. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +6 -4
  166. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
  167. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
  168. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
  169. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
  170. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  171. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
  172. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  173. data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
  174. data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
  175. data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
  176. data/src/core/ext/filters/http/client_authority_filter.h +4 -1
  177. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
  178. data/src/core/ext/filters/http/message_compress/compression_filter.cc +11 -11
  179. data/src/core/ext/filters/http/message_compress/compression_filter.h +24 -5
  180. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  181. data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
  182. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
  183. data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
  184. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  185. data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
  186. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  187. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  188. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +14 -14
  189. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
  190. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  191. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
  192. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +58 -44
  193. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
  194. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +25 -24
  195. data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
  196. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
  197. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +306 -148
  199. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
  200. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -7
  201. data/src/core/ext/transport/chttp2/transport/flow_control.h +223 -83
  202. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
  203. data/src/core/ext/transport/chttp2/transport/frame.cc +175 -27
  204. data/src/core/ext/transport/chttp2/transport/frame.h +58 -10
  205. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  206. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  207. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
  208. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -6
  209. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  210. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
  211. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  213. data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
  214. data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
  215. data/src/core/ext/transport/chttp2/transport/header_assembler.h +194 -54
  216. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +3 -3
  217. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -6
  218. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
  219. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
  220. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
  221. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +34 -34
  222. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
  223. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -8
  224. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
  225. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1475 -632
  226. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +384 -373
  227. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  228. data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
  229. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -3
  230. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -5
  231. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
  232. data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
  233. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +337 -30
  234. data/src/core/ext/transport/chttp2/transport/http2_transport.h +196 -21
  235. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +172 -72
  236. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
  237. data/src/core/ext/transport/chttp2/transport/internal.h +31 -19
  238. data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
  239. data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
  240. data/src/core/ext/transport/chttp2/transport/message_assembler.h +30 -21
  241. data/src/core/ext/transport/chttp2/transport/parsing.cc +25 -23
  242. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  243. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
  244. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +70 -28
  245. data/src/core/ext/transport/chttp2/transport/ping_promise.h +63 -23
  246. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
  247. data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
  248. data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
  249. data/src/core/ext/transport/chttp2/transport/stream.h +287 -0
  250. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +476 -208
  251. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +8 -8
  252. data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
  253. data/src/core/ext/transport/chttp2/transport/transport_common.h +57 -0
  254. data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
  255. data/src/core/ext/transport/chttp2/transport/writable_streams.h +202 -84
  256. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
  257. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
  258. data/src/core/ext/transport/inproc/inproc_transport.cc +9 -3
  259. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +11 -8
  260. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
  261. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
  262. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
  263. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
  264. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
  267. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
  268. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
  269. data/src/core/filter/auth/auth_filters.h +7 -1
  270. data/src/core/filter/auth/client_auth_filter.cc +2 -2
  271. data/src/core/filter/auth/server_auth_filter.cc +5 -5
  272. data/src/core/filter/blackboard.h +2 -2
  273. data/src/core/filter/filter_args.h +40 -2
  274. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
  275. data/src/core/handshaker/handshaker.cc +8 -8
  276. data/src/core/handshaker/handshaker.h +2 -2
  277. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
  278. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +12 -12
  279. data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
  280. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
  282. data/src/core/handshaker/proxy_mapper.h +1 -1
  283. data/src/core/handshaker/proxy_mapper_registry.h +1 -1
  284. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -6
  285. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +38 -15
  286. data/src/core/handshaker/security/secure_endpoint.cc +31 -11
  287. data/src/core/handshaker/security/security_handshaker.cc +11 -8
  288. data/src/core/handshaker/security/security_handshaker.h +1 -1
  289. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -6
  290. data/src/core/lib/address_utils/parse_address.cc +5 -5
  291. data/src/core/lib/address_utils/parse_address.h +2 -2
  292. data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
  293. data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
  294. data/src/core/lib/channel/channel_args.cc +1 -1
  295. data/src/core/lib/channel/channel_args.h +2 -2
  296. data/src/core/lib/channel/channel_stack.cc +29 -25
  297. data/src/core/lib/channel/channel_stack.h +8 -3
  298. data/src/core/lib/channel/channel_stack_builder.cc +8 -4
  299. data/src/core/lib/channel/channel_stack_builder.h +10 -9
  300. data/src/core/lib/channel/channel_stack_builder_impl.cc +8 -13
  301. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
  302. data/src/core/lib/channel/connected_channel.cc +4 -4
  303. data/src/core/lib/channel/promise_based_filter.cc +132 -72
  304. data/src/core/lib/channel/promise_based_filter.h +39 -23
  305. data/src/core/lib/compression/compression_internal.cc +6 -6
  306. data/src/core/lib/compression/compression_internal.h +1 -1
  307. data/src/core/lib/compression/message_compress.cc +8 -8
  308. data/src/core/lib/debug/trace.cc +2 -5
  309. data/src/core/lib/debug/trace.h +10 -0
  310. data/src/core/lib/debug/trace_flags.cc +2 -2
  311. data/src/core/lib/debug/trace_flags.h +1 -1
  312. data/src/core/lib/event_engine/ares_resolver.cc +30 -28
  313. data/src/core/lib/event_engine/ares_resolver.h +4 -4
  314. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -3
  315. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
  316. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
  317. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +4 -4
  318. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
  319. data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
  320. data/src/core/lib/event_engine/default_event_engine.cc +1 -1
  321. data/src/core/lib/event_engine/event_engine.cc +1 -1
  322. data/src/core/lib/event_engine/extensions/channelz.h +3 -3
  323. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
  324. data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
  325. data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
  326. data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
  327. data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
  328. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -12
  329. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
  330. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -15
  331. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  332. data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
  333. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  334. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
  335. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
  336. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
  337. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
  338. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
  339. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
  340. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
  341. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
  342. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -27
  343. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -17
  344. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +175 -177
  345. data/src/core/lib/event_engine/posix_engine/posix_engine.h +40 -61
  346. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +11 -7
  347. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
  348. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +9 -9
  349. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
  350. data/src/core/lib/event_engine/posix_engine/posix_interface.h +2 -2
  351. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
  352. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  353. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
  354. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  355. data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
  356. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -4
  357. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  358. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
  359. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
  360. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
  361. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  362. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
  363. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  364. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
  365. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
  366. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
  367. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
  368. data/src/core/lib/event_engine/resolved_address.cc +3 -3
  369. data/src/core/lib/event_engine/shim.cc +8 -11
  370. data/src/core/lib/event_engine/shim.h +2 -1
  371. data/src/core/lib/event_engine/slice.cc +2 -2
  372. data/src/core/lib/event_engine/tcp_socket_utils.cc +15 -15
  373. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  374. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  375. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +11 -11
  376. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
  377. data/src/core/lib/event_engine/utils.cc +3 -3
  378. data/src/core/lib/event_engine/utils.h +1 -1
  379. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +32 -32
  380. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
  381. data/src/core/lib/event_engine/windows/iocp.cc +11 -11
  382. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  383. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
  384. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  385. data/src/core/lib/event_engine/windows/win_socket.h +2 -2
  386. data/src/core/lib/event_engine/windows/windows_endpoint.cc +16 -16
  387. data/src/core/lib/event_engine/windows/windows_engine.cc +20 -18
  388. data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
  389. data/src/core/lib/event_engine/windows/windows_listener.cc +10 -10
  390. data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
  391. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
  392. data/src/core/lib/experiments/config.cc +4 -4
  393. data/src/core/lib/experiments/experiments.cc +255 -42
  394. data/src/core/lib/experiments/experiments.h +105 -21
  395. data/src/core/lib/iomgr/buffer_list.cc +1 -1
  396. data/src/core/lib/iomgr/call_combiner.cc +4 -4
  397. data/src/core/lib/iomgr/call_combiner.h +2 -2
  398. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  399. data/src/core/lib/iomgr/closure.h +2 -2
  400. data/src/core/lib/iomgr/combiner.cc +2 -2
  401. data/src/core/lib/iomgr/endpoint.h +1 -1
  402. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -7
  403. data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
  404. data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
  405. data/src/core/lib/iomgr/error.cc +1 -1
  406. data/src/core/lib/iomgr/error.h +2 -2
  407. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  408. data/src/core/lib/iomgr/ev_apple.cc +1 -1
  409. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  410. data/src/core/lib/iomgr/ev_poll_posix.cc +14 -14
  411. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  412. data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
  413. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
  414. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +10 -9
  415. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
  416. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
  417. data/src/core/lib/iomgr/exec_ctx.cc +3 -3
  418. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  419. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  420. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  421. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  422. data/src/core/lib/iomgr/iomgr.cc +1 -1
  423. data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
  424. data/src/core/lib/iomgr/lockfree_event.cc +3 -3
  425. data/src/core/lib/iomgr/polling_entity.cc +4 -4
  426. data/src/core/lib/iomgr/resolve_address.cc +1 -1
  427. data/src/core/lib/iomgr/resolve_address.h +2 -2
  428. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
  429. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  430. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
  431. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -4
  432. data/src/core/lib/iomgr/socket_windows.cc +6 -6
  433. data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
  434. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -7
  435. data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
  436. data/src/core/lib/iomgr/tcp_posix.cc +47 -47
  437. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  438. data/src/core/lib/iomgr/tcp_server.h +7 -0
  439. data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
  440. data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
  441. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
  442. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
  443. data/src/core/lib/iomgr/tcp_server_windows.cc +70 -31
  444. data/src/core/lib/iomgr/tcp_windows.cc +8 -8
  445. data/src/core/lib/iomgr/timer_generic.cc +5 -5
  446. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  447. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  448. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
  449. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
  450. data/src/core/lib/iomgr/vsock.cc +1 -1
  451. data/src/core/lib/iomgr/vsock.h +1 -1
  452. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
  453. data/src/core/lib/promise/activity.cc +3 -3
  454. data/src/core/lib/promise/activity.h +11 -10
  455. data/src/core/lib/promise/all_ok.h +3 -3
  456. data/src/core/lib/promise/arena_promise.h +47 -6
  457. data/src/core/lib/promise/context.h +3 -3
  458. data/src/core/lib/promise/detail/join_state.h +10 -10
  459. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  460. data/src/core/lib/promise/detail/promise_like.h +1 -1
  461. data/src/core/lib/promise/detail/seq_state.h +16 -16
  462. data/src/core/lib/promise/detail/status.h +2 -2
  463. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
  464. data/src/core/lib/promise/for_each.h +8 -8
  465. data/src/core/lib/promise/if.h +1 -1
  466. data/src/core/lib/promise/inter_activity_latch.h +3 -3
  467. data/src/core/lib/promise/inter_activity_mutex.h +1 -1
  468. data/src/core/lib/promise/interceptor_list.h +5 -5
  469. data/src/core/lib/promise/latch.h +9 -9
  470. data/src/core/lib/promise/loop.h +2 -2
  471. data/src/core/lib/promise/map.h +2 -2
  472. data/src/core/lib/promise/mpsc.cc +31 -30
  473. data/src/core/lib/promise/mpsc.h +2 -2
  474. data/src/core/lib/promise/observable.h +6 -6
  475. data/src/core/lib/promise/party.cc +43 -30
  476. data/src/core/lib/promise/party.h +27 -23
  477. data/src/core/lib/promise/pipe.h +31 -17
  478. data/src/core/lib/promise/poll.h +6 -5
  479. data/src/core/lib/promise/promise.h +2 -4
  480. data/src/core/lib/promise/sleep.cc +3 -1
  481. data/src/core/lib/promise/sleep.h +1 -1
  482. data/src/core/lib/promise/status_flag.h +8 -8
  483. data/src/core/lib/promise/try_join.h +5 -5
  484. data/src/core/lib/promise/try_seq.h +5 -5
  485. data/src/core/lib/promise/wait_set.h +2 -2
  486. data/src/core/lib/resource_quota/api.cc +1 -1
  487. data/src/core/lib/resource_quota/arena.cc +1 -1
  488. data/src/core/lib/resource_quota/arena.h +15 -2
  489. data/src/core/lib/resource_quota/connection_quota.cc +9 -7
  490. data/src/core/lib/resource_quota/connection_quota.h +1 -1
  491. data/src/core/lib/resource_quota/memory_quota.cc +48 -27
  492. data/src/core/lib/resource_quota/memory_quota.h +56 -20
  493. data/src/core/lib/resource_quota/periodic_update.h +1 -1
  494. data/src/core/lib/resource_quota/resource_quota.cc +8 -0
  495. data/src/core/lib/resource_quota/resource_quota.h +2 -1
  496. data/src/core/lib/resource_quota/stream_quota.cc +22 -0
  497. data/src/core/lib/resource_quota/stream_quota.h +31 -0
  498. data/src/core/lib/resource_quota/telemetry.h +55 -0
  499. data/src/core/lib/resource_quota/thread_quota.cc +2 -2
  500. data/src/core/lib/resource_quota/thread_quota.h +1 -1
  501. data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
  502. data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
  503. data/src/core/lib/security/authorization/audit_logging.cc +7 -7
  504. data/src/core/lib/security/authorization/audit_logging.h +1 -1
  505. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  506. data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
  507. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  508. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
  509. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
  510. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
  511. data/src/core/lib/security/authorization/matchers.cc +2 -2
  512. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  513. data/src/core/lib/slice/percent_encoding.cc +1 -1
  514. data/src/core/lib/slice/slice.cc +1 -1
  515. data/src/core/lib/slice/slice.h +2 -2
  516. data/src/core/lib/slice/slice_buffer.cc +1 -1
  517. data/src/core/lib/slice/slice_internal.h +1 -1
  518. data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
  519. data/src/core/lib/surface/call.cc +58 -28
  520. data/src/core/lib/surface/call.h +13 -6
  521. data/src/core/lib/surface/call_log_batch.cc +2 -2
  522. data/src/core/lib/surface/call_utils.cc +7 -7
  523. data/src/core/lib/surface/call_utils.h +85 -20
  524. data/src/core/lib/surface/channel.cc +6 -5
  525. data/src/core/lib/surface/channel.h +13 -3
  526. data/src/core/lib/surface/channel_create.cc +12 -8
  527. data/src/core/lib/surface/channel_create.h +1 -1
  528. data/src/core/lib/surface/channel_init.cc +84 -27
  529. data/src/core/lib/surface/channel_init.h +30 -13
  530. data/src/core/lib/surface/completion_queue.cc +21 -20
  531. data/src/core/lib/surface/completion_queue_factory.cc +7 -7
  532. data/src/core/lib/surface/connection_context.h +45 -2
  533. data/src/core/lib/surface/filter_stack_call.cc +25 -31
  534. data/src/core/lib/surface/filter_stack_call.h +6 -7
  535. data/src/core/lib/surface/init.cc +4 -4
  536. data/src/core/lib/surface/lame_client.cc +2 -2
  537. data/src/core/lib/surface/lame_client.h +3 -3
  538. data/src/core/lib/surface/legacy_channel.cc +10 -10
  539. data/src/core/lib/surface/legacy_channel.h +1 -1
  540. data/src/core/lib/surface/validate_metadata.cc +2 -2
  541. data/src/core/lib/surface/validate_metadata.h +3 -3
  542. data/src/core/lib/surface/version.cc +2 -2
  543. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  544. data/src/core/lib/transport/bdp_estimator.h +5 -5
  545. data/src/core/lib/transport/connectivity_state.cc +1 -1
  546. data/src/core/lib/transport/connectivity_state.h +2 -2
  547. data/src/core/lib/transport/error_utils.h +1 -1
  548. data/src/core/lib/transport/promise_endpoint.cc +4 -4
  549. data/src/core/lib/transport/promise_endpoint.h +11 -11
  550. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  551. data/src/core/lib/transport/transport.cc +3 -3
  552. data/src/core/lib/transport/transport.h +62 -4
  553. data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
  554. data/src/core/lib/transport/transport_op_string.cc +2 -2
  555. data/src/core/load_balancing/address_filtering.cc +1 -1
  556. data/src/core/load_balancing/address_filtering.h +2 -2
  557. data/src/core/load_balancing/backend_metric_parser.cc +1 -1
  558. data/src/core/load_balancing/backend_metric_parser.h +1 -1
  559. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  560. data/src/core/load_balancing/child_policy_handler.h +2 -2
  561. data/src/core/load_balancing/delegating_helper.h +2 -2
  562. data/src/core/load_balancing/endpoint_list.cc +6 -6
  563. data/src/core/load_balancing/endpoint_list.h +2 -2
  564. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
  565. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
  566. data/src/core/load_balancing/grpclb/grpclb.cc +37 -48
  567. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
  568. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  569. data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
  570. data/src/core/load_balancing/health_check_client.cc +13 -9
  571. data/src/core/load_balancing/health_check_client_internal.h +5 -5
  572. data/src/core/load_balancing/lb_policy.h +11 -8
  573. data/src/core/load_balancing/lb_policy_factory.h +2 -2
  574. data/src/core/load_balancing/lb_policy_registry.cc +3 -3
  575. data/src/core/load_balancing/lb_policy_registry.h +2 -2
  576. data/src/core/load_balancing/oob_backend_metric.cc +11 -7
  577. data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
  578. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +9 -17
  579. data/src/core/load_balancing/pick_first/pick_first.cc +62 -32
  580. data/src/core/load_balancing/priority/priority.cc +29 -30
  581. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
  582. data/src/core/load_balancing/rls/rls.cc +23 -23
  583. data/src/core/load_balancing/round_robin/round_robin.cc +16 -16
  584. data/src/core/load_balancing/subchannel_interface.h +2 -2
  585. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
  586. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +42 -41
  587. data/src/core/load_balancing/weighted_target/weighted_target.cc +14 -14
  588. data/src/core/load_balancing/xds/cds.cc +81 -37
  589. data/src/core/load_balancing/xds/xds_cluster_impl.cc +24 -41
  590. data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
  591. data/src/core/load_balancing/xds/xds_override_host.cc +14 -14
  592. data/src/core/load_balancing/xds/xds_override_host.h +1 -1
  593. data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
  594. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
  595. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
  596. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  597. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  598. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +35 -35
  599. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +16 -16
  600. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
  601. data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
  602. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
  603. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
  604. data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
  605. data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
  606. data/src/core/resolver/endpoint_addresses.cc +6 -6
  607. data/src/core/resolver/endpoint_addresses.h +4 -1
  608. data/src/core/resolver/fake/fake_resolver.cc +3 -3
  609. data/src/core/resolver/fake/fake_resolver.h +3 -3
  610. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
  611. data/src/core/resolver/polling_resolver.cc +8 -8
  612. data/src/core/resolver/polling_resolver.h +1 -1
  613. data/src/core/resolver/resolver.h +2 -2
  614. data/src/core/resolver/resolver_factory.h +2 -2
  615. data/src/core/resolver/resolver_registry.cc +5 -4
  616. data/src/core/resolver/resolver_registry.h +1 -1
  617. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  618. data/src/core/resolver/xds/xds_config.cc +1 -1
  619. data/src/core/resolver/xds/xds_config.h +3 -3
  620. data/src/core/resolver/xds/xds_dependency_manager.cc +7 -7
  621. data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
  622. data/src/core/resolver/xds/xds_resolver.cc +25 -22
  623. data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
  624. data/src/core/server/add_port.cc +2 -2
  625. data/src/core/server/server.cc +47 -43
  626. data/src/core/server/server.h +8 -7
  627. data/src/core/server/server_call_tracer_filter.cc +1 -1
  628. data/src/core/server/server_call_tracer_filter.h +9 -5
  629. data/src/core/server/server_config_selector.h +2 -2
  630. data/src/core/server/server_config_selector_filter.cc +5 -5
  631. data/src/core/server/xds_channel_stack_modifier.cc +3 -2
  632. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  633. data/src/core/server/xds_server_config_fetcher.cc +19 -18
  634. data/src/core/service_config/service_config.h +1 -1
  635. data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
  636. data/src/core/service_config/service_config_impl.cc +3 -3
  637. data/src/core/service_config/service_config_impl.h +4 -4
  638. data/src/core/service_config/service_config_parser.h +1 -1
  639. data/src/core/telemetry/call_tracer.cc +39 -49
  640. data/src/core/telemetry/call_tracer.h +201 -24
  641. data/src/core/telemetry/default_tcp_tracer.h +3 -3
  642. data/src/core/telemetry/histogram.h +205 -0
  643. data/src/core/telemetry/instrument.cc +999 -0
  644. data/src/core/telemetry/instrument.h +1105 -0
  645. data/src/core/telemetry/metrics.cc +15 -5
  646. data/src/core/telemetry/metrics.h +36 -5
  647. data/src/core/telemetry/stats.h +2 -2
  648. data/src/core/telemetry/stats_data.cc +1 -20
  649. data/src/core/telemetry/stats_data.h +2 -21
  650. data/src/core/transport/auth_context.cc +3 -3
  651. data/src/core/transport/auth_context.h +2 -1
  652. data/src/core/transport/auth_context_comparator_registry.h +1 -1
  653. data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
  654. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
  655. data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
  656. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +81 -48
  657. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
  658. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
  659. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +46 -36
  660. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
  661. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  662. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +4 -4
  663. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
  664. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
  665. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +16 -8
  666. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
  667. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +18 -5
  668. data/src/core/tsi/fake_transport_security.cc +6 -5
  669. data/src/core/tsi/local_transport_security.cc +1 -1
  670. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  671. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
  672. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
  673. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
  674. data/src/core/tsi/ssl_transport_security.cc +30 -30
  675. data/src/core/tsi/ssl_transport_security.h +1 -1
  676. data/src/core/tsi/ssl_transport_security_utils.cc +10 -10
  677. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  678. data/src/core/tsi/transport_security_grpc.cc +8 -0
  679. data/src/core/tsi/transport_security_grpc.h +15 -0
  680. data/src/core/util/alloc.cc +1 -1
  681. data/src/core/util/backoff.h +1 -1
  682. data/src/core/util/chunked_vector.h +4 -4
  683. data/src/core/util/crash.h +1 -1
  684. data/src/core/util/dual_ref_counted.h +2 -2
  685. data/src/core/util/event_log.cc +2 -2
  686. data/src/core/util/event_log.h +3 -3
  687. data/src/core/util/gcp_metadata_query.cc +7 -7
  688. data/src/core/util/gcp_metadata_query.h +2 -2
  689. data/src/core/util/glob.cc +2 -0
  690. data/src/core/util/grpc_check.cc +24 -0
  691. data/src/core/util/grpc_check.h +103 -0
  692. data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
  693. data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
  694. data/src/core/util/http_client/format_request.cc +1 -1
  695. data/src/core/util/http_client/httpcli.cc +6 -6
  696. data/src/core/util/http_client/httpcli.h +4 -4
  697. data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
  698. data/src/core/util/http_client/parser.cc +4 -4
  699. data/src/core/util/json/json_channel_args.h +1 -1
  700. data/src/core/util/json/json_object_loader.h +6 -6
  701. data/src/core/util/json/json_reader.cc +2 -2
  702. data/src/core/util/json/json_reader.h +1 -1
  703. data/src/core/util/json/json_util.h +3 -3
  704. data/src/core/util/json/json_writer.cc +1 -1
  705. data/src/core/util/latent_see.cc +45 -24
  706. data/src/core/util/latent_see.h +199 -28
  707. data/src/core/util/linux/cpu.cc +1 -1
  708. data/src/core/util/load_file.cc +1 -1
  709. data/src/core/util/load_file.h +1 -1
  710. data/src/core/util/log.cc +3 -3
  711. data/src/core/util/lru_cache.h +4 -4
  712. data/src/core/util/matchers.h +1 -1
  713. data/src/core/util/memory_usage.h +17 -1
  714. data/src/core/util/mpscq.h +1 -1
  715. data/src/core/util/notification.h +1 -1
  716. data/src/core/util/posix/cpu.cc +1 -1
  717. data/src/core/util/posix/directory_reader.cc +3 -2
  718. data/src/core/util/posix/stat.cc +2 -2
  719. data/src/core/util/posix/sync.cc +24 -24
  720. data/src/core/util/posix/thd.cc +2 -2
  721. data/src/core/util/posix/tmpfile.cc +2 -2
  722. data/src/core/util/postmortem_emit.cc +52 -0
  723. data/src/core/util/postmortem_emit.h +30 -0
  724. data/src/core/util/ref_counted.h +2 -2
  725. data/src/core/util/ref_counted_ptr.h +6 -1
  726. data/src/core/util/ref_counted_string.h +1 -1
  727. data/src/core/util/single_set_ptr.h +3 -1
  728. data/src/core/util/status_helper.cc +8 -8
  729. data/src/core/util/status_helper.h +1 -1
  730. data/src/core/util/string.cc +2 -2
  731. data/src/core/util/sync_abseil.cc +1 -1
  732. data/src/core/util/table.h +1 -1
  733. data/src/core/util/time.cc +1 -1
  734. data/src/core/util/time_precise.cc +1 -1
  735. data/src/core/util/trie_lookup.h +170 -0
  736. data/src/core/util/unique_ptr_with_bitset.h +5 -5
  737. data/src/core/util/unique_type_name.h +1 -1
  738. data/src/core/util/upb_utils.h +6 -1
  739. data/src/core/util/validation_errors.cc +2 -2
  740. data/src/core/util/validation_errors.h +2 -3
  741. data/src/core/util/wait_for_single_owner.h +2 -2
  742. data/src/core/util/windows/directory_reader.cc +1 -1
  743. data/src/core/util/windows/stat.cc +2 -2
  744. data/src/core/util/windows/thd.cc +2 -2
  745. data/src/core/util/windows/time.cc +1 -1
  746. data/src/core/util/work_serializer.cc +3 -3
  747. data/src/core/util/work_serializer.h +2 -2
  748. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  749. data/src/core/xds/grpc/certificate_provider_store.h +2 -2
  750. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  751. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  752. data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
  753. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  754. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
  755. data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -3
  756. data/src/core/xds/grpc/xds_certificate_provider.cc +4 -4
  757. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  758. data/src/core/xds/grpc/xds_client_grpc.cc +39 -20
  759. data/src/core/xds/grpc/xds_client_grpc.h +6 -3
  760. data/src/core/xds/grpc/xds_cluster.cc +2 -2
  761. data/src/core/xds/grpc/xds_cluster.h +1 -1
  762. data/src/core/xds/grpc/xds_cluster_parser.cc +7 -7
  763. data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
  764. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
  765. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  766. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  767. data/src/core/xds/grpc/xds_common_types.h +1 -1
  768. data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
  769. data/src/core/xds/grpc/xds_endpoint.h +2 -2
  770. data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -7
  771. data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
  772. data/src/core/xds/grpc/xds_health_status.cc +1 -1
  773. data/src/core/xds/grpc/xds_health_status.h +1 -1
  774. data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
  775. data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
  776. data/src/core/xds/grpc/xds_http_filter.h +3 -3
  777. data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
  778. data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
  779. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
  780. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
  781. data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
  782. data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
  783. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
  784. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
  785. data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
  786. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  787. data/src/core/xds/grpc/xds_listener.cc +2 -2
  788. data/src/core/xds/grpc/xds_listener_parser.cc +9 -9
  789. data/src/core/xds/grpc/xds_listener_parser.h +1 -1
  790. data/src/core/xds/grpc/xds_matcher.cc +277 -0
  791. data/src/core/xds/grpc/xds_matcher.h +432 -0
  792. data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
  793. data/src/core/xds/grpc/xds_matcher_action.h +48 -0
  794. data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
  795. data/src/core/xds/grpc/xds_matcher_context.h +46 -0
  796. data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
  797. data/src/core/xds/grpc/xds_matcher_input.h +105 -0
  798. data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
  799. data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
  800. data/src/core/xds/grpc/xds_metadata.cc +4 -3
  801. data/src/core/xds/grpc/xds_metadata.h +3 -3
  802. data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
  803. data/src/core/xds/grpc/xds_route_config.cc +3 -3
  804. data/src/core/xds/grpc/xds_route_config_parser.cc +14 -14
  805. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  806. data/src/core/xds/grpc/xds_routing.cc +6 -6
  807. data/src/core/xds/grpc/xds_routing.h +2 -2
  808. data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
  809. data/src/core/xds/grpc/xds_transport_grpc.cc +11 -11
  810. data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
  811. data/src/core/xds/xds_client/lrs_client.cc +9 -9
  812. data/src/core/xds/xds_client/lrs_client.h +4 -4
  813. data/src/core/xds/xds_client/xds_api.h +1 -1
  814. data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
  815. data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
  816. data/src/core/xds/xds_client/xds_client.cc +17 -17
  817. data/src/core/xds/xds_client/xds_client.h +5 -5
  818. data/src/core/xds/xds_client/xds_locality.h +2 -2
  819. data/src/core/xds/xds_client/xds_resource_type.h +2 -2
  820. data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
  821. data/src/core/xds/xds_client/xds_transport.h +2 -2
  822. data/src/ruby/ext/grpc/extconf.rb +14 -12
  823. data/src/ruby/ext/grpc/rb_call.c +0 -1
  824. data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
  825. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  826. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  827. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  828. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  829. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  830. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  831. data/src/ruby/lib/grpc/grpc.rb +7 -9
  832. data/src/ruby/lib/grpc/version.rb +1 -1
  833. data/src/ruby/spec/client_server_spec.rb +1 -1
  834. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  835. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  836. data/src/ruby/spec/spec_helper.rb +1 -1
  837. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  838. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  839. metadata +67 -8
@@ -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,16 +22,19 @@
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
 
29
29
  namespace {
30
30
 
31
31
  void MaybeCreateCallAttemptTracer(bool is_transparent_retry) {
32
- auto* call_tracer = MaybeGetContext<ClientCallTracerInterface>();
32
+ auto* arena = MaybeGetContext<Arena>();
33
+ if (arena == nullptr) return;
34
+ auto* call_tracer = MaybeGetContext<ClientCallTracer>();
33
35
  if (call_tracer == nullptr) return;
34
36
  auto* tracer = call_tracer->StartNewAttempt(is_transparent_retry);
35
- SetContext<CallTracerInterface>(tracer);
37
+ SetContext<CallAttemptTracer>(WrapCallAttemptTracer(tracer, arena));
36
38
  }
37
39
 
38
40
  class LbCallState : public ClientChannelLbCallState {
@@ -47,9 +49,8 @@ class LbCallState : public ClientChannelLbCallState {
47
49
  return service_config_call_data->GetCallAttribute(type);
48
50
  }
49
51
 
50
- ClientCallTracerInterface::CallAttemptTracer* GetCallAttemptTracer()
51
- const override {
52
- return GetContext<ClientCallTracerInterface::CallAttemptTracer>();
52
+ CallAttemptTracer* GetCallAttemptTracer() const override {
53
+ return GetContext<CallAttemptTracer>();
53
54
  }
54
55
  };
55
56
 
@@ -134,11 +135,9 @@ LoopCtl<absl::StatusOr<RefCountedPtr<UnstartedCallDestination>>> PickSubchannel(
134
135
  "pick";
135
136
  return Continue{};
136
137
  }
137
- // If the LB policy returned a call tracker, inform it that the
138
- // call is starting and add it to context, so that we can notify
139
- // 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.
140
140
  if (complete_pick->subchannel_call_tracker != nullptr) {
141
- complete_pick->subchannel_call_tracker->Start();
142
141
  SetContext(complete_pick->subchannel_call_tracker.release());
143
142
  }
144
143
  // Apply metadata mutations, if any.
@@ -240,8 +239,7 @@ void LoadBalancedCallDestination::StartCall(
240
239
  }
241
240
  // If it was queued, add a trace annotation.
242
241
  if (was_queued) {
243
- auto* tracer = MaybeGetContext<
244
- ClientCallTracerInterface::CallAttemptTracer>();
242
+ auto* tracer = MaybeGetContext<CallAttemptTracer>();
245
243
  if (tracer != nullptr) {
246
244
  tracer->RecordAnnotation("Delayed LB pick complete.");
247
245
  }
@@ -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,8 @@
22
22
 
23
23
  #include <utility>
24
24
 
25
- #include "absl/log/check.h"
26
25
  #include "src/core/client_channel/subchannel.h"
26
+ #include "src/core/util/grpc_check.h"
27
27
 
28
28
  namespace grpc_core {
29
29
 
@@ -33,7 +33,7 @@ RefCountedPtr<Subchannel> LocalSubchannelPool::RegisterSubchannel(
33
33
  // Because this pool is only accessed under the client channel's work
34
34
  // serializer, and because FindSubchannel is checked before invoking
35
35
  // RegisterSubchannel, no such subchannel should exist in the map.
36
- CHECK(it == subchannel_map_.end());
36
+ GRPC_CHECK(it == subchannel_map_.end());
37
37
  subchannel_map_[key] = constructed.get();
38
38
  return constructed;
39
39
  }
@@ -44,8 +44,8 @@ void LocalSubchannelPool::UnregisterSubchannel(const SubchannelKey& key,
44
44
  // Because this subchannel pool is accessed only under the client
45
45
  // channel's work serializer, any subchannel created by RegisterSubchannel
46
46
  // will be deleted from the map in UnregisterSubchannel.
47
- CHECK(it != subchannel_map_.end());
48
- CHECK(it->second == subchannel);
47
+ GRPC_CHECK(it != subchannel_map_.end());
48
+ GRPC_CHECK(it->second == subchannel);
49
49
  subchannel_map_.erase(it);
50
50
  }
51
51
 
@@ -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
@@ -27,7 +27,6 @@
27
27
  #include <new>
28
28
  #include <optional>
29
29
 
30
- #include "absl/log/check.h"
31
30
  #include "src/core/client_channel/client_channel_filter.h"
32
31
  #include "src/core/client_channel/retry_service_config.h"
33
32
  #include "src/core/client_channel/retry_throttle.h"
@@ -36,6 +35,7 @@
36
35
  #include "src/core/lib/channel/channel_stack.h"
37
36
  #include "src/core/lib/iomgr/error.h"
38
37
  #include "src/core/lib/transport/transport.h"
38
+ #include "src/core/util/grpc_check.h"
39
39
  #include "src/core/util/ref_counted_ptr.h"
40
40
  #include "src/core/util/useful.h"
41
41
 
@@ -88,8 +88,8 @@ class RetryFilter final {
88
88
 
89
89
  static grpc_error_handle Init(grpc_channel_element* elem,
90
90
  grpc_channel_element_args* args) {
91
- CHECK(args->is_last);
92
- CHECK(elem->filter == &kVtable);
91
+ GRPC_CHECK(args->is_last);
92
+ GRPC_CHECK(elem->filter == &kVtable);
93
93
  new (elem->channel_data) RetryFilter(*args);
94
94
  return absl::OkStatus();
95
95
  }
@@ -20,10 +20,6 @@
20
20
  #include <memory>
21
21
  #include <new>
22
22
 
23
- #include "absl/log/check.h"
24
- #include "absl/log/log.h"
25
- #include "absl/status/status.h"
26
- #include "absl/strings/str_cat.h"
27
23
  #include "src/core/call/metadata_batch.h"
28
24
  #include "src/core/call/status_util.h"
29
25
  #include "src/core/client_channel/client_channel_internal.h"
@@ -44,12 +40,16 @@
44
40
  #include "src/core/util/backoff.h"
45
41
  #include "src/core/util/construct_destruct.h"
46
42
  #include "src/core/util/debug_location.h"
43
+ #include "src/core/util/grpc_check.h"
47
44
  #include "src/core/util/orphanable.h"
48
45
  #include "src/core/util/ref_counted.h"
49
46
  #include "src/core/util/ref_counted_ptr.h"
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
  }
@@ -1502,7 +1501,7 @@ RetryFilter::LegacyCallData::~LegacyCallData() {
1502
1501
  FreeAllCachedSendOpData();
1503
1502
  // Make sure there are no remaining pending batches.
1504
1503
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
1505
- CHECK_EQ(pending_batches_[i].batch, nullptr);
1504
+ GRPC_CHECK_EQ(pending_batches_[i].batch, nullptr);
1506
1505
  }
1507
1506
  }
1508
1507
 
@@ -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,
@@ -1731,7 +1730,7 @@ RetryFilter::LegacyCallData::PendingBatchesAdd(
1731
1730
  GRPC_TRACE_LOG(retry, INFO) << "chand=" << chand_ << " calld=" << this
1732
1731
  << ": adding pending batch at index " << idx;
1733
1732
  PendingBatch* pending = &pending_batches_[idx];
1734
- CHECK_EQ(pending->batch, nullptr);
1733
+ GRPC_CHECK_EQ(pending->batch, nullptr);
1735
1734
  pending->batch = batch;
1736
1735
  pending->send_ops_cached = false;
1737
1736
  // Update state in calld about pending batches.
@@ -1810,7 +1809,7 @@ void RetryFilter::LegacyCallData::FailPendingBatchInCallCombiner(
1810
1809
 
1811
1810
  // This is called via the call combiner, so access to calld is synchronized.
1812
1811
  void RetryFilter::LegacyCallData::PendingBatchesFail(grpc_error_handle error) {
1813
- CHECK(!error.ok());
1812
+ GRPC_CHECK(!error.ok());
1814
1813
  if (GRPC_TRACE_FLAG_ENABLED(retry)) {
1815
1814
  size_t num_batches = 0;
1816
1815
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -1887,7 +1886,7 @@ void RetryFilter::LegacyCallData::StartRetryTimer(
1887
1886
  // Compute backoff delay.
1888
1887
  Duration next_attempt_timeout;
1889
1888
  if (server_pushback.has_value()) {
1890
- CHECK(*server_pushback >= Duration::Zero());
1889
+ GRPC_CHECK(*server_pushback >= Duration::Zero());
1891
1890
  next_attempt_timeout = *server_pushback;
1892
1891
  retry_backoff_.Reset();
1893
1892
  } else {
@@ -25,8 +25,6 @@
25
25
  #include <optional>
26
26
  #include <utility>
27
27
 
28
- #include "absl/container/inlined_vector.h"
29
- #include "absl/functional/any_invocable.h"
30
28
  #include "src/core/call/metadata_batch.h"
31
29
  #include "src/core/client_channel/client_channel_filter.h"
32
30
  #include "src/core/client_channel/retry_filter.h"
@@ -47,6 +45,8 @@
47
45
  #include "src/core/util/ref_counted.h"
48
46
  #include "src/core/util/ref_counted_ptr.h"
49
47
  #include "src/core/util/time.h"
48
+ #include "absl/container/inlined_vector.h"
49
+ #include "absl/functional/any_invocable.h"
50
50
 
51
51
  namespace grpc_core {
52
52
 
@@ -252,7 +252,7 @@ class RetryFilter::LegacyCallData final {
252
252
  void MaybeCancelPerAttemptRecvTimer();
253
253
 
254
254
  LegacyCallData* calld_;
255
- OrphanablePtr<ClientChannelFilter::FilterBasedLoadBalancedCall> lb_call_;
255
+ OrphanablePtr<ClientChannelFilter::LoadBalancedCall> lb_call_;
256
256
  bool lb_call_committed_ = false;
257
257
 
258
258
  grpc_closure on_per_attempt_recv_timer_;
@@ -362,9 +362,8 @@ class RetryFilter::LegacyCallData final {
362
362
  void AddClosureToStartTransparentRetry(CallCombinerClosureList* closures);
363
363
  static void StartTransparentRetry(void* arg, grpc_error_handle error);
364
364
 
365
- OrphanablePtr<ClientChannelFilter::FilterBasedLoadBalancedCall>
366
- CreateLoadBalancedCall(absl::AnyInvocable<void()> on_commit,
367
- bool is_transparent_retry);
365
+ OrphanablePtr<ClientChannelFilter::LoadBalancedCall> CreateLoadBalancedCall(
366
+ absl::AnyInvocable<void()> on_commit, bool is_transparent_retry);
368
367
 
369
368
  void CreateCallAttempt(bool is_transparent_retry);
370
369
 
@@ -391,8 +390,7 @@ class RetryFilter::LegacyCallData final {
391
390
  // LB call used when we've committed to a call attempt and the retry
392
391
  // state for that attempt is no longer needed. This provides a fast
393
392
  // path for long-running streaming calls that minimizes overhead.
394
- OrphanablePtr<ClientChannelFilter::FilterBasedLoadBalancedCall>
395
- committed_call_;
393
+ OrphanablePtr<ClientChannelFilter::LoadBalancedCall> committed_call_;
396
394
 
397
395
  // When are are not yet fully committed to a particular call (i.e.,
398
396
  // either we might still retry or we have committed to the call but
@@ -27,13 +27,13 @@
27
27
  #include <utility>
28
28
  #include <vector>
29
29
 
30
- #include "absl/log/log.h"
31
- #include "absl/strings/numbers.h"
32
- #include "absl/strings/str_cat.h"
33
30
  #include "src/core/call/status_util.h"
34
31
  #include "src/core/config/core_configuration.h"
35
32
  #include "src/core/lib/channel/channel_args.h"
36
33
  #include "src/core/util/json/json_channel_args.h"
34
+ #include "absl/log/log.h"
35
+ #include "absl/strings/numbers.h"
36
+ #include "absl/strings/str_cat.h"
37
37
 
38
38
  // As per the retry design, we do not allow more than 5 retry attempts.
39
39
  #define MAX_MAX_RETRY_ATTEMPTS 5
@@ -24,7 +24,6 @@
24
24
  #include <memory>
25
25
  #include <optional>
26
26
 
27
- #include "absl/strings/string_view.h"
28
27
  #include "src/core/call/status_util.h"
29
28
  #include "src/core/config/core_configuration.h"
30
29
  #include "src/core/lib/channel/channel_args.h"
@@ -34,6 +33,7 @@
34
33
  #include "src/core/util/json/json_object_loader.h"
35
34
  #include "src/core/util/time.h"
36
35
  #include "src/core/util/validation_errors.h"
36
+ #include "absl/strings/string_view.h"
37
37
 
38
38
  namespace grpc_core {
39
39
  namespace internal {
@@ -29,12 +29,6 @@
29
29
  #include <optional>
30
30
  #include <utility>
31
31
 
32
- #include "absl/log/check.h"
33
- #include "absl/log/log.h"
34
- #include "absl/status/statusor.h"
35
- #include "absl/strings/cord.h"
36
- #include "absl/strings/str_cat.h"
37
- #include "absl/strings/string_view.h"
38
32
  #include "src/core/call/interception_chain.h"
39
33
  #include "src/core/channelz/channel_trace.h"
40
34
  #include "src/core/channelz/channelz.h"
@@ -64,12 +58,18 @@
64
58
  #include "src/core/util/alloc.h"
65
59
  #include "src/core/util/backoff.h"
66
60
  #include "src/core/util/debug_location.h"
61
+ #include "src/core/util/grpc_check.h"
67
62
  #include "src/core/util/orphanable.h"
68
63
  #include "src/core/util/ref_counted.h"
69
64
  #include "src/core/util/ref_counted_ptr.h"
70
65
  #include "src/core/util/status_helper.h"
71
66
  #include "src/core/util/sync.h"
72
67
  #include "src/core/util/useful.h"
68
+ #include "absl/log/log.h"
69
+ #include "absl/status/statusor.h"
70
+ #include "absl/strings/cord.h"
71
+ #include "absl/strings/str_cat.h"
72
+ #include "absl/strings/string_view.h"
73
73
 
74
74
  // Backoff parameters.
75
75
  #define GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS 1
@@ -282,8 +282,8 @@ grpc_call_stack* SubchannelCall::GetCallStack() {
282
282
  }
283
283
 
284
284
  void SubchannelCall::SetAfterCallStackDestroy(grpc_closure* closure) {
285
- CHECK_EQ(after_call_stack_destroy_, nullptr);
286
- CHECK_NE(closure, nullptr);
285
+ GRPC_CHECK_EQ(after_call_stack_destroy_, nullptr);
286
+ GRPC_CHECK_NE(closure, nullptr);
287
287
  after_call_stack_destroy_ = closure;
288
288
  }
289
289
 
@@ -334,7 +334,7 @@ void SubchannelCall::MaybeInterceptRecvTrailingMetadata(
334
334
  GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady,
335
335
  this, grpc_schedule_on_exec_ctx);
336
336
  // save some state needed for the interception callback.
337
- CHECK_EQ(recv_trailing_metadata_, nullptr);
337
+ GRPC_CHECK_EQ(recv_trailing_metadata_, nullptr);
338
338
  recv_trailing_metadata_ =
339
339
  batch->payload->recv_trailing_metadata.recv_trailing_metadata;
340
340
  original_recv_trailing_metadata_ =
@@ -360,12 +360,12 @@ void GetCallStatus(grpc_status_code* status, Timestamp deadline,
360
360
  void SubchannelCall::RecvTrailingMetadataReady(void* arg,
361
361
  grpc_error_handle error) {
362
362
  SubchannelCall* call = static_cast<SubchannelCall*>(arg);
363
- CHECK_NE(call->recv_trailing_metadata_, nullptr);
363
+ GRPC_CHECK_NE(call->recv_trailing_metadata_, nullptr);
364
364
  grpc_status_code status = GRPC_STATUS_OK;
365
365
  GetCallStatus(&status, call->deadline_, call->recv_trailing_metadata_, error);
366
366
  channelz::SubchannelNode* channelz_node =
367
367
  call->connected_subchannel_->channelz_node();
368
- CHECK_NE(channelz_node, nullptr);
368
+ GRPC_CHECK_NE(channelz_node, nullptr);
369
369
  if (status == GRPC_STATUS_OK) {
370
370
  channelz_node->RecordCallSucceeded();
371
371
  } else {
@@ -422,12 +422,6 @@ class Subchannel::ConnectedSubchannelStateWatcher final
422
422
  << ": Connected subchannel " << connected_subchannel.get()
423
423
  << " reports " << ConnectivityStateName(new_state) << ": "
424
424
  << status;
425
- if (c->channelz_node() != nullptr) {
426
- if (connected_subchannel->channelz_node() != nullptr) {
427
- connected_subchannel->channelz_node()->RemoveParent(
428
- c->channelz_node());
429
- }
430
- }
431
425
  // If the subchannel was created from an endpoint, then we report
432
426
  // TRANSIENT_FAILURE here instead of IDLE. The subchannel will never
433
427
  // leave TRANSIENT_FAILURE state, because there is no way for us to
@@ -451,6 +445,68 @@ class Subchannel::ConnectedSubchannelStateWatcher final
451
445
  WeakRefCountedPtr<Subchannel> subchannel_;
452
446
  };
453
447
 
448
+ //
449
+ // Subchannel::ConnectionStateWatcher
450
+ //
451
+
452
+ class Subchannel::ConnectionStateWatcher final
453
+ : public Transport::StateWatcher {
454
+ public:
455
+ explicit ConnectionStateWatcher(WeakRefCountedPtr<Subchannel> subchannel)
456
+ : subchannel_(std::move(subchannel)) {}
457
+
458
+ ~ConnectionStateWatcher() override {
459
+ subchannel_.reset(DEBUG_LOCATION, "state_watcher");
460
+ }
461
+
462
+ void OnDisconnect(absl::Status status,
463
+ DisconnectInfo disconnect_info) override {
464
+ MutexLock lock(&subchannel_->mu_);
465
+ // Handle keepalive update.
466
+ if (disconnect_info.keepalive_time.has_value()) {
467
+ subchannel_->ThrottleKeepaliveTimeLocked(*disconnect_info.keepalive_time);
468
+ subchannel_->watcher_list_.NotifyOnKeepaliveUpdateLocked(
469
+ *disconnect_info.keepalive_time);
470
+ }
471
+ // We shouldn't ever see OnDisconnect() more than once for a given
472
+ // connection, but we'll be defensive just in case: if the connected
473
+ // subchannel has already been cleared, then this becomes a no-op.
474
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel =
475
+ std::move(subchannel_->connected_subchannel_);
476
+ if (connected_subchannel == nullptr) return;
477
+ GRPC_TRACE_LOG(subchannel, INFO)
478
+ << "subchannel " << subchannel_.get() << " "
479
+ << subchannel_->key_.ToString() << ": connected subchannel "
480
+ << connected_subchannel.get() << " reports disconnection: " << status;
481
+ // If the subchannel was created from an endpoint, then we report
482
+ // TRANSIENT_FAILURE here instead of IDLE. The subchannel will never
483
+ // leave TRANSIENT_FAILURE state, because there is no way for us to
484
+ // establish a new connection. Otherwise, we report IDLE here.
485
+ if (subchannel_->created_from_endpoint_) {
486
+ subchannel_->SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
487
+ status);
488
+ } else {
489
+ subchannel_->SetConnectivityStateLocked(GRPC_CHANNEL_IDLE,
490
+ absl::OkStatus());
491
+ }
492
+ subchannel_->backoff_.Reset();
493
+ }
494
+
495
+ void OnPeerMaxConcurrentStreamsUpdate(
496
+ uint32_t /*max_concurrent_streams*/,
497
+ std::unique_ptr<MaxConcurrentStreamsUpdateDoneHandle> /*on_done*/)
498
+ override {
499
+ // TODO(roth): Implement this as part of adding connection scaling.
500
+ }
501
+
502
+ grpc_pollset_set* interested_parties() const override {
503
+ return subchannel_->pollset_set_;
504
+ }
505
+
506
+ private:
507
+ WeakRefCountedPtr<Subchannel> subchannel_;
508
+ };
509
+
454
510
  //
455
511
  // Subchannel::ConnectivityStateWatcherList
456
512
  //
@@ -474,6 +530,27 @@ void Subchannel::ConnectivityStateWatcherList::NotifyLocked(
474
530
  }
475
531
  }
476
532
 
533
+ void Subchannel::ConnectivityStateWatcherList::NotifyOnKeepaliveUpdateLocked(
534
+ Duration new_keepalive_time) {
535
+ for (const auto& watcher : watchers_) {
536
+ subchannel_->work_serializer_.Run([watcher, new_keepalive_time]() {
537
+ watcher->OnKeepaliveUpdate(new_keepalive_time);
538
+ });
539
+ }
540
+ }
541
+
542
+ uint32_t
543
+ Subchannel::ConnectivityStateWatcherList::GetMaxConnectionsPerSubchannel()
544
+ const {
545
+ uint32_t max_connections_per_subchannel = 1;
546
+ for (const auto& watcher : watchers_) {
547
+ max_connections_per_subchannel =
548
+ std::max(max_connections_per_subchannel,
549
+ watcher->max_connections_per_subchannel());
550
+ }
551
+ return max_connections_per_subchannel;
552
+ }
553
+
477
554
  //
478
555
  // Subchannel
479
556
  //
@@ -585,7 +662,7 @@ RefCountedPtr<Subchannel> Subchannel::Create(
585
662
  const grpc_resolved_address& address, const ChannelArgs& args) {
586
663
  SubchannelKey key(address, args);
587
664
  auto* subchannel_pool = args.GetObject<SubchannelPoolInterface>();
588
- CHECK_NE(subchannel_pool, nullptr);
665
+ GRPC_CHECK_NE(subchannel_pool, nullptr);
589
666
  RefCountedPtr<Subchannel> c = subchannel_pool->FindSubchannel(key);
590
667
  if (c != nullptr) {
591
668
  return c;
@@ -610,15 +687,19 @@ RefCountedPtr<Subchannel> Subchannel::Create(
610
687
  return registered;
611
688
  }
612
689
 
613
- void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
690
+ void Subchannel::ThrottleKeepaliveTime(Duration new_keepalive_time) {
614
691
  MutexLock lock(&mu_);
692
+ ThrottleKeepaliveTimeLocked(new_keepalive_time);
693
+ }
694
+
695
+ void Subchannel::ThrottleKeepaliveTimeLocked(Duration new_keepalive_time) {
615
696
  // Only update the value if the new keepalive time is larger.
616
697
  if (new_keepalive_time > keepalive_time_) {
617
698
  keepalive_time_ = new_keepalive_time;
618
699
  GRPC_TRACE_LOG(subchannel, INFO)
619
700
  << "subchannel " << this << " " << key_.ToString()
620
701
  << ": throttling keepalive time to " << new_keepalive_time;
621
- args_ = args_.Set(GRPC_ARG_KEEPALIVE_TIME_MS, new_keepalive_time);
702
+ args_ = args_.Set(GRPC_ARG_KEEPALIVE_TIME_MS, new_keepalive_time.millis());
622
703
  }
623
704
  }
624
705
 
@@ -681,7 +762,7 @@ void Subchannel::Orphaned() {
681
762
  subchannel_pool_.reset();
682
763
  }
683
764
  MutexLock lock(&mu_);
684
- CHECK(!shutdown_);
765
+ GRPC_CHECK(!shutdown_);
685
766
  shutdown_ = true;
686
767
  connector_.reset();
687
768
  connected_subchannel_.reset();
@@ -821,6 +902,11 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
821
902
 
822
903
  bool Subchannel::PublishTransportLocked() {
823
904
  auto socket_node = connecting_result_.transport->GetSocketNode();
905
+ if (IsTransportStateWatcherEnabled()) {
906
+ connecting_result_.transport->StartWatch(
907
+ MakeRefCounted<ConnectionStateWatcher>(
908
+ WeakRef(DEBUG_LOCATION, "state_watcher")));
909
+ }
824
910
  if (connecting_result_.transport->filter_stack_transport() != nullptr) {
825
911
  // Construct channel stack.
826
912
  // Builder takes ownership of transport.
@@ -890,10 +976,11 @@ bool Subchannel::PublishTransportLocked() {
890
976
  socket_node->AddParent(channelz_node_.get());
891
977
  }
892
978
  }
893
- // Start watching connected subchannel.
894
- connected_subchannel_->StartWatch(
895
- pollset_set_, MakeOrphanable<ConnectedSubchannelStateWatcher>(
896
- WeakRef(DEBUG_LOCATION, "state_watcher")));
979
+ if (!IsTransportStateWatcherEnabled()) {
980
+ connected_subchannel_->StartWatch(
981
+ pollset_set_, MakeOrphanable<ConnectedSubchannelStateWatcher>(
982
+ WeakRef(DEBUG_LOCATION, "state_watcher")));
983
+ }
897
984
  // Report initial state.
898
985
  SetConnectivityStateLocked(GRPC_CHANNEL_READY, absl::Status());
899
986
  return true;
@@ -919,6 +1006,8 @@ ChannelArgs Subchannel::MakeSubchannelArgs(
919
1006
  // uniqueness.
920
1007
  .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
921
1008
  .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
1009
+ .Remove(GRPC_ARG_MAX_CONNECTIONS_PER_SUBCHANNEL)
1010
+ .Remove(GRPC_ARG_MAX_CONNECTIONS_PER_SUBCHANNEL_CAP)
922
1011
  .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE)
923
1012
  // Remove all keys with the no-subchannel prefix.
924
1013
  .RemoveAllKeysWithPrefix(GRPC_ARG_NO_SUBCHANNEL_PREFIX);
@@ -26,9 +26,6 @@
26
26
  #include <map>
27
27
  #include <memory>
28
28
 
29
- #include "absl/base/thread_annotations.h"
30
- #include "absl/container/flat_hash_set.h"
31
- #include "absl/status/status.h"
32
29
  #include "src/core/call/metadata_batch.h"
33
30
  #include "src/core/client_channel/connector.h"
34
31
  #include "src/core/client_channel/subchannel_pool_interface.h"
@@ -57,6 +54,9 @@
57
54
  #include "src/core/util/time_precise.h"
58
55
  #include "src/core/util/unique_type_name.h"
59
56
  #include "src/core/util/work_serializer.h"
57
+ #include "absl/base/thread_annotations.h"
58
+ #include "absl/container/flat_hash_set.h"
59
+ #include "absl/status/status.h"
60
60
 
61
61
  /** This arg is intended for internal use only, primarily
62
62
  * for passing endpoint information during subchannel creation or connection.
@@ -71,6 +71,7 @@ class ConnectedSubchannel : public RefCounted<ConnectedSubchannel> {
71
71
  public:
72
72
  const ChannelArgs& args() const { return args_; }
73
73
 
74
+ // TODO(roth): Remove this when transport_state_watcher experiment is removed.
74
75
  virtual void StartWatch(
75
76
  grpc_pollset_set* interested_parties,
76
77
  OrphanablePtr<ConnectivityStateWatcherInterface> watcher) = 0;
@@ -167,8 +168,6 @@ class SubchannelCall final {
167
168
  // (SubchannelWrapper) that "converts" between the two.
168
169
  class Subchannel final : public DualRefCounted<Subchannel> {
169
170
  public:
170
- // TODO(roth): Once we remove pollset_set, consider whether this can
171
- // just use the normal AsyncConnectivityStateWatcherInterface API.
172
171
  class ConnectivityStateWatcherInterface
173
172
  : public RefCounted<ConnectivityStateWatcherInterface> {
174
173
  public:
@@ -178,6 +177,11 @@ class Subchannel final : public DualRefCounted<Subchannel> {
178
177
  virtual void OnConnectivityStateChange(grpc_connectivity_state state,
179
178
  const absl::Status& status) = 0;
180
179
 
180
+ // Invoked to report updated keepalive time.
181
+ virtual void OnKeepaliveUpdate(Duration keepalive_time) = 0;
182
+
183
+ virtual uint32_t max_connections_per_subchannel() const = 0;
184
+
181
185
  virtual grpc_pollset_set* interested_parties() = 0;
182
186
  };
183
187
 
@@ -208,7 +212,8 @@ class Subchannel final : public DualRefCounted<Subchannel> {
208
212
  // Throttles keepalive time to \a new_keepalive_time iff \a new_keepalive_time
209
213
  // is larger than the subchannel's current keepalive time. The updated value
210
214
  // will have an affect when the subchannel creates a new ConnectedSubchannel.
211
- void ThrottleKeepaliveTime(int new_keepalive_time) ABSL_LOCKS_EXCLUDED(mu_);
215
+ void ThrottleKeepaliveTime(Duration new_keepalive_time)
216
+ ABSL_LOCKS_EXCLUDED(mu_);
212
217
 
213
218
  grpc_pollset_set* pollset_set() const { return pollset_set_; }
214
219
 
@@ -302,10 +307,15 @@ class Subchannel final : public DualRefCounted<Subchannel> {
302
307
  void NotifyLocked(grpc_connectivity_state state,
303
308
  const absl::Status& status);
304
309
 
310
+ // Notifies all watchers about a keepalive update.
311
+ void NotifyOnKeepaliveUpdateLocked(Duration new_keepalive_time);
312
+
305
313
  void Clear() { watchers_.clear(); }
306
314
 
307
315
  bool empty() const { return watchers_.empty(); }
308
316
 
317
+ uint32_t GetMaxConnectionsPerSubchannel() const;
318
+
309
319
  private:
310
320
  Subchannel* subchannel_;
311
321
  absl::flat_hash_set<RefCountedPtr<ConnectivityStateWatcherInterface>,
@@ -314,13 +324,19 @@ class Subchannel final : public DualRefCounted<Subchannel> {
314
324
  watchers_;
315
325
  };
316
326
 
327
+ // TODO(roth): Remove this when transport_state_watcher experiment is removed.
317
328
  class ConnectedSubchannelStateWatcher;
318
329
 
330
+ class ConnectionStateWatcher;
331
+
319
332
  // Sets the subchannel's connectivity state to \a state.
320
333
  void SetConnectivityStateLocked(grpc_connectivity_state state,
321
334
  const absl::Status& status)
322
335
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
323
336
 
337
+ void ThrottleKeepaliveTimeLocked(Duration new_keepalive_time)
338
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
339
+
324
340
  // Methods for connection.
325
341
  void OnRetryTimer() ABSL_LOCKS_EXCLUDED(mu_);
326
342
  void OnRetryTimerLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
@@ -383,8 +399,8 @@ class Subchannel final : public DualRefCounted<Subchannel> {
383
399
  grpc_event_engine::experimental::EventEngine::TaskHandle retry_timer_handle_
384
400
  ABSL_GUARDED_BY(mu_);
385
401
 
386
- // Keepalive time period (-1 for unset)
387
- int keepalive_time_ ABSL_GUARDED_BY(mu_) = -1;
402
+ // Keepalive time period
403
+ Duration keepalive_time_ ABSL_GUARDED_BY(mu_);
388
404
 
389
405
  // Data producer map.
390
406
  std::map<UniqueTypeName, DataProducerInterface*> data_producer_map_