grpc 1.37.1 → 1.40.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 (738) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +112 -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 +330 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +66 -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 +44 -19
  12. data/include/grpc/impl/codegen/port_platform.h +46 -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 +975 -3282
  17. data/src/core/ext/filters/client_channel/client_channel.h +513 -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 +20 -7
  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 +53 -51
  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 +14 -23
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -16
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +734 -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 +10 -17
  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 +17 -20
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +53 -65
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +36 -44
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +33 -55
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +151 -163
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -16
  44. data/src/core/ext/filters/client_channel/lb_policy.h +70 -46
  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 +158 -102
  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 +2598 -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 +316 -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_call_data.h +45 -5
  76. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  77. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  78. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  79. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  80. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  81. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  82. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  83. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  84. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  85. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  86. data/src/core/ext/filters/http/client/http_client_filter.cc +33 -23
  87. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  88. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  90. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  92. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  93. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  94. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  96. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  98. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  99. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +49 -46
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  103. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  104. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
  106. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
  107. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
  108. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +141 -126
  109. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  110. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  111. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  112. data/src/core/ext/transport/chttp2/transport/flow_control.h +9 -9
  113. data/src/core/ext/transport/chttp2/transport/frame_data.cc +12 -12
  114. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -16
  116. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  118. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  120. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -10
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  124. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +652 -736
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +33 -28
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +129 -106
  133. data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  136. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +56 -35
  137. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +180 -76
  138. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -27
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +97 -48
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -9
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +67 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +66 -9
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +227 -0
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
  149. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +32 -24
  150. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -73
  151. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +4 -2
  152. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +15 -0
  153. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  154. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
  155. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +8 -6
  156. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +27 -19
  157. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +1 -0
  158. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -7
  159. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +57 -0
  160. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +29 -17
  161. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +72 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +3 -2
  163. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -5
  165. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +15 -11
  166. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +85 -43
  167. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +274 -91
  168. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +11 -8
  169. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +30 -13
  170. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -5
  171. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +115 -0
  172. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  173. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
  174. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +1 -0
  175. data/src/core/ext/upb-generated/validate/validate.upb.c +82 -66
  176. data/src/core/ext/upb-generated/validate/validate.upb.h +220 -124
  177. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
  178. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
  179. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
  180. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
  181. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +437 -410
  182. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
  183. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  184. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
  185. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
  186. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
  187. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  188. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  189. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
  190. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  191. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
  193. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  194. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
  195. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  196. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  197. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
  198. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
  199. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
  200. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +684 -664
  201. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  202. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
  203. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
  204. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +441 -375
  205. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
  206. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +122 -114
  207. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
  208. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
  209. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
  210. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  211. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  212. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
  213. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
  214. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
  215. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  216. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  217. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  218. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  219. data/src/core/ext/xds/xds_api.cc +665 -317
  220. data/src/core/ext/xds/xds_api.h +52 -14
  221. data/src/core/ext/xds/xds_bootstrap.cc +101 -160
  222. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  223. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  224. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  225. data/src/core/ext/xds/xds_channel_args.h +5 -2
  226. data/src/core/ext/xds/xds_client.cc +370 -215
  227. data/src/core/ext/xds/xds_client.h +38 -28
  228. data/src/core/ext/xds/xds_client_stats.h +3 -2
  229. data/src/core/ext/xds/xds_http_filters.cc +3 -2
  230. data/src/core/ext/xds/xds_http_filters.h +3 -0
  231. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  232. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  233. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  234. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  235. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  236. data/src/core/lib/channel/call_tracer.h +85 -0
  237. data/src/core/lib/channel/channel_stack.cc +10 -9
  238. data/src/core/lib/channel/channel_stack.h +11 -10
  239. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  240. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  241. data/src/core/lib/channel/channelz.cc +21 -13
  242. data/src/core/lib/channel/channelz.h +3 -0
  243. data/src/core/lib/channel/connected_channel.cc +4 -4
  244. data/src/core/lib/channel/context.h +3 -0
  245. data/src/core/lib/channel/handshaker.cc +7 -6
  246. data/src/core/lib/channel/handshaker.h +5 -5
  247. data/src/core/lib/channel/status_util.h +4 -0
  248. data/src/core/lib/compression/stream_compression.h +1 -1
  249. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  250. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  251. data/src/core/lib/debug/stats.h +1 -1
  252. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  253. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  254. data/src/core/lib/event_engine/event_engine.cc +50 -0
  255. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  256. data/src/core/lib/event_engine/sockaddr.h +44 -0
  257. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  258. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  259. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  260. data/src/core/lib/gprpp/orphanable.h +3 -3
  261. data/src/core/lib/gprpp/ref_counted.h +28 -14
  262. data/src/core/lib/gprpp/status_helper.cc +407 -0
  263. data/src/core/lib/gprpp/status_helper.h +183 -0
  264. data/src/core/lib/gprpp/sync.h +2 -30
  265. data/src/core/lib/http/httpcli.cc +11 -11
  266. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  267. data/src/core/lib/http/parser.cc +16 -16
  268. data/src/core/lib/http/parser.h +4 -4
  269. data/src/core/lib/iomgr/buffer_list.cc +8 -10
  270. data/src/core/lib/iomgr/buffer_list.h +4 -5
  271. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  272. data/src/core/lib/iomgr/call_combiner.h +12 -14
  273. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  274. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  275. data/src/core/lib/iomgr/closure.h +7 -6
  276. data/src/core/lib/iomgr/combiner.cc +14 -12
  277. data/src/core/lib/iomgr/combiner.h +2 -2
  278. data/src/core/lib/iomgr/endpoint.cc +1 -1
  279. data/src/core/lib/iomgr/endpoint.h +2 -2
  280. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  281. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  282. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  283. data/src/core/lib/iomgr/error.cc +168 -61
  284. data/src/core/lib/iomgr/error.h +217 -106
  285. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  286. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  287. data/src/core/lib/iomgr/error_internal.h +5 -1
  288. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  289. data/src/core/lib/iomgr/ev_apple.h +1 -1
  290. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  291. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  292. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  293. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  294. data/src/core/lib/iomgr/ev_posix.h +9 -9
  295. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  296. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  297. data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
  298. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  299. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  300. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  301. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  302. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  303. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  304. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  305. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  306. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  307. data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
  308. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  309. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  310. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  311. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  312. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  313. data/src/core/lib/iomgr/executor.cc +8 -8
  314. data/src/core/lib/iomgr/executor.h +2 -2
  315. data/src/core/lib/iomgr/iomgr.cc +2 -2
  316. data/src/core/lib/iomgr/iomgr.h +1 -1
  317. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  318. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  319. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  320. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  321. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  322. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  323. data/src/core/lib/iomgr/load_file.cc +4 -4
  324. data/src/core/lib/iomgr/load_file.h +2 -2
  325. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  326. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  327. data/src/core/lib/iomgr/pollset.cc +5 -5
  328. data/src/core/lib/iomgr/pollset.h +9 -9
  329. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  330. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  331. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  332. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  333. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  334. data/src/core/lib/iomgr/port.h +7 -5
  335. data/src/core/lib/iomgr/python_util.h +2 -2
  336. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  337. data/src/core/lib/iomgr/resolve_address.h +12 -6
  338. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  339. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  340. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  341. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  342. data/src/core/lib/iomgr/resource_quota.cc +13 -10
  343. data/src/core/lib/iomgr/sockaddr.h +1 -0
  344. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  345. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  346. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  347. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  348. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  349. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  350. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  351. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  352. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  353. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  354. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  355. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  356. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  357. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  358. data/src/core/lib/iomgr/tcp_server.h +12 -11
  359. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  360. data/src/core/lib/iomgr/tcp_server_posix.cc +29 -21
  361. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  362. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  363. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  364. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  365. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  366. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  367. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  368. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  369. data/src/core/lib/iomgr/timer.h +6 -1
  370. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  371. data/src/core/lib/iomgr/timer_custom.h +1 -1
  372. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  373. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  374. data/src/core/lib/iomgr/udp_server.cc +21 -20
  375. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  376. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  377. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  378. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  379. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  380. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  381. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  382. data/src/core/lib/iomgr/work_serializer.h +17 -1
  383. data/src/core/lib/json/json.h +1 -1
  384. data/src/core/lib/json/json_reader.cc +5 -6
  385. data/src/core/lib/matchers/matchers.cc +46 -58
  386. data/src/core/lib/matchers/matchers.h +30 -29
  387. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  388. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  389. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  390. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  391. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  392. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  393. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  394. data/src/core/lib/security/credentials/credentials.h +2 -2
  395. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  396. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  397. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  398. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  399. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  400. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  401. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  402. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  403. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  404. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  405. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  406. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  407. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  408. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  409. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  410. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  411. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  412. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  413. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  414. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  415. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  416. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  417. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  418. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  419. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  420. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +68 -13
  421. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -0
  422. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  423. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  424. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  425. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  426. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  427. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  428. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  429. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  430. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  431. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  432. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  433. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  434. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  435. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  436. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +60 -76
  437. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  438. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  439. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  440. data/src/core/lib/security/transport/security_handshaker.cc +45 -36
  441. data/src/core/lib/security/transport/server_auth_filter.cc +17 -18
  442. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  443. data/src/core/lib/security/transport/tsi_error.h +2 -1
  444. data/src/core/lib/security/util/json_util.cc +2 -2
  445. data/src/core/lib/security/util/json_util.h +1 -1
  446. data/src/core/lib/slice/slice_internal.h +1 -0
  447. data/src/core/lib/surface/call.cc +72 -52
  448. data/src/core/lib/surface/call.h +13 -2
  449. data/src/core/lib/surface/channel.cc +6 -6
  450. data/src/core/lib/surface/channel.h +3 -2
  451. data/src/core/lib/surface/channel_ping.cc +1 -1
  452. data/src/core/lib/surface/completion_queue.cc +68 -69
  453. data/src/core/lib/surface/completion_queue.h +3 -2
  454. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  455. data/src/core/lib/surface/init.cc +1 -3
  456. data/src/core/lib/surface/init.h +10 -1
  457. data/src/core/lib/surface/lame_client.cc +11 -11
  458. data/src/core/lib/surface/lame_client.h +1 -1
  459. data/src/core/lib/surface/server.cc +31 -23
  460. data/src/core/lib/surface/server.h +19 -18
  461. data/src/core/lib/surface/validate_metadata.cc +7 -7
  462. data/src/core/lib/surface/validate_metadata.h +3 -2
  463. data/src/core/lib/surface/version.cc +2 -2
  464. data/src/core/lib/transport/byte_stream.cc +5 -5
  465. data/src/core/lib/transport/byte_stream.h +8 -8
  466. data/src/core/lib/transport/connectivity_state.cc +1 -1
  467. data/src/core/lib/transport/error_utils.cc +21 -10
  468. data/src/core/lib/transport/error_utils.h +11 -5
  469. data/src/core/lib/transport/metadata_batch.cc +37 -37
  470. data/src/core/lib/transport/metadata_batch.h +19 -18
  471. data/src/core/lib/transport/transport.cc +4 -3
  472. data/src/core/lib/transport/transport.h +6 -4
  473. data/src/core/lib/transport/transport_op_string.cc +6 -6
  474. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  475. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  476. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  477. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  478. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  479. data/src/core/tsi/ssl_transport_security.cc +32 -14
  480. data/src/core/tsi/ssl_transport_security.h +3 -4
  481. data/src/ruby/bin/math_services_pb.rb +1 -1
  482. data/src/ruby/ext/grpc/extconf.rb +2 -0
  483. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  484. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  485. data/src/ruby/lib/grpc/version.rb +1 -1
  486. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  487. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  488. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  489. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  490. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  491. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  492. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  493. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  494. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  495. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  496. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  497. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  498. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  499. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  500. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  501. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  502. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  503. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  504. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  505. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  506. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  507. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  508. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  509. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  510. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  511. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  512. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  513. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  514. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  515. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  516. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  517. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  518. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  519. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  520. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  521. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  522. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  523. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  524. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  525. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  526. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  527. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  528. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  529. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  530. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  531. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  532. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  533. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  534. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  535. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  536. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  537. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  538. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  539. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  540. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  541. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  542. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  543. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  544. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  545. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  546. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  547. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  548. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  549. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  550. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  551. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  552. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  553. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  554. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  555. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  556. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  557. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  558. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  559. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  560. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  561. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  562. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  563. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  564. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  565. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  566. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  567. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  568. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  569. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  570. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  571. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  572. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  573. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  574. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  575. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  576. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  577. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  578. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  579. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  580. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  581. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  582. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  583. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  584. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  585. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  586. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  587. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  588. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  589. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  590. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  591. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  592. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  593. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  594. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  595. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  596. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  597. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  598. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  599. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  600. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  601. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  602. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  603. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  604. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  605. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  606. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  607. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  608. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  609. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  610. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  611. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  612. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  613. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  614. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  615. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  616. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  617. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  618. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  619. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  620. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  621. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  622. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  623. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  624. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  625. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  626. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  627. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  628. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  629. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  630. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  631. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  632. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  633. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  635. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  636. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  637. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  638. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  639. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  640. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  641. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  642. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  643. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  644. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  645. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  646. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  647. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  648. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  649. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  650. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  651. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  652. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  653. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  654. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  655. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  656. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  657. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  658. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  659. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  660. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  661. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  662. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  663. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  664. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  665. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  666. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  667. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  668. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  669. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  670. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  671. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  672. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  673. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  674. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  679. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  680. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  681. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  682. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  683. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  684. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  685. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  686. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  687. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  688. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  689. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  690. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  691. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  692. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  693. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  694. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  695. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  697. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  698. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  699. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  700. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  702. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  703. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  704. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  705. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  706. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  707. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  708. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  709. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  710. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  711. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  712. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  713. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  714. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  715. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  716. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  717. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  718. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  719. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  720. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  721. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  722. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  723. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  724. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  725. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  726. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  727. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  728. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  729. data/third_party/xxhash/xxhash.h +77 -195
  730. metadata +116 -51
  731. data/src/core/lib/gpr/arena.h +0 -47
  732. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  733. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  734. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  735. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  736. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  737. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  738. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -31,6 +31,7 @@
