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
@@ -38,7 +38,6 @@
38
38
  #include <vector>
39
39
 
40
40
  #include "absl/cleanup/cleanup.h"
41
- #include "absl/log/check.h"
42
41
  #include "absl/log/log.h"
43
42
  #include "absl/status/status.h"
44
43
  #include "absl/status/statusor.h"
@@ -96,6 +95,7 @@
96
95
  #include "src/core/service_config/service_config_impl.h"
97
96
  #include "src/core/util/crash.h"
98
97
  #include "src/core/util/debug_location.h"
98
+ #include "src/core/util/grpc_check.h"
99
99
  #include "src/core/util/json/json.h"
100
100
  #include "src/core/util/manual_constructor.h"
101
101
  #include "src/core/util/status_helper.h"
@@ -336,8 +336,8 @@ class DynamicTerminationFilter final {
336
336
 
337
337
  static grpc_error_handle Init(grpc_channel_element* elem,
338
338
  grpc_channel_element_args* args) {
339
- CHECK(args->is_last);
340
- CHECK(elem->filter == &kFilterVtable);
339
+ GRPC_CHECK(args->is_last);
340
+ GRPC_CHECK(elem->filter == &kFilterVtable);
341
341
  new (elem->channel_data) DynamicTerminationFilter(args->channel_args);
342
342
  return absl::OkStatus();
343
343
  }
@@ -494,7 +494,7 @@ class ClientChannelFilter::SubchannelWrapper final
494
494
  << " for subchannel " << subchannel_.get();
495
495
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "SubchannelWrapper");
496
496
  #ifndef NDEBUG
497
- DCHECK(chand_->work_serializer_->RunningInWorkSerializer());
497
+ GRPC_DCHECK(chand_->work_serializer_->RunningInWorkSerializer());
498
498
  #endif
499
499
  if (chand_->channelz_node_ != nullptr) {
500
500
  auto* subchannel_node = subchannel_->channelz_node();
@@ -530,7 +530,7 @@ class ClientChannelFilter::SubchannelWrapper final
530
530
  auto* subchannel_node = subchannel_->channelz_node();
531
531
  if (subchannel_node != nullptr) {
532
532
  auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
533
- CHECK(it != chand_->subchannel_refcount_map_.end());
533
+ GRPC_CHECK(it != chand_->subchannel_refcount_map_.end());
534
534
  --it->second;
535
535
  if (it->second == 0) {
536
536
  subchannel_node->RemoveParent(chand_->channelz_node_);
@@ -538,6 +538,20 @@ class ClientChannelFilter::SubchannelWrapper final
538
538
  }
539
539
  }
540
540
  }
541
+ if (IsSubchannelWrapperCleanupOnOrphanEnabled()) {
542
+ // We need to make sure that the internal subchannel gets unreffed
543
+ // inside of the WorkSerializer, so that updates to the local
544
+ // subchannel pool are properly synchronized. To that end, we
545
+ // drop our ref to the internal subchannel here. We also cancel
546
+ // any watchers that were not properly cancelled, in case any of
547
+ // them are holding a ref to the internal subchannel.
548
+ for (const auto& [_, watcher] : watcher_map_) {
549
+ subchannel_->CancelConnectivityStateWatch(watcher);
550
+ }
551
+ watcher_map_.clear();
552
+ data_watchers_.clear();
553
+ subchannel_.reset();
554
+ }
541
555
  WeakUnref(DEBUG_LOCATION, "subchannel map cleanup");
542
556
  });
543
557
  }
@@ -546,10 +560,10 @@ class ClientChannelFilter::SubchannelWrapper final
546
560
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
547
561
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
548
562
  auto& watcher_wrapper = watcher_map_[watcher.get()];
549
- CHECK_EQ(watcher_wrapper, nullptr);
563
+ GRPC_CHECK_EQ(watcher_wrapper, nullptr);
550
564
  watcher_wrapper = new WatcherWrapper(
551
565
  std::move(watcher),
552
- RefAsSubclass<SubchannelWrapper>(DEBUG_LOCATION, "WatcherWrapper"));
566
+ WeakRefAsSubclass<SubchannelWrapper>(DEBUG_LOCATION, "WatcherWrapper"));
553
567
  subchannel_->WatchConnectivityState(
554
568
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
555
569
  watcher_wrapper));
@@ -558,7 +572,7 @@ class ClientChannelFilter::SubchannelWrapper final
558
572
  void CancelConnectivityStateWatch(ConnectivityStateWatcherInterface* watcher)
559
573
  override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
560
574
  auto it = watcher_map_.find(watcher);
