grpc 1.35.0 → 1.38.0.pre1

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

Potentially problematic release.


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

Files changed (885) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +168 -131
  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.h +16 -11
  10. data/include/grpc/grpc_security_constants.h +14 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  12. data/include/grpc/impl/codegen/port_platform.h +7 -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 +740 -3185
  17. data/src/core/ext/filters/client_channel/client_channel.h +488 -56
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  20. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  21. data/src/core/ext/filters/client_channel/config_selector.h +10 -2
  22. data/src/core/ext/filters/client_channel/connector.h +1 -1
  23. data/src/core/ext/filters/client_channel/dynamic_filters.cc +18 -14
  24. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +26 -23
  30. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
  31. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +49 -48
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -3
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  38. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +22 -18
  39. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  42. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  43. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +318 -193
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -47
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +32 -47
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +316 -171
  49. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  51. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  53. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  54. data/src/core/ext/filters/client_channel/resolver.cc +5 -5
  55. data/src/core/ext/filters/client_channel/resolver.h +3 -14
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +59 -60
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +17 -15
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -74
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  65. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +33 -23
  66. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +38 -43
  67. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  68. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +379 -0
  69. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  70. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +344 -177
  71. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  73. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  74. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  75. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  76. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  77. data/src/core/ext/filters/client_channel/server_address.cc +10 -1
  78. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  79. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  80. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  81. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  82. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  83. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  84. data/src/core/ext/filters/client_channel/subchannel.cc +86 -162
  85. data/src/core/ext/filters/client_channel/subchannel.h +68 -99
  86. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
  88. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
  91. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  92. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  93. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  94. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  95. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  96. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  97. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  98. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  99. data/src/core/ext/filters/max_age/max_age_filter.cc +47 -42
  100. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  101. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  102. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
  103. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -8
  104. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  105. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +5 -4
  106. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
  107. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -5
  108. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +507 -196
  109. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  110. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -4
  111. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -3
  112. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +64 -21
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +167 -122
  114. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  115. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  116. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  117. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  118. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_data.cc +13 -9
  120. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  121. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  122. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  124. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  125. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  126. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  127. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  128. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  129. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  130. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  131. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  132. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  133. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  134. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  135. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  136. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  137. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  138. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  139. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  140. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  141. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  143. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  144. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
  145. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  146. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  147. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
  148. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
  149. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
  150. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
  162. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
  163. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
  164. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  165. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
  166. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
  167. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
  168. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  169. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  170. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  171. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  172. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
  173. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
  174. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
  175. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +150 -0
  176. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
  177. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  178. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  181. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  182. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  183. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  184. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  185. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +19 -21
  186. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +64 -51
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
  189. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
  190. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
  191. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
  192. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
  193. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
  194. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
  195. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
  196. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
  197. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
  198. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
  199. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  200. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  206. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
  207. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
  208. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  209. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  210. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
  211. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  212. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  213. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  214. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  215. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  216. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
  217. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  218. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  219. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  220. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  221. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  222. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  223. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  224. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
  225. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  226. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  227. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
  228. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
  229. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  230. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
  231. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  232. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
  233. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
  234. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
  235. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
  236. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  237. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
  238. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  239. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
  240. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
  241. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
  242. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  243. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  244. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  245. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  246. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
  247. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
  248. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  249. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  250. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  251. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  252. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  253. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  254. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  255. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  256. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  257. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  258. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
  259. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  260. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
  261. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  262. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
  263. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  264. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  265. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  266. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  267. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  268. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  269. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  270. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  271. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  272. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  273. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  274. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  275. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  276. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  277. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  278. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
  279. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  280. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  281. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  282. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  283. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  284. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  285. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  286. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  287. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  288. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  289. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  290. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  291. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  292. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  293. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  294. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  295. data/src/core/ext/xds/xds_api.cc +2179 -688
  296. data/src/core/ext/xds/xds_api.h +326 -124
  297. data/src/core/ext/xds/xds_bootstrap.cc +115 -142
  298. data/src/core/ext/xds/xds_bootstrap.h +24 -17
  299. data/src/core/ext/xds/xds_certificate_provider.cc +184 -78
  300. data/src/core/ext/xds/xds_certificate_provider.h +84 -45
  301. data/src/core/ext/xds/xds_channel_args.h +5 -2
  302. data/src/core/ext/xds/xds_client.cc +462 -183
  303. data/src/core/ext/xds/xds_client.h +65 -22
  304. data/src/core/ext/xds/xds_client_stats.cc +2 -1
  305. data/src/core/ext/xds/xds_client_stats.h +5 -4
  306. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  307. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  308. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  309. data/src/core/ext/xds/xds_http_filters.h +130 -0
  310. data/src/core/ext/xds/xds_server_config_fetcher.cc +444 -29
  311. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  312. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  313. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +108 -5
  314. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +26 -6
  315. data/src/core/lib/channel/channel_stack.cc +22 -9
  316. data/src/core/lib/channel/channel_stack.h +17 -9
  317. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  318. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  319. data/src/core/lib/channel/channelz.cc +108 -12
  320. data/src/core/lib/channel/channelz.h +30 -1
  321. data/src/core/lib/channel/channelz_registry.cc +14 -0
  322. data/src/core/lib/channel/connected_channel.cc +4 -4
  323. data/src/core/lib/channel/handshaker.cc +9 -50
  324. data/src/core/lib/channel/handshaker.h +6 -23
  325. data/src/core/lib/channel/status_util.cc +12 -2
  326. data/src/core/lib/channel/status_util.h +5 -0
  327. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  328. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  329. data/src/core/lib/gpr/log.cc +6 -1
  330. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  331. data/src/core/lib/gpr/sync_windows.cc +2 -2
  332. data/src/core/lib/gprpp/atomic.h +3 -3
  333. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  334. data/src/core/lib/gprpp/mpscq.cc +2 -2
  335. data/src/core/lib/gprpp/ref_counted.h +29 -15
  336. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
  337. data/src/core/lib/gprpp/status_helper.cc +407 -0
  338. data/src/core/lib/gprpp/status_helper.h +180 -0
  339. data/src/core/lib/gprpp/sync.h +129 -40
  340. data/src/core/lib/gprpp/thd.h +1 -1
  341. data/src/core/lib/gprpp/time_util.cc +77 -0
  342. data/src/core/lib/gprpp/time_util.h +42 -0
  343. data/src/core/lib/http/httpcli.cc +11 -11
  344. data/src/core/lib/http/httpcli_security_connector.cc +13 -9
  345. data/src/core/lib/http/parser.cc +16 -16
  346. data/src/core/lib/http/parser.h +4 -4
  347. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  348. data/src/core/lib/iomgr/buffer_list.h +5 -6
  349. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  350. data/src/core/lib/iomgr/call_combiner.h +12 -14
  351. data/src/core/lib/iomgr/cfstream_handle.cc +5 -5
  352. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  353. data/src/core/lib/iomgr/closure.h +7 -6
  354. data/src/core/lib/iomgr/combiner.cc +14 -12
  355. data/src/core/lib/iomgr/combiner.h +2 -2
  356. data/src/core/lib/iomgr/endpoint.cc +1 -1
  357. data/src/core/lib/iomgr/endpoint.h +2 -2
  358. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  359. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  360. data/src/core/lib/iomgr/error.cc +167 -61
  361. data/src/core/lib/iomgr/error.h +218 -107
  362. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  363. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  364. data/src/core/lib/iomgr/error_internal.h +5 -1
  365. data/src/core/lib/iomgr/ev_apple.cc +16 -13
  366. data/src/core/lib/iomgr/ev_epoll1_linux.cc +22 -22
  367. data/src/core/lib/iomgr/ev_epollex_linux.cc +52 -49
  368. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  369. data/src/core/lib/iomgr/ev_posix.cc +12 -11
  370. data/src/core/lib/iomgr/ev_posix.h +9 -9
  371. data/src/core/lib/iomgr/exec_ctx.cc +10 -6
  372. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  373. data/src/core/lib/iomgr/executor.cc +8 -8
  374. data/src/core/lib/iomgr/executor.h +2 -2
  375. data/src/core/lib/iomgr/iomgr.cc +1 -1
  376. data/src/core/lib/iomgr/iomgr.h +1 -1
  377. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  378. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  379. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  380. data/src/core/lib/iomgr/iomgr_posix.cc +1 -2
  381. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -3
  382. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  383. data/src/core/lib/iomgr/load_file.cc +4 -4
  384. data/src/core/lib/iomgr/load_file.h +2 -2
  385. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  386. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  387. data/src/core/lib/iomgr/pollset.cc +5 -5
  388. data/src/core/lib/iomgr/pollset.h +9 -9
  389. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  390. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  391. data/src/core/lib/iomgr/port.h +1 -1
  392. data/src/core/lib/iomgr/python_util.h +1 -1
  393. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  394. data/src/core/lib/iomgr/resolve_address.h +6 -6
  395. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  396. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  397. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  398. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  399. data/src/core/lib/iomgr/resource_quota.cc +12 -11
  400. data/src/core/lib/iomgr/socket_utils_common_posix.cc +23 -20
  401. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  402. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  403. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  404. data/src/core/lib/iomgr/tcp_client_posix.cc +16 -18
  405. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  406. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  407. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  408. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  409. data/src/core/lib/iomgr/tcp_posix.cc +41 -42
  410. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  411. data/src/core/lib/iomgr/tcp_server.h +12 -11
  412. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  413. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  414. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  415. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  416. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  417. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  418. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  419. data/src/core/lib/iomgr/tcp_uv.cc +27 -25
  420. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  421. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  422. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  423. data/src/core/lib/iomgr/timer_custom.h +1 -1
  424. data/src/core/lib/iomgr/timer_generic.cc +8 -8
  425. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  426. data/src/core/lib/iomgr/udp_server.cc +21 -20
  427. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  428. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  429. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  430. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  431. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  432. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  433. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  434. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  435. data/src/core/lib/iomgr/work_serializer.h +17 -1
  436. data/src/core/lib/json/json.h +1 -1
  437. data/src/core/lib/json/json_reader.cc +4 -4
  438. data/src/core/lib/matchers/matchers.cc +339 -0
  439. data/src/core/lib/matchers/matchers.h +160 -0
  440. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  441. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  442. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  443. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  444. data/src/core/lib/security/credentials/credentials.h +4 -3
  445. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -14
  446. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  447. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  448. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  449. data/src/core/lib/security/credentials/external/external_account_credentials.cc +17 -14
  450. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  451. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +6 -5
  452. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  453. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +9 -9
  454. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  455. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -3
  456. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  457. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +16 -15
  458. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  459. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  460. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  461. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -5
  462. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  463. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  464. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -8
  465. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  466. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  467. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  468. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  469. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  470. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  471. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
  472. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  473. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  474. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  475. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  476. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  477. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  478. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  479. data/src/core/lib/security/credentials/xds/xds_credentials.cc +130 -61
  480. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  481. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  482. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  483. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  484. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  485. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  486. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  487. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  488. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  489. data/src/core/lib/security/security_connector/ssl_utils.cc +31 -8
  490. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  491. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +88 -74
  492. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  493. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  494. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  495. data/src/core/lib/security/transport/security_handshaker.cc +66 -37
  496. data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
  497. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  498. data/src/core/lib/security/transport/tsi_error.h +2 -1
  499. data/src/core/lib/security/util/json_util.cc +2 -2
  500. data/src/core/lib/security/util/json_util.h +1 -1
  501. data/src/core/lib/slice/slice_intern.cc +5 -6
  502. data/src/core/lib/surface/call.cc +46 -45
  503. data/src/core/lib/surface/call.h +2 -2
  504. data/src/core/lib/surface/channel.cc +6 -6
  505. data/src/core/lib/surface/channel.h +6 -5
  506. data/src/core/lib/surface/channel_ping.cc +1 -1
  507. data/src/core/lib/surface/completion_queue.cc +46 -47
  508. data/src/core/lib/surface/completion_queue.h +2 -1
  509. data/src/core/lib/surface/init.cc +13 -15
  510. data/src/core/lib/surface/lame_client.cc +43 -24
  511. data/src/core/lib/surface/lame_client.h +4 -3
  512. data/src/core/lib/surface/server.cc +71 -58
  513. data/src/core/lib/surface/server.h +91 -28
  514. data/src/core/lib/surface/validate_metadata.cc +7 -7
  515. data/src/core/lib/surface/validate_metadata.h +3 -2
  516. data/src/core/lib/surface/version.cc +4 -2
  517. data/src/core/lib/transport/byte_stream.cc +5 -5
  518. data/src/core/lib/transport/byte_stream.h +8 -8
  519. data/src/core/lib/transport/connectivity_state.cc +1 -1
  520. data/src/core/lib/transport/error_utils.cc +19 -8
  521. data/src/core/lib/transport/error_utils.h +11 -5
  522. data/src/core/lib/transport/metadata.cc +6 -2
  523. data/src/core/lib/transport/metadata_batch.cc +64 -37
  524. data/src/core/lib/transport/metadata_batch.h +33 -18
  525. data/src/core/lib/transport/transport.cc +4 -3
  526. data/src/core/lib/transport/transport.h +4 -4
  527. data/src/core/lib/transport/transport_op_string.cc +5 -5
  528. data/src/core/plugin_registry/grpc_plugin_registry.cc +12 -0
  529. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  530. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -28
  531. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -27
  532. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  533. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  534. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  535. data/src/core/tsi/fake_transport_security.cc +11 -2
  536. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  537. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  538. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
  539. data/src/core/tsi/ssl_transport_security.cc +32 -17
  540. data/src/core/tsi/ssl_transport_security.h +3 -7
  541. data/src/ruby/bin/math_services_pb.rb +1 -1
  542. data/src/ruby/ext/grpc/extconf.rb +9 -1
  543. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  544. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  545. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  546. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  547. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  548. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  549. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  550. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
  551. data/src/ruby/ext/grpc/rb_server.c +13 -1
  552. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  553. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  554. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  555. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  556. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  557. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  558. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  559. data/src/ruby/lib/grpc/version.rb +1 -1
  560. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  561. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  562. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  563. data/src/ruby/spec/call_spec.rb +1 -1
  564. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  565. data/src/ruby/spec/channel_spec.rb +17 -6
  566. data/src/ruby/spec/client_auth_spec.rb +27 -1
  567. data/src/ruby/spec/errors_spec.rb +1 -1
  568. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  569. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  570. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  571. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  572. data/src/ruby/spec/server_spec.rb +22 -0
  573. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  574. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  575. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  576. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  577. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  578. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  579. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  580. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  581. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  582. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  583. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  584. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  585. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  586. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  587. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  588. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  589. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  590. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  591. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  592. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  593. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  594. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  595. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  596. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  597. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  598. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  599. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  600. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  601. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  602. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  603. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  604. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  605. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  606. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  607. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  608. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  609. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  610. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  611. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  612. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  613. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  614. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  615. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  616. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  617. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  618. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  619. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  620. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  621. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  622. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  623. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  624. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  625. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  626. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  627. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  628. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  629. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  630. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  631. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  632. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  633. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  634. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  635. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  636. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  637. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  638. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  639. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  640. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  641. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  642. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  643. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  644. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  645. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  646. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  647. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  648. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  649. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  650. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  651. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  652. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  653. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  654. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  655. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  656. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  657. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  658. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  659. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  660. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  661. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  662. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  663. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  664. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  665. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  666. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  667. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  668. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  669. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  670. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  671. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  672. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  673. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  674. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  675. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  676. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  677. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  678. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  679. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  680. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  681. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  682. data/third_party/boringssl-with-bazel/err_data.c +742 -724
  683. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  684. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  685. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  686. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  687. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +4 -11
  688. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  689. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
  690. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  691. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -16
  692. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +35 -0
  693. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  694. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +40 -86
  695. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +6 -17
  696. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  697. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  698. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  699. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  700. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  701. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  702. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  703. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  704. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  705. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  706. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  707. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  708. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  709. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  710. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  711. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  712. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  713. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  714. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  715. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  716. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  717. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  718. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  719. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +10 -2
  720. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  721. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  722. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  723. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  724. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  725. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  726. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  727. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  728. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  729. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  730. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  731. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  732. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  733. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  734. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  735. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  736. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  737. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  738. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  739. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  740. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  741. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -14
  742. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
  743. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  744. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +161 -9
  745. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  746. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  747. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  748. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +121 -71
  749. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +71 -41
  750. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  752. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  753. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  754. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  755. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  756. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  757. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  758. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → rand_extra/passive.c} +16 -11
  759. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  760. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  761. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  762. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  763. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  764. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  765. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  766. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +4 -31
  767. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  768. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  769. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +17 -24
  770. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  771. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  772. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  773. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  774. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  775. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +6 -2
  776. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  777. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  778. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  779. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  780. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  781. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  782. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
  783. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  784. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  785. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +4 -6
  786. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  787. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  788. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  789. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  790. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  791. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  792. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -6
  793. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  794. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  795. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
  796. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +737 -551
  797. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  798. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -5
  799. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  800. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  801. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +15 -4
  802. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  803. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  804. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  805. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  806. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  807. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  808. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  809. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +13 -40
  810. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  811. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  812. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  813. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  814. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  815. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  816. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +239 -37
  817. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +28 -8
  818. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +702 -219
  819. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +141 -36
  820. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  821. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  822. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  823. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +47 -15
  824. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  825. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +159 -13
  826. data/third_party/boringssl-with-bazel/src/ssl/internal.h +253 -58
  827. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  828. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  829. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  830. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  831. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  832. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +90 -25
  833. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
  834. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  835. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  836. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +450 -104
  837. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  838. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
  839. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  840. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +232 -85
  841. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  842. data/third_party/xxhash/xxhash.h +5443 -0
  843. metadata +167 -88
  844. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  845. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  846. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  847. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  848. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  849. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  850. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  851. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  852. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  853. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  854. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  855. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  856. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  857. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  858. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  859. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  860. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  861. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  862. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  863. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  864. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  865. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  866. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  867. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  868. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  869. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  870. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  871. data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
  872. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  873. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  874. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  875. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  876. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  877. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  878. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  879. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  880. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  881. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  882. data/third_party/upb/upb/json_decode.c +0 -1443
  883. data/third_party/upb/upb/json_decode.h +0 -23
  884. data/third_party/upb/upb/json_encode.c +0 -713
  885. data/third_party/upb/upb/json_encode.h +0 -36