31
31
  #include "src/core/lib/channel/channel_args.h"
32
32
  #include "src/core/lib/gpr/env.h"
33
33
  #include "src/core/lib/gpr/string.h"
34
+ #include "src/core/lib/gprpp/atomic.h"
34
35
  #include "src/core/lib/gprpp/orphanable.h"
35
36
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
36
37
  #include "src/core/lib/gprpp/sync.h"
@@ -56,6 +57,7 @@ class CircuitBreakerCallCounterMap {
56
57
  explicit CallCounter(Key key) : key_(std::move(key)) {}
57
58
  ~CallCounter() override;
58
59
 
60
+ uint32_t Load() { return concurrent_requests_.Load(MemoryOrder::SEQ_CST); }
59
61
  uint32_t Increment() { return concurrent_requests_.FetchAdd(1); }
60
62
  void Decrement() { concurrent_requests_.FetchSub(1); }
61
63
 
@@ -69,7 +71,7 @@ class CircuitBreakerCallCounterMap {
69
71
 
70
72
  private:
71
73
  Mutex mu_;
72
- std::map<Key, CallCounter*> map_;
74
+ std::map<Key, CallCounter*> map_ ABSL_GUARDED_BY(mu_);
73
75
  };
74
76
 
75
77
  CircuitBreakerCallCounterMap* g_call_counter_map = nullptr;
@@ -282,59 +284,51 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
282
284
  const std::string* drop_category;
283
285
  if (drop_config_->ShouldDrop(&drop_category)) {
284
286
  if (drop_stats_ != nullptr) drop_stats_->AddCallDropped(*drop_category);
285
- PickResult result;
286
- result.type = PickResult::PICK_COMPLETE;
287
- return result;
287
+ return PickResult::Drop(absl::UnavailableError(
288
+ absl::StrCat("EDS-configured drop: ", *drop_category)));
288
289
  }
289
290
  // Handle circuit breaking.
290
- uint32_t current = call_counter_->Increment();
291
+ uint32_t current = call_counter_->Load();
291
292
  // Check and see if we exceeded the max concurrent requests count.
292
293
  if (current >= max_concurrent_requests_) {
293
- call_counter_->Decrement();
294
294
  if (drop_stats_ != nullptr) drop_stats_->AddUncategorizedDrops();
295
- PickResult result;
296
- result.type = PickResult::PICK_COMPLETE;
297
- return result;
295
+ return PickResult::Drop(absl::UnavailableError("circuit breaker drop"));
298
296
  }
297
+ call_counter_->Increment();
299
298
  // If we're not dropping the call, we should always have a child picker.
300
299
  if (picker_ == nullptr) { // Should never happen.
301
- PickResult result;
302
- result.type = PickResult::PICK_FAILED;
303
- result.error = grpc_error_set_int(
304
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
305
- "xds_cluster_impl picker not given any child picker"),
306
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
307
300
  call_counter_->Decrement();
308
- return result;
301
+ return PickResult::Fail(absl::InternalError(
302
+ "xds_cluster_impl picker not given any child picker"));
309
303
  }
310
304
  // Not dropping, so delegate to child picker.
311
305
  PickResult result = picker_->Pick(args);
312
- if (result.type == result.PICK_COMPLETE && result.subchannel != nullptr) {
306
+ auto* complete_pick = absl::get_if<PickResult::Complete>(&result.result);
307
+ if (complete_pick != nullptr) {
313
308
  XdsClusterLocalityStats* locality_stats = nullptr;
314
309
  if (drop_stats_ != nullptr) { // If load reporting is enabled.
315
310
  auto* subchannel_wrapper =
316
- static_cast<StatsSubchannelWrapper*>(result.subchannel.get());
311
+ static_cast<StatsSubchannelWrapper*>(complete_pick->subchannel.get());
317
312
  // Handle load reporting.
318
313
  locality_stats = subchannel_wrapper->locality_stats()->Ref().release();
319
314
  // Record a call started.
320
315
  locality_stats->AddCallStarted();
321
316
  // Unwrap subchannel to pass back up the stack.
322
- result.subchannel = subchannel_wrapper->wrapped_subchannel();
317
+ complete_pick->subchannel = subchannel_wrapper->wrapped_subchannel();
323
318
  }
324
319
  // Intercept the recv_trailing_metadata op to record call completion.
325
320
  auto* call_counter = call_counter_->Ref(DEBUG_LOCATION, "call").release();
326
321
  auto original_recv_trailing_metadata_ready =
327
- result.recv_trailing_metadata_ready;
328
- result.recv_trailing_metadata_ready =
322
+ complete_pick->recv_trailing_metadata_ready;
323
+ complete_pick->recv_trailing_metadata_ready =
329
324
  // Note: This callback does not run in either the control plane
330
325
  // work serializer or in the data plane mutex.
331
326
  [locality_stats, original_recv_trailing_metadata_ready, call_counter](
332
- grpc_error* error, MetadataInterface* metadata,
327
+ absl::Status status, MetadataInterface* metadata,
333
328
  CallState* call_state) {
334
329
  // Record call completion for load reporting.
335
330
  if (locality_stats != nullptr) {
336
- const bool call_failed = error != GRPC_ERROR_NONE;
337
- locality_stats->AddCallFinished(call_failed);
331
+ locality_stats->AddCallFinished(!status.ok());
338
332
  locality_stats->Unref(DEBUG_LOCATION, "LocalityStats+call");
339
333
  }
340
334
  // Decrement number of calls in flight.
@@ -342,7 +336,7 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
342
336
  call_counter->Unref(DEBUG_LOCATION, "call");
343
337
  // Invoke the original recv_trailing_metadata_ready callback, if any.
344
338
  if (original_recv_trailing_metadata_ready != nullptr) {
345
- original_recv_trailing_metadata_ready(error, metadata, call_state);
339
+ original_recv_trailing_metadata_ready(status, metadata, call_state);
346
340
  }
347
341
  };
348
342
  } else {
@@ -594,14 +588,12 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
594
588
  public:
595
589
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
596
590
  LoadBalancingPolicy::Args args) const override {
597
- grpc_error* error = GRPC_ERROR_NONE;
598
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
599
- if (error != GRPC_ERROR_NONE) {
600
- gpr_log(
601
- GPR_ERROR,
602
- "cannot get XdsClient to instantiate xds_cluster_impl LB policy: %s",
603
- grpc_error_string(error));
604
- GRPC_ERROR_UNREF(error);
591
+ RefCountedPtr<XdsClient> xds_client =
592
+ XdsClient::GetFromChannelArgs(*args.args);
593
+ if (xds_client == nullptr) {
594
+ gpr_log(GPR_ERROR,
595
+ "XdsClient not present in channel args -- cannot instantiate "
596
+ "xds_cluster_impl LB policy");
605
597
  return nullptr;
606
598
  }
607
599
  return MakeOrphanable<XdsClusterImplLb>(std::move(xds_client),
@@ -611,7 +603,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
611
603
  const char* name() const override { return kXdsClusterImpl; }
612
604
 
613
605
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
614
- const Json& json, grpc_error** error) const override {
606
+ const Json& json, grpc_error_handle* error) const override {
615
607
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
616
608
  if (json.type() == Json::Type::JSON_NULL) {
617
609
  // This policy was configured in the deprecated loadBalancingPolicy
@@ -622,7 +614,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
622
614
  "config instead.");
623
615
  return nullptr;
624
616
  }
625
- std::vector<grpc_error*> error_list;
617
+ std::vector<grpc_error_handle> error_list;
626
618
  // Child policy.
627
619
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
628
620
  auto it = json.object_value().find("childPolicy");
@@ -630,12 +622,12 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
630
622
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
631
623
  "field:childPolicy error:required field missing"));
632
624
  } else {
633
- grpc_error* parse_error = GRPC_ERROR_NONE;
625
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
634
626
  child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
635
627
  it->second, &parse_error);
636
628
  if (child_policy == nullptr) {
637
629
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
638
- std::vector<grpc_error*> child_errors;
630
+ std::vector<grpc_error_handle> child_errors;
639
631
  child_errors.push_back(parse_error);
640
632
  error_list.push_back(
641
633
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
@@ -694,7 +686,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
694
686
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
695
687
  "field:dropCategories error:required field missing"));
696
688
  } else {
697
- std::vector<grpc_error*> child_errors =
689
+ std::vector<grpc_error_handle> child_errors =
698
690
  ParseDropCategories(it->second, drop_config.get());
699
691
  if (!child_errors.empty()) {
700
692
  error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
@@ -713,9 +705,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
713
705
  }
714
706
 
715
707
  private:
716
- static std::vector<grpc_error*> ParseDropCategories(
708
+ static std::vector<grpc_error_handle> ParseDropCategories(
717
709
  const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
718
- std::vector<grpc_error*> error_list;
710
+ std::vector<grpc_error_handle> error_list;
719
711
  if (json.type() != Json::Type::ARRAY) {
720
712
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
721
713
  "dropCategories field is not an array"));
@@ -723,10 +715,10 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
723
715
  }
724
716
  for (size_t i = 0; i < json.array_value().size(); ++i) {
725
717
  const Json& entry = json.array_value()[i];
726
- std::vector<grpc_error*> child_errors =
718
+ std::vector<grpc_error_handle> child_errors =
727
719
  ParseDropCategory(entry, drop_config);
728
720
  if (!child_errors.empty()) {
729
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
721
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
730
722
  absl::StrCat("errors parsing index ", i).c_str());
731
723
  for (size_t i = 0; i < child_errors.size(); ++i) {
732
724
  error = grpc_error_add_child(error, child_errors[i]);
@@ -737,9 +729,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
737
729
  return error_list;
738
730
  }
739
731
 
740
- static std::vector<grpc_error*> ParseDropCategory(
732
+ static std::vector<grpc_error_handle> ParseDropCategory(
741
733
  const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
742
- std::vector<grpc_error*> error_list;
734
+ std::vector<grpc_error_handle> error_list;
743
735
  if (json.type() != Json::Type::OBJECT) {
744
736
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
745
737
  "dropCategories entry is not an object"));
@@ -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_;
@@ -212,15 +212,8 @@ XdsClusterManagerLb::PickResult XdsClusterManagerLb::ClusterPicker::Pick(
212
212
  if (it != cluster_map_.end()) {
213
213
  return it->second->Pick(args);
214
214
  }
215
- PickResult result;
216
- result.type = PickResult::PICK_FAILED;
217
- result.error = grpc_error_set_int(
218
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
219
- absl::StrCat("xds cluster manager picker: unknown cluster \"",
220
- cluster_name, "\"")
221
- .c_str()),
222
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
223
- return result;
215
+ return PickResult::Fail(absl::InternalError(absl::StrCat(
216
+ "xds cluster manager picker: unknown cluster \"", cluster_name, "\"")));
224
217
  }
225
218
 
226
219
  //
@@ -337,44 +330,29 @@ void XdsClusterManagerLb::UpdateStateLocked() {
337
330
  gpr_log(GPR_INFO, "[xds_cluster_manager_lb %p] connectivity changed to %s",
338
331
  this, ConnectivityStateName(connectivity_state));
339
332
  }
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,
333
+ ClusterPicker::ClusterMap cluster_map;
334
+ for (const auto& p : config_->cluster_map()) {
335
+ const std::string& cluster_name = p.first;
336
+ RefCountedPtr<ChildPickerWrapper>& child_picker = cluster_map[cluster_name];
337
+ child_picker = children_[cluster_name]->picker_wrapper();
338
+ if (child_picker == nullptr) {
339
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_manager_lb_trace)) {
340
+ gpr_log(GPR_INFO,
354
341
  "[xds_cluster_manager_lb %p] child %s has not yet returned a "
355
342
  "picker; creating a QueuePicker.",
356
343
  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
344
  }
363
- picker = absl::make_unique<ClusterPicker>(std::move(cluster_map));
364
- break;
345
+ child_picker = MakeRefCounted<ChildPickerWrapper>(
346
+ cluster_name,
347
+ absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
365
348
  }
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);
349
+ }
350
+ std::unique_ptr<SubchannelPicker> picker =
351
+ absl::make_unique<ClusterPicker>(std::move(cluster_map));
352
+ absl::Status status;
353
+ if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
354
+ status = absl::Status(absl::StatusCode::kUnavailable,
355
+ "TRANSIENT_FAILURE from XdsClusterManagerLb");
378
356
  }
379
357
  channel_control_helper()->UpdateState(connectivity_state, status,
380
358
  std::move(picker));
@@ -513,7 +491,7 @@ void XdsClusterManagerLb::ClusterChild::DeactivateLocked() {
513
491
  }
514
492
 
515
493
  void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimer(
516
- void* arg, grpc_error* error) {
494
+ void* arg, grpc_error_handle error) {
517
495
  ClusterChild* self = static_cast<ClusterChild*>(arg);
518
496
  GRPC_ERROR_REF(error); // Ref owned by the lambda
519
497
  self->xds_cluster_manager_policy_->work_serializer()->Run(
@@ -522,7 +500,7 @@ void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimer(
522
500
  }
523
501
 
524
502
  void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked(
525
- grpc_error* error) {
503
+ grpc_error_handle error) {
526
504
  delayed_removal_timer_callback_pending_ = false;
527
505
  if (error == GRPC_ERROR_NONE && !shutdown_) {
528
506
  xds_cluster_manager_policy_->children_.erase(name_);
@@ -616,7 +594,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
616
594
  const char* name() const override { return kXdsClusterManager; }
617
595
 
618
596
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
619
- const Json& json, grpc_error** error) const override {
597
+ const Json& json, grpc_error_handle* error) const override {
620
598
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
621
599
  if (json.type() == Json::Type::JSON_NULL) {
622
600
  // xds_cluster_manager was mentioned as a policy in the deprecated
@@ -627,7 +605,7 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
627
605
  "config instead.");
628
606
  return nullptr;
629
607
  }
630
- std::vector<grpc_error*> error_list;
608
+ std::vector<grpc_error_handle> error_list;
631
609
  XdsClusterManagerLbConfig::ClusterMap cluster_map;
632
610
  std::set<std::string /*cluster_name*/> clusters_to_be_used;
633
611
  auto it = json.object_value().find("children");
@@ -646,14 +624,14 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
646
624
  continue;
647
625
  }
648
626
  RefCountedPtr<LoadBalancingPolicy::Config> child_config;
649
- std::vector<grpc_error*> child_errors =
627
+ std::vector<grpc_error_handle> child_errors =
650
628
  ParseChildConfig(p.second, &child_config);
651
629
  if (!child_errors.empty()) {
652
630
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
653
631
  // string is not static in this case.
654
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
632
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
655
633
  absl::StrCat("field:children name:", child_name).c_str());
656
- for (grpc_error* child_error : child_errors) {
634
+ for (grpc_error_handle child_error : child_errors) {
657
635
  error = grpc_error_add_child(error, child_error);
658
636
  }
659
637
  error_list.push_back(error);
@@ -676,10 +654,10 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
676
654
  }
677
655
 
678
656
  private:
679
- static std::vector<grpc_error*> ParseChildConfig(
657
+ static std::vector<grpc_error_handle> ParseChildConfig(
680
658
  const Json& json,
681
659
  RefCountedPtr<LoadBalancingPolicy::Config>* child_config) {
682
- std::vector<grpc_error*> error_list;
660
+ std::vector<grpc_error_handle> error_list;
683
661
  if (json.type() != Json::Type::OBJECT) {
684
662
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
685
663
  "value should be of type object"));
@@ -690,12 +668,12 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
690
668
  error_list.push_back(
691
669
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("did not find childPolicy"));
692
670
  } else {
693
- grpc_error* parse_error = GRPC_ERROR_NONE;
671
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
694
672
  *child_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
695
673
  it->second, &parse_error);
696
674
  if (*child_config == nullptr) {
697
675
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
698
- std::vector<grpc_error*> child_errors;
676
+ std::vector<grpc_error_handle> child_errors;
699
677
  child_errors.push_back(parse_error);
700
678
  error_list.push_back(
701
679
  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,16 +1026,13 @@ 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));
1024
- error = grpc_error_set_int(
1025
- grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1026
- "xds_cluster_resolver LB policy: error "
1027
- "parsing generated child policy config"),
1028
- error),
1029
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
1029
+ this, grpc_error_std_string(error).c_str());
1030
+ absl::Status status = absl::InternalError(
1031
+ "xds_cluster_resolver LB policy: error parsing generated child policy "
1032
+ "config");
1030
1033
  channel_control_helper()->UpdateState(
1031
- GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
1032
- absl::make_unique<TransientFailurePicker>(error));
1034
+ GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1035
+ absl::make_unique<TransientFailurePicker>(status));
1033
1036
  return nullptr;
