grpc 1.37.1 → 1.39.0

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 (636) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +96 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +334 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +91 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +28 -13
  12. data/include/grpc/impl/codegen/port_platform.h +22 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
  17. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  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/ring_hash/ring_hash.cc +755 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  44. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
  65. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  76. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  77. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  78. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  79. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  80. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  81. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  82. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
  83. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  84. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  85. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  86. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  89. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  90. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  91. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  92. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  93. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  96. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  98. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  99. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  101. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  103. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  104. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
  105. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  106. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  107. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  108. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  109. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  110. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  111. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  112. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  114. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  115. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  116. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  118. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  120. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  122. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  123. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  124. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  125. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  127. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  128. data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
  129. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  130. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  131. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  132. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  133. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  134. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  135. data/src/core/ext/xds/xds_api.cc +348 -199
  136. data/src/core/ext/xds/xds_api.h +21 -12
  137. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  138. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  139. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  140. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  141. data/src/core/ext/xds/xds_channel_args.h +5 -2
  142. data/src/core/ext/xds/xds_client.cc +310 -178
  143. data/src/core/ext/xds/xds_client.h +41 -27
  144. data/src/core/ext/xds/xds_client_stats.h +3 -2
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  146. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  147. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  148. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  149. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  150. data/src/core/lib/channel/channel_stack.cc +10 -9
  151. data/src/core/lib/channel/channel_stack.h +10 -9
  152. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  153. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  154. data/src/core/lib/channel/channelz.cc +21 -13
  155. data/src/core/lib/channel/channelz.h +3 -0
  156. data/src/core/lib/channel/connected_channel.cc +4 -4
  157. data/src/core/lib/channel/handshaker.cc +7 -6
  158. data/src/core/lib/channel/handshaker.h +5 -5
  159. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  160. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  161. data/src/core/lib/event_engine/event_engine.cc +50 -0
  162. data/src/core/lib/event_engine/slice_allocator.cc +89 -0
  163. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  164. data/src/core/lib/event_engine/sockaddr.h +44 -0
  165. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  166. data/src/core/lib/gprpp/ref_counted.h +28 -14
  167. data/src/core/lib/gprpp/status_helper.cc +407 -0
  168. data/src/core/lib/gprpp/status_helper.h +183 -0
  169. data/src/core/lib/http/httpcli.cc +11 -11
  170. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  171. data/src/core/lib/http/parser.cc +16 -16
  172. data/src/core/lib/http/parser.h +4 -4
  173. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  174. data/src/core/lib/iomgr/buffer_list.h +4 -5
  175. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  176. data/src/core/lib/iomgr/call_combiner.h +12 -14
  177. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  178. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  179. data/src/core/lib/iomgr/closure.h +7 -6
  180. data/src/core/lib/iomgr/combiner.cc +14 -12
  181. data/src/core/lib/iomgr/combiner.h +2 -2
  182. data/src/core/lib/iomgr/endpoint.cc +1 -1
  183. data/src/core/lib/iomgr/endpoint.h +2 -2
  184. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  185. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  186. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  187. data/src/core/lib/iomgr/error.cc +168 -61
  188. data/src/core/lib/iomgr/error.h +217 -106
  189. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  190. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  191. data/src/core/lib/iomgr/error_internal.h +5 -1
  192. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  193. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  194. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  195. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  196. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  197. data/src/core/lib/iomgr/ev_posix.h +9 -9
  198. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  199. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  200. data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
  201. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  202. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  203. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  204. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  205. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  206. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  207. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  208. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  209. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  210. data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
  211. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  212. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  213. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  214. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  215. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  216. data/src/core/lib/iomgr/executor.cc +8 -8
  217. data/src/core/lib/iomgr/executor.h +2 -2
  218. data/src/core/lib/iomgr/iomgr.cc +2 -2
  219. data/src/core/lib/iomgr/iomgr.h +1 -1
  220. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  221. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  222. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  223. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  224. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  225. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  226. data/src/core/lib/iomgr/load_file.cc +4 -4
  227. data/src/core/lib/iomgr/load_file.h +2 -2
  228. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  229. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  230. data/src/core/lib/iomgr/pollset.cc +5 -5
  231. data/src/core/lib/iomgr/pollset.h +9 -9
  232. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  233. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  234. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  235. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  236. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  237. data/src/core/lib/iomgr/port.h +7 -5
  238. data/src/core/lib/iomgr/python_util.h +1 -1
  239. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  240. data/src/core/lib/iomgr/resolve_address.h +12 -6
  241. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  242. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  243. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  244. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  245. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  246. data/src/core/lib/iomgr/sockaddr.h +1 -0
  247. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  248. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  250. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  251. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  252. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  253. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  254. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  257. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  258. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  259. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  260. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  261. data/src/core/lib/iomgr/tcp_server.h +12 -11
  262. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  263. data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
  264. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  265. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  266. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  267. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  268. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  269. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  270. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  271. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  272. data/src/core/lib/iomgr/timer.h +6 -1
  273. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  274. data/src/core/lib/iomgr/timer_custom.h +1 -1
  275. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  276. data/src/core/lib/iomgr/udp_server.cc +21 -20
  277. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  278. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  279. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  280. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  281. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  282. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  283. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  284. data/src/core/lib/iomgr/work_serializer.h +17 -1
  285. data/src/core/lib/json/json.h +1 -1
  286. data/src/core/lib/json/json_reader.cc +4 -4
  287. data/src/core/lib/matchers/matchers.cc +39 -39
  288. data/src/core/lib/matchers/matchers.h +28 -28
  289. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  290. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  291. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  292. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  293. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  294. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  295. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  296. data/src/core/lib/security/credentials/credentials.h +2 -2
  297. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  298. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  307. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  308. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  309. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  310. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  311. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  312. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  313. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  314. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  315. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  316. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  317. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  318. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  319. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  320. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  321. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  322. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  323. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  324. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  325. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  326. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  327. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  328. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  329. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  330. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  331. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  332. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  333. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  334. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  335. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  336. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  337. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  338. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  339. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  340. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  341. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  342. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  343. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  344. data/src/core/lib/security/transport/tsi_error.h +2 -1
  345. data/src/core/lib/security/util/json_util.cc +2 -2
  346. data/src/core/lib/security/util/json_util.h +1 -1
  347. data/src/core/lib/surface/call.cc +67 -46
  348. data/src/core/lib/surface/call.h +13 -2
  349. data/src/core/lib/surface/channel.cc +6 -6
  350. data/src/core/lib/surface/channel.h +3 -2
  351. data/src/core/lib/surface/channel_ping.cc +1 -1
  352. data/src/core/lib/surface/completion_queue.cc +68 -69
  353. data/src/core/lib/surface/completion_queue.h +3 -2
  354. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  355. data/src/core/lib/surface/init.cc +1 -3
  356. data/src/core/lib/surface/init.h +10 -1
  357. data/src/core/lib/surface/lame_client.cc +11 -11
  358. data/src/core/lib/surface/lame_client.h +1 -1
  359. data/src/core/lib/surface/server.cc +28 -22
  360. data/src/core/lib/surface/server.h +16 -15
  361. data/src/core/lib/surface/validate_metadata.cc +7 -7
  362. data/src/core/lib/surface/validate_metadata.h +3 -2
  363. data/src/core/lib/surface/version.cc +4 -2
  364. data/src/core/lib/transport/byte_stream.cc +5 -5
  365. data/src/core/lib/transport/byte_stream.h +8 -8
  366. data/src/core/lib/transport/connectivity_state.cc +1 -1
  367. data/src/core/lib/transport/error_utils.cc +21 -10
  368. data/src/core/lib/transport/error_utils.h +11 -5
  369. data/src/core/lib/transport/metadata_batch.cc +37 -37
  370. data/src/core/lib/transport/metadata_batch.h +19 -18
  371. data/src/core/lib/transport/transport.cc +4 -3
  372. data/src/core/lib/transport/transport.h +6 -4
  373. data/src/core/lib/transport/transport_op_string.cc +6 -6
  374. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  375. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  376. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  377. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  378. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  379. data/src/core/tsi/ssl_transport_security.cc +32 -14
  380. data/src/core/tsi/ssl_transport_security.h +3 -4
  381. data/src/ruby/bin/math_services_pb.rb +1 -1
  382. data/src/ruby/ext/grpc/extconf.rb +2 -0
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  384. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  385. data/src/ruby/lib/grpc/version.rb +1 -1
  386. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  388. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  389. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  390. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  391. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  392. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  393. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  394. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  395. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  396. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  397. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  398. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  399. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  400. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  401. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  402. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  403. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  404. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  405. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  406. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  407. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  408. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  409. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  410. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  411. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  412. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  413. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  414. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  415. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  416. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  417. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  418. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  419. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  420. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  421. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  422. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  423. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  424. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  425. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  426. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  427. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  428. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  429. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  430. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  431. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  432. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  433. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  434. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  435. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  436. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  437. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  438. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  439. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  440. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  441. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  442. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  443. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  444. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  445. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  446. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  447. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  448. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  449. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  450. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  451. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  452. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  453. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  455. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  456. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  457. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  458. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  459. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  460. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  461. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  462. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  463. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  464. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  465. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  466. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  467. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  468. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  469. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  470. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  471. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  472. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  473. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  474. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  475. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  476. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  477. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  478. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  479. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  480. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  481. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  482. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  483. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  484. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  485. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  486. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  487. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  488. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  492. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  493. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  494. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  495. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  496. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  497. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  498. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  499. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  500. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  501. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  503. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  505. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  506. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  507. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  508. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  509. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  511. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  512. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  513. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  515. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  516. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  517. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  518. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  519. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  520. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  521. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  522. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  543. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  544. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  545. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  546. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  547. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  548. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  549. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  550. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  551. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  552. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  553. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  554. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  555. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  556. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  557. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  558. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  559. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  560. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  561. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  562. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  563. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  566. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  567. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  568. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  569. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  571. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  573. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  576. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  577. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  579. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  580. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  581. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  582. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  583. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  584. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  585. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  586. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  587. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  588. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  589. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  591. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  592. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  593. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  595. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  596. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  597. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  598. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  600. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  601. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  602. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  603. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  604. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  605. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  606. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  615. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  616. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  617. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  618. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  623. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  624. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  625. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  626. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  627. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  628. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  629. metadata +94 -46
  630. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  631. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  632. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  633. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  635. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  636. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -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));