@@ -21,4 +21,9 @@
21
21
  // Set by xds_cluster_impl LB policy and used by GoogleDefaultCredentials.
22
22
  #define GRPC_ARG_XDS_CLUSTER_NAME "grpc.internal.xds_cluster_name"
23
23
 
24
+ // For testing purpose, this channel arg indicating xds_cluster_resolver LB
25
+ // policy should use the fake DNS resolver to resolve logical dns cluster.
26
+ #define GRPC_ARG_XDS_LOGICAL_DNS_CLUSTER_FAKE_RESOLVER_RESPONSE_GENERATOR \
27
+ "grpc.internal.xds_logical_dns_cluster_fake_resolver_response_generator"
28
+
24
29
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_CHANNEL_ARGS_H
@@ -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:
@@ -145,9 +136,7 @@ class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
145
136
  const absl::optional<std::string>& lrs_load_reporting_server_name() const {
146
137
  return lrs_load_reporting_server_name_;
147
138
  };
148
- const uint32_t max_concurrent_requests() const {
149
- return max_concurrent_requests_;
150
- }
139
+ uint32_t max_concurrent_requests() const { return max_concurrent_requests_; }
151
140
  RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config() const {
152
141
  return drop_config_;
153
142
  }
@@ -210,7 +199,6 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
210
199
 