561
- CHECK(it != watcher_map_.end());
575
+ GRPC_CHECK(it != watcher_map_.end());
562
576
  subchannel_->CancelConnectivityStateWatch(it->second);
563
577
  watcher_map_.erase(it);
564
578
  }
@@ -575,7 +589,7 @@ class ClientChannelFilter::SubchannelWrapper final
575
589
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
576
590
  static_cast<InternalSubchannelDataWatcherInterface*>(watcher.get())
577
591
  ->SetSubchannel(subchannel_.get());
578
- CHECK(data_watchers_.insert(std::move(watcher)).second);
592
+ GRPC_CHECK(data_watchers_.insert(std::move(watcher)).second);
579
593
  }
580
594
 
581
595
  void CancelDataWatcher(DataWatcherInterface* watcher) override
@@ -609,7 +623,7 @@ class ClientChannelFilter::SubchannelWrapper final
609
623
  WatcherWrapper(
610
624
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
611
625
  watcher,
612
- RefCountedPtr<SubchannelWrapper> parent)
626
+ WeakRefCountedPtr<SubchannelWrapper> parent)
613
627
  : watcher_(std::move(watcher)), parent_(std::move(parent)) {}
614
628
 
615
629
  ~WatcherWrapper() override {
@@ -621,7 +635,6 @@ class ClientChannelFilter::SubchannelWrapper final
621
635
  GRPC_TRACE_LOG(client_channel, INFO)
622
636
  << "chand=" << parent_->chand_
623
637
  << ": connectivity change for subchannel wrapper " << parent_.get()
624
- << " subchannel " << parent_->subchannel_.get()
625
638
  << "hopping into work_serializer";
626
639
  auto self = RefAsSubclass<WatcherWrapper>();
627
640
  parent_->chand_->work_serializer_->Run(
@@ -682,7 +695,7 @@ class ClientChannelFilter::SubchannelWrapper final
682
695
 
683
696
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
684
697
  watcher_;
685
- RefCountedPtr<SubchannelWrapper> parent_;
698
+ WeakRefCountedPtr<SubchannelWrapper> parent_;
686
699
  };
687
700
 
688
701
  // A heterogenous lookup comparator for data watchers that allows
@@ -736,7 +749,7 @@ ClientChannelFilter::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
736
749
  {
737
750
  MutexLock lock(&chand_->external_watchers_mu_);
738
751
  // Will be deleted when the watch is complete.
739
- CHECK(chand->external_watchers_[on_complete] == nullptr);
752
+ GRPC_CHECK(chand->external_watchers_[on_complete] == nullptr);
740
753
  // Store a ref to the watcher in the external_watchers_ map.
741
754
  chand->external_watchers_[on_complete] =
742
755
  RefAsSubclass<ExternalConnectivityWatcher>(
@@ -996,8 +1009,8 @@ class ClientChannelFilter::ClientChannelControlHelper final
996
1009
 
997
1010
  grpc_error_handle ClientChannelFilter::Init(grpc_channel_element* elem,
998
1011
  grpc_channel_element_args* args) {
999
- CHECK(args->is_last);
1000
- CHECK(elem->filter == &kFilter);
1012
+ GRPC_CHECK(args->is_last);
1013
+ GRPC_CHECK(elem->filter == &kFilter);
1001
1014
  grpc_error_handle error;
1002
1015
  new (elem->channel_data) ClientChannelFilter(args, &error);
1003
1016
  return error;
@@ -1015,11 +1028,7 @@ RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
1015
1028
  if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
1016
1029
  return MakeRefCounted<LocalSubchannelPool>();
1017
1030
  }
1018
- if (IsShardGlobalConnectionPoolEnabled()) {
1019
- return GlobalSubchannelPool::instance();
1020
- } else {
1021
- return LegacyGlobalSubchannelPool::instance();
1022
- }
1031
+ return GlobalSubchannelPool::instance();
1023
1032
  }
1024
1033
 
1025
1034
  } // namespace
@@ -1189,7 +1198,7 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1189
1198
  // - A channel arg, in which case we check that the specified policy exists
1190
1199
  // and accepts an empty config. If not, we revert to using pick_first
1191
1200
  // lb_policy
1192
- CHECK(lb_policy_config.ok());
1201
+ GRPC_CHECK(lb_policy_config.ok());
1193
1202
  return std::move(*lb_policy_config);
1194
1203
  }
1195
1204
 