@@ -28,6 +28,7 @@
28
28
  #include "src/core/ext/filters/client_channel/lb_policy.h"
29
29
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
30
30
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
31
+ #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
31
32
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
32
33
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
33
34
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
@@ -71,13 +72,16 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
71
72
  };
72
73
  DiscoveryMechanismType type;
73
74
  std::string eds_service_name;
75
+ std::string dns_hostname;
74
76
 
75
77
  bool operator==(const DiscoveryMechanism& other) const {
76
78
  return (cluster_name == other.cluster_name &&
77
79
  lrs_load_reporting_server_name ==
78
80
  other.lrs_load_reporting_server_name &&
79
81
  max_concurrent_requests == other.max_concurrent_requests &&
80
- type == other.type && eds_service_name == other.eds_service_name);
82
+ type == other.type &&
83
+ eds_service_name == other.eds_service_name &&
84
+ dns_hostname == other.dns_hostname);
81
85
  }
82
86
  };
83
87
 
@@ -101,7 +105,8 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
101
105
  // Xds Cluster Resolver LB policy.
102
106
  class XdsClusterResolverLb : public LoadBalancingPolicy {
103
107
  public:
104
- XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args);
108
+ XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args,
109
+ std::string server_name, bool is_xds_uri);
105
110
 
106
111
  const char* name() const override { return kXdsClusterResolver; }