211
200
  private:
212
201
  RefCountedPtr<CircuitBreakerCallCounterMap::CallCounter> call_counter_;
213
- bool xds_circuit_breaking_enabled_;
214
202
  uint32_t max_concurrent_requests_;
215
203
  RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
216
204
  RefCountedPtr<XdsClusterDropStats> drop_stats_;
@@ -279,7 +267,6 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
279
267
  XdsClusterImplLb::Picker::Picker(XdsClusterImplLb* xds_cluster_impl_lb,
280
268
  RefCountedPtr<RefCountedPicker> picker)
281
269
  : call_counter_(xds_cluster_impl_lb->call_counter_),
282
- xds_circuit_breaking_enabled_(XdsCircuitBreakingEnabled()),
283
270
  max_concurrent_requests_(
284
271
  xds_cluster_impl_lb->config_->max_concurrent_requests()),
285
272
  drop_config_(xds_cluster_impl_lb->config_->drop_config()),
@@ -302,17 +289,15 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
302
289
  return result;
303
290
  }
304
291
  // Handle circuit breaking.
305
- uint32_t current = call_counter_->Increment();
306
- if (xds_circuit_breaking_enabled_) {
307
- // Check and see if we exceeded the max concurrent requests count.
308
- if (current >= max_concurrent_requests_) {
309
- call_counter_->Decrement();
310
- if (drop_stats_ != nullptr) drop_stats_->AddUncategorizedDrops();
311
- PickResult result;
312
- result.type = PickResult::PICK_COMPLETE;
313
- return result;
314
- }
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;
315
299
  }
300
+ call_counter_->Increment();
316
301
  // If we're not dropping the call, we should always have a child picker.
317
302
  if (picker_ == nullptr) { // Should never happen.
318
303
  PickResult result;
@@ -346,7 +331,7 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
346
331
  // Note: This callback does not run in either the control plane
347
332
  // work serializer or in the data plane mutex.
348
333
  [locality_stats, original_recv_trailing_metadata_ready, call_counter](
349
- grpc_error* error, MetadataInterface* metadata,
334
+ grpc_error_handle error, MetadataInterface* metadata,
350
335
  CallState* call_state) {
351
336
  // Record call completion for load reporting.
352
337
  if (locality_stats != nullptr) {
@@ -611,14 +596,12 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
611
596
  public:
612
597
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
613
598
  LoadBalancingPolicy::Args args) const override {
614
- grpc_error* error = GRPC_ERROR_NONE;
615
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
616
- if (error != GRPC_ERROR_NONE) {
617
- gpr_log(
618
- GPR_ERROR,
619
- "cannot get XdsClient to instantiate xds_cluster_impl LB policy: %s",
620
- grpc_error_string(error));
621
- 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");
622
605
  return nullptr;
623
606
  }
624
607
  return MakeOrphanable<XdsClusterImplLb>(std::move(xds_client),
@@ -628,7 +611,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
628
611
  const char* name() const override { return kXdsClusterImpl; }
629
612
 
630
613
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
631
- const Json& json, grpc_error** error) const override {
614
+ const Json& json, grpc_error_handle* error) const override {
632
615
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
633
616
  if (json.type() == Json::Type::JSON_NULL) {
634
617
  // This policy was configured in the deprecated loadBalancingPolicy
@@ -639,7 +622,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
639
622
  "config instead.");
640
623
  return nullptr;
641
624
  }
642
- std::vector<grpc_error*> error_list;
625
+ std::vector<grpc_error_handle> error_list;
643
626
  // Child policy.
644
627
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
645
628
  auto it = json.object_value().find("childPolicy");
@@ -647,12 +630,12 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
647
630
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
648
631
  "field:childPolicy error:required field missing"));
649
632
  } else {
650
- grpc_error* parse_error = GRPC_ERROR_NONE;
633
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
651
634
  child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
652
635
  it->second, &parse_error);