@@ -1458,7 +1467,7 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked(
1458
1467
  blackboard_ = std::move(new_blackboard);
1459
1468
  RefCountedPtr<DynamicFilters> dynamic_filters =
1460
1469
  DynamicFilters::Create(new_args, std::move(filters), blackboard_.get());
1461
- CHECK(dynamic_filters != nullptr);
1470
+ GRPC_CHECK(dynamic_filters != nullptr);
1462
1471
  // Grab data plane lock to update service config.
1463
1472
  //
1464
1473
  // We defer unreffing the old values (and deallocating memory) until
@@ -1488,7 +1497,7 @@ void ClientChannelFilter::CreateResolverLocked() {
1488
1497
  std::make_unique<ResolverResultHandler>(this));
1489
1498
  // Since the validity of the args was checked when the channel was created,
1490
1499
  // CreateResolver() must return a non-null result.
1491
- CHECK(resolver_ != nullptr);
1500
+ GRPC_CHECK(resolver_ != nullptr);
1492
1501
  UpdateStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status(),
1493
1502
  "started resolving");
1494
1503
  resolver_->StartLocked();
@@ -1598,7 +1607,7 @@ T HandlePickResult(
1598
1607
  }
1599
1608
  auto* drop_pick =
1600
1609
  std::get_if<LoadBalancingPolicy::PickResult::Drop>(&result->result);
1601
- CHECK_NE(drop_pick, nullptr);
1610
+ GRPC_CHECK_NE(drop_pick, nullptr);
1602
1611
  return drop_func(drop_pick);
1603
1612
  }
1604
1613
 
@@ -1691,7 +1700,7 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
1691
1700
  }