107
112
 
@@ -130,17 +135,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
130
135
  virtual Json::Array override_child_policy() = 0;
131
136
  virtual bool disable_reresolution() = 0;
132
137
 
133
- // Caller must ensure that config_ is set before calling.
134
- absl::string_view GetXdsClusterResolverResourceName() const {
135
- if (!parent_->is_xds_uri_) return parent_->server_name_;
136
- if (!parent_->config_->discovery_mechanisms()[index_]
137
- .eds_service_name.empty()) {
138
- return parent_->config_->discovery_mechanisms()[index_]
139
- .eds_service_name;
140
- }
141
- return parent_->config_->discovery_mechanisms()[index_].cluster_name;
142
- }
143
-
144
138
  // Returns a pair containing the cluster and eds_service_name
145
139
  // to use for LRS load reporting. Caller must ensure that config_ is set
146
140
  // before calling.
@@ -184,7 +178,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
184
178
  void OnEndpointChanged(XdsApi::EdsUpdate update) override {
185
179
  new Notifier(discovery_mechanism_, std::move(update));
186
180
  }
187
- void OnError(grpc_error* error) override {
181
+ void OnError(grpc_error_handle error) override {
188
182
  new Notifier(discovery_mechanism_, error);
189
183
  }
190
184
  void OnResourceDoesNotExist() override {
@@ -197,7 +191,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
197
191
  Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
198
192
  XdsApi::EdsUpdate update);
199
193
  Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
200
- grpc_error* error);
194
+ grpc_error_handle error);
201
195
  explicit Notifier(
202
196
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism);
203
197
  ~Notifier() { discovery_mechanism_.reset(DEBUG_LOCATION, "Notifier"); }
@@ -205,8 +199,8 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
205
199
  private:
206
200
  enum Type { kUpdate, kError, kDoesNotExist };
207
201
 