653
636
  if (child_policy == nullptr) {
654
637
  GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
655
- std::vector<grpc_error*> child_errors;
638
+ std::vector<grpc_error_handle> child_errors;
656
639
  child_errors.push_back(parse_error);
657
640
  error_list.push_back(
658
641
  GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
@@ -711,7 +694,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
711
694
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
712
695
  "field:dropCategories error:required field missing"));
713
696
  } else {
714
- std::vector<grpc_error*> child_errors =
697
+ std::vector<grpc_error_handle> child_errors =
715
698
  ParseDropCategories(it->second, drop_config.get());
716
699
  if (!child_errors.empty()) {
717
700
  error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
@@ -730,9 +713,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
730
713
  }
731
714
 
732
715
  private:
733
- static std::vector<grpc_error*> ParseDropCategories(
716
+ static std::vector<grpc_error_handle> ParseDropCategories(
734
717
  const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
735
- std::vector<grpc_error*> error_list;
718
+ std::vector<grpc_error_handle> error_list;
736
719
  if (json.type() != Json::Type::ARRAY) {
737
720
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
738
721
  "dropCategories field is not an array"));
@@ -740,10 +723,10 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
740
723
  }
741
724
  for (size_t i = 0; i < json.array_value().size(); ++i) {
742
725
  const Json& entry = json.array_value()[i];
743
- std::vector<grpc_error*> child_errors =
726
+ std::vector<grpc_error_handle> child_errors =
744
727
  ParseDropCategory(entry, drop_config);
745
728
  if (!child_errors.empty()) {
746
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
729
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
747
730
  absl::StrCat("errors parsing index ", i).c_str());
748
731
  for (size_t i = 0; i < child_errors.size(); ++i) {
749
732
  error = grpc_error_add_child(error, child_errors[i]);
@@ -754,9 +737,9 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
754
737
  return error_list;
755
738
  }
756
739
 
757
- static std::vector<grpc_error*> ParseDropCategory(
740
+ static std::vector<grpc_error_handle> ParseDropCategory(
758
741
  const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
759
- std::vector<grpc_error*> error_list;
742
+ std::vector<grpc_error_handle> error_list;
760
743
  if (json.type() != Json::Type::OBJECT) {
761
744
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
762
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));
@@ -29,8 +29,10 @@
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
31
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
32
+ #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
32
33
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
33
34
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
35
+ #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
34
36
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
35
37
  #include "src/core/ext/filters/client_channel/server_address.h"
36
38
  #include "src/core/ext/xds/xds_channel_args.h"
@@ -80,39 +82,33 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
80
82
  };
81
83
 
82
84
  XdsClusterResolverLbConfig(
83
- std::vector<DiscoveryMechanism> discovery_mechanisms,
84
- Json locality_picking_policy, Json endpoint_picking_policy)
85
+ std::vector<DiscoveryMechanism> discovery_mechanisms, Json xds_lb_policy)
85
86
  : discovery_mechanisms_(std::move(discovery_mechanisms)),
86
- locality_picking_policy_(std::move(locality_picking_policy)),
87
- endpoint_picking_policy_(std::move(endpoint_picking_policy)) {}
87
+ xds_lb_policy_(std::move(xds_lb_policy)) {}
88
88
 
89
89
  const char* name() const override { return kXdsClusterResolver; }
90
-
91
90
  const std::vector<DiscoveryMechanism>& discovery_mechanisms() const {
92
91
  return discovery_mechanisms_;
93
92
  }
94
- const Json& locality_picking_policy() const {
95
- return locality_picking_policy_;
96
- }
97
- const Json& endpoint_picking_policy() const {
98
- return endpoint_picking_policy_;
99
- }
93
+
94
+ const Json& xds_lb_policy() const { return xds_lb_policy_; }
100
95
 
101
96
  private:
102
97
  std::vector<DiscoveryMechanism> discovery_mechanisms_;
103
- Json locality_picking_policy_;
104
- Json endpoint_picking_policy_;
98
+ Json xds_lb_policy_;
105
99
  };
106
100
 
107
101
  // Xds Cluster Resolver LB policy.
108
102
  class XdsClusterResolverLb : public LoadBalancingPolicy {
109
103
  public:
110
- XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args);
104
+ XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args,
105
+ std::string server_name, bool is_xds_uri);
111
106
 
112
107
  const char* name() const override { return kXdsClusterResolver; }
113
108
 
114
109
  void UpdateLocked(UpdateArgs args) override;
115
110
  void ResetBackoffLocked() override;
111
+ void ExitIdleLocked() override;
116
112
 
117
113
  private:
118
114
  // Discovery Mechanism Base class
@@ -132,9 +128,11 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
132
128
  : parent_(std::move(xds_cluster_resolver_lb)), index_(index) {}
133
129
  virtual void Start() = 0;
134
130
  void Orphan() override = 0;
131
+ virtual Json::Array override_child_policy() = 0;
132
+ virtual bool disable_reresolution() = 0;
135
133
 
136
134
  // Caller must ensure that config_ is set before calling.