1034
1037
  }
1035
1038
  return config;
@@ -1054,10 +1057,14 @@ void XdsClusterResolverLb::UpdateChildPolicyLocked() {
1054
1057
 
1055
1058
  grpc_channel_args* XdsClusterResolverLb::CreateChildPolicyArgsLocked(
1056
1059
  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);
1060
+ absl::InlinedVector<grpc_arg, 2> new_args = {
1061
+ // Inhibit client-side health checking, since the balancer does this
1062
+ // for us.
1063
+ grpc_channel_arg_integer_create(
1064
+ const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
1065
+ };
1066
+ if (!is_xds_uri_) new_args.push_back(xds_client_->MakeChannelArg());
1067
+ return grpc_channel_args_copy_and_add(args, new_args.data(), new_args.size());
1061
1068
  }
1062
1069
 
1063
1070
  OrphanablePtr<LoadBalancingPolicy>
@@ -1096,24 +1103,45 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1096
1103
  public:
1097
1104
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1098
1105
  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;
1106
+ // Find server name.
1107
+ const char* server_uri =
1108
+ grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
1109
+ GPR_ASSERT(server_uri != nullptr);
1110
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
1111
+ GPR_ASSERT(uri.ok() && !uri->path().empty());
1112
+ absl::string_view server_name = absl::StripPrefix(uri->path(), "/");
1113
+ // Determine if it's an xds URI.
1114
+ bool is_xds_uri = uri->scheme() == "xds" || uri->scheme() == "google-c2p";
1115
+ // Get XdsClient.
1116
+ RefCountedPtr<XdsClient> xds_client =
1117
+ XdsClient::GetFromChannelArgs(*args.args);
1118
+ if (xds_client == nullptr) {
1119
+ if (!is_xds_uri) {
1120
+ grpc_error_handle error = GRPC_ERROR_NONE;
1121
+ xds_client = XdsClient::GetOrCreate(args.args, &error);
1122
+ if (error != GRPC_ERROR_NONE) {
1123
+ gpr_log(GPR_ERROR,
1124
+ "cannot get or create XdsClient to instantiate "
1125
+ "xds_cluster_resolver LB policy: %s",
1126
+ grpc_error_std_string(error).c_str());
1127
+ GRPC_ERROR_UNREF(error);
1128
+ return nullptr;
1129
+ }
1130
+ } else {
1131
+ gpr_log(GPR_ERROR,
1132
+ "XdsClient not present in channel args -- cannot instantiate "
1133
+ "xds_cluster_resolver LB policy");
1134
+ return nullptr;
1135
+ }
1108
1136
  }
1109
- return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
1110
- std::move(args));
1137
+ return MakeOrphanable<XdsClusterResolverChildHandler>(
1138
+ std::move(xds_client), std::move(args), server_name, is_xds_uri);
1111
1139
  }