208
- static void RunInExecCtx(void* arg, grpc_error* error);
209
- void RunInWorkSerializer(grpc_error* error);
202
+ static void RunInExecCtx(void* arg, grpc_error_handle error);
203
+ void RunInWorkSerializer(grpc_error_handle error);
210
204
 
211
205
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism_;
212
206
  grpc_closure closure_;
@@ -217,6 +211,18 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
217
211
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism_;
218
212
  };
219
213
 
214
+ absl::string_view GetEdsResourceName() const {
215
+ if (!parent()->is_xds_uri_) return parent()->server_name_;
216
+ if (!parent()
217
+ ->config_->discovery_mechanisms()[index()]
218
+ .eds_service_name.empty()) {
219
+ return parent()
220
+ ->config_->discovery_mechanisms()[index()]
221
+ .eds_service_name;
222
+ }
223
+ return parent()->config_->discovery_mechanisms()[index()].cluster_name;
224
+ }
225
+
220
226
  // Note that this is not owned, so this pointer must never be dereferenced.
221
227
  EndpointWatcher* watcher_ = nullptr;
222
228
  };
@@ -249,14 +255,16 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
249
255
 
250
256
  void ReturnResult(Resolver::Result result) override;
251
257
 
252
- void ReturnError(grpc_error* error) override;
258
+ void ReturnError(grpc_error_handle error) override;
253
259
 
254
260
  private:
255
261
  RefCountedPtr<LogicalDNSDiscoveryMechanism> discovery_mechanism_;
256
262
  };
257
- // This is only necessary because of a bug in msvc where nested class cannot
263
+
264
+ // This is necessary only because of a bug in msvc where nested class cannot
258
265
  // access protected member in base class.
259
266
  friend class ResolverResultHandler;
267
+
260
268
  OrphanablePtr<Resolver> resolver_;
261
269
  };
262
270
 
@@ -303,7 +311,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
303
311
  void ShutdownLocked() override;
304
312
 
305
313
  void OnEndpointChanged(size_t index, XdsApi::EdsUpdate update);
306
- void OnError(size_t index, grpc_error* error);
314
+ void OnError(size_t index, grpc_error_handle error);
307
315
  void OnResourceDoesNotExist(size_t index);
308
316
 
309
317
  void MaybeDestroyChildPolicyLocked();
@@ -317,6 +325,9 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
317
325
  grpc_channel_args* CreateChildPolicyArgsLocked(
318
326
  const grpc_channel_args* args_in);
319
327
 
328
+ // The xds client and endpoint watcher.
329
+ RefCountedPtr<XdsClient> xds_client_;
330
+
320
331
  // Server name from target URI.
321
332
  std::string server_name_;
322
333
  bool is_xds_uri_;
@@ -328,9 +339,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
328
339
  // Internal state.
329
340
  bool shutting_down_ = false;
330
341
 
331
- // The xds client and endpoint watcher.
332
- RefCountedPtr<XdsClient> xds_client_;
333
-
334
342
  // Vector of discovery mechansism entries in priority order.
335
343
  std::vector<DiscoveryMechanismEntry> discovery_mechanisms_;
336
344
 
@@ -388,13 +396,12 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::Start() {
388
396
  gpr_log(GPR_INFO,
389
397
  "[xds_cluster_resolver_lb %p] eds discovery mechanism %" PRIuPTR
390
398
  ":%p starting xds watch for %s",
391
- parent(), index(), this,
392
- std::string(GetXdsClusterResolverResourceName()).c_str());
399
+ parent(), index(), this, std::string(GetEdsResourceName()).c_str());
393
400
  }
394
401
  auto watcher = absl::make_unique<EndpointWatcher>(
395
402
  Ref(DEBUG_LOCATION, "EdsDiscoveryMechanism"));
396
403
  watcher_ = watcher.get();
397
- parent()->xds_client_->WatchEndpointData(GetXdsClusterResolverResourceName(),
404
+ parent()->xds_client_->WatchEndpointData(GetEdsResourceName(),
398
405
  std::move(watcher));
399
406
  }
400
407
 
@@ -403,11 +410,10 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::Orphan() {
403
410
  gpr_log(GPR_INFO,
404
411
  "[xds_cluster_resolver_lb %p] eds discovery mechanism %" PRIuPTR
405
412
  ":%p cancelling xds watch for %s",
406
- parent(), index(), this,
407
- std::string(GetXdsClusterResolverResourceName()).c_str());
413
+ parent(), index(), this, std::string(GetEdsResourceName()).c_str());
408
414
  }