137
- const absl::string_view GetXdsClusterResolverResourceName() const {
135
+ absl::string_view GetXdsClusterResolverResourceName() const {
138
136
  if (!parent_->is_xds_uri_) return parent_->server_name_;
139
137
  if (!parent_->config_->discovery_mechanisms()[index_]
140
138
  .eds_service_name.empty()) {
@@ -172,6 +170,8 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
172
170
  : DiscoveryMechanism(std::move(xds_cluster_resolver_lb), index) {}
173
171
  void Start() override;
174
172
  void Orphan() override;
173
+ Json::Array override_child_policy() override { return Json::Array{}; }
174
+ bool disable_reresolution() override { return true; }
175
175
 
176
176
  private:
177
177
  class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
@@ -185,7 +185,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
185
185
  void OnEndpointChanged(XdsApi::EdsUpdate update) override {
186
186
  new Notifier(discovery_mechanism_, std::move(update));
187
187
  }
188
- void OnError(grpc_error* error) override {
188
+ void OnError(grpc_error_handle error) override {
189
189
  new Notifier(discovery_mechanism_, error);
190
190
  }
191
191
  void OnResourceDoesNotExist() override {
@@ -198,7 +198,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
198
198
  Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
199
199
  XdsApi::EdsUpdate update);
200
200
  Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
201
- grpc_error* error);
201
+ grpc_error_handle error);
202
202
  explicit Notifier(
203
203
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism);
204
204
  ~Notifier() { discovery_mechanism_.reset(DEBUG_LOCATION, "Notifier"); }
@@ -206,8 +206,8 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
206
206
  private:
207
207
  enum Type { kUpdate, kError, kDoesNotExist };
208
208
 
209
- static void RunInExecCtx(void* arg, grpc_error* error);
210
- void RunInWorkSerializer(grpc_error* error);
209
+ static void RunInExecCtx(void* arg, grpc_error_handle error);
210
+ void RunInWorkSerializer(grpc_error_handle error);
211
211
 
212
212
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism_;
213
213
  grpc_closure closure_;
@@ -230,6 +230,14 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
230
230
  : DiscoveryMechanism(std::move(xds_cluster_resolver_lb), index) {}
231
231
  void Start() override;
232
232
  void Orphan() override;
233
+ Json::Array override_child_policy() override {
234
+ return Json::Array{
235
+ Json::Object{
236
+ {"pick_first", Json::Object()},
237
+ },
238
+ };
239
+ }
240
+ bool disable_reresolution() override { return false; };
233
241
 
234
242
  private:
235
243
  class ResolverResultHandler : public Resolver::ResultHandler {
@@ -242,7 +250,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
242
250
 
243
251
  void ReturnResult(Resolver::Result result) override;
244
252
 
245
- void ReturnError(grpc_error* error) override;
253
+ void ReturnError(grpc_error_handle error) override;
246
254
 
247
255
  private:
248
256
  RefCountedPtr<LogicalDNSDiscoveryMechanism> discovery_mechanism_;
@@ -296,7 +304,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
296
304
  void ShutdownLocked() override;
297
305
 
298
306
  void OnEndpointChanged(size_t index, XdsApi::EdsUpdate update);
299
- void OnError(size_t index, grpc_error* error);
307
+ void OnError(size_t index, grpc_error_handle error);
300
308
  void OnResourceDoesNotExist(size_t index);
301
309
 
302
310
  void MaybeDestroyChildPolicyLocked();
@@ -310,6 +318,9 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
310
318
  grpc_channel_args* CreateChildPolicyArgsLocked(
311
319
  const grpc_channel_args* args_in);
312
320
 
321
+ // The xds client and endpoint watcher.
322
+ RefCountedPtr<XdsClient> xds_client_;
323
+
313
324
  // Server name from target URI.
314
325
  std::string server_name_;
315
326
  bool is_xds_uri_;
@@ -321,9 +332,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
321
332
  // Internal state.
322
333
  bool shutting_down_ = false;
323
334
 
324
- // The xds client and endpoint watcher.
325
- RefCountedPtr<XdsClient> xds_client_;
326
-
327
335
  // Vector of discovery mechansism entries in priority order.
328
336
  std::vector<DiscoveryMechanismEntry> discovery_mechanisms_;
329
337
 
@@ -422,7 +430,7 @@ XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
422
430
  XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
423
431
  Notifier(RefCountedPtr<XdsClusterResolverLb::EdsDiscoveryMechanism>
424
432
  discovery_mechanism,
425
- grpc_error* error)
433
+ grpc_error_handle error)
426
434
  : discovery_mechanism_(std::move(discovery_mechanism)), type_(kError) {
427
435
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
428
436
  ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
@@ -438,7 +446,7 @@ XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
438
446
  }
439
447
 
440
448
  void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
441
- RunInExecCtx(void* arg, grpc_error* error) {
449
+ RunInExecCtx(void* arg, grpc_error_handle error) {
442
450
  Notifier* self = static_cast<Notifier*>(arg);
443
451
  GRPC_ERROR_REF(error);
444
452
  self->discovery_mechanism_->parent()->work_serializer()->Run(
@@ -446,7 +454,7 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
446
454
  }
447
455
 
448
456
  void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
449
- RunInWorkSerializer(grpc_error* error) {
457
+ RunInWorkSerializer(grpc_error_handle error) {
450
458
  switch (type_) {
451
459
  case kUpdate:
452
460
  discovery_mechanism_->parent()->OnEndpointChanged(
@@ -469,11 +477,26 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
469
477
  //
470
478
 
471
479
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
480
+ std::string target = parent()->server_name_;
481
+ grpc_channel_args* args = nullptr;
482
+ FakeResolverResponseGenerator* fake_resolver_response_generator =
483
+ grpc_channel_args_find_pointer<FakeResolverResponseGenerator>(
484
+ parent()->args_,
485
+ GRPC_ARG_XDS_LOGICAL_DNS_CLUSTER_FAKE_RESOLVER_RESPONSE_GENERATOR);
486
+ if (fake_resolver_response_generator != nullptr) {
487
+ target = absl::StrCat("fake:", target);
488
+ grpc_arg new_arg = FakeResolverResponseGenerator::MakeChannelArg(
489
+ fake_resolver_response_generator);
490
+ args = grpc_channel_args_copy_and_add(parent()->args_, &new_arg, 1);
491
+ } else {
492
+ args = grpc_channel_args_copy(parent()->args_);
493
+ }
472
494
  resolver_ = ResolverRegistry::CreateResolver(
473
- parent()->server_name_.c_str(), parent()->args_,
474
- grpc_pollset_set_create(), parent()->work_serializer(),
495
+ target.c_str(), args, parent()->interested_parties(),
496
+ parent()->work_serializer(),
475
497
  absl::make_unique<ResolverResultHandler>(
476
498
  Ref(DEBUG_LOCATION, "LogicalDNSDiscoveryMechanism")));
499
+ grpc_channel_args_destroy(args);
477
500
  if (resolver_ == nullptr) {
478
501
  parent()->OnResourceDoesNotExist(index());
479
502
  return;
@@ -509,15 +532,17 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
509
532
  XdsApi::EdsUpdate update;
510
533
  XdsApi::EdsUpdate::Priority::Locality locality;
511
534
  locality.name = MakeRefCounted<XdsLocalityName>("", "", "");
535
+ locality.lb_weight = 1;
512
536
  locality.endpoints = std::move(result.addresses);
513
- update.priorities[0].localities.emplace(locality.name.get(),
514
- std::move(locality));
537
+ XdsApi::EdsUpdate::Priority priority;
538
+ priority.localities.emplace(locality.name.get(), std::move(locality));
539
+ update.priorities.emplace_back(std::move(priority));
515
540
  discovery_mechanism_->parent()->OnEndpointChanged(
516
541
  discovery_mechanism_->index(), std::move(update));
517
542
  }
518
543
 
519
544
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
520
- ReturnError(grpc_error* error) {
545
+ ReturnError(grpc_error_handle error) {
521
546
  discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(), error);
522
547
  }
523
548
 
@@ -526,26 +551,17 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
526
551
  //
527
552
 
528
553
  XdsClusterResolverLb::XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client,
529
- Args args)
530
- : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
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) {
531
560
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
532
561
  gpr_log(GPR_INFO,
533
- "[xds_cluster_resolver_lb %p] created -- using xds client %p", this,
534
- xds_client_.get());
535
- }
536
- // Record server name.
537
- const char* server_uri =
538
- grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
539
- GPR_ASSERT(server_uri != nullptr);
540
- absl::StatusOr<URI> uri = URI::Parse(server_uri);
541
- GPR_ASSERT(uri.ok() && !uri->path().empty());
542
- server_name_ = std::string(absl::StripPrefix(uri->path(), "/"));
543
- is_xds_uri_ = uri->scheme() == "xds";
544
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
545
- gpr_log(GPR_INFO,
546
- "[xds_cluster_resolver_lb %p] server name from channel "
547
- "(is_xds_uri=%d): %s",
548
- 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_);
549
565
  }
550
566
  // EDS-only flow.
551
567
  if (!is_xds_uri_) {
@@ -655,6 +671,10 @@ void XdsClusterResolverLb::ResetBackoffLocked() {
655
671
  }
656
672
  }
657
673
 
674
+ void XdsClusterResolverLb::ExitIdleLocked() {
675
+ if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
676
+ }
677
+
658
678
  void XdsClusterResolverLb::OnEndpointChanged(size_t index,
659
679
  XdsApi::EdsUpdate update) {
660
680
  if (shutting_down_) return;
@@ -673,10 +693,17 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
673
693
  discovery_mechanisms_[index].pending_priority_list =
674
694
  std::move(update.priorities);
675
695
  discovery_mechanisms_[index].first_update_received = true;
676
- if (!discovery_mechanisms_[0].first_update_received) {
677
- // We have not yet received an update for index 0, so wait until that
678
- // happens to create the child policy.
679
- return;
696
+ // If any discovery mechanism has not received its first update,
697
+ // wait until that happens before creating the child policy.
698
+ // TODO(roth): If this becomes problematic in the future (e.g., a
699
+ // secondary discovery mechanism delaying us from starting up at all),
700
+ // we can consider some sort of optimization whereby we can create the
701
+ // priority policy with only a subset of its children. But we need to
702
+ // make sure not to get into a situation where the priority policy
703
+ // will put the channel into TRANSIENT_FAILURE instead of CONNECTING
704
+ // while we're still waiting for the other discovery mechanism(s).
705
+ for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
706
+ if (!mechanism.first_update_received) return;
680
707
  }
681
708
  // Construct new priority list.
682
709
  XdsApi::EdsUpdate::PriorityList priority_list;
@@ -703,11 +730,11 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
703
730
  UpdatePriorityList(std::move(priority_list));
704
731
  }
705
732
 
706
- void XdsClusterResolverLb::OnError(size_t index, grpc_error* error) {
733
+ void XdsClusterResolverLb::OnError(size_t index, grpc_error_handle error) {
707
734
  gpr_log(GPR_ERROR,
708
735
  "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
709
736
  " xds watcher reported error: %s",
710
- this, index, grpc_error_string(error));
737
+ this, index, grpc_error_std_string(error).c_str());
711
738
  GRPC_ERROR_UNREF(error);
712
739
  if (shutting_down_) return;
713
740
  if (!discovery_mechanisms_[index].first_update_received) {
@@ -813,7 +840,11 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
813
840
  MakeHierarchicalPathAttribute(hierarchical_path))
814
841
  .WithAttribute(kXdsLocalityNameAttributeKey,
815
842
  absl::make_unique<XdsLocalityAttribute>(
816
- locality_name->Ref())));
843
+ locality_name->Ref()))
844
+ .WithAttribute(ServerAddressWeightAttribute::
845
+ kServerAddressWeightAttributeKey,
846
+ absl::make_unique<ServerAddressWeightAttribute>(
847
+ locality.lb_weight)));
817
848
  }
818
849
  }
