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
@@ -29,10 +29,6 @@
29
29
  #include <utility>
30
30
  #include <vector>
31
31
 
32
- #include "absl/log/check.h"
33
- #include "absl/log/log.h"
34
- #include "absl/status/status.h"
35
- #include "absl/strings/string_view.h"
36
32
  #include "google/protobuf/duration.upb.h"
37
33
  #include "src/core/channelz/channel_trace.h"
38
34
  #include "src/core/client_channel/subchannel.h"
@@ -47,6 +43,7 @@
47
43
  #include "src/core/load_balancing/backend_metric_parser.h"
48
44
  #include "src/core/load_balancing/oob_backend_metric_internal.h"
49
45
  #include "src/core/util/debug_location.h"
46
+ #include "src/core/util/grpc_check.h"
50
47
  #include "src/core/util/memory.h"
51
48
  #include "src/core/util/orphanable.h"
52
49
  #include "src/core/util/ref_counted_ptr.h"
@@ -54,6 +51,9 @@
54
51
  #include "src/core/util/time.h"
55
52
  #include "upb/mem/arena.hpp"
56
53
  #include "xds/service/orca/v3/orca.upb.h"
54
+ #include "absl/log/log.h"
55
+ #include "absl/status/status.h"
56
+ #include "absl/strings/string_view.h"
57
57
 
58
58
  namespace grpc_core {
59
59
 
@@ -77,6 +77,10 @@ class OrcaProducer::ConnectivityWatcher final
77
77
  producer_->OnConnectivityStateChange(state);
78
78
  }
79
79
 
80
+ void OnKeepaliveUpdate(Duration) override {}
81
+
82
+ uint32_t max_connections_per_subchannel() const override { return 1; }
83
+
80
84
  grpc_pollset_set* interested_parties() override {
81
85
  return interested_parties_;
82
86
  }
@@ -201,7 +205,7 @@ class OrcaProducer::OrcaStreamEventHandler final
201
205
  // OrcaProducer
202
206
  //
203
207
 