409
- parent()->xds_client_->CancelEndpointDataWatch(
410
- GetXdsClusterResolverResourceName(), watcher_);
415
+ parent()->xds_client_->CancelEndpointDataWatch(GetEdsResourceName(),
416
+ watcher_);
411
417
  Unref();
412
418
  }
413
419
 
@@ -429,7 +435,7 @@ XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
429
435
  XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
430
436
  Notifier(RefCountedPtr<XdsClusterResolverLb::EdsDiscoveryMechanism>
431
437
  discovery_mechanism,
432
- grpc_error* error)
438
+ grpc_error_handle error)
433
439
  : discovery_mechanism_(std::move(discovery_mechanism)), type_(kError) {
434
440
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
435
441
  ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
@@ -445,7 +451,7 @@ XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
445
451
  }
446
452
 
447
453
  void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
448
- RunInExecCtx(void* arg, grpc_error* error) {
454
+ RunInExecCtx(void* arg, grpc_error_handle error) {
449
455
  Notifier* self = static_cast<Notifier*>(arg);
450
456
  GRPC_ERROR_REF(error);
451
457
  self->discovery_mechanism_->parent()->work_serializer()->Run(
@@ -453,7 +459,7 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
453
459
  }
454
460
 
455
461
  void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
456
- RunInWorkSerializer(grpc_error* error) {
462
+ RunInWorkSerializer(grpc_error_handle error) {
457
463
  switch (type_) {
458
464
  case kUpdate:
459
465
  discovery_mechanism_->parent()->OnEndpointChanged(
@@ -476,7 +482,8 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
476
482
  //
477
483
 
478
484
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
479
- std::string target = parent()->server_name_;
485
+ std::string target =
486
+ parent()->config_->discovery_mechanisms()[index()].dns_hostname;
480
487
  grpc_channel_args* args = nullptr;
481
488
  FakeResolverResponseGenerator* fake_resolver_response_generator =
482
489
  grpc_channel_args_find_pointer<FakeResolverResponseGenerator>(
@@ -488,6 +495,7 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
488
495
  fake_resolver_response_generator);
489
496
  args = grpc_channel_args_copy_and_add(parent()->args_, &new_arg, 1);
490
497
  } else {
498
+ target = absl::StrCat("dns:", target);
491
499
  args = grpc_channel_args_copy(parent()->args_);
492
500
  }
493
501
  resolver_ = ResolverRegistry::CreateResolver(
@@ -541,7 +549,7 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
541
549
  }
542
550
 
543
551
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
544
- ReturnError(grpc_error* error) {
552
+ ReturnError(grpc_error_handle error) {
545
553
  discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(), error);
546
554
  }
547
555
 
@@ -550,26 +558,17 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
550
558
  //
551
559
 
552
560
  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";
561
+ Args args, std::string server_name,
562
+ bool is_xds_uri)
563
+ : LoadBalancingPolicy(std::move(args)),
564
+ xds_client_(std::move(xds_client)),
565
+ server_name_(std::move(server_name)),
566
+ is_xds_uri_(is_xds_uri) {
568
567
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
569
568
  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());
569
+ "[xds_cluster_resolver_lb %p] created -- xds_client=%p, "
570
+ "server_name=%s, is_xds_uri=%d",
571
+ this, xds_client_.get(), server_name_.c_str(), is_xds_uri_);
573
572
  }
574
573
  // EDS-only flow.
575
574
  if (!is_xds_uri_) {
@@ -738,11 +737,11 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
738
737
  UpdatePriorityList(std::move(priority_list));
739
738
  }
740
739
 
741
- void XdsClusterResolverLb::OnError(size_t index, grpc_error* error) {
740
+ void XdsClusterResolverLb::OnError(size_t index, grpc_error_handle error) {
742
741
  gpr_log(GPR_ERROR,
743
742
  "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
744
743
  " xds watcher reported error: %s",
745
- this, index, grpc_error_string(error));
744
+ this, index, grpc_error_std_string(error).c_str());
746
745
  GRPC_ERROR_UNREF(error);
747
746
  if (shutting_down_) return;
748
747
  if (!discovery_mechanisms_[index].first_update_received) {
@@ -842,6 +841,13 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
842
841
  std::vector<std::string> hierarchical_path = {
843
842
  priority_child_name, locality_name->AsHumanReadableString()};
844
843
  for (const auto& endpoint : locality.endpoints) {
844
+ const ServerAddressWeightAttribute* weight_attribute = static_cast<
845
+ const ServerAddressWeightAttribute*>(endpoint.GetAttribute(
846
+ ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
847
+ uint32_t weight = locality.lb_weight;
848
+ if (weight_attribute != nullptr) {
849
+ weight = locality.lb_weight * weight_attribute->weight();
850
+ }
845
851
  addresses.emplace_back(
846
852
  endpoint
847
853
  .WithAttribute(kHierarchicalPathAttributeKey,
@@ -849,10 +855,10 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
849
855
  .WithAttribute(kXdsLocalityNameAttributeKey,
850
856
  absl::make_unique<XdsLocalityAttribute>(
851
857
  locality_name->Ref()))
852
- .WithAttribute(ServerAddressWeightAttribute::
853
- kServerAddressWeightAttributeKey,
854
- absl::make_unique<ServerAddressWeightAttribute>(
855
- locality.lb_weight)));
858
+ .WithAttribute(
859
+ ServerAddressWeightAttribute::
860
+ kServerAddressWeightAttributeKey,
861
+ absl::make_unique<ServerAddressWeightAttribute>(weight)));
856
862
  }
857
863
  }
858
864
  }
@@ -1010,7 +1016,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
1010
1016
  "[xds_cluster_resolver_lb %p] generated config for child policy: %s",
1011
1017
  this, json_str.c_str());
1012
1018
  }
1013
- grpc_error* error = GRPC_ERROR_NONE;
1019
+ grpc_error_handle error = GRPC_ERROR_NONE;
1014
1020
  RefCountedPtr<LoadBalancingPolicy::Config> config =
1015
1021
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
1016
1022
  if (error != GRPC_ERROR_NONE) {
@@ -1020,7 +1026,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
1020
1026
  "[xds_cluster_resolver_lb %p] error parsing generated child policy "
1021
1027
  "config -- "
1022
1028
  "will put channel in TRANSIENT_FAILURE: %s",
1023
- this, grpc_error_string(error));
1029
+ this, grpc_error_std_string(error).c_str());
1024
1030
  error = grpc_error_set_int(
1025
1031
  grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1026
1032
  "xds_cluster_resolver LB policy: error "
@@ -1054,10 +1060,14 @@ void XdsClusterResolverLb::UpdateChildPolicyLocked() {
1054
1060
 
1055
1061
  grpc_channel_args* XdsClusterResolverLb::CreateChildPolicyArgsLocked(
1056
1062
  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);
1063
+ absl::InlinedVector<grpc_arg, 2> new_args = {
1064
+ // Inhibit client-side health checking, since the balancer does this
1065
+ // for us.
1066
+ grpc_channel_arg_integer_create(
1067
+ const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
1068
+ };
1069
+ if (!is_xds_uri_) new_args.push_back(xds_client_->MakeChannelArg());
1070
+ return grpc_channel_args_copy_and_add(args, new_args.data(), new_args.size());
1061
1071
  }
1062
1072
 
1063
1073
  OrphanablePtr<LoadBalancingPolicy>
@@ -1096,24 +1106,45 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1096
1106
  public:
1097
1107
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1098
1108
  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;
1109
+ // Find server name.
1110
+ const char* server_uri =
1111
+ grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
1112
+ GPR_ASSERT(server_uri != nullptr);
1113
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
1114
+ GPR_ASSERT(uri.ok() && !uri->path().empty());
1115
+ absl::string_view server_name = absl::StripPrefix(uri->path(), "/");
1116
+ // Determine if it's an xds URI.
1117
+ bool is_xds_uri = uri->scheme() == "xds" || uri->scheme() == "google-c2p";
1118
+ // Get XdsClient.
1119
+ RefCountedPtr<XdsClient> xds_client =
1120
+ XdsClient::GetFromChannelArgs(*args.args);
1121
+ if (xds_client == nullptr) {
1122
+ if (!is_xds_uri) {
1123
+ grpc_error_handle error = GRPC_ERROR_NONE;
1124
+ xds_client = XdsClient::GetOrCreate(args.args, &error);
1125
+ if (error != GRPC_ERROR_NONE) {
1126
+ gpr_log(GPR_ERROR,
1127
+ "cannot get or create XdsClient to instantiate "
1128
+ "xds_cluster_resolver LB policy: %s",
1129
+ grpc_error_std_string(error).c_str());
1130
+ GRPC_ERROR_UNREF(error);
1131
+ return nullptr;
1132
+ }
1133
+ } else {
1134
+ gpr_log(GPR_ERROR,
1135
+ "XdsClient not present in channel args -- cannot instantiate "
1136
+ "xds_cluster_resolver LB policy");
1137
+ return nullptr;
1138
+ }
1108
1139
  }
1109
- return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
1110
- std::move(args));
1140
+ return MakeOrphanable<XdsClusterResolverChildHandler>(
1141
+ std::move(xds_client), std::move(args), server_name, is_xds_uri);
1111
1142
  }
1112
1143
 
1113
1144
  const char* name() const override { return kXdsClusterResolver; }
1114
1145
 
1115
1146
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1116
- const Json& json, grpc_error** error) const override {
1147
+ const Json& json, grpc_error_handle* error) const override {
1117
1148
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1118
1149
  if (json.type() == Json::Type::JSON_NULL) {
1119
1150
  // xds_cluster_resolver was mentioned as a policy in the deprecated
@@ -1124,7 +1155,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1124
1155
  "Please use loadBalancingConfig field of service config instead.");
1125
1156
  return nullptr;
1126
1157
  }