819
850
  }
@@ -825,53 +856,76 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
825
856
  Json::Object priority_children;
826
857
  Json::Array priority_priorities;
827
858
  // Setting up index to iterate through the discovery mechanisms and keeping
828
- // track the discovery_mechanism each prioirty belongs to.
859
+ // track the discovery_mechanism each priority belongs to.
829
860
  size_t discovery_index = 0;
830
861
  // Setting up num_priorities_remaining to track the priorities in each
831
862
  // discovery_mechanism.
832
863
  size_t num_priorities_remaining_in_discovery =
833
864
  discovery_mechanisms_[discovery_index].num_priorities;
834
865
  for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
835
- // Each prioirty in the priority_list_ should correspond to a priority in a
836
- // discovery mechanism in discovery_mechanisms_ (both in the same order).
837
- // Keeping track of the discovery_mechanism each prioirty belongs to.
838
- if (num_priorities_remaining_in_discovery == 0) {
839
- ++discovery_index;
840
- num_priorities_remaining_in_discovery =
841
- discovery_mechanisms_[discovery_index].num_priorities;
866
+ Json child_policy;
867
+ if (!discovery_mechanisms_[discovery_index]
868
+ .discovery_mechanism->override_child_policy()
869
+ .empty()) {
870
+ child_policy = discovery_mechanisms_[discovery_index]
871
+ .discovery_mechanism->override_child_policy();
842
872
  } else {
843
- --num_priorities_remaining_in_discovery;
844
- }
845
- const auto& localities = priority_list_[priority].localities;
846
- Json::Object weighted_targets;
847
- for (const auto& p : localities) {
848
- XdsLocalityName* locality_name = p.first;
849
- const auto& locality = p.second;
850
- // Construct JSON object containing locality name.
851
- Json::Object locality_name_json;
852
- if (!locality_name->region().empty()) {
853
- locality_name_json["region"] = locality_name->region();
854
- }
855
- if (!locality_name->zone().empty()) {
856
- locality_name_json["zone"] = locality_name->zone();
857
- }
858
- if (!locality_name->sub_zone().empty()) {
859
- locality_name_json["subzone"] = locality_name->sub_zone();
873
+ const auto& xds_lb_policy = config_->xds_lb_policy().object_value();
874
+ if (xds_lb_policy.find("ROUND_ROBIN") != xds_lb_policy.end()) {
875
+ const auto& localities = priority_list_[priority].localities;
876
+ Json::Object weighted_targets;
877
+ for (const auto& p : localities) {
878
+ XdsLocalityName* locality_name = p.first;
879
+ const auto& locality = p.second;
880
+ // Construct JSON object containing locality name.
881
+ Json::Object locality_name_json;
882
+ if (!locality_name->region().empty()) {
883
+ locality_name_json["region"] = locality_name->region();
884
+ }
885
+ if (!locality_name->zone().empty()) {
886
+ locality_name_json["zone"] = locality_name->zone();
887
+ }
888
+ if (!locality_name->sub_zone().empty()) {
889
+ locality_name_json["sub_zone"] = locality_name->sub_zone();
890
+ }
891
+ // Add weighted target entry.
892
+ weighted_targets[locality_name->AsHumanReadableString()] =
893
+ Json::Object{
894
+ {"weight", locality.lb_weight},
895
+ {"childPolicy",
896
+ Json::Array{
897
+ Json::Object{
898
+ {"round_robin", Json::Object()},
899
+ },
900
+ }},
901
+ };
902
+ }
903
+ // Construct locality-picking policy.
904
+ // Start with field from our config and add the "targets" field.
905
+ child_policy = Json::Array{
906
+ Json::Object{
907
+ {"weighted_target_experimental",
908
+ Json::Object{
909
+ {"targets", Json::Object()},
910
+ }},
911
+ },
912
+ };
913
+ Json::Object& config =
914
+ *(*child_policy.mutable_array())[0].mutable_object();
915
+ auto it = config.begin();
916
+ GPR_ASSERT(it != config.end());
917
+ (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
918
+ } else {
919
+ auto it = xds_lb_policy.find("RING_HASH");
920
+ GPR_ASSERT(it != xds_lb_policy.end());
921
+ Json::Object ring_hash_experimental_policy = it->second.object_value();
922
+ child_policy = Json::Array{
923
+ Json::Object{
924
+ {"ring_hash_experimental", ring_hash_experimental_policy},
925
+ },
926
+ };
860
927
  }
861
- // Add weighted target entry.
862
- weighted_targets[locality_name->AsHumanReadableString()] = Json::Object{
863
- {"weight", locality.lb_weight},
864
- {"childPolicy", config_->endpoint_picking_policy()},
865
- };
866
928
  }
867
- // Construct locality-picking policy.
868
- // Start with field from our config and add the "targets" field.
869
- Json locality_picking_config = config_->locality_picking_policy();
870
- Json::Object& config =
871
- *(*locality_picking_config.mutable_array())[0].mutable_object();
872
- auto it = config.begin();
873
- GPR_ASSERT(it != config.end());
874
- (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
875
929
  // Wrap it in the drop policy.
876
930
  Json::Array drop_categories;
877
931
  if (discovery_mechanisms_[discovery_index].drop_config != nullptr) {
@@ -887,7 +941,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
887
941
  .discovery_mechanism->GetLrsClusterKey();
888
942
  Json::Object xds_cluster_impl_config = {
889
943
  {"clusterName", std::string(lrs_key.first)},
890
- {"childPolicy", std::move(locality_picking_config)},
944
+ {"childPolicy", std::move(child_policy)},
891
945
  {"dropCategories", std::move(drop_categories)},
892
946
  {"maxConcurrentRequests",
893
947
  config_->discovery_mechanisms()[discovery_index]
@@ -909,10 +963,24 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
909
963
  const size_t child_number = priority_child_numbers_[priority];
910
964
  std::string child_name = absl::StrCat("child", child_number);
911
965
  priority_priorities.emplace_back(child_name);
912
- priority_children[child_name] = Json::Object{
966
+ Json::Object child_config = {
913
967
  {"config", std::move(locality_picking_policy)},
914
- {"ignore_reresolution_requests", true},
915
968
  };
969
+ if (discovery_mechanisms_[discovery_index]
970
+ .discovery_mechanism->disable_reresolution()) {
971
+ child_config["ignore_reresolution_requests"] = true;
972
+ }
973
+ priority_children[child_name] = std::move(child_config);
974
+ // Each priority in the priority_list_ should correspond to a priority in a
975
+ // discovery mechanism in discovery_mechanisms_ (both in the same order).
976
+ // Keeping track of the discovery_mechanism each priority belongs to.
977
+ --num_priorities_remaining_in_discovery;
978
+ while (num_priorities_remaining_in_discovery == 0 &&
979
+ discovery_index < discovery_mechanisms_.size() - 1) {
980
+ ++discovery_index;
981
+ num_priorities_remaining_in_discovery =
982
+ discovery_mechanisms_[discovery_index].num_priorities;
983
+ }
916
984
  }
917
985
  // There should be matching number of priorities in discovery_mechanisms_ and
918
986
  // in priority_list_; therefore at the end of looping through all the
@@ -934,7 +1002,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
934
1002
  "[xds_cluster_resolver_lb %p] generated config for child policy: %s",
935
1003
  this, json_str.c_str());
936
1004
  }
937
- grpc_error* error = GRPC_ERROR_NONE;
1005
+ grpc_error_handle error = GRPC_ERROR_NONE;
938
1006
  RefCountedPtr<LoadBalancingPolicy::Config> config =
939
1007
  LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
940
1008
  if (error != GRPC_ERROR_NONE) {
@@ -944,7 +1012,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
944
1012
  "[xds_cluster_resolver_lb %p] error parsing generated child policy "
945
1013
  "config -- "
946
1014
  "will put channel in TRANSIENT_FAILURE: %s",
947
- this, grpc_error_string(error));
1015
+ this, grpc_error_std_string(error).c_str());
948
1016
  error = grpc_error_set_int(
949
1017
  grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
950
1018
  "xds_cluster_resolver LB policy: error "
@@ -978,10 +1046,14 @@ void XdsClusterResolverLb::UpdateChildPolicyLocked() {
978
1046
 
979
1047
  grpc_channel_args* XdsClusterResolverLb::CreateChildPolicyArgsLocked(
980
1048
  const grpc_channel_args* args) {
981
- // Inhibit client-side health checking, since the balancer does this for us.
982
- grpc_arg new_arg = grpc_channel_arg_integer_create(
983
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1);
984
- 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());
985
1057
  }
986
1058
 
987
1059
  OrphanablePtr<LoadBalancingPolicy>
@@ -1020,24 +1092,45 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1020
1092
  public:
1021
1093
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1022
1094
  LoadBalancingPolicy::Args args) const override {
1023
- grpc_error* error = GRPC_ERROR_NONE;
1024
- RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
1025
- if (error != GRPC_ERROR_NONE) {
1026
- gpr_log(GPR_ERROR,
1027
- "cannot get XdsClient to instantiate xds_cluster_resolver LB "
1028
- "policy: %s",
1029
- grpc_error_string(error));
1030
- GRPC_ERROR_UNREF(error);
1031
- 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
+ }
1032
1125
  }
1033
- return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
1034
- std::move(args));
1126
+ return MakeOrphanable<XdsClusterResolverChildHandler>(
1127
+ std::move(xds_client), std::move(args), server_name, is_xds_uri);
1035
1128
  }
1036
1129
 
1037
1130
  const char* name() const override { return kXdsClusterResolver; }
1038
1131
 
1039
1132
  RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1040
- const Json& json, grpc_error** error) const override {
1133
+ const Json& json, grpc_error_handle* error) const override {
1041
1134
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1042
1135
  if (json.type() == Json::Type::JSON_NULL) {
1043
1136
  // xds_cluster_resolver was mentioned as a policy in the deprecated
@@ -1048,7 +1141,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1048
1141
  "Please use loadBalancingConfig field of service config instead.");
1049
1142
  return nullptr;
1050
1143
  }
1051
- std::vector<grpc_error*> error_list;
1144
+ std::vector<grpc_error_handle> error_list;
1052
1145
  std::vector<XdsClusterResolverLbConfig::DiscoveryMechanism>
1053
1146
  discovery_mechanisms;
1054
1147
  auto it = json.object_value().find("discoveryMechanisms");
@@ -1062,13 +1155,13 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1062
1155
  const Json::Array& array = it->second.array_value();
1063
1156
  for (size_t i = 0; i < array.size(); ++i) {
1064
1157
  XdsClusterResolverLbConfig::DiscoveryMechanism discovery_mechanism;
1065
- std::vector<grpc_error*> discovery_mechanism_errors =
1158
+ std::vector<grpc_error_handle> discovery_mechanism_errors =
1066
1159
  ParseDiscoveryMechanism(array[i], &discovery_mechanism);
1067
1160
  if (!discovery_mechanism_errors.empty()) {
1068
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1161
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1069
1162
  absl::StrCat("field:discovery_mechanism element: ", i, " error")
1070
1163
  .c_str());
1071
- for (grpc_error* discovery_mechanism_error :
1164
+ for (grpc_error_handle discovery_mechanism_error :
1072
1165
  discovery_mechanism_errors) {
1073
1166
  error = grpc_error_add_child(error, discovery_mechanism_error);
1074
1167
  }
@@ -1077,58 +1170,104 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1077
1170
  discovery_mechanisms.emplace_back(std::move(discovery_mechanism));
1078
1171
  }
1079
1172
  }
1080
- // Locality-picking policy.
1081
- Json locality_picking_policy;
1082
- it = json.object_value().find("localityPickingPolicy");
1083
- if (it == json.object_value().end()) {
1084
- locality_picking_policy = Json::Array{
1085
- Json::Object{
1086
- {"weighted_target_experimental",
1087
- Json::Object{
1088
- {"targets", Json::Object()},
1089
- }},
1090
- },
1091
- };
1092
- } else {
1093
- locality_picking_policy = it->second;
1094
- }
1095
- grpc_error* parse_error = GRPC_ERROR_NONE;
1096
- if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1097
- locality_picking_policy, &parse_error) == nullptr) {
1098
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
1099
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1100
- "localityPickingPolicy", &parse_error, 1));
1101
- GRPC_ERROR_UNREF(parse_error);
1102
- }
1103
- // Endpoint-picking policy. Called "childPolicy" for xds policy.
1104
- Json endpoint_picking_policy;
1105
- it = json.object_value().find("endpointPickingPolicy");
1106
- if (it == json.object_value().end()) {
1107
- endpoint_picking_policy = Json::Array{
1108
- Json::Object{
1109
- {"round_robin", Json::Object()},
1110
- },
1111
- };
1112
- } else {
1113
- endpoint_picking_policy = it->second;
1114
- }
1115
- parse_error = GRPC_ERROR_NONE;
1116
- if (LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1117
- endpoint_picking_policy, &parse_error) == nullptr) {
1118
- GPR_DEBUG_ASSERT(parse_error != GRPC_ERROR_NONE);
1119
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1120
- "endpointPickingPolicy", &parse_error, 1));
1121
- GRPC_ERROR_UNREF(parse_error);
1122
- }
1123
1173
  if (discovery_mechanisms.empty()) {
1124
1174
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1125
1175
  "field:discovery_mechanism error:list is missing or empty"));
