grpc 1.75.0.pre1 → 1.76.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +18 -5
  3. data/include/grpc/credentials.h +21 -5
  4. data/src/core/call/call_filters.cc +4 -4
  5. data/src/core/call/call_filters.h +36 -36
  6. data/src/core/call/call_spine.h +27 -27
  7. data/src/core/call/client_call.cc +6 -5
  8. data/src/core/call/filter_fusion.h +5 -5
  9. data/src/core/call/metadata_batch.h +3 -3
  10. data/src/core/call/security_context.cc +1 -1
  11. data/src/core/call/server_call.cc +4 -4
  12. data/src/core/call/server_call.h +1 -1
  13. data/src/core/channelz/channelz.cc +12 -18
  14. data/src/core/channelz/channelz.h +32 -16
  15. data/src/core/channelz/channelz_registry.h +11 -0
  16. data/src/core/channelz/property_list.cc +18 -0
  17. data/src/core/channelz/property_list.h +10 -1
  18. data/src/core/channelz/text_encode.cc +66 -0
  19. data/src/core/channelz/text_encode.h +29 -0
  20. data/src/core/channelz/v2tov1/convert.cc +11 -0
  21. data/src/core/channelz/v2tov1/legacy_api.cc +15 -8
  22. data/src/core/channelz/ztrace_collector.h +247 -86
  23. data/src/core/client_channel/backup_poller.cc +5 -6
  24. data/src/core/client_channel/client_channel.cc +20 -13
  25. data/src/core/client_channel/client_channel_filter.cc +53 -45
  26. data/src/core/client_channel/client_channel_filter.h +2 -2
  27. data/src/core/client_channel/client_channel_internal.h +3 -4
  28. data/src/core/client_channel/config_selector.h +3 -3
  29. data/src/core/client_channel/dynamic_filters.cc +3 -3
  30. data/src/core/client_channel/global_subchannel_pool.cc +0 -37
  31. data/src/core/client_channel/global_subchannel_pool.h +0 -27
  32. data/src/core/client_channel/load_balanced_call_destination.cc +7 -7
  33. data/src/core/client_channel/local_subchannel_pool.cc +4 -4
  34. data/src/core/client_channel/retry_filter.h +3 -3
  35. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  36. data/src/core/client_channel/subchannel.cc +8 -8
  37. data/src/core/client_channel/subchannel_stream_client.cc +4 -4
  38. data/src/core/config/config_vars.cc +30 -1
  39. data/src/core/config/config_vars.h +21 -0
  40. data/src/core/config/core_configuration.cc +5 -5
  41. data/src/core/config/core_configuration.h +7 -7
  42. data/src/core/config/load_config.cc +12 -0
  43. data/src/core/config/load_config.h +2 -0
  44. data/src/core/credentials/call/call_credentials.h +2 -2
  45. data/src/core/credentials/call/call_creds_util.cc +4 -3
  46. data/src/core/credentials/call/composite/composite_call_credentials.cc +4 -4
  47. data/src/core/credentials/call/external/aws_external_account_credentials.cc +3 -3
  48. data/src/core/credentials/call/external/external_account_credentials.cc +1 -1
  49. data/src/core/credentials/call/external/url_external_account_credentials.cc +1 -1
  50. data/src/core/credentials/call/iam/iam_credentials.cc +4 -4
  51. data/src/core/credentials/call/jwt/json_token.cc +3 -3
  52. data/src/core/credentials/call/jwt/jwt_credentials.cc +2 -2
  53. data/src/core/credentials/call/jwt/jwt_verifier.cc +14 -13
  54. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +20 -12
  55. data/src/core/credentials/call/plugin/plugin_credentials.cc +2 -2
  56. data/src/core/credentials/transport/alts/alts_credentials.cc +4 -4
  57. data/src/core/credentials/transport/alts/alts_security_connector.cc +14 -12
  58. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +22 -2
  59. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
  60. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
  61. data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
  62. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +5 -5
  63. data/src/core/credentials/transport/fake/fake_security_connector.cc +2 -2
  64. data/src/core/credentials/transport/google_default/google_default_credentials.cc +78 -28
  65. data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
  66. data/src/core/credentials/transport/local/local_security_connector.cc +8 -8
  67. data/src/core/credentials/transport/security_connector.cc +5 -5
  68. data/src/core/credentials/transport/ssl/ssl_credentials.cc +12 -12
  69. data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
  70. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +3 -3
  71. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
  72. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +24 -24
  73. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +5 -5
  74. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +2 -2
  75. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +2 -2
  76. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
  77. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +17 -17
  78. data/src/core/credentials/transport/tls/ssl_utils.cc +14 -9
  79. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -2
  80. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -11
  81. data/src/core/credentials/transport/transport_credentials.cc +2 -2
  82. data/src/core/credentials/transport/transport_credentials.h +2 -2
  83. data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
  84. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +2 -0
  85. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
  86. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  87. data/src/core/ext/filters/http/message_compress/compression_filter.h +3 -3
  88. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
  89. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
  90. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -9
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +10 -7
  92. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  93. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +96 -88
  95. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  96. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -7
  97. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +60 -0
  98. data/src/core/ext/transport/chttp2/transport/frame.cc +32 -10
  99. data/src/core/ext/transport/chttp2/transport/frame.h +16 -2
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
  101. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -4
  102. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -2
  103. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -2
  104. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
  105. data/src/core/ext/transport/chttp2/transport/header_assembler.h +28 -12
  106. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -2
  107. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -2
  108. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
  109. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -2
  110. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
  111. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -27
  112. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
  114. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +543 -366
  115. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +198 -277
  116. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +3 -0
  117. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +11 -0
  118. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +179 -0
  119. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +51 -23
  120. data/src/core/ext/transport/chttp2/transport/http2_transport.h +13 -6
  121. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +115 -71
  122. data/src/core/ext/transport/chttp2/transport/internal.h +6 -14
  123. data/src/core/ext/transport/chttp2/transport/message_assembler.h +7 -7
  124. data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -15
  125. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +62 -26
  127. data/src/core/ext/transport/chttp2/transport/ping_promise.h +58 -22
  128. data/src/core/ext/transport/chttp2/transport/stream.h +207 -0
  129. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +328 -187
  130. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -7
  131. data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
  132. data/src/core/ext/transport/chttp2/transport/transport_common.h +52 -0
  133. data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
  134. data/src/core/ext/transport/chttp2/transport/writable_streams.h +181 -79
  135. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
  136. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
  137. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
  138. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +3 -3
  139. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
  140. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
  141. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
  142. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
  143. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
  144. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
  145. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
  146. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
  147. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
  148. data/src/core/filter/auth/server_auth_filter.cc +2 -2
  149. data/src/core/handshaker/handshaker.cc +3 -3
  150. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +2 -2
  151. data/src/core/handshaker/security/legacy_secure_endpoint.cc +2 -2
  152. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +31 -8
  153. data/src/core/handshaker/security/secure_endpoint.cc +16 -6
  154. data/src/core/handshaker/security/security_handshaker.cc +3 -3
  155. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -2
  156. data/src/core/lib/channel/channel_stack.cc +8 -5
  157. data/src/core/lib/channel/channel_stack.h +3 -0
  158. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -0
  159. data/src/core/lib/channel/connected_channel.cc +2 -2
  160. data/src/core/lib/channel/promise_based_filter.cc +69 -64
  161. data/src/core/lib/channel/promise_based_filter.h +16 -15
  162. data/src/core/lib/compression/compression_internal.cc +2 -2
  163. data/src/core/lib/compression/message_compress.cc +7 -7
  164. data/src/core/lib/event_engine/ares_resolver.cc +22 -20
  165. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -2
  166. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
  167. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -2
  168. data/src/core/lib/event_engine/extensions/channelz.h +2 -2
  169. data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
  170. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
  171. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +10 -10
  172. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -2
  173. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +23 -22
  174. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
  175. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +168 -170
  176. data/src/core/lib/event_engine/posix_engine/posix_engine.h +33 -54
  177. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
  178. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +5 -5
  179. data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
  180. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
  181. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +3 -3
  182. data/src/core/lib/event_engine/resolved_address.cc +3 -3
  183. data/src/core/lib/event_engine/shim.cc +8 -11
  184. data/src/core/lib/event_engine/shim.h +2 -1
  185. data/src/core/lib/event_engine/slice.cc +2 -2
  186. data/src/core/lib/event_engine/tcp_socket_utils.cc +11 -11
  187. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +7 -7
  188. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -31
  189. data/src/core/lib/event_engine/windows/iocp.cc +10 -10
  190. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  191. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -11
  192. data/src/core/lib/event_engine/windows/windows_engine.cc +16 -14
  193. data/src/core/lib/event_engine/windows/windows_listener.cc +7 -7
  194. data/src/core/lib/experiments/experiments.cc +105 -18
  195. data/src/core/lib/experiments/experiments.h +43 -11
  196. data/src/core/lib/iomgr/call_combiner.cc +3 -3
  197. data/src/core/lib/iomgr/endpoint_cfstream.cc +6 -6
  198. data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -5
  199. data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -14
  200. data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -15
  201. data/src/core/lib/iomgr/ev_poll_posix.cc +11 -11
  202. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -4
  203. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
  204. data/src/core/lib/iomgr/iocp_windows.cc +8 -8
  205. data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
  206. data/src/core/lib/iomgr/lockfree_event.cc +2 -2
  207. data/src/core/lib/iomgr/polling_entity.cc +3 -3
  208. data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
  209. data/src/core/lib/iomgr/socket_windows.cc +4 -4
  210. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -4
  211. data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
  212. data/src/core/lib/iomgr/tcp_posix.cc +42 -42
  213. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  214. data/src/core/lib/iomgr/tcp_server.h +7 -0
  215. data/src/core/lib/iomgr/tcp_server_posix.cc +47 -27
  216. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  217. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -5
  218. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  219. data/src/core/lib/iomgr/tcp_server_windows.cc +68 -29
  220. data/src/core/lib/iomgr/tcp_windows.cc +7 -7
  221. data/src/core/lib/iomgr/timer_generic.cc +2 -2
  222. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  223. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  224. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
  225. data/src/core/lib/promise/activity.cc +2 -2
  226. data/src/core/lib/promise/activity.h +6 -6
  227. data/src/core/lib/promise/context.h +2 -2
  228. data/src/core/lib/promise/detail/join_state.h +9 -9
  229. data/src/core/lib/promise/detail/seq_state.h +13 -13
  230. data/src/core/lib/promise/detail/status.h +2 -2
  231. data/src/core/lib/promise/for_each.h +5 -5
  232. data/src/core/lib/promise/interceptor_list.h +2 -2
  233. data/src/core/lib/promise/latch.h +7 -7
  234. data/src/core/lib/promise/mpsc.cc +26 -26
  235. data/src/core/lib/promise/mpsc.h +2 -2
  236. data/src/core/lib/promise/observable.h +4 -4
  237. data/src/core/lib/promise/party.cc +32 -25
  238. data/src/core/lib/promise/party.h +16 -19
  239. data/src/core/lib/promise/pipe.h +15 -15
  240. data/src/core/lib/promise/poll.h +5 -4
  241. data/src/core/lib/promise/promise.h +0 -2
  242. data/src/core/lib/promise/sleep.cc +3 -1
  243. data/src/core/lib/promise/status_flag.h +7 -7
  244. data/src/core/lib/promise/try_join.h +2 -2
  245. data/src/core/lib/promise/try_seq.h +2 -2
  246. data/src/core/lib/resource_quota/arena.h +15 -2
  247. data/src/core/lib/resource_quota/connection_quota.cc +9 -7
  248. data/src/core/lib/resource_quota/memory_quota.cc +45 -24
  249. data/src/core/lib/resource_quota/memory_quota.h +48 -16
  250. data/src/core/lib/resource_quota/telemetry.h +54 -0
  251. data/src/core/lib/resource_quota/thread_quota.cc +2 -2
  252. data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
  253. data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
  254. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  255. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
  256. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  257. data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
  258. data/src/core/lib/surface/call.cc +16 -14
  259. data/src/core/lib/surface/call.h +1 -1
  260. data/src/core/lib/surface/call_utils.cc +2 -2
  261. data/src/core/lib/surface/call_utils.h +2 -2
  262. data/src/core/lib/surface/channel.cc +4 -4
  263. data/src/core/lib/surface/channel_create.cc +10 -6
  264. data/src/core/lib/surface/channel_init.cc +80 -23
  265. data/src/core/lib/surface/channel_init.h +26 -11
  266. data/src/core/lib/surface/completion_queue.cc +17 -16
  267. data/src/core/lib/surface/completion_queue_factory.cc +7 -7
  268. data/src/core/lib/surface/connection_context.h +45 -2
  269. data/src/core/lib/surface/filter_stack_call.cc +12 -23
  270. data/src/core/lib/surface/filter_stack_call.h +3 -4
  271. data/src/core/lib/surface/legacy_channel.cc +7 -7
  272. data/src/core/lib/surface/validate_metadata.h +2 -2
  273. data/src/core/lib/surface/version.cc +2 -2
  274. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  275. data/src/core/lib/transport/bdp_estimator.h +3 -3
  276. data/src/core/lib/transport/promise_endpoint.cc +3 -3
  277. data/src/core/lib/transport/promise_endpoint.h +8 -8
  278. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  279. data/src/core/load_balancing/child_policy_handler.cc +4 -4
  280. data/src/core/load_balancing/endpoint_list.cc +2 -2
  281. data/src/core/load_balancing/grpclb/grpclb.cc +24 -24
  282. data/src/core/load_balancing/health_check_client.cc +4 -4
  283. data/src/core/load_balancing/health_check_client_internal.h +2 -2
  284. data/src/core/load_balancing/lb_policy_registry.cc +2 -2
  285. data/src/core/load_balancing/oob_backend_metric.cc +4 -4
  286. data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
  287. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  288. data/src/core/load_balancing/pick_first/pick_first.cc +14 -14
  289. data/src/core/load_balancing/priority/priority.cc +23 -24
  290. data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -3
  291. data/src/core/load_balancing/rls/rls.cc +13 -13
  292. data/src/core/load_balancing/round_robin/round_robin.cc +9 -9
  293. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
  294. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -26
  295. data/src/core/load_balancing/weighted_target/weighted_target.cc +5 -5
  296. data/src/core/load_balancing/xds/cds.cc +76 -32
  297. data/src/core/load_balancing/xds/xds_cluster_impl.cc +3 -3
  298. data/src/core/load_balancing/xds/xds_override_host.cc +4 -4
  299. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  300. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +33 -33
  301. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -10
  302. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -3
  303. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +2 -2
  304. data/src/core/resolver/endpoint_addresses.cc +3 -3
  305. data/src/core/resolver/endpoint_addresses.h +3 -0
  306. data/src/core/resolver/fake/fake_resolver.cc +2 -2
  307. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +41 -54
  308. data/src/core/resolver/polling_resolver.cc +3 -3
  309. data/src/core/resolver/resolver_registry.cc +5 -4
  310. data/src/core/resolver/xds/xds_dependency_manager.cc +5 -5
  311. data/src/core/resolver/xds/xds_resolver.cc +9 -9
  312. data/src/core/server/server.cc +38 -38
  313. data/src/core/server/server_call_tracer_filter.h +4 -4
  314. data/src/core/server/server_config_selector_filter.cc +2 -2
  315. data/src/core/server/xds_server_config_fetcher.cc +9 -8
  316. data/src/core/service_config/service_config_impl.h +2 -2
  317. data/src/core/telemetry/call_tracer.cc +39 -49
  318. data/src/core/telemetry/call_tracer.h +199 -22
  319. data/src/core/telemetry/histogram.h +205 -0
  320. data/src/core/telemetry/instrument.cc +719 -0
  321. data/src/core/telemetry/instrument.h +932 -0
  322. data/src/core/telemetry/metrics.cc +13 -5
  323. data/src/core/telemetry/metrics.h +3 -1
  324. data/src/core/telemetry/stats_data.cc +0 -19
  325. data/src/core/telemetry/stats_data.h +0 -19
  326. data/src/core/transport/auth_context.cc +2 -2
  327. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -45
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
  329. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +39 -31
  331. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
  332. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +3 -3
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +7 -7
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
  335. data/src/core/tsi/fake_transport_security.cc +4 -4
  336. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +4 -4
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +9 -9
  338. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -3
  339. data/src/core/tsi/ssl_transport_security.cc +26 -25
  340. data/src/core/tsi/ssl_transport_security_utils.cc +9 -9
  341. data/src/core/util/chunked_vector.h +4 -4
  342. data/src/core/util/event_log.cc +2 -2
  343. data/src/core/util/gcp_metadata_query.cc +2 -2
  344. data/src/core/util/grpc_check.cc +22 -0
  345. data/src/core/util/grpc_check.h +103 -0
  346. data/src/core/util/http_client/httpcli.cc +3 -3
  347. data/src/core/util/http_client/parser.cc +4 -4
  348. data/src/core/util/latent_see.h +7 -4
  349. data/src/core/util/lru_cache.h +4 -4
  350. data/src/core/util/memory_usage.h +16 -0
  351. data/src/core/util/posix/directory_reader.cc +3 -2
  352. data/src/core/util/posix/sync.cc +24 -24
  353. data/src/core/util/postmortem_emit.cc +52 -0
  354. data/src/core/util/postmortem_emit.h +30 -0
  355. data/src/core/util/ref_counted_ptr.h +5 -0
  356. data/src/core/util/trie_lookup.h +170 -0
  357. data/src/core/util/unique_ptr_with_bitset.h +5 -5
  358. data/src/core/xds/grpc/xds_bootstrap_grpc.h +6 -1
  359. data/src/core/xds/grpc/xds_certificate_provider.cc +3 -3
  360. data/src/core/xds/grpc/xds_client_grpc.cc +34 -15
  361. data/src/core/xds/grpc/xds_client_grpc.h +4 -1
  362. data/src/core/xds/grpc/xds_cluster_parser.cc +2 -2
  363. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  364. data/src/core/xds/grpc/xds_endpoint_parser.cc +2 -2
  365. data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
  366. data/src/core/xds/grpc/xds_listener_parser.cc +3 -3
  367. data/src/core/xds/grpc/xds_matcher.cc +277 -0
  368. data/src/core/xds/grpc/xds_matcher.h +432 -0
  369. data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
  370. data/src/core/xds/grpc/xds_matcher_action.h +48 -0
  371. data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
  372. data/src/core/xds/grpc/xds_matcher_context.h +46 -0
  373. data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
  374. data/src/core/xds/grpc/xds_matcher_input.h +105 -0
  375. data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
  376. data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
  377. data/src/core/xds/grpc/xds_metadata.cc +4 -3
  378. data/src/core/xds/grpc/xds_route_config_parser.cc +6 -6
  379. data/src/core/xds/grpc/xds_routing.cc +3 -3
  380. data/src/core/xds/grpc/xds_transport_grpc.cc +10 -10
  381. data/src/core/xds/xds_client/lrs_client.cc +6 -6
  382. data/src/core/xds/xds_client/xds_client.cc +9 -9
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  384. data/src/ruby/lib/grpc/version.rb +1 -1
  385. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  386. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  387. metadata +37 -2