1127
- std::vector<grpc_error*> error_list;
1158
+ std::vector<grpc_error_handle> error_list;
1128
1159
  std::vector<XdsClusterResolverLbConfig::DiscoveryMechanism>
1129
1160
  discovery_mechanisms;
1130
1161
  auto it = json.object_value().find("discoveryMechanisms");
@@ -1138,13 +1169,13 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1138
1169
  const Json::Array& array = it->second.array_value();
1139
1170
  for (size_t i = 0; i < array.size(); ++i) {
1140
1171
  XdsClusterResolverLbConfig::DiscoveryMechanism discovery_mechanism;
1141
- std::vector<grpc_error*> discovery_mechanism_errors =
1172
+ std::vector<grpc_error_handle> discovery_mechanism_errors =
1142
1173
  ParseDiscoveryMechanism(array[i], &discovery_mechanism);
1143
1174
  if (!discovery_mechanism_errors.empty()) {
1144
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1175
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1145
1176
  absl::StrCat("field:discovery_mechanism element: ", i, " error")
1146
1177
  .c_str());
1147
- for (grpc_error* discovery_mechanism_error :
1178
+ for (grpc_error_handle discovery_mechanism_error :
1148
1179
  discovery_mechanism_errors) {
1149
1180
  error = grpc_error_add_child(error, discovery_mechanism_error);
1150
1181
  }
@@ -1184,65 +1215,11 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1184
1215
  }
1185
1216
  policy_it = policy.find("RING_HASH");
1186
1217
  if (policy_it != policy.end()) {
1187
- if (policy_it->second.type() != Json::Type::OBJECT) {
1188
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1189
- "field:RING_HASH error:type should be object"));
1190
- continue;
1191
- }
1192
- // TODO(donnadionne): Move this to a method in
1193
- // ring_hash_experimental and call it here.
1194
- const Json::Object& ring_hash = policy_it->second.object_value();
1195
1218
  xds_lb_policy = array[i];