1112
1140
 
1113
1141
  const char* name() const override { return kXdsClusterResolver; }
1114
1142
 
1115
1143
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1116
- const Json& json, grpc_error** error) const override {
1144
+ const Json& json, grpc_error_handle* error) const override {
1117
1145
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1118
1146
  if (json.type() == Json::Type::JSON_NULL) {
1119
1147
  // xds_cluster_resolver was mentioned as a policy in the deprecated
@@ -1124,7 +1152,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1124
1152
  "Please use loadBalancingConfig field of service config instead.");
1125
1153
  return nullptr;
1126
1154
  }
1127
- std::vector<grpc_error*> error_list;
1155
+ std::vector<grpc_error_handle> error_list;
1128
1156
  std::vector<XdsClusterResolverLbConfig::DiscoveryMechanism>
1129
1157
  discovery_mechanisms;
1130
1158
  auto it = json.object_value().find("discoveryMechanisms");
@@ -1138,13 +1166,13 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1138
1166
  const Json::Array& array = it->second.array_value();
1139
1167
  for (size_t i = 0; i < array.size(); ++i) {
1140
1168
  XdsClusterResolverLbConfig::DiscoveryMechanism discovery_mechanism;
1141
- std::vector<grpc_error*> discovery_mechanism_errors =
1169
+ std::vector<grpc_error_handle> discovery_mechanism_errors =
1142
1170
  ParseDiscoveryMechanism(array[i], &discovery_mechanism);
1143
1171
  if (!discovery_mechanism_errors.empty()) {
1144
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1172
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1145
1173
  absl::StrCat("field:discovery_mechanism element: ", i, " error")
1146
1174
  .c_str());
1147
- for (grpc_error* discovery_mechanism_error :
1175
+ for (grpc_error_handle discovery_mechanism_error :
1148
1176
  discovery_mechanism_errors) {
1149
1177
  error = grpc_error_add_child(error, discovery_mechanism_error);
1150
1178
  }
@@ -1184,65 +1212,11 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1184
1212
  }
1185
1213
  policy_it = policy.find("RING_HASH");
1186
1214
  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
1215
  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;
1216
+ size_t min_ring_size;
1217
+ size_t max_ring_size;
1218
+ ParseRingHashLbConfig(policy_it->second, &min_ring_size,
1219
+ &max_ring_size, &error_list);
1246
1220
  }
