grpc 1.37.1 → 1.38.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -162,8 +162,8 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
162
162
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
163
163
  const grpc_channel_args* args);
164
164
 
165
- static void OnDelayedRemovalTimer(void* arg, grpc_error* error);
166
- void OnDelayedRemovalTimerLocked(grpc_error* error);
165
+ static void OnDelayedRemovalTimer(void* arg, grpc_error_handle error);
166
+ void OnDelayedRemovalTimerLocked(grpc_error_handle error);
167
167
 
168
168
  // The owning LB policy.
169
169
  RefCountedPtr<XdsClusterManagerLb> xds_cluster_manager_policy_;
@@ -337,44 +337,29 @@ void XdsClusterManagerLb::UpdateStateLocked() {
337
337
  gpr_log(GPR_INFO, "[xds_cluster_manager_lb %p] connectivity changed to %s",
338
338
  this, ConnectivityStateName(connectivity_state));
339
339
  }
340
- std::unique_ptr<SubchannelPicker> picker;
341
- absl::Status status;
342
- switch (connectivity_state) {
343
- case GRPC_CHANNEL_READY: {
344
- ClusterPicker::ClusterMap cluster_map;
345
- for (const auto& p : config_->cluster_map()) {
346
- const std::string& cluster_name = p.first;
347
- RefCountedPtr<ChildPickerWrapper>& child_picker =
348
- cluster_map[cluster_name];
349
- child_picker = children_[cluster_name]->picker_wrapper();
350
- if (child_picker == nullptr) {
351
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_manager_lb_trace)) {
352
- gpr_log(
353
- GPR_INFO,
340
+ ClusterPicker::ClusterMap cluster_map;
341
+ for (const auto& p : config_->cluster_map()) {
342
+ const std::string& cluster_name = p.first;
343
+ RefCountedPtr<ChildPickerWrapper>& child_picker = cluster_map[cluster_name];
344
+ child_picker = children_[cluster_name]->picker_wrapper();
345
+ if (child_picker == nullptr) {
346
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_manager_lb_trace)) {
347
+ gpr_log(GPR_INFO,
354
348
  "[xds_cluster_manager_lb %p] child %s has not yet returned a "
355
349
  "picker; creating a QueuePicker.",
356
350
  this, cluster_name.c_str());
357
- }
358
- child_picker = MakeRefCounted<ChildPickerWrapper>(
359
- cluster_name, absl::make_unique<QueuePicker>(
360
- Ref(DEBUG_LOCATION, "QueuePicker")));
361
- }
362
351
  }
363
- picker = absl::make_unique<ClusterPicker>(std::move(cluster_map));
364
- break;
352
+ child_picker = MakeRefCounted<ChildPickerWrapper>(
353
+ cluster_name,
354
+ absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
365
355
  }
366
- case GRPC_CHANNEL_CONNECTING:
367
- case GRPC_CHANNEL_IDLE:
368
- picker =
369
- absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
370
- break;
371
- default:
372
- grpc_error* error = grpc_error_set_int(
373
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
374
- "TRANSIENT_FAILURE from XdsClusterManagerLb"),
375
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
376
- status = grpc_error_to_absl_status(error);
377
- picker = absl::make_unique<TransientFailurePicker>(error);
356
+ }
357
+ std::unique_ptr<SubchannelPicker> picker =
358
+ absl::make_unique<ClusterPicker>(std::move(cluster_map));
359
+ absl::Status status;
360
+ if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
361
+ status = absl::Status(absl::StatusCode::kUnavailable,
362
+ "TRANSIENT_FAILURE from XdsClusterManagerLb");
378
363
  }
379
364
  channel_control_helper()->UpdateState(connectivity_state, status,
380
365
  std::move(picker));
@@ -513,7 +498,7 @@ void XdsClusterManagerLb::ClusterChild::DeactivateLocked() {
513
498
  }
514
499
 