1692
1701
  } else {
1693
1702
  // Disconnect.
1694
- CHECK(disconnect_error_.ok());
1703
+ GRPC_CHECK(disconnect_error_.ok());
1695
1704
  disconnect_error_ = op->disconnect_with_error;
1696
1705
  UpdateStateAndPickerLocked(
1697
1706
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
@@ -1709,7 +1718,7 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
1709
1718
  void ClientChannelFilter::StartTransportOp(grpc_channel_element* elem,
1710
1719
  grpc_transport_op* op) {
1711
1720
  auto* chand = static_cast<ClientChannelFilter*>(elem->channel_data);
1712
- CHECK(op->set_accept_stream == false);
1721
+ GRPC_CHECK(op->set_accept_stream == false);
1713
1722
  // Handle bind_pollset.
1714
1723
  if (op->bind_pollset != nullptr) {
1715
1724
  grpc_pollset_set_add_pollset(chand->interested_parties_, op->bind_pollset);
@@ -1871,7 +1880,7 @@ std::optional<absl::Status> ClientChannelFilter::CallData::CheckResolution(
1871
1880
  }
1872
1881
  // If the call was queued, add trace annotation.
1873
1882
  if (was_queued) {
1874
- auto* call_tracer = arena()->GetContext<CallTracerAnnotationInterface>();
1883
+ auto* call_tracer = arena()->GetContext<CallSpan>();
1875
1884
  if (call_tracer != nullptr) {
1876
1885
  call_tracer->RecordAnnotation("Delayed name resolution complete.");
1877
1886
  }
@@ -1928,7 +1937,7 @@ ClientChannelFilter::FilterBasedCallData::FilterBasedCallData(
1928
1937
  ClientChannelFilter::FilterBasedCallData::~FilterBasedCallData() {
1929
1938
  // Make sure there are no remaining pending batches.
1930
1939
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
1931
- CHECK_EQ(pending_batches_[i], nullptr);
1940
+ GRPC_CHECK_EQ(pending_batches_[i], nullptr);
1932
1941
  }
1933
1942
  }
1934
1943
 
@@ -2076,7 +2085,7 @@ void ClientChannelFilter::FilterBasedCallData::PendingBatchesAdd(
2076
2085
  << "chand=" << chand() << " calld=" << this
2077
2086
  << ": adding pending batch at index " << idx;
2078
2087
  grpc_transport_stream_op_batch*& pending = pending_batches_[idx];
2079
- CHECK_EQ(pending, nullptr);
2088
+ GRPC_CHECK_EQ(pending, nullptr);
2080
2089
  pending = batch;
2081
2090
  }
2082
2091
 
@@ -2096,7 +2105,7 @@ void ClientChannelFilter::FilterBasedCallData::FailPendingBatchInCallCombiner(
2096
2105
  void ClientChannelFilter::FilterBasedCallData::PendingBatchesFail(
2097
2106
  grpc_error_handle error,
2098
2107
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2099
- CHECK(!error.ok());
2108
+ GRPC_CHECK(!error.ok());
2100
2109
  if (GRPC_TRACE_FLAG_ENABLED(client_channel_call)) {
2101
2110
  size_t num_batches = 0;
2102
2111
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2290,8 +2299,7 @@ class ClientChannelFilter::LoadBalancedCall::LbCallState final
2290
2299
  ServiceConfigCallData::CallAttributeInterface* GetCallAttribute(
2291
2300
  UniqueTypeName type) const override;
2292
2301
 
2293
- ClientCallTracerInterface::CallAttemptTracer* GetCallAttemptTracer()
2294
- const override;
2302
+ CallAttemptTracer* GetCallAttemptTracer() const override;
2295
2303
 
2296
2304
  private:
2297
2305
  LoadBalancedCall* lb_call_;
@@ -2308,7 +2316,7 @@ ClientChannelFilter::LoadBalancedCall::LbCallState::GetCallAttribute(
2308
2316
  return service_config_call_data->GetCallAttribute(type);
2309
2317
  }
2310
2318
 
2311
- ClientCallTracerInterface::CallAttemptTracer*
2319
+ CallAttemptTracer*
2312
2320
  ClientChannelFilter::LoadBalancedCall::LbCallState::GetCallAttemptTracer()
2313
2321
  const {
2314
2322
  return lb_call_->call_attempt_tracer();
@@ -2365,13 +2373,13 @@ class ClientChannelFilter::LoadBalancedCall::BackendMetricAccessor final
2365
2373
 
2366
2374
  namespace {
2367
2375
 
2368
- ClientCallTracerInterface::CallAttemptTracer* CreateCallAttemptTracer(
2369
- Arena* arena, bool is_transparent_retry) {
2370
- auto* call_tracer = DownCast<ClientCallTracerInterface*>(
2371
- arena->GetContext<CallTracerAnnotationInterface>());
2376
+ CallAttemptTracer* CreateCallAttemptTracer(Arena* arena,
2377
+ bool is_transparent_retry) {
2378
+ auto* call_tracer = arena->GetContext<ClientCallTracer>();
2372
2379
  if (call_tracer == nullptr) return nullptr;
2373
- auto* tracer = call_tracer->StartNewAttempt(is_transparent_retry);
2374
- arena->SetContext<CallTracerInterface>(tracer);
2380
+ auto* tracer = WrapCallAttemptTracer(
2381
+ call_tracer->StartNewAttempt(is_transparent_retry), arena);
2382
+ arena->SetContext<CallTracer>(tracer);
2375
2383
  return tracer;
2376
2384
  }
2377
2385
 
@@ -2516,11 +2524,11 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
2516
2524
 
2517
2525
  bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2518
2526
  LoadBalancingPolicy::SubchannelPicker* picker, grpc_error_handle* error) {
2519
- CHECK(connected_subchannel_ == nullptr);
2527
+ GRPC_CHECK(connected_subchannel_ == nullptr);
2520
2528
  // Perform LB pick.
2521
2529
  LoadBalancingPolicy::PickArgs pick_args;
2522
2530
  Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
2523
- CHECK_NE(path, nullptr);
2531
+ GRPC_CHECK_NE(path, nullptr);
2524
2532
  pick_args.path = path->as_string_view();
2525
2533
  LbCallState lb_call_state(this);
2526
2534
  pick_args.call_state = &lb_call_state;
@@ -2535,7 +2543,7 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2535
2543
  << "chand=" << chand_ << " lb_call=" << this
2536
2544
  << ": LB pick succeeded: subchannel="
2537
2545
  << complete_pick->subchannel.get();
2538
- CHECK(complete_pick->subchannel != nullptr);
2546
+ GRPC_CHECK(complete_pick->subchannel != nullptr);
2539
2547
  // Grab a ref to the connected subchannel while we're still
2540
2548
  // holding the data plane mutex.
2541
2549
  SubchannelWrapper* subchannel =
@@ -2620,7 +2628,7 @@ ClientChannelFilter::FilterBasedLoadBalancedCall::
2620
2628
  ~FilterBasedLoadBalancedCall() {
2621
2629
  // Make sure there are no remaining pending batches.
2622
2630
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2623
- CHECK_EQ(pending_batches_[i], nullptr);
2631
+ GRPC_CHECK_EQ(pending_batches_[i], nullptr);
2624
2632
  }
2625
2633
  if (on_call_destruction_complete_ != nullptr) {
2626
2634
  ExecCtx::Run(DEBUG_LOCATION, on_call_destruction_complete_,
@@ -2661,7 +2669,7 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesAdd(
2661
2669
  GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2662
2670
  << "chand=" << chand() << " lb_call=" << this
2663
2671
  << ": adding pending batch at index " << idx;
2664
- CHECK_EQ(pending_batches_[idx], nullptr);
2672
+ GRPC_CHECK_EQ(pending_batches_[idx], nullptr);
2665
2673
  pending_batches_[idx] = batch;
2666
2674
  }
2667
2675
 
@@ -2681,7 +2689,7 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
2681
2689
  void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesFail(
2682
2690
  grpc_error_handle error,
2683
2691
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2684
- CHECK(!error.ok());
2692
+ GRPC_CHECK(!error.ok());
2685
2693
  failure_error_ = error;
2686
2694
  if (GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call)) {
2687
2695
  size_t num_batches = 0;
@@ -373,7 +373,7 @@ class ClientChannelFilter::LoadBalancedCall
373
373
 
374
374
  protected:
375
375
  ClientChannelFilter* chand() const { return chand_; }
376
- ClientCallTracerInterface::CallAttemptTracer* call_attempt_tracer() const {
376
+ CallAttemptTracer* call_attempt_tracer() const {
377
377
  return call_attempt_tracer_;
378
378
  }
379
379
  ConnectedSubchannel* connected_subchannel() const {
@@ -434,7 +434,7 @@ class ClientChannelFilter::LoadBalancedCall
434
434
  // previous attempt yet leading to a situation where we have two active call
435
435
  // attempt tracers, and so we cannot rely on the arena to give us the right
436
436
  // tracer when performing cleanup.
437
- ClientCallTracerInterface::CallAttemptTracer* call_attempt_tracer_;
437
+ CallAttemptTracer* call_attempt_tracer_;
438
438
 
439
439
  absl::AnyInvocable<void()> on_commit_;
440
440
 
@@ -22,13 +22,13 @@
22
22
  #include <utility>
23
23
 
24
24
  #include "absl/functional/any_invocable.h"
25
- #include "absl/log/check.h"
26
25
  #include "src/core/call/call_destination.h"
27
26
  #include "src/core/lib/resource_quota/arena.h"
28
27
  #include "src/core/load_balancing/lb_policy.h"
29
28
  #include "src/core/service_config/service_config_call_data.h"
30
29
  #include "src/core/telemetry/call_tracer.h"
31
30
  #include "src/core/util/down_cast.h"
31
+ #include "src/core/util/grpc_check.h"
32
32
  #include "src/core/util/unique_type_name.h"
33
33
 
34
34
  //
@@ -54,8 +54,7 @@ class ClientChannelLbCallState : public LoadBalancingPolicy::CallState {
54
54
 
55
55
  virtual ServiceConfigCallData::CallAttributeInterface* GetCallAttribute(
56
56
  UniqueTypeName type) const = 0;
57
- virtual ClientCallTracerInterface::CallAttemptTracer* GetCallAttemptTracer()
58
- const = 0;
57
+ virtual CallAttemptTracer* GetCallAttemptTracer() const = 0;
59
58
  };
60
59
 
61
60
  // Internal type for ServiceConfigCallData. Handles call commits.
@@ -65,7 +64,7 @@ class ClientChannelServiceConfigCallData final : public ServiceConfigCallData {
65
64
  : ServiceConfigCallData(arena) {}
66
65
 
67
66
  void SetOnCommit(absl::AnyInvocable<void()> on_commit) {
68
- CHECK(on_commit_ == nullptr);
67
+ GRPC_CHECK(on_commit_ == nullptr);
69
68
  on_commit_ = std::move(on_commit);
70
69
  }
71
70
 
@@ -24,7 +24,6 @@
24
24
  #include <utility>
25
25
  #include <vector>
26
26
 
27
- #include "absl/log/check.h"
28
27
  #include "absl/status/status.h"
29
28
  #include "absl/strings/string_view.h"
30
29
  #include "src/core/call/interception_chain.h"
@@ -35,6 +34,7 @@
35
34
  #include "src/core/lib/resource_quota/arena.h"
36
35
  #include "src/core/lib/slice/slice.h"
37
36
  #include "src/core/service_config/service_config.h"
37
+ #include "src/core/util/grpc_check.h"
38
38
  #include "src/core/util/ref_counted.h"
39
39
  #include "src/core/util/ref_counted_ptr.h"
40
40
  #include "src/core/util/unique_type_name.h"
@@ -100,7 +100,7 @@ class DefaultConfigSelector final : public ConfigSelector {
100
100
  // The client channel code ensures that this will never be null.
101
101
  // If neither the resolver nor the client application provide a
102
102
  // config, a default empty config will be used.
103
- DCHECK(service_config_ != nullptr);
103
+ GRPC_DCHECK(service_config_ != nullptr);
104
104
  }
105
105
 
106
106
  UniqueTypeName name() const override {
@@ -110,7 +110,7 @@ class DefaultConfigSelector final : public ConfigSelector {
110
110
 
111
111
  absl::Status GetCallConfig(GetCallConfigArgs args) override {
112
112
  Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata());
113
- CHECK_NE(path, nullptr);
113
+ GRPC_CHECK_NE(path, nullptr);
114
114
  auto* parsed_method_configs =
115
115
  service_config_->GetMethodParsedConfigVector(path->c_slice());
116
116
  args.service_config_call_data->SetServiceConfig(service_config_,
@@ -22,7 +22,6 @@
22
22
  #include <new>
23
23
  #include <utility>
24
24
 
25
- #include "absl/log/check.h"
26
25
  #include "absl/log/log.h"
27
26
  #include "absl/status/statusor.h"
28
27
  #include "src/core/lib/channel/channel_args.h"
@@ -32,6 +31,7 @@
32
31
  #include "src/core/lib/surface/channel_stack_type.h"
33
32
  #include "src/core/lib/surface/lame_client.h"
34
33
  #include "src/core/util/alloc.h"
34
+ #include "src/core/util/grpc_check.h"
35
35
  #include "src/core/util/status_helper.h"
36
36
 
37
37
  // Conversion between call and call stack.
@@ -80,8 +80,8 @@ void DynamicFilters::Call::StartTransportStreamOpBatch(
80
80
  }
81
81
 
82
82
  void DynamicFilters::Call::SetAfterCallStackDestroy(grpc_closure* closure) {
83
- CHECK_EQ(after_call_stack_destroy_, nullptr);
84
- CHECK_NE(closure, nullptr);
83
+ GRPC_CHECK_EQ(after_call_stack_destroy_, nullptr);
84
+ GRPC_CHECK_NE(closure, nullptr);
85
85
  after_call_stack_destroy_ = closure;
86
86
  }
87
87
 
@@ -26,43 +26,6 @@
26
26
 
27
27
  namespace grpc_core {
28
28
 
29
- RefCountedPtr<LegacyGlobalSubchannelPool>
30
- LegacyGlobalSubchannelPool::instance() {
31
- static LegacyGlobalSubchannelPool* p = new LegacyGlobalSubchannelPool();
32
- return p->RefAsSubclass<LegacyGlobalSubchannelPool>();
33
- }
34
-
35
- RefCountedPtr<Subchannel> LegacyGlobalSubchannelPool::RegisterSubchannel(
36
- const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) {
37
- MutexLock lock(&mu_);
38
- auto it = subchannel_map_.find(key);
39
- if (it != subchannel_map_.end()) {
40
- RefCountedPtr<Subchannel> existing = it->second->RefIfNonZero();
41
- if (existing != nullptr) return existing;
42
- }
43
- subchannel_map_[key] = constructed.get();
44
- return constructed;
45
- }
46
-
47
- void LegacyGlobalSubchannelPool::UnregisterSubchannel(const SubchannelKey& key,
48
- Subchannel* subchannel) {
49
- MutexLock lock(&mu_);
50
- auto it = subchannel_map_.find(key);
51
- // delete only if key hasn't been re-registered to a different subchannel
52
- // between strong-unreffing and unregistration of subchannel.
53
- if (it != subchannel_map_.end() && it->second == subchannel) {
54
- subchannel_map_.erase(it);
55
- }
56
- }
57
-
58
- RefCountedPtr<Subchannel> LegacyGlobalSubchannelPool::FindSubchannel(
59
- const SubchannelKey& key) {
60
- MutexLock lock(&mu_);
61
- auto it = subchannel_map_.find(key);
62
- if (it == subchannel_map_.end()) return nullptr;
63
- return it->second->RefIfNonZero();
64
- }
65
-
66
29
  RefCountedPtr<GlobalSubchannelPool> GlobalSubchannelPool::instance() {
67
30
  static GlobalSubchannelPool* p = new GlobalSubchannelPool();
68
31
  return p->RefAsSubclass<GlobalSubchannelPool>();
@@ -30,33 +30,6 @@
30
30
 
31
31
  namespace grpc_core {
32
32
 
33
- // The global subchannel pool. It shares subchannels among channels. There
34
- // should be only one instance of this class.
35
- class LegacyGlobalSubchannelPool final : public SubchannelPoolInterface {
36
- public:
37
- // Gets the singleton instance.
38
- static RefCountedPtr<LegacyGlobalSubchannelPool> instance();
39
-
40
- // Implements interface methods.
41
- RefCountedPtr<Subchannel> RegisterSubchannel(
42
- const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) override
43
- ABSL_LOCKS_EXCLUDED(mu_);
44
- void UnregisterSubchannel(const SubchannelKey& key,
45
- Subchannel* subchannel) override
46
- ABSL_LOCKS_EXCLUDED(mu_);
47
- RefCountedPtr<Subchannel> FindSubchannel(const SubchannelKey& key) override
48
- ABSL_LOCKS_EXCLUDED(mu_);
49
-
50
- private:
51
- LegacyGlobalSubchannelPool() {}
52
- ~LegacyGlobalSubchannelPool() override {}
53
-
54
- // A map from subchannel key to subchannel.
55
- std::map<SubchannelKey, Subchannel*> subchannel_map_ ABSL_GUARDED_BY(mu_);
56
- // To protect subchannel_map_.
57
- Mutex mu_;
58
- };
59
-
60
33
  // The global subchannel pool. It shares subchannels among channels. There
61
34
  // should be only one instance of this class.
62
35
  class GlobalSubchannelPool final : public SubchannelPoolInterface {
@@ -29,10 +29,12 @@ namespace grpc_core {
29
29
  namespace {
30
30
 
31
31
  void MaybeCreateCallAttemptTracer(bool is_transparent_retry) {
32
- auto* call_tracer = MaybeGetContext<ClientCallTracerInterface>();
32
+ auto* arena = MaybeGetContext<Arena>();
33
+ if (arena == nullptr) return;
34
+ auto* call_tracer = MaybeGetContext<ClientCallTracer>();
33
35
  if (call_tracer == nullptr) return;
34
36
  auto* tracer = call_tracer->StartNewAttempt(is_transparent_retry);
35
- SetContext<CallTracerInterface>(tracer);
37
+ SetContext<CallAttemptTracer>(WrapCallAttemptTracer(tracer, arena));
36
38
  }
37
39
 
38
40
  class LbCallState : public ClientChannelLbCallState {
@@ -47,9 +49,8 @@ class LbCallState : public ClientChannelLbCallState {
47
49
  return service_config_call_data->GetCallAttribute(type);
48
50
  }
49
51
 
50
- ClientCallTracerInterface::CallAttemptTracer* GetCallAttemptTracer()
51
- const override {
52
- return GetContext<ClientCallTracerInterface::CallAttemptTracer>();
52
+ CallAttemptTracer* GetCallAttemptTracer() const override {
53
+ return GetContext<CallAttemptTracer>();
53
54
  }
54
55
  };
55
56
 
@@ -240,8 +241,7 @@ void LoadBalancedCallDestination::StartCall(
240
241
  }
241
242
  // If it was queued, add a trace annotation.
242
243
  if (was_queued) {
243
- auto* tracer = MaybeGetContext<
244
- ClientCallTracerInterface::CallAttemptTracer>();
244
+ auto* tracer = MaybeGetContext<CallAttemptTracer>();
245
245
  if (tracer != nullptr) {
246
246
  tracer->RecordAnnotation("Delayed LB pick complete.");
247
247
  }
@@ -22,8 +22,8 @@
22
22
 
23
23
  #include <utility>
24
24
 
25
- #include "absl/log/check.h"
26
25
  #include "src/core/client_channel/subchannel.h"
26
+ #include "src/core/util/grpc_check.h"
27
27
 
28
28
  namespace grpc_core {
29
29
 
@@ -33,7 +33,7 @@ RefCountedPtr<Subchannel> LocalSubchannelPool::RegisterSubchannel(
33
33
  // Because this pool is only accessed under the client channel's work
34
34
  // serializer, and because FindSubchannel is checked before invoking
35
35
  // RegisterSubchannel, no such subchannel should exist in the map.
36
- CHECK(it == subchannel_map_.end());
36
+ GRPC_CHECK(it == subchannel_map_.end());
37
37
  subchannel_map_[key] = constructed.get();
38
38
  return constructed;
39
39
  }
@@ -44,8 +44,8 @@ void LocalSubchannelPool::UnregisterSubchannel(const SubchannelKey& key,
44
44
  // Because this subchannel pool is accessed only under the client
45
45
  // channel's work serializer, any subchannel created by RegisterSubchannel
46
46
  // will be deleted from the map in UnregisterSubchannel.
47
- CHECK(it != subchannel_map_.end());
48
- CHECK(it->second == subchannel);
47
+ GRPC_CHECK(it != subchannel_map_.end());
48
+ GRPC_CHECK(it->second == subchannel);
49
49
  subchannel_map_.erase(it);
50
50
  }
51
51
 
@@ -27,7 +27,6 @@
27
27
  #include <new>
28
28
  #include <optional>
29
29
 
30
- #include "absl/log/check.h"
31
30
  #include "src/core/client_channel/client_channel_filter.h"
32
31
  #include "src/core/client_channel/retry_service_config.h"
33
32
  #include "src/core/client_channel/retry_throttle.h"
@@ -36,6 +35,7 @@
36
35
  #include "src/core/lib/channel/channel_stack.h"
37
36
  #include "src/core/lib/iomgr/error.h"
38
37
  #include "src/core/lib/transport/transport.h"
38
+ #include "src/core/util/grpc_check.h"
39
39
  #include "src/core/util/ref_counted_ptr.h"
40
40
  #include "src/core/util/useful.h"
41
41
 
@@ -88,8 +88,8 @@ class RetryFilter final {
88
88
 
89
89
  static grpc_error_handle Init(grpc_channel_element* elem,
90
90
  grpc_channel_element_args* args) {
91
- CHECK(args->is_last);
92
- CHECK(elem->filter == &kVtable);
91
+ GRPC_CHECK(args->is_last);
92
+ GRPC_CHECK(elem->filter == &kVtable);
93
93
  new (elem->channel_data) RetryFilter(*args);
94
94
  return absl::OkStatus();
95
95
  }
@@ -20,7 +20,6 @@
20
20
  #include <memory>
21
21
  #include <new>
22
22
 
23
- #include "absl/log/check.h"
24
23
  #include "absl/log/log.h"
25
24
  #include "absl/status/status.h"
26
25
  #include "absl/strings/str_cat.h"
@@ -44,6 +43,7 @@
44
43
  #include "src/core/util/backoff.h"
45
44
  #include "src/core/util/construct_destruct.h"
46
45
  #include "src/core/util/debug_location.h"
46
+ #include "src/core/util/grpc_check.h"
47
47
  #include "src/core/util/orphanable.h"
48
48
  #include "src/core/util/ref_counted.h"
49
49
  #include "src/core/util/ref_counted_ptr.h"
@@ -1502,7 +1502,7 @@ RetryFilter::LegacyCallData::~LegacyCallData() {
1502
1502
  FreeAllCachedSendOpData();
1503
1503
  // Make sure there are no remaining pending batches.
1504
1504
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
1505
- CHECK_EQ(pending_batches_[i].batch, nullptr);
1505
+ GRPC_CHECK_EQ(pending_batches_[i].batch, nullptr);
1506
1506
  }
1507
1507
  }
1508
1508
 
@@ -1731,7 +1731,7 @@ RetryFilter::LegacyCallData::PendingBatchesAdd(
1731
1731
  GRPC_TRACE_LOG(retry, INFO) << "chand=" << chand_ << " calld=" << this
1732
1732
  << ": adding pending batch at index " << idx;
1733
1733
  PendingBatch* pending = &pending_batches_[idx];
1734
- CHECK_EQ(pending->batch, nullptr);
1734
+ GRPC_CHECK_EQ(pending->batch, nullptr);
1735
1735
  pending->batch = batch;
1736
1736
  pending->send_ops_cached = false;
1737
1737
  // Update state in calld about pending batches.
@@ -1810,7 +1810,7 @@ void RetryFilter::LegacyCallData::FailPendingBatchInCallCombiner(
1810
1810
 
1811
1811
  // This is called via the call combiner, so access to calld is synchronized.
1812
1812
  void RetryFilter::LegacyCallData::PendingBatchesFail(grpc_error_handle error) {
1813
- CHECK(!error.ok());
1813
+ GRPC_CHECK(!error.ok());
1814
1814
  if (GRPC_TRACE_FLAG_ENABLED(retry)) {
1815
1815
  size_t num_batches = 0;
1816
1816
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -1887,7 +1887,7 @@ void RetryFilter::LegacyCallData::StartRetryTimer(
1887
1887
  // Compute backoff delay.
1888
1888
  Duration next_attempt_timeout;
1889
1889
  if (server_pushback.has_value()) {
1890
- CHECK(*server_pushback >= Duration::Zero());
1890
+ GRPC_CHECK(*server_pushback >= Duration::Zero());
1891
1891
  next_attempt_timeout = *server_pushback;
1892
1892
  retry_backoff_.Reset();
1893
1893
  } else {