1196
- size_t min_ring_size = 1024;
1197
- size_t max_ring_size = 8388608;
1198
- auto ring_hash_it = ring_hash.find("min_ring_size");
1199
- if (ring_hash_it == ring_hash.end()) {
1200
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1201
- "field:min_ring_size missing"));
1202
- } else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
1203
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1204
- "field:min_ring_size error: should be of "
1205
- "number"));
1206
- } else {
1207
- min_ring_size = gpr_parse_nonnegative_int(
1208
- ring_hash_it->second.string_value().c_str());
1209
- }
1210
- ring_hash_it = ring_hash.find("max_ring_size");
1211
- if (ring_hash_it == ring_hash.end()) {
1212
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1213
- "field:max_ring_size missing"));
1214
- } else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
1215
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1216
- "field:max_ring_size error: should be of "
1217
- "number"));
1218
- } else {
1219
- max_ring_size = gpr_parse_nonnegative_int(
1220
- ring_hash_it->second.string_value().c_str());
1221
- }
1222
- if (min_ring_size <= 0 || min_ring_size > 8388608 ||
1223
- max_ring_size <= 0 || max_ring_size > 8388608 ||
1224
- min_ring_size > max_ring_size) {
1225
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1226
- "field:max_ring_size and or min_ring_size error: "
1227
- "values need to be in the range of 1 to 8388608 "
1228
- "and max_ring_size cannot be smaller than "
1229
- "min_ring_size"));
1230
- }
1231
- ring_hash_it = ring_hash.find("hash_function");
1232
- if (ring_hash_it == ring_hash.end()) {
1233
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1234
- "field:hash_function missing"));
1235
- } else if (ring_hash_it->second.type() != Json::Type::STRING) {
1236
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1237
- "field:hash_function error: should be a "
1238
- "string"));
1239
- } else if (ring_hash_it->second.string_value() != "XX_HASH" &&
1240
- ring_hash_it->second.string_value() != "MURMUR_HASH_2") {
1241
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1242
- "field:hash_function error: unsupported "
1243
- "hash_function"));
1244
- }
1245
- break;
1219
+ size_t min_ring_size;
1220
+ size_t max_ring_size;
1221
+ ParseRingHashLbConfig(policy_it->second, &min_ring_size,
1222
+ &max_ring_size, &error_list);
1246
1223
  }