@@ -82,7 +82,6 @@
82
82
 
83
83
  #include "absl/container/inlined_vector.h"
84
84
  #include "absl/functional/function_ref.h"
85
- #include "absl/log/check.h"
86
85
  #include "absl/log/globals.h"
87
86
  #include "absl/log/log.h"
88
87
  #include "absl/status/status.h"
@@ -128,6 +127,7 @@
128
127
  #include "src/core/util/backoff.h"
129
128
  #include "src/core/util/crash.h"
130
129
  #include "src/core/util/debug_location.h"
130
+ #include "src/core/util/grpc_check.h"
131
131
  #include "src/core/util/json/json.h"
132
132
  #include "src/core/util/json/json_args.h"
133
133
  #include "src/core/util/json/json_object_loader.h"
@@ -870,8 +870,8 @@ GrpcLb::BalancerCallState::BalancerCallState(
870
870
  : InternallyRefCounted<BalancerCallState>(
871
871
  GRPC_TRACE_FLAG_ENABLED(glb) ? "BalancerCallState" : nullptr),
872
872
  grpclb_policy_(std::move(parent_grpclb_policy)) {
873
- CHECK(grpclb_policy_ != nullptr);
874
- CHECK(!grpclb_policy()->shutting_down_);
873
+ GRPC_CHECK(grpclb_policy_ != nullptr);
874
+ GRPC_CHECK(!grpclb_policy()->shutting_down_);
875
875
  // Init the LB call. Note that the LB call will progress every time there's
876
876
  // activity in grpclb_policy_->interested_parties(), which is comprised of
877
877
  // the polling entities from client_channel.
@@ -908,7 +908,7 @@ GrpcLb::BalancerCallState::BalancerCallState(
908
908
  }
909
909
 
910
910
  GrpcLb::BalancerCallState::~BalancerCallState() {
911
- CHECK_NE(lb_call_, nullptr);
911
+ GRPC_CHECK_NE(lb_call_, nullptr);
912
912
  grpc_call_unref(lb_call_);
913
913
  grpc_metadata_array_destroy(&lb_initial_metadata_recv_);
914
914
  grpc_metadata_array_destroy(&lb_trailing_metadata_recv_);
@@ -918,7 +918,7 @@ GrpcLb::BalancerCallState::~BalancerCallState() {
918
918
  }
919
919
 
920
920
  void GrpcLb::BalancerCallState::Orphan() {
921
- CHECK_NE(lb_call_, nullptr);
921
+ GRPC_CHECK_NE(lb_call_, nullptr);
922
922
  // If we are here because grpclb_policy wants to cancel the call,
923
923
  // lb_on_balancer_status_received_ will complete the cancellation and clean
924
924
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
@@ -935,7 +935,7 @@ void GrpcLb::BalancerCallState::Orphan() {
935
935
  }
936
936
 
937
937
  void GrpcLb::BalancerCallState::StartQuery() {
938
- CHECK_NE(lb_call_, nullptr);
938
+ GRPC_CHECK_NE(lb_call_, nullptr);
939
939
  GRPC_TRACE_LOG(glb, INFO)
940
940
  << "[grpclb " << grpclb_policy_.get() << "] lb_calld=" << this
941
941
  << ": Starting LB call " << lb_call_;
@@ -952,7 +952,7 @@ void GrpcLb::BalancerCallState::StartQuery() {
952
952
  op->reserved = nullptr;
953
953
  op++;
954
954
  // Op: send request message.
955
- CHECK_NE(send_message_payload_, nullptr);
955
+ GRPC_CHECK_NE(send_message_payload_, nullptr);
956
956
  op->op = GRPC_OP_SEND_MESSAGE;
957
957
  op->data.send_message.send_message = send_message_payload_;
958
958
  op->flags = 0;
@@ -966,7 +966,7 @@ void GrpcLb::BalancerCallState::StartQuery() {
966
966
  call_error = grpc_call_start_batch_and_execute(lb_call_, ops,
967
967
  static_cast<size_t>(op - ops),
968
968
  &lb_on_initial_request_sent_);
969
- CHECK_EQ(call_error, GRPC_CALL_OK);
969
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
970
970
  // Op: recv initial metadata.
971
971
  op = ops;
972
972
  op->op = GRPC_OP_RECV_INITIAL_METADATA;
@@ -989,7 +989,7 @@ void GrpcLb::BalancerCallState::StartQuery() {
989
989
  call_error = grpc_call_start_batch_and_execute(
990
990
  lb_call_, ops, static_cast<size_t>(op - ops),
991
991
  &lb_on_balancer_message_received_);
992
- CHECK_EQ(call_error, GRPC_CALL_OK);
992
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
993
993
  // Op: recv server status.
994
994
  op = ops;
995
995
  op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
@@ -1006,7 +1006,7 @@ void GrpcLb::BalancerCallState::StartQuery() {
1006
1006
  call_error = grpc_call_start_batch_and_execute(
1007
1007
  lb_call_, ops, static_cast<size_t>(op - ops),
1008
1008
  &lb_on_balancer_status_received_);
1009
- CHECK_EQ(call_error, GRPC_CALL_OK);
1009
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
1010
1010
  }
1011
1011
 
1012
1012
  void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
@@ -1037,7 +1037,7 @@ void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked() {
1037
1037
 
1038
1038
  void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
1039
1039
  // Construct message payload.
1040
- CHECK_EQ(send_message_payload_, nullptr);
1040
+ GRPC_CHECK_EQ(send_message_payload_, nullptr);
1041
1041
  // Get snapshot of stats.
1042
1042
  int64_t num_calls_started;
1043
1043
  int64_t num_calls_finished;
@@ -1080,7 +1080,7 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
1080
1080
  if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1081
1081
  LOG(ERROR) << "[grpclb " << grpclb_policy_.get() << "] lb_calld=" << this
1082
1082
  << " call_error=" << call_error << " sending client load report";
1083
- CHECK_EQ(call_error, GRPC_CALL_OK);
1083
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
1084
1084
  }
1085
1085
  }
1086
1086
 
@@ -1174,7 +1174,7 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1174
1174
  break;
1175
1175
  }
1176
1176
  case response.SERVERLIST: {
1177
- CHECK_NE(lb_call_, nullptr);
1177
+ GRPC_CHECK_NE(lb_call_, nullptr);
1178
1178
  auto serverlist_wrapper =
1179
1179
  MakeRefCounted<Serverlist>(std::move(response.serverlist));
1180
1180
  GRPC_TRACE_LOG(glb, INFO)
@@ -1272,7 +1272,7 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1272
1272
  // Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
1273
1273
  const grpc_call_error call_error = grpc_call_start_batch_and_execute(
1274
1274
  lb_call_, &op, 1, &lb_on_balancer_message_received_);
1275
- CHECK_EQ(call_error, GRPC_CALL_OK);
1275
+ GRPC_CHECK_EQ(call_error, GRPC_CALL_OK);
1276
1276
  } else {
1277
1277
  Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
1278
1278
  }
@@ -1287,7 +1287,7 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceived(
1287
1287
 
1288
1288
  void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1289
1289
  grpc_error_handle error) {
1290
- CHECK_NE(lb_call_, nullptr);
1290
+ GRPC_CHECK_NE(lb_call_, nullptr);
1291
1291
  if (GRPC_TRACE_FLAG_ENABLED(glb)) {
1292
1292
  char* status_details = grpc_slice_to_c_string(lb_call_status_details_);
1293
1293
  LOG(INFO) << "[grpclb " << grpclb_policy() << "] lb_calld=" << this
@@ -1306,7 +1306,7 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1306
1306
  // case.
1307
1307
  grpclb_policy()->lb_calld_.reset();
1308
1308
  if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1309
- CHECK(!seen_serverlist_);
1309
+ GRPC_CHECK(!seen_serverlist_);
1310
1310
  LOG(INFO) << "[grpclb " << grpclb_policy()
1311
1311
  << "] Balancer call finished without receiving serverlist; "
1312
1312
  "entering fallback mode";
@@ -1320,7 +1320,7 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1320
1320
  // This handles the fallback-after-startup case.
1321
1321
  grpclb_policy()->MaybeEnterFallbackModeAfterStartup();
1322
1322
  }
1323
- CHECK(!grpclb_policy()->shutting_down_);
1323
+ GRPC_CHECK(!grpclb_policy()->shutting_down_);
1324
1324
  grpclb_policy()->channel_control_helper()->RequestReresolution();
1325
1325
  if (seen_initial_response_) {
1326
1326
  // If we lose connection to the LB server, reset the backoff and restart
@@ -1474,7 +1474,7 @@ void GrpcLb::ShutdownLocked() {
1474
1474
  if (lb_channel_ != nullptr) {
1475
1475
  if (parent_channelz_node_ != nullptr) {
1476
1476
  channelz::ChannelNode* child_channelz_node = lb_channel_->channelz_node();
1477
- CHECK_NE(child_channelz_node, nullptr);
1477
+ GRPC_CHECK_NE(child_channelz_node, nullptr);
1478
1478
  child_channelz_node->RemoveParent(parent_channelz_node_.get());
1479
1479
  }
1480
1480
  lb_channel_.reset();
@@ -1524,7 +1524,7 @@ absl::Status GrpcLb::UpdateLocked(UpdateArgs args) {
1524
1524
  GRPC_TRACE_LOG(glb, INFO) << "[grpclb " << this << "] received update";
1525
1525
  const bool is_initial_update = lb_channel_ == nullptr;
1526
1526
  config_ = args.config.TakeAsSubclass<GrpcLbConfig>();
1527
- CHECK(config_ != nullptr);
1527
+ GRPC_CHECK(config_ != nullptr);
1528
1528
  args_ = std::move(args.args);
1529
1529
  // Update fallback address list.
1530
1530
  if (!args.addresses.ok()) {
@@ -1597,7 +1597,7 @@ absl::Status GrpcLb::UpdateBalancerChannelLocked() {
1597
1597
  lb_channel_.reset(Channel::FromC(
1598
1598
  grpc_channel_create(uri_str.c_str(), channel_credentials.get(),
1599
1599
  lb_channel_args.ToC().get())));
1600
- CHECK(lb_channel_ != nullptr);
1600
+ GRPC_CHECK(lb_channel_ != nullptr);
1601
1601
  // Set up channelz linkage.
1602
1602
  channelz::ChannelNode* child_channelz_node = lb_channel_->channelz_node();
1603
1603
  auto parent_channelz_node = args_.GetObjectRef<channelz::ChannelNode>();
@@ -1627,10 +1627,10 @@ void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
1627
1627
  //
1628
1628
 
1629
1629
  void GrpcLb::StartBalancerCallLocked() {
1630
- CHECK(lb_channel_ != nullptr);
1630
+ GRPC_CHECK(lb_channel_ != nullptr);
1631
1631
  if (shutting_down_) return;
1632
1632
  // Init the LB call data.
1633
- CHECK(lb_calld_ == nullptr);
1633
+ GRPC_CHECK(lb_calld_ == nullptr);
1634
1634
  lb_calld_ = MakeOrphanable<BalancerCallState>(Ref());
1635
1635
  GRPC_TRACE_LOG(glb, INFO)
1636
1636
  << "[grpclb " << this
@@ -1780,7 +1780,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1780
1780
  }
1781
1781
  update_args.args =
1782
1782
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1783
- CHECK(update_args.args != ChannelArgs());
1783
+ GRPC_CHECK(update_args.args != ChannelArgs());
1784
1784
  update_args.config = config_->child_policy();
1785
1785
  // Create child policy if needed.
1786
1786
  if (child_policy_ == nullptr) {
@@ -1809,7 +1809,7 @@ void GrpcLb::CacheDeletedSubchannelLocked(
1809
1809
  }
1810
1810
 
1811
1811
  void GrpcLb::StartSubchannelCacheTimerLocked() {
1812
- CHECK(!cached_subchannels_.empty());
1812
+ GRPC_CHECK(!cached_subchannels_.empty());
1813
1813
  subchannel_cache_timer_handle_ =
1814
1814
  channel_control_helper()->GetEventEngine()->RunAfter(
1815
1815
  cached_subchannels_.begin()->first - Timestamp::Now(),
@@ -30,7 +30,6 @@
30
30
  #include <type_traits>
31
31
  #include <utility>
32
32
 
33
- #include "absl/log/check.h"
34
33
  #include "absl/log/log.h"
35
34
  #include "absl/status/status.h"
36
35
  #include "absl/status/statusor.h"
@@ -53,6 +52,7 @@
53
52
  #include "src/core/load_balancing/health_check_client_internal.h"
54
53
  #include "src/core/load_balancing/subchannel_interface.h"
55
54
  #include "src/core/util/debug_location.h"
55
+ #include "src/core/util/grpc_check.h"
56
56
  #include "src/core/util/orphanable.h"
57
57
  #include "src/core/util/ref_counted_ptr.h"
58
58
  #include "src/core/util/sync.h"
@@ -104,7 +104,7 @@ void HealthProducer::HealthChecker::OnConnectivityStateChangeLocked(
104
104
  state_ = GRPC_CHANNEL_CONNECTING;
105
105
  status_ = absl::OkStatus();
106
106
  } else {
107
- CHECK(state_ == GRPC_CHANNEL_CONNECTING);
107
+ GRPC_CHECK(state_ == GRPC_CHANNEL_CONNECTING);
108
108
  }
109
109
  // Start the health watch stream.
110
110
  StartHealthStreamLocked();
@@ -295,7 +295,7 @@ class HealthProducer::ConnectivityWatcher final
295
295
  // HealthProducer
296
296
  //
297
297
 
298
- void HealthProducer::Start(RefCountedPtr<Subchannel> subchannel) {
298
+ void HealthProducer::Start(WeakRefCountedPtr<Subchannel> subchannel) {
299
299
  GRPC_TRACE_LOG(health_check_client, INFO)
300
300
  << "HealthProducer " << this << ": starting with subchannel "
301
301
  << subchannel.get();
@@ -419,7 +419,7 @@ void HealthWatcher::SetSubchannel(Subchannel* subchannel) {
419
419
  // This needs to be done outside of the lambda passed to
420
420
  // GetOrAddDataProducer() to avoid deadlocking by re-acquiring the
421
421
  // subchannel lock while already holding it.
422
- if (created) producer_->Start(subchannel->Ref());
422
+ if (created) producer_->Start(subchannel->WeakRef());
423
423
  // Register ourself with the producer.
424
424
  producer_->AddWatcher(this, health_check_service_name_);
425
425
  GRPC_TRACE_LOG(health_check_client, INFO)
@@ -55,7 +55,7 @@ class HealthProducer final : public Subchannel::DataProducerInterface {
55
55
  HealthProducer() : interested_parties_(grpc_pollset_set_create()) {}
56
56
  ~HealthProducer() override { grpc_pollset_set_destroy(interested_parties_); }
57
57
 
58
- void Start(RefCountedPtr<Subchannel> subchannel);
58
+ void Start(WeakRefCountedPtr<Subchannel> subchannel);
59
59
 
60
60
  static UniqueTypeName Type() {
61
61
  static UniqueTypeName::Factory kFactory("health_check");
@@ -137,7 +137,7 @@ class HealthProducer final : public Subchannel::DataProducerInterface {
137
137
  const absl::Status& status);
138
138
  void Orphaned() override;
139
139
 
140
- RefCountedPtr<Subchannel> subchannel_;
140
+ WeakRefCountedPtr<Subchannel> subchannel_;
141
141
  ConnectivityWatcher* connectivity_watcher_;
142
142
  grpc_pollset_set* interested_parties_;
143
143
 
@@ -25,7 +25,6 @@
25
25
  #include <utility>
26
26
  #include <vector>
27
27
 
28
- #include "absl/log/check.h"
29
28
  #include "absl/log/log.h"
30
29
  #include "absl/status/status.h"
31
30
  #include "absl/strings/str_cat.h"
@@ -33,6 +32,7 @@
33
32
  #include "absl/strings/str_join.h"
34
33
  #include "absl/strings/string_view.h"
35
34
  #include "src/core/load_balancing/lb_policy.h"
35
+ #include "src/core/util/grpc_check.h"
36
36
 
37
37
  namespace grpc_core {
38
38
 
@@ -43,7 +43,7 @@ namespace grpc_core {
43
43
  void LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory(
44
44
  std::unique_ptr<LoadBalancingPolicyFactory> factory) {
45
45
  VLOG(2) << "registering LB policy factory for \"" << factory->name() << "\"";
46
- CHECK(factories_.find(factory->name()) == factories_.end());
46
+ GRPC_CHECK(factories_.find(factory->name()) == factories_.end());
47
47
  factories_.emplace(factory->name(), std::move(factory));
48
48
  }
49
49
 
@@ -29,7 +29,6 @@
29
29
  #include <utility>
30
30
  #include <vector>
31
31
 
32
- #include "absl/log/check.h"
33
32
  #include "absl/log/log.h"
34
33
  #include "absl/status/status.h"
35
34
  #include "absl/strings/string_view.h"
@@ -47,6 +46,7 @@
47
46
  #include "src/core/load_balancing/backend_metric_parser.h"
48
47
  #include "src/core/load_balancing/oob_backend_metric_internal.h"
49
48
  #include "src/core/util/debug_location.h"
49
+ #include "src/core/util/grpc_check.h"
50
50
  #include "src/core/util/memory.h"
51
51
  #include "src/core/util/orphanable.h"
52
52
  #include "src/core/util/ref_counted_ptr.h"
@@ -201,7 +201,7 @@ class OrcaProducer::OrcaStreamEventHandler final
201
201
  // OrcaProducer
202
202
  //
203
203
 
204
- void OrcaProducer::Start(RefCountedPtr<Subchannel> subchannel) {
204
+ void OrcaProducer::Start(WeakRefCountedPtr<Subchannel> subchannel) {
205
205
  subchannel_ = std::move(subchannel);
206
206
  connected_subchannel_ = subchannel_->connected_subchannel();
207
207
  auto connectivity_watcher =
@@ -215,7 +215,7 @@ void OrcaProducer::Orphaned() {
215
215
  MutexLock lock(&mu_);
216
216
  stream_client_.reset();
217
217
  }
218
- CHECK(subchannel_ != nullptr); // Should not be called before Start().
218
+ GRPC_CHECK(subchannel_ != nullptr); // Should not be called before Start().
219
219
  subchannel_->CancelConnectivityStateWatch(connectivity_watcher_);
220
220
  subchannel_->RemoveDataProducer(this);
221
221
  }
@@ -313,7 +313,7 @@ void OrcaWatcher::SetSubchannel(Subchannel* subchannel) {
313
313
  // This needs to be done outside of the lambda passed to
314
314
  // GetOrAddDataProducer() to avoid deadlocking by re-acquiring the
315
315
  // subchannel lock while already holding it.
316
- if (created) producer_->Start(subchannel->Ref());
316
+ if (created) producer_->Start(subchannel->WeakRef());
317
317
  // Register ourself with the producer.
318
318
  producer_->AddWatcher(this);
319
319
  }
@@ -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_;
@@ -35,7 +35,6 @@
35
35
  #include <vector>
36
36
 
37
37
  #include "absl/base/thread_annotations.h"
38
- #include "absl/log/check.h"
39
38
  #include "absl/log/log.h"
40
39
  #include "absl/meta/type_traits.h"
41
40
  #include "absl/random/random.h"
@@ -62,6 +61,7 @@
62
61
  #include "src/core/load_balancing/subchannel_interface.h"
63
62
  #include "src/core/resolver/endpoint_addresses.h"
64
63
  #include "src/core/util/debug_location.h"
64
+ #include "src/core/util/grpc_check.h"
65
65
  #include "src/core/util/json/json.h"
66
66
  #include "src/core/util/orphanable.h"
67
67
  #include "src/core/util/ref_counted.h"
@@ -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_,
@@ -32,7 +32,6 @@
32
32
  #include <vector>
33
33
 
34
34
  #include "absl/algorithm/container.h"
35
- #include "absl/log/check.h"
36
35
  #include "absl/log/log.h"
37
36
  #include "absl/random/random.h"
38
37
  #include "absl/status/status.h"
@@ -56,6 +55,7 @@
56
55
  #include "src/core/telemetry/metrics.h"
57
56
  #include "src/core/util/crash.h"
58
57
  #include "src/core/util/debug_location.h"
58
+ #include "src/core/util/grpc_check.h"
59
59
  #include "src/core/util/json/json.h"
60
60
  #include "src/core/util/json/json_args.h"
61
61
  #include "src/core/util/json/json_object_loader.h"
@@ -428,7 +428,7 @@ PickFirst::PickFirst(Args args)
428
428
 
429
429
  PickFirst::~PickFirst() {
430
430
  GRPC_TRACE_LOG(pick_first, INFO) << "Destroying Pick First " << this;
431
- CHECK_EQ(subchannel_list_.get(), nullptr);
431
+ GRPC_CHECK_EQ(subchannel_list_.get(), nullptr);
432
432
  }
433
433
 
434
434
  void PickFirst::ShutdownLocked() {
@@ -700,7 +700,7 @@ void PickFirst::SubchannelList::SubchannelData::SubchannelState::Select() {
700
700
  GRPC_TRACE_LOG(pick_first, INFO)
701
701
  << "Pick First " << pick_first_.get() << " selected subchannel "
702
702
  << subchannel_.get();
703
- CHECK_NE(subchannel_data_, nullptr);
703
+ GRPC_CHECK_NE(subchannel_data_, nullptr);
704
704
  pick_first_->UnsetSelectedSubchannel(); // Cancel health watch, if any.
705
705
  pick_first_->selected_ = std::move(subchannel_data_->subchannel_state_);
706
706
  // If health checking is enabled, start the health watch, but don't
@@ -756,8 +756,8 @@ void PickFirst::SubchannelList::SubchannelData::SubchannelState::
756
756
  // If we're still part of a subchannel list trying to connect, check
757
757
  // if we're connected.
758
758
  if (subchannel_data_ != nullptr) {
759
- CHECK_EQ(pick_first_->subchannel_list_.get(),
760
- subchannel_data_->subchannel_list_);
759
+ GRPC_CHECK_EQ(pick_first_->subchannel_list_.get(),
760
+ subchannel_data_->subchannel_list_);
761
761
  // If the subchannel is READY, use it.
762
762
  // Otherwise, tell the subchannel list to keep trying.
763
763
  if (new_state == GRPC_CHANNEL_READY) {
@@ -768,7 +768,7 @@ void PickFirst::SubchannelList::SubchannelData::SubchannelState::
768
768
  return;
769
769
  }
770
770
  // We aren't trying to connect, so we must be the selected subchannel.
771
- CHECK_EQ(pick_first_->selected_.get(), this);
771
+ GRPC_CHECK_EQ(pick_first_->selected_.get(), this);
772
772
  GRPC_TRACE_LOG(pick_first, INFO)
773
773
  << "Pick First " << pick_first_.get()
774
774
  << " selected subchannel connectivity changed to "
@@ -819,12 +819,12 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
819
819
  << p->subchannel_list_->shutting_down_;
820
820
  if (subchannel_list_->shutting_down_) return;
821
821
  // The notification must be for a subchannel in the current list.
822
- CHECK_EQ(subchannel_list_, p->subchannel_list_.get());
822
+ GRPC_CHECK_EQ(subchannel_list_, p->subchannel_list_.get());
823
823
  // SHUTDOWN should never happen.
824
- CHECK_NE(new_state, GRPC_CHANNEL_SHUTDOWN);
824
+ GRPC_CHECK_NE(new_state, GRPC_CHANNEL_SHUTDOWN);
825
825
  // READY should be caught by SubchannelState, in which case it will
826
826
  // not call us in the first place.
827
- CHECK_NE(new_state, GRPC_CHANNEL_READY);
827
+ GRPC_CHECK_NE(new_state, GRPC_CHANNEL_READY);
828
828
  // Update state.
829
829
  std::optional<grpc_connectivity_state> old_state = connectivity_state_;
830
830
  connectivity_state_ = new_state;
@@ -950,11 +950,11 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
950
950
  }
951
951
 
952
952
  void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
953
- CHECK(connectivity_state_.has_value());
953
+ GRPC_CHECK(connectivity_state_.has_value());
954
954
  if (connectivity_state_ == GRPC_CHANNEL_IDLE) {
955
955
  subchannel_state_->RequestConnection();
956
956
  } else {
957
- CHECK_EQ(connectivity_state_.value(), GRPC_CHANNEL_CONNECTING);
957
+ GRPC_CHECK_EQ(connectivity_state_.value(), GRPC_CHANNEL_CONNECTING);
958
958
  }
959
959
  // If this is not the last subchannel in the list, start the timer.
960
960
  if (index_ != subchannel_list_->size() - 1) {
@@ -1009,7 +1009,7 @@ PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
1009
1009
  if (addresses == nullptr) return;
1010
1010
  // Create a subchannel for each address.
1011
1011
  addresses->ForEach([&](const EndpointAddresses& address) {
1012
- CHECK_EQ(address.addresses().size(), 1u);
1012
+ GRPC_CHECK_EQ(address.addresses().size(), 1u);
1013
1013
  RefCountedPtr<SubchannelInterface> subchannel =
1014
1014
  policy_->channel_control_helper()->CreateSubchannel(
1015
1015
  address.address(), address.args(), args_);
@@ -1038,7 +1038,7 @@ PickFirst::SubchannelList::~SubchannelList() {
1038
1038
  void PickFirst::SubchannelList::Orphan() {
1039
1039
  GRPC_TRACE_LOG(pick_first, INFO)
1040
1040
  << "[PF " << policy_.get() << "] Shutting down subchannel_list " << this;
1041
- CHECK(!shutting_down_);
1041
+ GRPC_CHECK(!shutting_down_);
1042
1042
  shutting_down_ = true;
1043
1043
  // Shut down subchannels.
1044
1044
  subchannels_.clear();
@@ -1070,7 +1070,7 @@ void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
1070
1070
  // large recursion that could overflow the stack.
1071
1071
  for (; attempting_index_ < size(); ++attempting_index_) {
1072
1072
  SubchannelData* sc = subchannels_[attempting_index_].get();
1073
- CHECK(sc->connectivity_state().has_value());
1073
+ GRPC_CHECK(sc->connectivity_state().has_value());
1074
1074
  if (sc->connectivity_state() != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1075
1075
  // Found a subchannel not in TRANSIENT_FAILURE, so trigger a
1076
1076
  // connection attempt.
@@ -30,7 +30,6 @@
30
30
  #include <utility>
31
31
  #include <vector>
32
32
 
33
- #include "absl/log/check.h"
34
33
  #include "absl/log/log.h"
35
34
  #include "absl/status/status.h"
36
35
  #include "absl/status/statusor.h"
@@ -51,6 +50,7 @@
51
50
  #include "src/core/load_balancing/lb_policy_registry.h"
52
51
  #include "src/core/resolver/endpoint_addresses.h"
53
52
  #include "src/core/util/debug_location.h"
53
+ #include "src/core/util/grpc_check.h"
54
54
  #include "src/core/util/json/json.h"
55
55
  #include "src/core/util/json/json_args.h"
56
56
  #include "src/core/util/json/json_object_loader.h"
@@ -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
@@ -34,7 +34,6 @@
34
34
 
35
35
  #include "absl/base/attributes.h"
36
36
  #include "absl/container/inlined_vector.h"
37
- #include "absl/log/check.h"
38
37
  #include "absl/log/log.h"
39
38
  #include "absl/random/random.h"
40
39
  #include "absl/status/status.h"
@@ -61,6 +60,7 @@
61
60
  #include "src/core/util/crash.h"
62
61
  #include "src/core/util/debug_location.h"
63
62
  #include "src/core/util/env.h"
63
+ #include "src/core/util/grpc_check.h"
64
64
  #include "src/core/util/json/json.h"
65
65
  #include "src/core/util/orphanable.h"
66
66
  #include "src/core/util/ref_counted.h"
@@ -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 =