1126
1176
  }
1177
+ Json xds_lb_policy = Json::Object{
1178
+ {"ROUND_ROBIN", Json::Object()},
1179
+ };
1180
+ it = json.object_value().find("xdsLbPolicy");
1181
+ if (it != json.object_value().end()) {
1182
+ if (it->second.type() != Json::Type::ARRAY) {
1183
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1184
+ "field:xdsLbPolicy error:type should be array"));
1185
+ } else {
1186
+ const Json::Array& array = it->second.array_value();
1187
+ for (size_t i = 0; i < array.size(); ++i) {
1188
+ if (array[i].type() != Json::Type::OBJECT) {
1189
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1190
+ "field:xdsLbPolicy error:element should be of type object"));
1191
+ continue;
1192
+ }
1193
+ const Json::Object& policy = array[i].object_value();
1194
+ auto policy_it = policy.find("ROUND_ROBIN");
1195
+ if (policy_it != policy.end()) {
1196
+ if (policy_it->second.type() != Json::Type::OBJECT) {
1197
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1198
+ "field:ROUND_ROBIN error:type should be object"));
1199
+ }
1200
+ break;
1201
+ }
1202
+ policy_it = policy.find("RING_HASH");
1203
+ if (policy_it != policy.end()) {
1204
+ if (policy_it->second.type() != Json::Type::OBJECT) {
1205
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1206
+ "field:RING_HASH error:type should be object"));
1207
+ continue;
1208
+ }
1209
+ // TODO(donnadionne): Move this to a method in
1210
+ // ring_hash_experimental and call it here.
1211
+ const Json::Object& ring_hash = policy_it->second.object_value();
1212
+ xds_lb_policy = array[i];
1213
+ size_t min_ring_size = 1024;
1214
+ size_t max_ring_size = 8388608;
1215
+ auto ring_hash_it = ring_hash.find("min_ring_size");
1216
+ if (ring_hash_it == ring_hash.end()) {
1217
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1218
+ "field:min_ring_size missing"));
1219
+ } else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
1220
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1221
+ "field:min_ring_size error: should be of "
1222
+ "number"));
1223
+ } else {
1224
+ min_ring_size = gpr_parse_nonnegative_int(
1225
+ ring_hash_it->second.string_value().c_str());
1226
+ }
1227
+ ring_hash_it = ring_hash.find("max_ring_size");
1228
+ if (ring_hash_it == ring_hash.end()) {
1229
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1230
+ "field:max_ring_size missing"));
1231
+ } else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
1232
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1233
+ "field:max_ring_size error: should be of "
1234
+ "number"));
1235
+ } else {
1236
+ max_ring_size = gpr_parse_nonnegative_int(
1237
+ ring_hash_it->second.string_value().c_str());
1238
+ }
1239
+ if (min_ring_size <= 0 || min_ring_size > 8388608 ||
1240
+ max_ring_size <= 0 || max_ring_size > 8388608 ||
1241
+ min_ring_size > max_ring_size) {
1242
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1243
+ "field:max_ring_size and or min_ring_size error: "
1244
+ "values need to be in the range of 1 to 8388608 "
1245
+ "and max_ring_size cannot be smaller than "
1246
+ "min_ring_size"));
1247
+ }
1248
+ ring_hash_it = ring_hash.find("hash_function");
1249
+ if (ring_hash_it == ring_hash.end()) {
1250
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1251
+ "field:hash_function missing"));
1252
+ } else if (ring_hash_it->second.type() != Json::Type::STRING) {
1253
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1254
+ "field:hash_function error: should be a "
1255
+ "string"));
1256
+ } else if (ring_hash_it->second.string_value() != "XX_HASH" &&
1257
+ ring_hash_it->second.string_value() != "MURMUR_HASH_2") {
1258
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1259
+ "field:hash_function error: unsupported "
1260
+ "hash_function"));
1261
+ }
1262
+ break;
1263
+ }
1264
+ }
1265
+ }
1266
+ }
1127
1267
  // Construct config.
