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
@@ -47,7 +47,6 @@
47
47
  #include <string>
48
48
  #include <utility>
49
49
 
50
- #include "absl/log/check.h"
51
50
  #include "absl/log/log.h"
52
51
  #include "absl/status/status.h"
53
52
  #include "absl/status/statusor.h"
@@ -64,6 +63,7 @@
64
63
  #include "src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h"
65
64
  #include "src/core/resolver/dns/c_ares/grpc_ares_wrapper.h"
66
65
  #include "src/core/util/debug_location.h"
66
+ #include "src/core/util/grpc_check.h"
67
67
  #include "src/core/util/host_port.h"
68
68
  #include "src/core/util/string.h"
69
69
  #include "src/core/util/time.h"
@@ -215,7 +215,7 @@ static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver* ev_driver)
215
215
  GRPC_TRACE_VLOG(cares_resolver, 2)
216
216
  << "(c-ares resolver) request:" << ev_driver->request
217
217
  << " destroy ev_driver " << ev_driver;
218
- CHECK_EQ(ev_driver->fds, nullptr);
218
+ GRPC_CHECK_EQ(ev_driver->fds, nullptr);
219
219
  ares_destroy(ev_driver->channel);
220
220
  grpc_ares_complete_request_locked(ev_driver->request);
221
221
  delete ev_driver;
@@ -227,9 +227,9 @@ static void fd_node_destroy_locked(fd_node* fdn)
227
227
  GRPC_TRACE_VLOG(cares_resolver, 2)
228
228
  << "(c-ares resolver) request:" << fdn->ev_driver->request
229
229
  << " delete fd: " << fdn->grpc_polled_fd->GetName();
230
- CHECK(!fdn->readable_registered);
231
- CHECK(!fdn->writable_registered);
232
- CHECK(fdn->already_shutdown);
230
+ GRPC_CHECK(!fdn->readable_registered);
231
+ GRPC_CHECK(!fdn->writable_registered);
232
+ GRPC_CHECK(fdn->already_shutdown);
233
233
  delete fdn->grpc_polled_fd;
234
234
  delete fdn;
235
235
  }