1247
1221
  }
1248
1222
  }
@@ -1259,10 +1233,10 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1259
1233
  }
1260
1234
 
1261
1235
  private:
1262
- static std::vector<grpc_error*> ParseDiscoveryMechanism(
1236
+ static std::vector<grpc_error_handle> ParseDiscoveryMechanism(
1263
1237
  const Json& json,
1264
1238
  XdsClusterResolverLbConfig::DiscoveryMechanism* discovery_mechanism) {
1265
- std::vector<grpc_error*> error_list;
1239
+ std::vector<grpc_error_handle> error_list;
1266
1240
  if (json.type() != Json::Type::OBJECT) {
1267
1241
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1268
1242
  "value should be of type object"));
@@ -1314,35 +1288,46 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1314
1288
  if (it->second.string_value() == "EDS") {
1315
1289
  discovery_mechanism->type = XdsClusterResolverLbConfig::
1316
1290
  DiscoveryMechanism::DiscoveryMechanismType::EDS;
1291
+ it = json.object_value().find("edsServiceName");
1292
+ if (it != json.object_value().end()) {
1293
+ if (it->second.type() != Json::Type::STRING) {
1294
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1295
+ "field:edsServiceName error:type should be string"));
1296
+ } else {
1297
+ discovery_mechanism->eds_service_name = it->second.string_value();
1298
+ }
1299
+ }
1317
1300
  } else if (it->second.string_value() == "LOGICAL_DNS") {
1318
1301
  discovery_mechanism->type = XdsClusterResolverLbConfig::
1319
1302
  DiscoveryMechanism::DiscoveryMechanismType::LOGICAL_DNS;
1303
+ it = json.object_value().find("dnsHostname");
1304
+ if (it == json.object_value().end()) {
1305
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1306
+ "field:dnsHostname error:required field missing"));
1307
+ } else if (it->second.type() != Json::Type::STRING) {
1308
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1309
+ "field:dnsHostname error:type should be string"));
1310
+ } else {
1311
+ discovery_mechanism->dns_hostname = it->second.string_value();
1312
+ }
1320
1313
  } else {
1321
1314
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1322
1315
  "field:type error:invalid type"));