515
500
  void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimer(
516
- void* arg, grpc_error* error) {
501
+ void* arg, grpc_error_handle error) {
517
502
  ClusterChild* self = static_cast<ClusterChild*>(arg);
518
503
  GRPC_ERROR_REF(error); // Ref owned by the lambda
519
504
  self->xds_cluster_manager_policy_->work_serializer()->Run(
@@ -522,7 +507,7 @@ void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimer(
522
507
  }
523
508
 
524
509
  void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked(
525
- grpc_error* error) {
510
+ grpc_error_handle error) {
526
511
  delayed_removal_timer_callback_pending_ = false;
527
512
  if (error == GRPC_ERROR_NONE && !shutdown_) {
528
513
  xds_cluster_manager_policy_->children_.erase(name_);
@@ -616,7 +601,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
616
601
  const char* name() const override { return kXdsClusterManager; }
617
602
 
618
603
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
619
- const Json& json, grpc_error** error) const override {
604
+ const Json& json, grpc_error_handle* error) const override {
620
605
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
621
606
  if (json.type() == Json::Type::JSON_NULL) {
622
607
  // xds_cluster_manager was mentioned as a policy in the deprecated
@@ -627,7 +612,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
627
612
  "config instead.");
628
613
  return nullptr;
629
614
  }
630
- std::vector<grpc_error*> error_list;
615
+ std::vector<grpc_error_handle> error_list;
631
616
  XdsClusterManagerLbConfig::ClusterMap cluster_map;
632
617
  std::set<std::string /*cluster_name*/> clusters_to_be_used;
633
618
  auto it = json.object_value().find("children");
@@ -646,14 +631,14 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
646
631
  continue;
647
632
  }
648
633
  RefCountedPtr<LoadBalancingPolicy::Config> child_config;
649
- std::vector<grpc_error*> child_errors =
634
+ std::vector<grpc_error_handle> child_errors =
650
635
  ParseChildConfig(p.second, &child_config);
651
636
  if (!child_errors.empty()) {
652
637
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
653
638
  // string is not static in this case.
654
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
639
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
655
640
  absl::StrCat("field:children name:", child_name).c_str());
656
- for (grpc_error* child_error : child_errors) {
641
+ for (grpc_error_handle child_error : child_errors) {
657
642
  error = grpc_error_add_child(error, child_error);
658
643
  }
659
644
  error_list.push_back(error);
@@ -676,10 +661,10 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
676
661
  }
677
662
 
678
663
  private:
679
- static std::vector<grpc_error*> ParseChildConfig(
664
+ static std::vector<grpc_error_handle> ParseChildConfig(
680
665
  const Json& json,
681
666
  RefCountedPtr<LoadBalancingPolicy::Config>* child_config) {
682
- std::vector<grpc_error*> error_list;
667
+ std::vector<grpc_error_handle> error_list;
683
668
  if (json.type() != Json::Type::OBJECT) {
684
669
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
685
670
  "value should be of type object"));
@@ -690,12 +675,12 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
690
675
  error_list.push_back(
691
676
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("did not find childPolicy"));
692
677
  } else {
693
- grpc_error* parse_error = GRPC_ERROR_NONE;
678
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
694
679
  *child_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
695
680
  it->second, &parse_error);
696
681
  if (*child_config == nullptr) {
697
682
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
698
- std::vector<grpc_error*> child_errors;
683
+ std::vector<grpc_error_handle> child_errors;
699
684
  child_errors.push_back(parse_error);
700
685
  error_list.push_back(
701
686
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
@@ -101,7 +101,8 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
101
101
  // Xds Cluster Resolver LB policy.
102
102
  class XdsClusterResolverLb : public LoadBalancingPolicy {
103
103
  public:
104
- XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args);
104
+ XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args,
105
+ std::string server_name, bool is_xds_uri);
105
106
 
106
107
  const char* name() const override { return kXdsClusterResolver; }
107
108
 
@@ -184,7 +185,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
184
185
  void OnEndpointChanged(XdsApi::EdsUpdate update) override {
185
186
  new Notifier(discovery_mechanism_, std::move(update));
186
187
  }
187
- void OnError(grpc_error* error) override {
188
+ void OnError(grpc_error_handle error) override {
188
189
  new Notifier(discovery_mechanism_, error);
189
190
  }
190
191
  void OnResourceDoesNotExist() override {
@@ -197,7 +198,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
197
198
  Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
198
199
  XdsApi::EdsUpdate update);
199
200
  Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
200
- grpc_error* error);
201
+ grpc_error_handle error);
201
202
  explicit Notifier(
202
203
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism);
203
204
  ~Notifier() { discovery_mechanism_.reset(DEBUG_LOCATION, "Notifier"); }
@@ -205,8 +206,8 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
205
206
  private:
206
207
  enum Type { kUpdate, kError, kDoesNotExist };
207
208
 
208
- static void RunInExecCtx(void* arg, grpc_error* error);
209
- void RunInWorkSerializer(grpc_error* error);
209
+ static void RunInExecCtx(void* arg, grpc_error_handle error);
210
+ void RunInWorkSerializer(grpc_error_handle error);
210
211
 
211
212
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism_;
212
213
  grpc_closure closure_;
@@ -249,7 +250,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
249
250
 
250
251
  void ReturnResult(Resolver::Result result) override;
251
252
 
252
- void ReturnError(grpc_error* error) override;
253
+ void ReturnError(grpc_error_handle error) override;
253
254
 
254
255
  private:
255
256
  RefCountedPtr<LogicalDNSDiscoveryMechanism> discovery_mechanism_;
@@ -303,7 +304,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
303
304
  void ShutdownLocked() override;
304
305
 
305
306
  void OnEndpointChanged(size_t index, XdsApi::EdsUpdate update);
306
- void OnError(size_t index, grpc_error* error);
307
+ void OnError(size_t index, grpc_error_handle error);
307
308
  void OnResourceDoesNotExist(size_t index);
308
309
 
309
310
  void MaybeDestroyChildPolicyLocked();
@@ -317,6 +318,9 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
317
318
  grpc_channel_args* CreateChildPolicyArgsLocked(
318
319
  const grpc_channel_args* args_in);
319
320
 
321
+ // The xds client and endpoint watcher.
322
+ RefCountedPtr<XdsClient> xds_client_;
323
+
320
324
  // Server name from target URI.
321
325
  std::string server_name_;
322
326
  bool is_xds_uri_;
@@ -328,9 +332,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
328
332
  // Internal state.
329
333
  bool shutting_down_ = false;
330
334
 
331
- // The xds client and endpoint watcher.
332
- RefCountedPtr<XdsClient> xds_client_;
333
-
334
335
  // Vector of discovery mechansism entries in priority order.
335
336
  std::vector<DiscoveryMechanismEntry> discovery_mechanisms_;
336
337
 
@@ -429,7 +430,7 @@ XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
429
430
  XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
430
431
  Notifier(RefCountedPtr<XdsClusterResolverLb::EdsDiscoveryMechanism>
431
432
  discovery_mechanism,
432
- grpc_error* error)
433
+ grpc_error_handle error)
433
434
  : discovery_mechanism_(std::move(discovery_mechanism)), type_(kError) {
434
435
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
435
436
  ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
@@ -445,7 +446,7 @@ XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
445
446
  }
446
447
 
447
448
  void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
448
- RunInExecCtx(void* arg, grpc_error* error) {
449
+ RunInExecCtx(void* arg, grpc_error_handle error) {
449
450
  Notifier* self = static_cast<Notifier*>(arg);
450
451
  GRPC_ERROR_REF(error);
451
452
  self->discovery_mechanism_->parent()->work_serializer()->Run(
@@ -453,7 +454,7 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
453
454
  }
454
455
 
455
456
  void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
456
- RunInWorkSerializer(grpc_error* error) {
457
+ RunInWorkSerializer(grpc_error_handle error) {
457
458
  switch (type_) {
458
459
  case kUpdate:
459
460
  discovery_mechanism_->parent()->OnEndpointChanged(
@@ -541,7 +542,7 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
541
542
  }
542
543
 
543
544
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
544
- ReturnError(grpc_error* error) {
545
+ ReturnError(grpc_error_handle error) {
545
546
  discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(), error);
546
547
  }
547
548
 
@@ -550,26 +551,17 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
550
551
  //
551
552
 
552
553
  XdsClusterResolverLb::XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client,
553
- Args args)
554
- : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
555
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
556
- gpr_log(GPR_INFO,
557
- "[xds_cluster_resolver_lb %p] created -- using xds client %p", this,
558
- xds_client_.get());
559
- }
560
- // Record server name.
561
- const char* server_uri =
562
- grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
563
- GPR_ASSERT(server_uri != nullptr);
564
- absl::StatusOr<URI> uri = URI::Parse(server_uri);
565
- GPR_ASSERT(uri.ok() && !uri->path().empty());
566
- server_name_ = std::string(absl::StripPrefix(uri->path(), "/"));
567
- is_xds_uri_ = uri->scheme() == "xds";
554
+ Args args, std::string server_name,
555
+ bool is_xds_uri)
556
+ : LoadBalancingPolicy(std::move(args)),
557
+ xds_client_(std::move(xds_client)),
558
+ server_name_(std::move(server_name)),
559
+ is_xds_uri_(is_xds_uri) {
568
560
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
569
561
  gpr_log(GPR_INFO,
570
- "[xds_cluster_resolver_lb %p] server name from channel "
571
- "(is_xds_uri=%d): %s",
572
- this, is_xds_uri_, server_name_.c_str());
562
+ "[xds_cluster_resolver_lb %p] created -- xds_client=%p, "
563
+ "server_name=%s, is_xds_uri=%d",
564
+ this, xds_client_.get(), server_name_.c_str(), is_xds_uri_);
573
565
  }
574
566
  // EDS-only flow.
575
567
  if (!is_xds_uri_) {
@@ -738,11 +730,11 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
738
730
  UpdatePriorityList(std::move(priority_list));
739
731
  }
740
732
 
741
- void XdsClusterResolverLb::OnError(size_t index, grpc_error* error) {
733
+ void XdsClusterResolverLb::OnError(size_t index, grpc_error_handle error) {
742
734
  gpr_log(GPR_ERROR,
743
735
  "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
744
736
  " xds watcher reported error: %s",
745
- this, index, grpc_error_string(error));
737
+ this, index, grpc_error_std_string(error).c_str());
746
738
  GRPC_ERROR_UNREF(error);
747
739
  if (shutting_down_) return;
748
740
  if (!discovery_mechanisms_[index].first_update_received) {
@@ -1010,7 +1002,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
1010
1002
  "[xds_cluster_resolver_lb %p] generated config for child policy: %s",
1011
1003
  this, json_str.c_str());
1012
1004
  }
1013
- grpc_error* error = GRPC_ERROR_NONE;
1005
+ grpc_error_handle error = GRPC_ERROR_NONE;
1014
1006
  RefCountedPtr<LoadBalancingPolicy::Config> config =
1015
1007
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
1016
1008
  if (error != GRPC_ERROR_NONE) {
@@ -1020,7 +1012,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
1020
1012
  "[xds_cluster_resolver_lb %p] error parsing generated child policy "
1021
1013
  "config -- "
1022
1014
  "will put channel in TRANSIENT_FAILURE: %s",
1023
- this, grpc_error_string(error));
1015
+ this, grpc_error_std_string(error).c_str());
1024
1016
  error = grpc_error_set_int(
1025
1017
  grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1026
1018
  "xds_cluster_resolver LB policy: error "
@@ -1054,10 +1046,14 @@ void XdsClusterResolverLb::UpdateChildPolicyLocked() {
1054
1046
 
1055
1047
  grpc_channel_args* XdsClusterResolverLb::CreateChildPolicyArgsLocked(
1056
1048
  const grpc_channel_args* args) {
1057
- // Inhibit client-side health checking, since the balancer does this for us.
1058
- grpc_arg new_arg = grpc_channel_arg_integer_create(
1059
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1);
1060
- return grpc_channel_args_copy_and_add(args, &new_arg, 1);
1049
+ absl::InlinedVector<grpc_arg, 2> new_args = {
1050
+ // Inhibit client-side health checking, since the balancer does this
1051
+ // for us.
1052
+ grpc_channel_arg_integer_create(
1053
+ const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
1054
+ };
1055
+ if (!is_xds_uri_) new_args.push_back(xds_client_->MakeChannelArg());
1056
+ return grpc_channel_args_copy_and_add(args, new_args.data(), new_args.size());
1061
1057
  }
1062
1058
 
1063
1059
  OrphanablePtr<LoadBalancingPolicy>
@@ -1096,24 +1092,45 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1096
1092
  public:
1097
1093
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1098
1094
  LoadBalancingPolicy::Args args) const override {
1099
- grpc_error* error = GRPC_ERROR_NONE;
1100
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
1101
- if (error != GRPC_ERROR_NONE) {
1102
- gpr_log(GPR_ERROR,
1103
- "cannot get XdsClient to instantiate xds_cluster_resolver LB "
1104
- "policy: %s",
1105
- grpc_error_string(error));
1106
- GRPC_ERROR_UNREF(error);
1107
- return nullptr;
1095
+ // Find server name.
1096
+ const char* server_uri =
1097
+ grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
1098
+ GPR_ASSERT(server_uri != nullptr);
1099
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
1100
+ GPR_ASSERT(uri.ok() && !uri->path().empty());
1101
+ absl::string_view server_name = absl::StripPrefix(uri->path(), "/");
1102
+ // Determine if it's an xds URI.
1103
+ bool is_xds_uri = uri->scheme() == "xds";
1104
+ // Get XdsClient.
1105
+ RefCountedPtr<XdsClient> xds_client =
1106
+ XdsClient::GetFromChannelArgs(*args.args);
1107
+ if (xds_client == nullptr) {
1108
+ if (!is_xds_uri) {
1109
+ grpc_error_handle error = GRPC_ERROR_NONE;
1110
+ xds_client = XdsClient::GetOrCreate(args.args, &error);
1111
+ if (error != GRPC_ERROR_NONE) {
1112
+ gpr_log(GPR_ERROR,
1113
+ "cannot get or create XdsClient to instantiate "
1114
+ "xds_cluster_resolver LB policy: %s",
1115
+ grpc_error_std_string(error).c_str());
1116
+ GRPC_ERROR_UNREF(error);
1117
+ return nullptr;
1118
+ }
1119
+ } else {
1120
+ gpr_log(GPR_ERROR,
1121
+ "XdsClient not present in channel args -- cannot instantiate "
1122
+ "xds_cluster_resolver LB policy");
1123
+ return nullptr;
1124
+ }
1108
1125
  }
1109
- return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
1110
- std::move(args));
1126
+ return MakeOrphanable<XdsClusterResolverChildHandler>(
1127
+ std::move(xds_client), std::move(args), server_name, is_xds_uri);
1111
1128
  }
1112
1129
 
1113
1130
  const char* name() const override { return kXdsClusterResolver; }
1114
1131
 
1115
1132
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1116
- const Json& json, grpc_error** error) const override {
1133
+ const Json& json, grpc_error_handle* error) const override {
1117
1134
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1118
1135
  if (json.type() == Json::Type::JSON_NULL) {
1119
1136
  // xds_cluster_resolver was mentioned as a policy in the deprecated
@@ -1124,7 +1141,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1124
1141
  "Please use loadBalancingConfig field of service config instead.");
1125
1142
  return nullptr;
1126
1143
  }
1127
- std::vector<grpc_error*> error_list;
1144
+ std::vector<grpc_error_handle> error_list;
1128
1145
  std::vector<XdsClusterResolverLbConfig::DiscoveryMechanism>
1129
1146
  discovery_mechanisms;
1130
1147
  auto it = json.object_value().find("discoveryMechanisms");
@@ -1138,13 +1155,13 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1138
1155
  const Json::Array& array = it->second.array_value();
1139
1156
  for (size_t i = 0; i < array.size(); ++i) {
1140
1157
  XdsClusterResolverLbConfig::DiscoveryMechanism discovery_mechanism;
1141
- std::vector<grpc_error*> discovery_mechanism_errors =
1158
+ std::vector<grpc_error_handle> discovery_mechanism_errors =
1142
1159
  ParseDiscoveryMechanism(array[i], &discovery_mechanism);
1143
1160
  if (!discovery_mechanism_errors.empty()) {
1144
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1161
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1145
1162
  absl::StrCat("field:discovery_mechanism element: ", i, " error")
1146
1163
  .c_str());
1147
- for (grpc_error* discovery_mechanism_error :
1164
+ for (grpc_error_handle discovery_mechanism_error :
1148
1165
  discovery_mechanism_errors) {
1149
1166
  error = grpc_error_add_child(error, discovery_mechanism_error);
1150
1167
  }
@@ -1259,10 +1276,10 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1259
1276
  }
1260
1277
 
1261
1278
  private:
1262
- static std::vector<grpc_error*> ParseDiscoveryMechanism(
1279
+ static std::vector<grpc_error_handle> ParseDiscoveryMechanism(
1263
1280
  const Json& json,
1264
1281
  XdsClusterResolverLbConfig::DiscoveryMechanism* discovery_mechanism) {
1265
- std::vector<grpc_error*> error_list;
1282
+ std::vector<grpc_error_handle> error_list;
1266
1283
  if (json.type() != Json::Type::OBJECT) {
1267
1284
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1268
1285
  "value should be of type object"));
@@ -1339,10 +1356,13 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1339
1356
  class XdsClusterResolverChildHandler : public ChildPolicyHandler {
1340
1357
  public:
1341
1358
  XdsClusterResolverChildHandler(RefCountedPtr<XdsClient> xds_client,
1342
- Args args)
1359
+ Args args, absl::string_view server_name,
1360
+ bool is_xds_uri)
1343
1361
  : ChildPolicyHandler(std::move(args),
1344
1362
  &grpc_lb_xds_cluster_resolver_trace),
1345
- xds_client_(std::move(xds_client)) {}
1363
+ xds_client_(std::move(xds_client)),
1364
+ server_name_(server_name),
1365
+ is_xds_uri_(is_xds_uri) {}
1346
1366
 
1347
1367
  bool ConfigChangeRequiresNewPolicyInstance(
1348
1368
  LoadBalancingPolicy::Config* old_config,
@@ -1359,11 +1379,14 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1359
1379
 
1360
1380
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1361
1381
  const char* /*name*/, LoadBalancingPolicy::Args args) const override {
1362
- return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
1382
+ return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args),
1383
+ server_name_, is_xds_uri_);
1363
1384
  }
1364
1385
 
1365
1386
  private:
1366
1387
  RefCountedPtr<XdsClient> xds_client_;
1388
+ std::string server_name_;
1389
+ bool is_xds_uri_;
1367
1390
  };
1368
1391
  };
1369
1392