@@ -369,7 +369,7 @@ static void on_ares_backup_poll_alarm(void* arg, grpc_error_handle error) {
369
369
  static void on_readable(void* arg, grpc_error_handle error) {
370
370
  fd_node* fdn = static_cast<fd_node*>(arg);
371
371
  grpc_core::MutexLock lock(&fdn->ev_driver->request->mu);
372
- CHECK(fdn->readable_registered);
372
+ GRPC_CHECK(fdn->readable_registered);
373
373
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
374
374
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
375
375
  fdn->readable_registered = false;
@@ -394,7 +394,7 @@ static void on_readable(void* arg, grpc_error_handle error) {
394
394
  static void on_writable(void* arg, grpc_error_handle error) {
395
395
  fd_node* fdn = static_cast<fd_node*>(arg);
396
396
  grpc_core::MutexLock lock(&fdn->ev_driver->request->mu);
397
- CHECK(fdn->writable_registered);
397
+ GRPC_CHECK(fdn->writable_registered);
398
398
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
399
399
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
400
400
  fdn->writable_registered = false;
@@ -949,7 +949,7 @@ static bool inner_resolve_as_ip_literal_locked(
949
949
  false /* log errors */) ||
950
950
  grpc_parse_ipv6_hostport(hostport->c_str(), &addr,
951
951
  false /* log errors */)) {
952
- CHECK(*addrs == nullptr);
952
+ GRPC_CHECK(*addrs == nullptr);
953
953
  *addrs = std::make_unique<EndpointAddressesList>();
954
954
  (*addrs)->emplace_back(addr, grpc_core::ChannelArgs());
955
955
  return true;
@@ -1003,7 +1003,7 @@ static bool inner_maybe_resolve_localhost_manually_locked(
1003
1003
  *port = default_port;
1004
1004
  }
1005
1005
  if (gpr_stricmp(host->c_str(), "localhost") == 0) {
1006
- CHECK(*addrs == nullptr);
1006
+ GRPC_CHECK(*addrs == nullptr);
1007
1007
  *addrs = std::make_unique<grpc_core::EndpointAddressesList>();
1008
1008
  uint16_t numeric_port = grpc_strhtons(port->c_str());
1009
1009
  grpc_resolved_address address;
@@ -1202,7 +1202,7 @@ grpc_ares_request* (*grpc_dns_lookup_txt_ares)(
1202
1202
  int query_timeout_ms) = grpc_dns_lookup_txt_ares_impl;
1203
1203
 
1204
1204
  static void grpc_cancel_ares_request_impl(grpc_ares_request* r) {
1205
- CHECK_NE(r, nullptr);
1205
+ GRPC_CHECK_NE(r, nullptr);
1206
1206
  grpc_core::MutexLock lock(&r->mu);
1207
1207
  GRPC_TRACE_VLOG(cares_resolver, 2)
1208
1208
  << "(c-ares resolver) request:" << r
@@ -36,14 +36,17 @@ void RegisterDnsResolver(CoreConfiguration::Builder* builder) {
36
36
  std::make_unique<EventEngineClientChannelDNSResolverFactory>());
37
37
  return;
38
38
  #endif
39
- #ifndef GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER
40
- if (IsEventEngineDnsEnabled()) {
39
+ #ifdef GRPC_PYTHON_BUILD
40
+ bool use_ee = IsEventEnginePollerForPythonEnabled();
41
+ #else // GRPC_PYTHON_BUILD
42
+ bool use_ee = true;
43
+ #endif // GRPC_PYTHON_BUILD
44
+ if (use_ee && IsEventEngineDnsEnabled()) {
41
45
  VLOG(2) << "Using EventEngine dns resolver";
42
46
  builder->resolver_registry()->RegisterResolverFactory(
43
47
  std::make_unique<EventEngineClientChannelDNSResolverFactory>());
44
48
  return;
45
49
  }
46
- #endif
47
50
  auto resolver = ConfigVars::Get().DnsResolver();
48
51
  // ---- Ares resolver ----
49
52
  if (ShouldUseAresDnsResolver(resolver)) {
@@ -29,7 +29,6 @@
29
29
 
30
30
  #include "absl/base/thread_annotations.h"
31
31
  #include "absl/cleanup/cleanup.h"
32
- #include "absl/log/check.h"
33
32
  #include "absl/log/log.h"
34
33
  #include "absl/status/status.h"
35
34
  #include "absl/status/statusor.h"
@@ -51,6 +50,7 @@
51
50
  #include "src/core/service_config/service_config_impl.h"
52
51
  #include "src/core/util/backoff.h"
53
52
  #include "src/core/util/debug_location.h"
53
+ #include "src/core/util/grpc_check.h"
54
54
  #include "src/core/util/ref_counted_ptr.h"
55
55
  #include "src/core/util/sync.h"
56
56
  #include "src/core/util/time.h"
@@ -421,7 +421,7 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
421
421
  // Make sure field destroys before cleanup.
422
422
  ValidationErrors::ScopedField field(&errors_, "txt lookup");
423
423
  if (orphaned_) return;
424
- CHECK(is_txt_inflight_);
424
+ GRPC_CHECK(is_txt_inflight_);
425
425
  is_txt_inflight_ = false;
426
426
  if (!service_config.ok()) {
427
427
  errors_.AddError(service_config.status().message());
@@ -25,13 +25,13 @@
25
25
  #include <utility>
26
26
  #include <vector>
27
27
 
28
- #include "absl/log/check.h"
29
28
  #include "absl/status/status.h"
30
29
  #include "absl/status/statusor.h"
31
30
  #include "absl/strings/str_cat.h"
32
31
  #include "absl/strings/str_join.h"
33
32
  #include "src/core/lib/address_utils/sockaddr_utils.h"
34
33
  #include "src/core/lib/channel/channel_args.h"
34
+ #include "src/core/util/grpc_check.h"
35
35
  #include "src/core/util/useful.h"
36
36
 
37
37
  // IWYU pragma: no_include <sys/socket.h>
@@ -45,7 +45,7 @@ EndpointAddresses::EndpointAddresses(const grpc_resolved_address& address,
45
45
  EndpointAddresses::EndpointAddresses(
46
46
  std::vector<grpc_resolved_address> addresses, const ChannelArgs& args)
47
47
  : addresses_(std::move(addresses)), args_(args) {
48
- CHECK(!addresses_.empty());
48
+ GRPC_CHECK(!addresses_.empty());
49
49
  }
50
50
 
51
51
  EndpointAddresses::EndpointAddresses(const EndpointAddresses& other)
@@ -108,7 +108,7 @@ bool EndpointAddressSet::operator==(const EndpointAddressSet& other) const {
108
108
  if (addresses_.size() != other.addresses_.size()) return false;
109
109
  auto other_it = other.addresses_.begin();
110
110
  for (auto it = addresses_.begin(); it != addresses_.end(); ++it) {
111
- CHECK(other_it != other.addresses_.end());
111
+ GRPC_CHECK(other_it != other.addresses_.end());
112
112
  if (it->len != other_it->len ||
113
113
  memcmp(it->addr, other_it->addr, it->len) != 0) {
114
114
  return false;
@@ -42,6 +42,9 @@
42
42
  // Name associated with individual address, if available (e.g., DNS name).
43
43
  #define GRPC_ARG_ADDRESS_NAME "grpc.address_name"
44
44
 
45
+ // Backend service name associated with the addresses.
46
+ #define GRPC_ARG_BACKEND_SERVICE "grpc.internal.backend_service"
47
+
45
48
  namespace grpc_core {
46
49
 
47
50
  // A list of addresses for a given endpoint with an associated set of channel
@@ -25,12 +25,12 @@
25
25
  #include <type_traits>
26
26
  #include <utility>
27
27
 
28
- #include "absl/log/check.h"
29
28
  #include "absl/strings/string_view.h"
30
29
  #include "src/core/config/core_configuration.h"
31
30
  #include "src/core/lib/channel/channel_args.h"
32
31
  #include "src/core/resolver/resolver_factory.h"
33
32
  #include "src/core/util/debug_location.h"
33
+ #include "src/core/util/grpc_check.h"
34
34
  #include "src/core/util/orphanable.h"
35
35
  #include "src/core/util/uri.h"
36
36
  #include "src/core/util/useful.h"
@@ -94,7 +94,7 @@ void FakeResolver::StartLocked() {
94
94
 
95
95
  void FakeResolver::RequestReresolutionLocked() {
96
96
  // Re-resolution can't happen until after we return an initial result.
97
- CHECK(response_generator_ != nullptr);
97
+ GRPC_CHECK(response_generator_ != nullptr);
98
98
  response_generator_->ReresolutionRequested();
99
99
  }
100
100
 
@@ -25,7 +25,6 @@
25
25
  #include <type_traits>
26
26
  #include <utility>
27
27
 
28
- #include "absl/log/check.h"
29
28
  #include "absl/log/log.h"
30
29
  #include "absl/status/statusor.h"
31
30
  #include "absl/strings/str_cat.h"
@@ -42,6 +41,7 @@
42
41
  #include "src/core/util/debug_location.h"
43
42
  #include "src/core/util/env.h"
44
43
  #include "src/core/util/gcp_metadata_query.h"
44
+ #include "src/core/util/grpc_check.h"
45
45
  #include "src/core/util/json/json.h"
46
46
  #include "src/core/util/json/json_writer.h"
47
47
  #include "src/core/util/orphanable.h"
@@ -71,6 +71,7 @@ class GoogleCloud2ProdResolver final : public Resolver {
71
71
  void ZoneQueryDone(std::string zone);
72
72
  void IPv6QueryDone(bool ipv6_supported);
73
73
  void StartXdsResolver();
74
+ std::shared_ptr<GrpcXdsBootstrap> ConstructBootstrap() const;
74
75
 
75
76
  ResourceQuotaRefPtr resource_quota_;
76
77
  std::shared_ptr<WorkSerializer> work_serializer_;
@@ -80,11 +81,12 @@ class GoogleCloud2ProdResolver final : public Resolver {
80
81
  std::string metadata_server_name_ = "metadata.google.internal.";
81
82
  bool shutdown_ = false;
82
83
 
83
- OrphanablePtr<GcpMetadataQuery> zone_query_;
84
- std::optional<std::string> zone_;
84
+ // Used to hold state between ctor and StartLocked().
85
+ std::string xds_uri_;
86
+ ChannelArgs args_;
85
87
 
86
- OrphanablePtr<GcpMetadataQuery> ipv6_query_;
87
- std::optional<bool> supports_ipv6_;
88
+ OrphanablePtr<GcpMetadataQuery> zone_query_;
89
+ std::string zone_;
88
90
  };
89
91
 
90
92
  //
@@ -99,13 +101,13 @@ bool XdsBootstrapConfigured() {
99
101
  GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
100
102
  : resource_quota_(args.args.GetObjectRef<ResourceQuota>()),
101
103
  work_serializer_(std::move(args.work_serializer)),
102
- pollent_(grpc_polling_entity_create_from_pollset_set(args.pollset_set)) {
104
+ pollent_(grpc_polling_entity_create_from_pollset_set(args.pollset_set)),
105
+ args_(std::move(args.args)) {
103
106
  absl::string_view name_to_resolve = absl::StripPrefix(args.uri.path(), "/");
104
107
  // If we're not running on GCP, we can't use DirectPath, so delegate
105
108
  // to the DNS resolver.
106
109
  const bool test_only_pretend_running_on_gcp =
107
- args.args
108
- .GetBool("grpc.testing.google_c2p_resolver_pretend_running_on_gcp")
110
+ args_.GetBool("grpc.testing.google_c2p_resolver_pretend_running_on_gcp")
109
111
  .value_or(false);
110
112
  const bool running_on_gcp =
111
113
  test_only_pretend_running_on_gcp || grpc_alts_is_running_on_gcp();
@@ -120,28 +122,27 @@ GoogleCloud2ProdResolver::GoogleCloud2ProdResolver(ResolverArgs args)
120
122
  using_dns_ = true;
121
123
  child_resolver_ =
122
124
  CoreConfiguration::Get().resolver_registry().CreateResolver(
123
- absl::StrCat("dns:", name_to_resolve), args.args, args.pollset_set,
125
+ absl::StrCat("dns:", name_to_resolve), args_, args.pollset_set,
124
126
  work_serializer_, std::move(args.result_handler));
125
- CHECK(child_resolver_ != nullptr);
127
+ GRPC_CHECK(child_resolver_ != nullptr);
126
128
  return;
127
129
  }
128
130
  // Maybe override metadata server name for testing
129
131
  std::optional<std::string> test_only_metadata_server_override =
130
- args.args.GetOwnedString(
132
+ args_.GetOwnedString(
131
133
  "grpc.testing.google_c2p_resolver_metadata_server_override");
132
134
  if (test_only_metadata_server_override.has_value() &&
133
135
  !test_only_metadata_server_override->empty()) {
134
136
  metadata_server_name_ = std::move(*test_only_metadata_server_override);
135
137
  }
136
138
  // Create xds resolver.
137
- std::string xds_uri =
138
- federation_enabled
139
- ? absl::StrCat("xds://", kC2PAuthority, "/", name_to_resolve)
140
- : absl::StrCat("xds:", name_to_resolve);
139
+ xds_uri_ = federation_enabled
140
+ ? absl::StrCat("xds://", kC2PAuthority, "/", name_to_resolve)
141
+ : absl::StrCat("xds:", name_to_resolve);
141
142
  child_resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
142
- xds_uri, args.args, args.pollset_set, work_serializer_,
143
+ xds_uri_, args_, args.pollset_set, work_serializer_,
143
144
  std::move(args.result_handler));
144
- CHECK(child_resolver_ != nullptr);
145
+ GRPC_CHECK(child_resolver_ != nullptr);
145
146
  }
146
147
 
147
148
  void GoogleCloud2ProdResolver::StartLocked() {
@@ -162,22 +163,6 @@ void GoogleCloud2ProdResolver::StartLocked() {
162
163
  });
163
164
  },
164
165
  Duration::Seconds(10));
165
- ipv6_query_ = MakeOrphanable<GcpMetadataQuery>(
166
- metadata_server_name_, std::string(GcpMetadataQuery::kIPv6Attribute),
167
- &pollent_,
168
- [resolver = RefAsSubclass<GoogleCloud2ProdResolver>()](
169
- std::string /* attribute */,
170
- absl::StatusOr<std::string> result) mutable {
171
- resolver->work_serializer_->Run(
172
- [resolver, result = std::move(result)]() {
173
- // Check that the payload is non-empty in order to work around
174
- // the fact that there are buggy implementations of metadata
175
- // servers in the wild, which can in some cases return 200
176
- // plus an empty result when they should have returned 404.
177
- resolver->IPv6QueryDone(result.ok() && !result->empty());
178
- });
179
- },
180
- Duration::Seconds(10));
181
166
  }
182
167
 
183
168
  void GoogleCloud2ProdResolver::RequestReresolutionLocked() {
@@ -195,26 +180,17 @@ void GoogleCloud2ProdResolver::ResetBackoffLocked() {
195
180
  void GoogleCloud2ProdResolver::ShutdownLocked() {
196
181
  shutdown_ = true;
197
182
  zone_query_.reset();
198
- ipv6_query_.reset();
199
183
  child_resolver_.reset();
200
184
  }
201
185
 
202
186
  void GoogleCloud2ProdResolver::ZoneQueryDone(std::string zone) {
203
187
  zone_query_.reset();
204
188
  zone_ = std::move(zone);
205
- if (supports_ipv6_.has_value()) StartXdsResolver();
206
- }
207
-
208
- void GoogleCloud2ProdResolver::IPv6QueryDone(bool ipv6_supported) {
209
- ipv6_query_.reset();
210
- supports_ipv6_ = ipv6_supported;
211
- if (zone_.has_value()) StartXdsResolver();
189
+ StartXdsResolver();
212
190
  }
213
191
 
214
- void GoogleCloud2ProdResolver::StartXdsResolver() {
215
- if (shutdown_) {
216
- return;
217
- }
192
+ std::shared_ptr<GrpcXdsBootstrap> GoogleCloud2ProdResolver::ConstructBootstrap()
193
+ const {
218
194
  // Construct bootstrap JSON.
219
195
  std::random_device rd;
220
196
  std::mt19937 mt(rd());
@@ -222,16 +198,15 @@ void GoogleCloud2ProdResolver::StartXdsResolver() {
222
198
  Json::Object node = {
223
199
  {"id", Json::FromString(absl::StrCat("C2P-", dist(mt)))},
224
200
  };
225
- if (!zone_->empty()) {
201
+ if (!zone_.empty()) {
226
202
  node["locality"] = Json::FromObject({
227
- {"zone", Json::FromString(*zone_)},
203
+ {"zone", Json::FromString(zone_)},
228
204
  });
229
205
  };
230
- if (*supports_ipv6_) {
231
- node["metadata"] = Json::FromObject({
232
- {"TRAFFICDIRECTOR_DIRECTPATH_C2P_IPV6_CAPABLE", Json::FromBool(true)},
233
- });
234
- }
206
+ // Enable dualstack endpoints from TD
207
+ node["metadata"] = Json::FromObject({
208
+ {"TRAFFICDIRECTOR_DIRECTPATH_C2P_IPV6_CAPABLE", Json::FromBool(true)},
209
+ });
235
210
  // Allow the TD server uri to be overridden for testing purposes.
236
211
  auto override_server =
237
212
  GetEnv("GRPC_TEST_ONLY_GOOGLE_C2P_RESOLVER_TRAFFIC_DIRECTOR_URI");
@@ -262,8 +237,20 @@ void GoogleCloud2ProdResolver::StartXdsResolver() {
262
237
  })},
263
238
  {"node", Json::FromObject(std::move(node))},
264
239
  });
265
- // Inject bootstrap JSON as fallback config.
266
- internal::SetXdsFallbackBootstrapConfig(JsonDump(bootstrap).c_str());
240
+ return GrpcXdsBootstrap::Create(JsonDump(bootstrap)).value();
241
+ }
242
+
243
+ void GoogleCloud2ProdResolver::StartXdsResolver() {
244
+ if (shutdown_) return;
245
+ // Create XdsClient here with a custom bootstrap for C2P. When the
246
+ // xds resolver calls GrpcXdsClient::GetOrCreate(), it will get back
247
+ // the same instance rather than creating one with the normal
248
+ // bootstrap config from env vars.
249
+ static NoDestruct<std::shared_ptr<GrpcXdsBootstrap>> bootstrap(
250
+ ConstructBootstrap());
251
+ auto xds_client = GrpcXdsClient::GetOrCreate(
252
+ xds_uri_, args_, "google-c2p resolver", *bootstrap);
253
+ args_ = ChannelArgs(); // Don't need the args anymore.
267
254
  // Now start xDS resolver.
268
255
  child_resolver_->StartLocked();
269
256
  }
@@ -24,7 +24,6 @@
24
24
  #include <utility>
25
25
  #include <vector>
26
26
 
27
- #include "absl/log/check.h"
28
27
  #include "absl/log/log.h"
29
28
  #include "absl/status/status.h"
30
29
  #include "absl/status/statusor.h"
@@ -36,6 +35,7 @@
36
35
  #include "src/core/service_config/service_config.h"
37
36
  #include "src/core/util/backoff.h"
38
37
  #include "src/core/util/debug_location.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/uri.h"
41
41
  #include "src/core/util/work_serializer.h"
@@ -164,7 +164,7 @@ void PollingResolver::OnRequestCompleteLocked(Result result) {
164
164
  : result.service_config.status().ToString())
165
165
  << ", resolution_note=" << result.resolution_note;
166
166
  }
167
- CHECK(result.result_health_callback == nullptr);
167
+ GRPC_CHECK(result.result_health_callback == nullptr);
168
168
  result.result_health_callback =
169
169
  [self = RefAsSubclass<PollingResolver>(
170
170
  DEBUG_LOCATION, "result_health_callback")](absl::Status status) {
@@ -194,7 +194,7 @@ void PollingResolver::GetResultStatus(absl::Status status) {
194
194
  } else {
195
195
  // Set up for retry.
196
196
  const Duration delay = backoff_.NextAttemptDelay();
197
- CHECK(!next_resolution_timer_handle_.has_value());
197
+ GRPC_CHECK(!next_resolution_timer_handle_.has_value());
198
198
  if (GPR_UNLIKELY(tracer_ != nullptr && tracer_->enabled())) {
199
199
  LOG(INFO) << "[polling resolver " << this << "] retrying in "
200
200
  << delay.millis() << " ms";
@@ -18,13 +18,13 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include "absl/log/check.h"
22
21
  #include "absl/log/log.h"
23
22
  #include "absl/status/status.h"
24
23
  #include "absl/status/statusor.h"
25
24
  #include "absl/strings/ascii.h"
26
25
  #include "absl/strings/str_cat.h"
27
26
  #include "absl/strings/str_format.h"
27
+ #include "src/core/util/grpc_check.h"
28
28
 
29
29
  namespace grpc_core {
30
30
 
@@ -51,10 +51,11 @@ bool IsLowerCase(absl::string_view str) {
51
51
 
52
52
  void ResolverRegistry::Builder::RegisterResolverFactory(
53
53
  std::unique_ptr<ResolverFactory> factory) {
54
- CHECK(IsLowerCase(factory->scheme())) << factory->scheme();
54
+ GRPC_CHECK(IsLowerCase(factory->scheme())) << factory->scheme();
55
55
  auto [_, inserted] =
56
56
  state_.factories.try_emplace(factory->scheme(), std::move(factory));
57
- CHECK(inserted) << "scheme " << factory->scheme() << " already registered";
57
+ GRPC_CHECK(inserted) << "scheme " << factory->scheme()
58
+ << " already registered";
58
59
  }
59
60
 
60
61
  bool ResolverRegistry::Builder::HasResolverFactory(
@@ -132,7 +133,7 @@ ResolverFactory* ResolverRegistry::LookupResolverFactory(
132
133
  // point to the parsed URI.
133
134
  ResolverFactory* ResolverRegistry::FindResolverFactory(
134
135
  absl::string_view target, URI* uri, std::string* canonical_target) const {
135
- CHECK_NE(uri, nullptr);
136
+ GRPC_CHECK_NE(uri, nullptr);
136
137
  absl::StatusOr<URI> tmp_uri = URI::Parse(target);
137
138
  ResolverFactory* factory =
138
139
  tmp_uri.ok() ? LookupResolverFactory(tmp_uri->scheme()) : nullptr;
@@ -18,12 +18,12 @@
18
18
 
19
19
  #include <set>
20
20
 
21
- #include "absl/log/check.h"
22
21
  #include "absl/log/log.h"
23
22
  #include "absl/strings/str_join.h"
24
23
  #include "src/core/config/core_configuration.h"
25
24
  #include "src/core/load_balancing/xds/xds_channel_args.h"
26
25
  #include "src/core/resolver/fake/fake_resolver.h"
26
+ #include "src/core/util/grpc_check.h"
27
27
  #include "src/core/util/match.h"
28
28
  #include "src/core/xds/grpc/xds_cluster_parser.h"
29
29
  #include "src/core/xds/grpc/xds_endpoint_parser.h"
@@ -608,9 +608,9 @@ void XdsDependencyManager::PopulateDnsUpdate(const std::string& dns_name,
608
608
  std::vector<grpc_resolved_address> addresses;
609
609
  ChannelArgs address_args = result.addresses->front().args();
610
610
  for (const auto& address : *result.addresses) {
611
- CHECK_EQ(address.addresses().size(), 1UL);
611
+ GRPC_CHECK_EQ(address.addresses().size(), 1UL);
612
612
  addresses.emplace_back(address.addresses().front());
613
- CHECK_EQ(address_args, address.args());
613
+ GRPC_CHECK_EQ(address_args, address.args());
614
614
  }
615
615
  locality.endpoints.emplace_back(
616
616
  std::move(addresses),
@@ -659,8 +659,8 @@ bool XdsDependencyManager::PopulateClusterConfigMap(
659
659
  absl::StatusOr<std::vector<absl::string_view>>* leaf_clusters,
660
660
  std::vector<std::string>* resolution_notes) {
661
661
  if (depth > 0) {
662
- CHECK_NE(leaf_clusters, nullptr);
663
- CHECK_NE(resolution_notes, nullptr);
662
+ GRPC_CHECK_NE(leaf_clusters, nullptr);
663
+ GRPC_CHECK_NE(resolution_notes, nullptr);
664
664
  }
665
665
  if (depth == kMaxXdsAggregateClusterRecursionDepth) {
666
666
  *leaf_clusters =
@@ -32,7 +32,6 @@
32
32
  #include <variant>
33
33
  #include <vector>
34
34
 
35
- #include "absl/log/check.h"
36
35
  #include "absl/log/log.h"
37
36
  #include "absl/meta/type_traits.h"
38
37
  #include "absl/random/random.h"
@@ -75,6 +74,7 @@
75
74
  #include "src/core/service_config/service_config_impl.h"
76
75
  #include "src/core/util/debug_location.h"
77
76
  #include "src/core/util/dual_ref_counted.h"
77
+ #include "src/core/util/grpc_check.h"
78
78
  #include "src/core/util/match.h"
79
79
  #include "src/core/util/orphanable.h"
80
80
  #include "src/core/util/ref_counted.h"
@@ -627,7 +627,7 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
627
627
  const XdsHttpFilterImpl* filter_impl =
628
628
  http_filter_registry.GetFilterForType(
629
629
  http_filter.config.config_proto_type_name);
630
- CHECK_NE(filter_impl, nullptr);
630
+ GRPC_CHECK_NE(filter_impl, nullptr);
631
631
  // Add filter to list.
632
632
  filters_.push_back(filter_impl);
633
633
  }
@@ -667,7 +667,7 @@ std::optional<uint64_t> HeaderHashHelper(
667
667
  absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
668
668
  GetCallConfigArgs args) {
669
669
  Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata());
670
- CHECK_NE(path, nullptr);
670
+ GRPC_CHECK_NE(path, nullptr);
671
671
  auto* entry = route_config_data_->GetRouteForRequest(path->as_string_view(),
672
672
  args.initial_metadata);
673
673
  if (entry == nullptr) {
@@ -715,7 +715,7 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
715
715
  }
716
716
  }
717
717
  if (index == 0) index = start_index;
718
- CHECK(entry->weighted_cluster_state[index].range_end > key);
718
+ GRPC_CHECK(entry->weighted_cluster_state[index].range_end > key);
719
719
  cluster_name = absl::StrCat(
720
720
  "cluster:", entry->weighted_cluster_state[index].cluster);
721
721
  method_config = entry->weighted_cluster_state[index].method_config;
@@ -729,7 +729,7 @@ absl::Status XdsResolver::XdsConfigSelector::GetCallConfig(
729
729
  method_config = entry->method_config;
730
730
  });
731
731
  auto cluster = route_config_data_->FindClusterRef(cluster_name);
732
- CHECK(cluster != nullptr);
732
+ GRPC_CHECK(cluster != nullptr);
733
733
  // Generate a hash.
734
734
  std::optional<uint64_t> hash;
735
735
  for (const auto& hash_policy : route_action->hash_policies) {
@@ -781,7 +781,7 @@ void XdsResolver::XdsConfigSelector::AddFilters(
781
781
  Blackboard* new_blackboard) {
782
782
  const auto& hcm =
783
783
  std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
784
- CHECK_EQ(filters_.size(), hcm.http_filters.size());
784
+ GRPC_CHECK_EQ(filters_.size(), hcm.http_filters.size());
785
785
  for (size_t i = 0; i < filters_.size(); ++i) {
786
786
  auto* filter = filters_[i];
787
787
  filter->AddFilter(builder);
@@ -796,7 +796,7 @@ XdsResolver::XdsConfigSelector::GetFilters(const Blackboard* old_blackboard,
796
796
  Blackboard* new_blackboard) {
797
797
  const auto& hcm =
798
798
  std::get<XdsListenerResource::HttpConnectionManager>(listener_->listener);
799
- CHECK_EQ(filters_.size(), hcm.http_filters.size());
799
+ GRPC_CHECK_EQ(filters_.size(), hcm.http_filters.size());
800
800
  std::vector<const grpc_channel_filter*> filters;
801
801
  for (size_t i = 0; i < filters_.size(); ++i) {
802
802
  auto* filter = filters_[i];
@@ -863,7 +863,7 @@ void XdsResolver::ClusterSelectionFilter::Call::OnClientInitialMetadata(
863
863
  ClientMetadata&) {
864
864
  auto* service_config_call_data =
865
865
  GetContext<ClientChannelServiceConfigCallData>();
866
- CHECK_NE(service_config_call_data, nullptr);
866
+ GRPC_CHECK_NE(service_config_call_data, nullptr);
867
867
  auto* route_state_attribute = static_cast<XdsRouteStateAttributeImpl*>(
868
868
  service_config_call_data->GetCallAttribute<XdsRouteStateAttribute>());
869
869
  auto* cluster_name_attribute =
@@ -1068,7 +1068,7 @@ void XdsResolver::GenerateErrorResult(std::string error) {
1068
1068
  Result result;
1069
1069
  result.addresses.emplace();
1070
1070
  result.service_config = ServiceConfigImpl::Create(args_, "{}");
1071
- CHECK(result.service_config.ok());
1071
+ GRPC_CHECK(result.service_config.ok());
1072
1072
  result.resolution_note = std::move(error);
1073
1073
  result.args = args_;
1074
1074
  result_handler_->ReportResult(std::move(result));