1247
1224
  }
1248
1225
  }
@@ -1259,10 +1236,10 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1259
1236
  }
1260
1237
 
1261
1238
  private:
1262
- static std::vector<grpc_error*> ParseDiscoveryMechanism(
1239
+ static std::vector<grpc_error_handle> ParseDiscoveryMechanism(
1263
1240
  const Json& json,
1264
1241
  XdsClusterResolverLbConfig::DiscoveryMechanism* discovery_mechanism) {
1265
- std::vector<grpc_error*> error_list;
1242
+ std::vector<grpc_error_handle> error_list;
1266
1243
  if (json.type() != Json::Type::OBJECT) {
1267
1244
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1268
1245
  "value should be of type object"));
@@ -1314,35 +1291,46 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1314
1291
  if (it->second.string_value() == "EDS") {
1315
1292
  discovery_mechanism->type = XdsClusterResolverLbConfig::
1316
1293
  DiscoveryMechanism::DiscoveryMechanismType::EDS;
1294
+ it = json.object_value().find("edsServiceName");
1295
+ if (it != json.object_value().end()) {
1296
+ if (it->second.type() != Json::Type::STRING) {
1297
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1298
+ "field:edsServiceName error:type should be string"));
1299
+ } else {
1300
+ discovery_mechanism->eds_service_name = it->second.string_value();
1301
+ }
1302
+ }
1317
1303
  } else if (it->second.string_value() == "LOGICAL_DNS") {
1318
1304
  discovery_mechanism->type = XdsClusterResolverLbConfig::
1319
1305
  DiscoveryMechanism::DiscoveryMechanismType::LOGICAL_DNS;
1306
+ it = json.object_value().find("dnsHostname");
1307
+ if (it == json.object_value().end()) {
1308
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1309
+ "field:dnsHostname error:required field missing"));
1310
+ } else if (it->second.type() != Json::Type::STRING) {
1311
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1312
+ "field:dnsHostname error:type should be string"));
1313
+ } else {
1314
+ discovery_mechanism->dns_hostname = it->second.string_value();
1315
+ }
1320
1316
  } else {
1321
1317
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1322
1318
  "field:type error:invalid type"));
1323
1319
  }
1324
1320
  }
1325
- // EDS service name.
1326
- it = json.object_value().find("edsServiceName");
1327
- if (it != json.object_value().end()) {
1328
- if (it->second.type() != Json::Type::STRING) {
1329
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1330
- "field:xds_cluster_resolverServiceName error:type should be "
1331
- "string"));
1332
- } else {
1333
- discovery_mechanism->eds_service_name = it->second.string_value();
1334
- }
1335
- }
1336
1321
  return error_list;
1337
1322
  }
1338
1323
 
1339
1324
  class XdsClusterResolverChildHandler : public ChildPolicyHandler {
1340
1325
  public:
1341
1326
  XdsClusterResolverChildHandler(RefCountedPtr<XdsClient> xds_client,
1342
- Args args)
1327
+ Args args, absl::string_view server_name,
1328
+ bool is_xds_uri)
1343
1329
  : ChildPolicyHandler(std::move(args),
1344
1330
  &grpc_lb_xds_cluster_resolver_trace),
1345
- xds_client_(std::move(xds_client)) {}
1331
+ xds_client_(std::move(xds_client)),
1332
+ server_name_(server_name),
1333
+ is_xds_uri_(is_xds_uri) {}
1346
1334
 
1347
1335
  bool ConfigChangeRequiresNewPolicyInstance(
1348
1336
  LoadBalancingPolicy::Config* old_config,
@@ -1359,11 +1347,14 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1359
1347
 
1360
1348
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1361
1349
  const char* /*name*/, LoadBalancingPolicy::Args args) const override {
1362
- return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
1350
+ return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args),
1351
+ server_name_, is_xds_uri_);
1363
1352
  }
1364
1353
 
1365
1354
  private:
1366
1355
  RefCountedPtr<XdsClient> xds_client_;
1356
+ std::string server_name_;
1357
+ bool is_xds_uri_;
1367
1358
  };
1368
1359
  };
1369
1360