grpc 1.36.0 → 1.38.0

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

Potentially problematic release.


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

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