204
- void OrcaProducer::Start(RefCountedPtr<Subchannel> subchannel) {
208
+ void OrcaProducer::Start(WeakRefCountedPtr<Subchannel> subchannel) {
205
209
  subchannel_ = std::move(subchannel);
206
210
  connected_subchannel_ = subchannel_->connected_subchannel();
207
211
  auto connectivity_watcher =
@@ -215,7 +219,7 @@ void OrcaProducer::Orphaned() {
215
219
  MutexLock lock(&mu_);
216
220
  stream_client_.reset();
217
221
  }
218
- CHECK(subchannel_ != nullptr); // Should not be called before Start().
222
+ GRPC_CHECK(subchannel_ != nullptr); // Should not be called before Start().
219
223
  subchannel_->CancelConnectivityStateWatch(connectivity_watcher_);
220
224
  subchannel_->RemoveDataProducer(this);
221
225
  }
@@ -313,7 +317,7 @@ void OrcaWatcher::SetSubchannel(Subchannel* subchannel) {
313
317
  // This needs to be done outside of the lambda passed to
314
318
  // GetOrAddDataProducer() to avoid deadlocking by re-acquiring the
315
319
  // subchannel lock while already holding it.
316
- if (created) producer_->Start(subchannel->Ref());
320
+ if (created) producer_->Start(subchannel->WeakRef());
317
321
  // Register ourself with the producer.
318
322
  producer_->AddWatcher(this);
319
323
  }
@@ -24,8 +24,6 @@
24
24
  #include <set>
25
25
  #include <utility>
26
26
 
27
- #include "absl/base/thread_annotations.h"
28
- #include "absl/strings/string_view.h"
29
27
  #include "src/core/client_channel/subchannel.h"
30
28
  #include "src/core/client_channel/subchannel_interface_internal.h"
31
29
  #include "src/core/client_channel/subchannel_stream_client.h"
@@ -36,6 +34,8 @@
36
34
  #include "src/core/util/sync.h"
37
35
  #include "src/core/util/time.h"
38
36
  #include "src/core/util/unique_type_name.h"
37
+ #include "absl/base/thread_annotations.h"
38
+ #include "absl/strings/string_view.h"
39
39
 
40
40
  namespace grpc_core {
41
41
 
@@ -46,7 +46,7 @@ class OrcaWatcher;
46
46
  // registered watchers.
47
47
  class OrcaProducer final : public Subchannel::DataProducerInterface {
48
48
  public:
49
- void Start(RefCountedPtr<Subchannel> subchannel);
49
+ void Start(WeakRefCountedPtr<Subchannel> subchannel);
50
50
 
51
51
  static UniqueTypeName Type() {
52
52
  static UniqueTypeName::Factory kFactory("orca");
@@ -79,7 +79,7 @@ class OrcaProducer final : public Subchannel::DataProducerInterface {
79
79
  // Called to notify watchers of a new backend metric report.
80
80
  void NotifyWatchers(const BackendMetricData& backend_metric_data);
81
81
 
82
- RefCountedPtr<Subchannel> subchannel_;
82
+ WeakRefCountedPtr<Subchannel> subchannel_;
83
83
  RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
84
84
  ConnectivityWatcher* connectivity_watcher_;
85
85
  Mutex mu_;
@@ -34,14 +34,6 @@
34
34
  #include <variant>
35
35
  #include <vector>
36
36
 
37
- #include "absl/base/thread_annotations.h"
38
- #include "absl/log/check.h"
39
- #include "absl/log/log.h"
40
- #include "absl/meta/type_traits.h"
41
- #include "absl/random/random.h"
42
- #include "absl/status/status.h"
43
- #include "absl/status/statusor.h"
44
- #include "absl/strings/string_view.h"
45
37
  #include "src/core/client_channel/subchannel_interface_internal.h"
46
38
  #include "src/core/config/core_configuration.h"
47
39
  #include "src/core/lib/address_utils/sockaddr_utils.h"
@@ -62,6 +54,7 @@
62
54
  #include "src/core/load_balancing/subchannel_interface.h"
63
55
  #include "src/core/resolver/endpoint_addresses.h"
64
56
  #include "src/core/util/debug_location.h"
57
+ #include "src/core/util/grpc_check.h"
65
58
  #include "src/core/util/json/json.h"
66
59
  #include "src/core/util/orphanable.h"
67
60
  #include "src/core/util/ref_counted.h"
@@ -71,6 +64,13 @@
71
64
  #include "src/core/util/unique_type_name.h"
72
65
  #include "src/core/util/validation_errors.h"
73
66
  #include "src/core/util/work_serializer.h"
67
+ #include "absl/base/thread_annotations.h"
68
+ #include "absl/log/log.h"
69
+ #include "absl/meta/type_traits.h"
70
+ #include "absl/random/random.h"
71
+ #include "absl/status/status.h"
72
+ #include "absl/status/statusor.h"
73
+ #include "absl/strings/string_view.h"
74
74
 
75
75
  namespace grpc_core {
76
76
 
@@ -329,7 +329,7 @@ class OutlierDetectionLb final : public LoadBalancingPolicy {
329
329
  --multiplier_;
330
330
  }
331
331
  } else {
332
- CHECK(ejection_time_.has_value());
332
+ GRPC_CHECK(ejection_time_.has_value());
333
333
  auto change_time = ejection_time_.value() +
334
334
  Duration::Milliseconds(std::min(
335
335
  base_ejection_time_in_millis * multiplier_,
@@ -493,14 +493,6 @@ class OutlierDetectionLb::Picker::SubchannelCallTracker final
493
493
  endpoint_state_.reset(DEBUG_LOCATION, "SubchannelCallTracker");
494
494
  }
495
495
 
496
- void Start() override {
497
- // This tracker does not care about started calls only finished calls.
498
- // Delegate if needed.
499
- if (original_subchannel_call_tracker_ != nullptr) {
500
- original_subchannel_call_tracker_->Start();
501
- }
502
- }
503
-
504
496
  void Finish(FinishArgs args) override {
505
497
  // Delegate if needed.
506
498
  if (original_subchannel_call_tracker_ != nullptr) {
@@ -31,14 +31,6 @@
31
31
  #include <utility>
32
32
  #include <vector>
33
33
 
34
- #include "absl/algorithm/container.h"
35
- #include "absl/log/check.h"
36
- #include "absl/log/log.h"
37
- #include "absl/random/random.h"
38
- #include "absl/status/status.h"
39
- #include "absl/status/statusor.h"
40
- #include "absl/strings/str_cat.h"
41
- #include "absl/strings/string_view.h"
42
34
  #include "src/core/config/core_configuration.h"
43
35
  #include "src/core/lib/address_utils/sockaddr_utils.h"
44
36
  #include "src/core/lib/channel/channel_args.h"
@@ -56,6 +48,7 @@
56
48
  #include "src/core/telemetry/metrics.h"
57
49
  #include "src/core/util/crash.h"
58
50
  #include "src/core/util/debug_location.h"
51
+ #include "src/core/util/grpc_check.h"
59
52
  #include "src/core/util/json/json.h"
60
53
  #include "src/core/util/json/json_args.h"
61
54
  #include "src/core/util/json/json_object_loader.h"
@@ -65,6 +58,13 @@
65
58
  #include "src/core/util/time.h"
66
59
  #include "src/core/util/useful.h"
67
60
  #include "src/core/util/work_serializer.h"
61
+ #include "absl/algorithm/container.h"
62
+ #include "absl/log/log.h"
63
+ #include "absl/random/random.h"
64
+ #include "absl/status/status.h"
65
+ #include "absl/status/statusor.h"
66
+ #include "absl/strings/str_cat.h"
67
+ #include "absl/strings/string_view.h"
68
68
 
69
69
  namespace grpc_core {
70
70
 
@@ -390,13 +390,16 @@ class PickFirst final : public LoadBalancingPolicy {
390
390
  // Lateset update args.
391
391
  UpdateArgs latest_update_args_;
392
392
  // The list of subchannels that we're currently trying to connect to.
393
- // Will generally be null when selected_ is set, except when we get a
394
- // resolver update and need to check initial connectivity states for
395
- // the new list to decide whether we keep using the existing
396
- // connection or go IDLE.
393
+ // Will generally be null when selected_ is set, except for two cases:
394
+ // - When we get a resolver update and need to check initial connectivity
395
+ // states for the new list to decide whether we keep using the existing
396
+ // connection or go IDLE.
397
+ // - When the selected subchannel transitions from READY to CONNECTING
398
+ // or TRANSIENT_FAILURE (instead of IDLE), in which case we create a
399
+ // new subchannel list and start connecting with a Happy Eyeballs pass.
397
400
  OrphanablePtr<SubchannelList> subchannel_list_;
398
401
  // Selected subchannel. Will generally be null when subchannel_list_
399
- // is non-null, with the exception mentioned above.
402
+ // is non-null, with the exceptions mentioned above.
400
403
  OrphanablePtr<SubchannelList::SubchannelData::SubchannelState> selected_;
401
404
  // Health watcher for the selected subchannel.
402
405
  SubchannelInterface::ConnectivityStateWatcherInterface* health_watcher_ =
@@ -428,7 +431,7 @@ PickFirst::PickFirst(Args args)
428
431
 
429
432
  PickFirst::~PickFirst() {
430
433
  GRPC_TRACE_LOG(pick_first, INFO) << "Destroying Pick First " << this;
431
- CHECK_EQ(subchannel_list_.get(), nullptr);
434
+ GRPC_CHECK_EQ(subchannel_list_.get(), nullptr);
432
435
  }
433
436
 
434
437
  void PickFirst::ShutdownLocked() {
@@ -612,10 +615,12 @@ void PickFirst::GoIdle() {
612
615
  UnsetSelectedSubchannel();
613
616
  // Drop the current subchannel list, if any.
614
617
  subchannel_list_.reset();
615
- // Request a re-resolution.
616
- // TODO(qianchengz): We may want to request re-resolution in
617
- // ExitIdleLocked() instead.
618
- channel_control_helper()->RequestReresolution();
618
+ if (!IsPickFirstReadyToConnectingEnabled()) {
619
+ // Request a re-resolution.
620
+ // TODO(roth): We may want to request re-resolution in
621
+ // ExitIdleLocked() instead.
622
+ channel_control_helper()->RequestReresolution();
623
+ }
619
624
  // Enter idle.
620
625
  UpdateState(GRPC_CHANNEL_IDLE, absl::OkStatus(),
621
626
  MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
@@ -700,7 +705,7 @@ void PickFirst::SubchannelList::SubchannelData::SubchannelState::Select() {
700
705
  GRPC_TRACE_LOG(pick_first, INFO)
701
706
  << "Pick First " << pick_first_.get() << " selected subchannel "
702
707
  << subchannel_.get();
703
- CHECK_NE(subchannel_data_, nullptr);
708
+ GRPC_CHECK_NE(subchannel_data_, nullptr);
704
709
  pick_first_->UnsetSelectedSubchannel(); // Cancel health watch, if any.
705
710
  pick_first_->selected_ = std::move(subchannel_data_->subchannel_state_);
706
711
  // If health checking is enabled, start the health watch, but don't
@@ -756,8 +761,8 @@ void PickFirst::SubchannelList::SubchannelData::SubchannelState::
756
761
  // If we're still part of a subchannel list trying to connect, check
757
762
  // if we're connected.
758
763
  if (subchannel_data_ != nullptr) {
759
- CHECK_EQ(pick_first_->subchannel_list_.get(),
760
- subchannel_data_->subchannel_list_);
764
+ GRPC_CHECK_EQ(pick_first_->subchannel_list_.get(),
765
+ subchannel_data_->subchannel_list_);
761
766
  // If the subchannel is READY, use it.
762
767
  // Otherwise, tell the subchannel list to keep trying.
763
768
  if (new_state == GRPC_CHANNEL_READY) {
@@ -768,7 +773,7 @@ void PickFirst::SubchannelList::SubchannelData::SubchannelState::
768
773
  return;
769
774
  }
770
775
  // We aren't trying to connect, so we must be the selected subchannel.
771
- CHECK_EQ(pick_first_->selected_.get(), this);
776
+ GRPC_CHECK_EQ(pick_first_->selected_.get(), this);
772
777
  GRPC_TRACE_LOG(pick_first, INFO)
773
778
  << "Pick First " << pick_first_.get()
774
779
  << " selected subchannel connectivity changed to "
@@ -780,8 +785,33 @@ void PickFirst::SubchannelList::SubchannelData::SubchannelState::
780
785
  stats_plugins.AddCounter(kMetricDisconnections, 1,
781
786
  {pick_first_->channel_control_helper()->GetTarget()},
782
787
  {});
783
- // Report IDLE.
784
- pick_first_->GoIdle();
788
+ if (IsPickFirstReadyToConnectingEnabled()) {
789
+ // TODO(roth): We may want to request re-resolution in
790
+ // ExitIdleLocked() instead, at least if we go IDLE below.
791
+ pick_first_->channel_control_helper()->RequestReresolution();
792
+ }
793
+ // If the subchannel went to CONNECTING or TRANSIENT_FAILURE, we go
794
+ // back to CONNECTING and start a new Happy Eyeballs pass.
795
+ // Otherwise, go IDLE.
796
+ if (IsPickFirstReadyToConnectingEnabled() &&
797
+ (new_state == GRPC_CHANNEL_CONNECTING ||
798
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE)) {
799
+ pick_first_->UpdateState(GRPC_CHANNEL_CONNECTING, absl::OkStatus(),
800
+ MakeRefCounted<QueuePicker>(nullptr));
801
+ pick_first_->AttemptToConnectUsingLatestUpdateArgsLocked();
802
+ // Unset the selected subchannel, so that when we see the initial
803
+ // connectivity state notifications for the subchannels in the new
804
+ // subchannel list, we don't think it was caused by a resolver
805
+ // update and go IDLE if none of the subchannels report READY.
806
+ //
807
+ // Note that we do this *after* creating the new subchannel list,
808
+ // which will have taken a new ref to the originally selected
809
+ // subchannel. This ensures that we don't destroy and recreate the
810
+ // subchannel, thus preserving the backoff state inside the subchannel.
811
+ pick_first_->UnsetSelectedSubchannel();
812
+ } else {
813
+ pick_first_->GoIdle();
814
+ }
785
815
  }
786
816
 
787
817
  //
@@ -819,12 +849,12 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
819
849
  << p->subchannel_list_->shutting_down_;
820
850
  if (subchannel_list_->shutting_down_) return;
821
851
  // The notification must be for a subchannel in the current list.
822
- CHECK_EQ(subchannel_list_, p->subchannel_list_.get());
852
+ GRPC_CHECK_EQ(subchannel_list_, p->subchannel_list_.get());
823
853
  // SHUTDOWN should never happen.
824
- CHECK_NE(new_state, GRPC_CHANNEL_SHUTDOWN);
854
+ GRPC_CHECK_NE(new_state, GRPC_CHANNEL_SHUTDOWN);
825
855
  // READY should be caught by SubchannelState, in which case it will
826
856
  // not call us in the first place.
827
- CHECK_NE(new_state, GRPC_CHANNEL_READY);
857
+ GRPC_CHECK_NE(new_state, GRPC_CHANNEL_READY);
828
858
  // Update state.
829
859
  std::optional<grpc_connectivity_state> old_state = connectivity_state_;
830
860
  connectivity_state_ = new_state;
@@ -950,11 +980,11 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
950
980
  }
951
981
 
952
982
  void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
953
- CHECK(connectivity_state_.has_value());
983
+ GRPC_CHECK(connectivity_state_.has_value());
954
984
  if (connectivity_state_ == GRPC_CHANNEL_IDLE) {
955
985
  subchannel_state_->RequestConnection();
956
986
  } else {
957
- CHECK_EQ(connectivity_state_.value(), GRPC_CHANNEL_CONNECTING);
987
+ GRPC_CHECK_EQ(connectivity_state_.value(), GRPC_CHANNEL_CONNECTING);
958
988
  }
959
989
  // If this is not the last subchannel in the list, start the timer.
960
990
  if (index_ != subchannel_list_->size() - 1) {
@@ -1009,7 +1039,7 @@ PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
1009
1039
  if (addresses == nullptr) return;
1010
1040
  // Create a subchannel for each address.
1011
1041
  addresses->ForEach([&](const EndpointAddresses& address) {
1012
- CHECK_EQ(address.addresses().size(), 1u);
1042
+ GRPC_CHECK_EQ(address.addresses().size(), 1u);
1013
1043
  RefCountedPtr<SubchannelInterface> subchannel =
1014
1044
  policy_->channel_control_helper()->CreateSubchannel(
1015
1045
  address.address(), address.args(), args_);
@@ -1038,7 +1068,7 @@ PickFirst::SubchannelList::~SubchannelList() {
1038
1068
  void PickFirst::SubchannelList::Orphan() {
1039
1069
  GRPC_TRACE_LOG(pick_first, INFO)
1040
1070
  << "[PF " << policy_.get() << "] Shutting down subchannel_list " << this;
1041
- CHECK(!shutting_down_);
1071
+ GRPC_CHECK(!shutting_down_);
1042
1072
  shutting_down_ = true;
1043
1073
  // Shut down subchannels.
1044
1074
  subchannels_.clear();
@@ -1070,7 +1100,7 @@ void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
1070
1100
  // large recursion that could overflow the stack.
1071
1101
  for (; attempting_index_ < size(); ++attempting_index_) {
1072
1102
  SubchannelData* sc = subchannels_[attempting_index_].get();
1073
- CHECK(sc->connectivity_state().has_value());
1103
+ GRPC_CHECK(sc->connectivity_state().has_value());
1074
1104
  if (sc->connectivity_state() != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1075
1105
  // Found a subchannel not in TRANSIENT_FAILURE, so trigger a
1076
1106
  // connection attempt.
@@ -30,13 +30,6 @@
30
30
  #include <utility>
31
31
  #include <vector>
32
32
 
33
- #include "absl/log/check.h"
34
- #include "absl/log/log.h"
35
- #include "absl/status/status.h"
36
- #include "absl/status/statusor.h"
37
- #include "absl/strings/str_cat.h"
38
- #include "absl/strings/str_join.h"
39
- #include "absl/strings/string_view.h"
40
33
  #include "src/core/config/core_configuration.h"
41
34
  #include "src/core/lib/channel/channel_args.h"
42
35
  #include "src/core/lib/debug/trace.h"
@@ -51,6 +44,7 @@
51
44
  #include "src/core/load_balancing/lb_policy_registry.h"
52
45
  #include "src/core/resolver/endpoint_addresses.h"
53
46
  #include "src/core/util/debug_location.h"
47
+ #include "src/core/util/grpc_check.h"
54
48
  #include "src/core/util/json/json.h"
55
49
  #include "src/core/util/json/json_args.h"
56
50
  #include "src/core/util/json/json_object_loader.h"
@@ -60,6 +54,12 @@
60
54
  #include "src/core/util/time.h"
61
55
  #include "src/core/util/validation_errors.h"
62
56
  #include "src/core/util/work_serializer.h"
57
+ #include "absl/log/log.h"
58
+ #include "absl/status/status.h"
59
+ #include "absl/status/statusor.h"
60
+ #include "absl/strings/str_cat.h"
61
+ #include "absl/strings/str_join.h"
62
+ #include "absl/strings/string_view.h"
63
63
 
64
64
  namespace grpc_core {
65
65
 
@@ -224,7 +224,10 @@ class PriorityLb final : public LoadBalancingPolicy {
224
224
  absl::Status connectivity_status_;
225
225
  RefCountedPtr<SubchannelPicker> picker_;
226
226
 
227
- bool seen_ready_or_idle_since_transient_failure_ = true;
227
+ // Initialize to false, since we start the timer when the child is
228
+ // created. We don't want to start it again unless the child sees
229
+ // READY or IDLE without seeing TF before seeing CONNECTING.
230
+ bool can_start_failover_timer_ = false;
228
231
 
229
232
  OrphanablePtr<DeactivationTimer> deactivation_timer_;
230
233
  OrphanablePtr<FailoverTimer> failover_timer_;
@@ -401,7 +404,7 @@ void PriorityLb::ChoosePriorityLocked() {
401
404
  RefAsSubclass<PriorityLb>(DEBUG_LOCATION, "ChildPriority"),
402
405
  child_name);
403
406
  auto child_config = config_->children().find(child_name);
404
- DCHECK(child_config != config_->children().end());
407
+ GRPC_DCHECK(child_config != config_->children().end());
405
408
  // If the child policy returns a non-OK status, request re-resolution.
406
409
  // Note that this will initially cause fixed backoff delay in the
407
410
  // resolver instead of exponential delay. However, once the
@@ -451,7 +454,7 @@ void PriorityLb::ChoosePriorityLocked() {
451
454
  << "[priority_lb " << this << "] trying priority " << priority
452
455
  << ", child " << child_name;
453
456
  auto& child = children_[child_name];
454
- CHECK(child != nullptr);
457
+ GRPC_CHECK(child != nullptr);
455
458
  if (child->connectivity_state() == GRPC_CHANNEL_CONNECTING) {
456
459
  SetCurrentPriorityLocked(priority, /*deactivate_lower_priorities=*/false,
457
460
  "CONNECTING (pass 2)");
@@ -480,7 +483,7 @@ void PriorityLb::SetCurrentPriorityLocked(int32_t priority,
480
483
  }
481
484
  }
482
485
  auto& child = children_[config_->priorities()[priority]];
483
- CHECK(child != nullptr);
486
+ GRPC_CHECK(child != nullptr);
484
487
  channel_control_helper()->UpdateState(child->connectivity_state(),
485
488
  child->connectivity_status(),
486
489
  child->GetPicker());
@@ -583,10 +586,10 @@ void PriorityLb::ChildPriority::FailoverTimer::OnTimerLocked() {
583
586
  << "[priority_lb " << child_priority_->priority_policy_.get()
584
587
  << "] child " << child_priority_->name_ << " (" << child_priority_.get()
585
588
  << "): failover timer fired, reporting TRANSIENT_FAILURE";
586
- child_priority_->OnConnectivityStateUpdateLocked(
587
- GRPC_CHANNEL_TRANSIENT_FAILURE,
588
- absl::Status(absl::StatusCode::kUnavailable, "failover timer fired"),
589
- nullptr);
589
+ child_priority_->failover_timer_.reset();
590
+ // Call the LB policy's ChoosePriorityLocked() to choose a priority to
591
+ // use based on the updated state of this child.
592
+ child_priority_->priority_policy_->ChoosePriorityLocked();
590
593
  }
591
594
  }
592
595
 
@@ -706,27 +709,23 @@ void PriorityLb::ChildPriority::OnConnectivityStateUpdateLocked(
706
709
  // Store the state and picker.
707
710
  connectivity_state_ = state;
708
711
  connectivity_status_ = status;
709
- // When the failover timer fires, this method will be called with picker
710
- // set to null, because we want to consider the child to be in
711
- // TRANSIENT_FAILURE, but we have no new picker to report. In that case,
712
- // just keep using the old picker, in case we wind up delegating to this
713
- // child when all priorities are failing.
714
- if (picker != nullptr) picker_ = std::move(picker);
715
- // If we transition to state CONNECTING and we've not seen
716
- // TRANSIENT_FAILURE more recently than READY or IDLE, start failover
717
- // timer if not already pending.
718
- // In any other state, update seen_ready_or_idle_since_transient_failure_
719
- // and cancel failover timer.
712
+ picker_ = std::move(picker);
713
+ // If we transition to state CONNECTING and we've seen READY or IDLE
714
+ // more recently than TRANSIENT_FAILURE, start failover timer if not
715
+ // already pending. In any other state, cancel the timer.
720
716
  if (state == GRPC_CHANNEL_CONNECTING) {
721
- if (seen_ready_or_idle_since_transient_failure_ &&
722
- failover_timer_ == nullptr) {
717
+ if (can_start_failover_timer_ && failover_timer_ == nullptr) {
718
+ // Can't start timer again until after we see READY or IDLE.
719
+ can_start_failover_timer_ = false;
723
720
  failover_timer_ = MakeOrphanable<FailoverTimer>(Ref());
724
721
  }
725
722
  } else if (state == GRPC_CHANNEL_READY || state == GRPC_CHANNEL_IDLE) {
726
- seen_ready_or_idle_since_transient_failure_ = true;
723
+ // Can start the timer again the next time we see CONNECTING.
724
+ can_start_failover_timer_ = true;
727
725
  failover_timer_.reset();
728
726
  } else if (state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
729
- seen_ready_or_idle_since_transient_failure_ = false;
727
+ // Can't start timer again until after we see READY or IDLE.
728
+ can_start_failover_timer_ = false;
730
729
  failover_timer_.reset();
731
730
  }
732
731
  // Call the LB policy's ChoosePriorityLocked() to choose a priority to
@@ -32,15 +32,6 @@
32
32
  #include <utility>
33
33
  #include <vector>
34
34
 
35
- #include "absl/base/attributes.h"
36
- #include "absl/container/inlined_vector.h"
37
- #include "absl/log/check.h"
38
- #include "absl/log/log.h"
39
- #include "absl/random/random.h"
40
- #include "absl/status/status.h"
41
- #include "absl/status/statusor.h"
42
- #include "absl/strings/str_cat.h"
43
- #include "absl/strings/string_view.h"
44
35
  #include "src/core/client_channel/client_channel_internal.h"
45
36
  #include "src/core/config/core_configuration.h"
46
37
  #include "src/core/lib/address_utils/sockaddr_utils.h"
@@ -61,6 +52,7 @@
61
52
  #include "src/core/util/crash.h"
62
53
  #include "src/core/util/debug_location.h"
63
54
  #include "src/core/util/env.h"
55
+ #include "src/core/util/grpc_check.h"
64
56
  #include "src/core/util/json/json.h"
65
57
  #include "src/core/util/orphanable.h"
66
58
  #include "src/core/util/ref_counted.h"
@@ -69,6 +61,14 @@
69
61
  #include "src/core/util/unique_type_name.h"
70
62
  #include "src/core/util/work_serializer.h"
71
63
  #include "src/core/util/xxhash_inline.h"
64
+ #include "absl/base/attributes.h"
65
+ #include "absl/container/inlined_vector.h"
66
+ #include "absl/log/log.h"
67
+ #include "absl/random/random.h"
68
+ #include "absl/status/status.h"
69
+ #include "absl/status/statusor.h"
70
+ #include "absl/strings/str_cat.h"
71
+ #include "absl/strings/string_view.h"
72
72
 
73
73
  namespace grpc_core {
74
74
 
@@ -594,7 +594,7 @@ void RingHash::RingHashEndpoint::RequestConnectionLocked() {
594
594
  }
595
595
 
596
596
  void RingHash::RingHashEndpoint::CreateChildPolicy() {
597
- CHECK(child_policy_ == nullptr);
597
+ GRPC_CHECK(child_policy_ == nullptr);
598
598
  LoadBalancingPolicy::Args lb_policy_args;
599
599
  lb_policy_args.work_serializer = ring_hash_->work_serializer();
600
600
  lb_policy_args.args =
@@ -636,7 +636,7 @@ absl::Status RingHash::RingHashEndpoint::UpdateChildPolicyLocked() {
636
636
  CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
637
637
  Json::FromArray(
638
638
  {Json::FromObject({{"pick_first", Json::FromObject({})}})}));
639
- CHECK(config.ok());
639
+ GRPC_CHECK(config.ok());
640
640
  // Update child policy.
641
641
  LoadBalancingPolicy::UpdateArgs update_args;
642
642
  update_args.addresses =