1323
1316
  }
1324
1317
  }
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
1318
  return error_list;
1337
1319
  }
1338
1320
 
1339
1321
  class XdsClusterResolverChildHandler : public ChildPolicyHandler {
1340
1322
  public:
1341
1323
  XdsClusterResolverChildHandler(RefCountedPtr<XdsClient> xds_client,
1342
- Args args)
1324
+ Args args, absl::string_view server_name,
1325
+ bool is_xds_uri)
1343
1326
  : ChildPolicyHandler(std::move(args),
1344
1327
  &grpc_lb_xds_cluster_resolver_trace),
1345
- xds_client_(std::move(xds_client)) {}
1328
+ xds_client_(std::move(xds_client)),
1329
+ server_name_(server_name),
1330
+ is_xds_uri_(is_xds_uri) {}
1346
1331
 
1347
1332
  bool ConfigChangeRequiresNewPolicyInstance(
1348
1333
  LoadBalancingPolicy::Config* old_config,
@@ -1359,11 +1344,14 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1359
1344
 
1360
1345
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1361
1346
  const char* /*name*/, LoadBalancingPolicy::Args args) const override {
1362
- return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
1347
+ return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args),
1348
+ server_name_, is_xds_uri_);
1363
1349
  }
1364
1350
 
1365
1351
  private:
1366
1352
  RefCountedPtr<XdsClient> xds_client_;
1353
+ std::string server_name_;
1354
+ bool is_xds_uri_;
1367
1355
  };
1368
1356
  };
1369
1357