1128
1268
  if (error_list.empty()) {
1129
1269
  return MakeRefCounted<XdsClusterResolverLbConfig>(
1130
- std::move(discovery_mechanisms), std::move(locality_picking_policy),
1131
- std::move(endpoint_picking_policy));
1270
+ std::move(discovery_mechanisms), std::move(xds_lb_policy));
1132
1271
  } else {
1133
1272
  *error = GRPC_ERROR_CREATE_FROM_VECTOR(
1134
1273
  "xds_cluster_resolver_experimental LB policy config", &error_list);
@@ -1137,10 +1276,10 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1137
1276
  }
1138
1277
 
1139
1278
  private:
1140
- static std::vector<grpc_error*> ParseDiscoveryMechanism(
1279
+ static std::vector<grpc_error_handle> ParseDiscoveryMechanism(
1141
1280
  const Json& json,
1142
1281
  XdsClusterResolverLbConfig::DiscoveryMechanism* discovery_mechanism) {
1143
- std::vector<grpc_error*> error_list;
1282
+ std::vector<grpc_error_handle> error_list;
1144
1283
  if (json.type() != Json::Type::OBJECT) {
1145
1284
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1146
1285
  "value should be of type object"));
@@ -1217,10 +1356,13 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1217
1356
  class XdsClusterResolverChildHandler : public ChildPolicyHandler {
1218
1357
  public:
1219
1358
  XdsClusterResolverChildHandler(RefCountedPtr<XdsClient> xds_client,
1220
- Args args)
1359
+ Args args, absl::string_view server_name,
1360
+ bool is_xds_uri)
1221
1361
  : ChildPolicyHandler(std::move(args),
1222
1362
  &grpc_lb_xds_cluster_resolver_trace),
1223
- 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) {}
1224
1366
 
1225
1367
  bool ConfigChangeRequiresNewPolicyInstance(
1226
1368
  LoadBalancingPolicy::Config* old_config,
@@ -1236,12 +1378,15 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1236
1378
  }
1237
1379
 
1238
1380
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1239
- const char* name, LoadBalancingPolicy::Args args) const override {
1240
- return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
1381
+ const char* /*name*/, LoadBalancingPolicy::Args args) const override {
1382
+ return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args),
1383
+ server_name_, is_xds_uri_);
1241
1384
  }
1242
1385
 
1243
1386
  private:
1244
1387
  RefCountedPtr<XdsClient> xds_client_;
1388
+ std::string server_name_;
1389
+ bool is_xds_uri_;
1245
1390
  };
1246
1391
  };
1247
1392