grpc 1.43.1 → 1.44.0.pre2

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 (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -34,16 +34,17 @@
34
34
  #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
35
35
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
36
36
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
37
- #include "src/core/ext/filters/client_channel/resolver_registry.h"
38
- #include "src/core/ext/filters/client_channel/server_address.h"
39
37
  #include "src/core/ext/xds/xds_channel_args.h"
40
38
  #include "src/core/ext/xds/xds_client.h"
41
39
  #include "src/core/ext/xds/xds_client_stats.h"
40
+ #include "src/core/ext/xds/xds_endpoint.h"
42
41
  #include "src/core/lib/channel/channel_args.h"
43
42
  #include "src/core/lib/gpr/string.h"
44
43
  #include "src/core/lib/gprpp/orphanable.h"
45
44
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
46
45
  #include "src/core/lib/iomgr/work_serializer.h"
46
+ #include "src/core/lib/resolver/resolver_registry.h"
47
+ #include "src/core/lib/resolver/server_address.h"
47
48
  #include "src/core/lib/transport/error_utils.h"
48
49
  #include "src/core/lib/uri/uri_parser.h"
49
50
 
@@ -105,8 +106,7 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
105
106
  // Xds Cluster Resolver LB policy.
106
107
  class XdsClusterResolverLb : public LoadBalancingPolicy {
107
108
  public:
108
- XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args,
109
- std::string server_name, bool is_xds_uri);
109
+ XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args);
110
110
 
111
111
  const char* name() const override { return kXdsClusterResolver; }
112
112
 
@@ -139,7 +139,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
139
139
  // to use for LRS load reporting. Caller must ensure that config_ is set
140
140
  // before calling.
141
141
  std::pair<absl::string_view, absl::string_view> GetLrsClusterKey() const {
142
- if (!parent_->is_xds_uri_) return {parent_->server_name_, nullptr};
143
142
  return {
144
143
  parent_->config_->discovery_mechanisms()[index_].cluster_name,
145
144
  parent_->config_->discovery_mechanisms()[index_].eds_service_name};
@@ -167,7 +166,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
167
166
  bool disable_reresolution() override { return true; }
168
167
 
169
168
  private:
170
- class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
169
+ class EndpointWatcher : public XdsEndpointResourceType::WatcherInterface {
171
170
  public:
172
171
  explicit EndpointWatcher(
173
172
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism)
@@ -175,13 +174,13 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
175
174
  ~EndpointWatcher() override {
176
175
  discovery_mechanism_.reset(DEBUG_LOCATION, "EndpointWatcher");
177
176
  }
178
- void OnEndpointChanged(XdsApi::EdsUpdate update) override {
177
+ void OnResourceChanged(XdsEndpointResource update) override {
179
178
  Ref().release(); // ref held by callback
180
179
  discovery_mechanism_->parent()->work_serializer()->Run(
181
180
  // TODO(yashykt): When we move to C++14, capture update with
182
181
  // std::move
183
182
  [this, update]() mutable {
184
- OnEndpointChangedHelper(std::move(update));
183
+ OnResourceChangedHelper(std::move(update));
185
184
  Unref();
186
185
  },
187
186
  DEBUG_LOCATION);
@@ -209,7 +208,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
209
208
  // Code accessing protected methods of `DiscoveryMechanism` need to be
210
209
  // in methods of this class rather than in lambdas to work around an MSVC
211
210
  // bug.
212
- void OnEndpointChangedHelper(XdsApi::EdsUpdate update) {
211
+ void OnResourceChangedHelper(XdsEndpointResource update) {
213
212
  discovery_mechanism_->parent()->OnEndpointChanged(
214
213
  discovery_mechanism_->index(), std::move(update));
215
214
  }
@@ -229,7 +228,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
229
228
  friend class EndpointWatcher;
230
229
 
231
230
  absl::string_view GetEdsResourceName() const {
232
- if (!parent()->is_xds_uri_) return parent()->server_name_;
233
231
  if (!parent()
234
232
  ->config_->discovery_mechanisms()[index()]
235
233
  .eds_service_name.empty()) {
@@ -270,9 +268,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
270
268
 
271
269
  ~ResolverResultHandler() override {}
272
270
 
273
- void ReturnResult(Resolver::Result result) override;
274
-
275
- void ReturnError(grpc_error_handle error) override;
271
+ void ReportResult(Resolver::Result result) override;
276
272
 
277
273
  private:
278
274
  RefCountedPtr<LogicalDNSDiscoveryMechanism> discovery_mechanism_;
@@ -292,10 +288,10 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
292
288
  // (The sum of this across all discovery mechanisms should always equal
293
289
  // the number of priorities in priority_list_.)
294
290
  uint32_t num_priorities = 0;
295
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config;
291
+ RefCountedPtr<XdsEndpointResource::DropConfig> drop_config;
296
292
  // Populated only when an update has been delivered by the mechanism
297
293
  // but has not yet been applied to the LB policy's combined priority_list_.
298
- absl::optional<XdsApi::EdsUpdate::PriorityList> pending_priority_list;
294
+ absl::optional<XdsEndpointResource::PriorityList> pending_priority_list;
299
295
  };
300
296
 
301
297
  class Helper : public ChannelControlHelper {
@@ -328,13 +324,13 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
328
324
 
329
325
  void ShutdownLocked() override;
330
326
 
331
- void OnEndpointChanged(size_t index, XdsApi::EdsUpdate update);
327
+ void OnEndpointChanged(size_t index, XdsEndpointResource update);
332
328
  void OnError(size_t index, grpc_error_handle error);
333
329
  void OnResourceDoesNotExist(size_t index);
334
330
 
335
331
  void MaybeDestroyChildPolicyLocked();
336
332
 
337
- void UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list);
333
+ void UpdatePriorityList(XdsEndpointResource::PriorityList priority_list);
338
334
  void UpdateChildPolicyLocked();
339
335
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
340
336
  const grpc_channel_args* args);
@@ -346,10 +342,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
346
342
  // The xds client and endpoint watcher.
347
343
  RefCountedPtr<XdsClient> xds_client_;
348
344
 
349
- // Server name from target URI.
350
- std::string server_name_;
351
- bool is_xds_uri_;
352
-
353
345
  // Current channel args and config from the resolver.
354
346
  const grpc_channel_args* args_ = nullptr;
355
347
  RefCountedPtr<XdsClusterResolverLbConfig> config_;
@@ -361,7 +353,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
361
353
  std::vector<DiscoveryMechanismEntry> discovery_mechanisms_;
362
354
 
363
355
  // The latest data from the endpoint watcher.
364
- XdsApi::EdsUpdate::PriorityList priority_list_;
356
+ XdsEndpointResource::PriorityList priority_list_;
365
357
  // State used to retain child policy names for priority policy.
366
358
  std::vector<size_t /*child_number*/> priority_child_numbers_;
367
359
 
@@ -423,8 +415,8 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::Start() {
423
415
  auto watcher = MakeRefCounted<EndpointWatcher>(
424
416
  Ref(DEBUG_LOCATION, "EdsDiscoveryMechanism"));
425
417
  watcher_ = watcher.get();
426
- parent()->xds_client_->WatchEndpointData(GetEdsResourceName(),
427
- std::move(watcher));
418
+ XdsEndpointResourceType::StartWatch(parent()->xds_client_.get(),
419
+ GetEdsResourceName(), std::move(watcher));
428
420
  }
429
421
 
430
422
  void XdsClusterResolverLb::EdsDiscoveryMechanism::Orphan() {
@@ -434,8 +426,8 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::Orphan() {
434
426
  ":%p cancelling xds watch for %s",
435
427
  parent(), index(), this, std::string(GetEdsResourceName()).c_str());
436
428
  }
437
- parent()->xds_client_->CancelEndpointDataWatch(GetEdsResourceName(),
438
- watcher_);
429
+ XdsEndpointResourceType::CancelWatch(parent()->xds_client_.get(),
430
+ GetEdsResourceName(), watcher_);
439
431
  Unref();
440
432
  }
441
433
 
@@ -496,47 +488,38 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Orphan() {
496
488
  //
497
489
 
498
490
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
499
- ReturnResult(Resolver::Result result) {
500
- // convert result to eds update
501
- XdsApi::EdsUpdate update;
502
- XdsApi::EdsUpdate::Priority::Locality locality;
491
+ ReportResult(Resolver::Result result) {
492
+ if (!result.addresses.ok()) {
493
+ discovery_mechanism_->parent()->OnError(
494
+ discovery_mechanism_->index(),
495
+ absl_status_to_grpc_error(result.addresses.status()));
496
+ return;
497
+ }
498
+ // Convert resolver result to EDS update.
499
+ // TODO(roth): Figure out a way to pass resolution_note through to the
500
+ // child policy.
501
+ XdsEndpointResource update;
502
+ XdsEndpointResource::Priority::Locality locality;
503
503
  locality.name = MakeRefCounted<XdsLocalityName>("", "", "");
504
504
  locality.lb_weight = 1;
505
- locality.endpoints = std::move(result.addresses);
506
- XdsApi::EdsUpdate::Priority priority;
505
+ locality.endpoints = std::move(*result.addresses);
506
+ XdsEndpointResource::Priority priority;
507
507
  priority.localities.emplace(locality.name.get(), std::move(locality));
508
508
  update.priorities.emplace_back(std::move(priority));
509
509
  discovery_mechanism_->parent()->OnEndpointChanged(
510
510
  discovery_mechanism_->index(), std::move(update));
511
511
  }
512
512
 
513
- void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
514
- ReturnError(grpc_error_handle error) {
515
- discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(), error);
516
- }
517
-
518
513
  //
519
514
  // XdsClusterResolverLb public methods
520
515
  //
521
516
 
522
517
  XdsClusterResolverLb::XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client,
523
- Args args, std::string server_name,
524
- bool is_xds_uri)
525
- : LoadBalancingPolicy(std::move(args)),
526
- xds_client_(std::move(xds_client)),
527
- server_name_(std::move(server_name)),
528
- is_xds_uri_(is_xds_uri) {
518
+ Args args)
519
+ : LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
529
520
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
530
- gpr_log(GPR_INFO,
531
- "[xds_cluster_resolver_lb %p] created -- xds_client=%p, "
532
- "server_name=%s, is_xds_uri=%d",
533
- this, xds_client_.get(), server_name_.c_str(), is_xds_uri_);
534
- }
535
- // EDS-only flow.
536
- if (!is_xds_uri_) {
537
- // Couple polling.
538
- grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
539
- interested_parties());
521
+ gpr_log(GPR_INFO, "[xds_cluster_resolver_lb %p] created -- xds_client=%p",
522
+ this, xds_client_.get());
540
523
  }
541
524
  }
542
525
 
@@ -556,11 +539,6 @@ void XdsClusterResolverLb::ShutdownLocked() {
556
539
  shutting_down_ = true;
557
540
  MaybeDestroyChildPolicyLocked();
558
541
  discovery_mechanisms_.clear();
559
- if (!is_xds_uri_) {
560
- // Decouple polling.
561
- grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
562
- interested_parties());
563
- }
564
542
  xds_client_.reset(DEBUG_LOCATION, "XdsClusterResolverLb");
565
543
  // Destroy channel args.
566
544
  grpc_channel_args_destroy(args_);
@@ -617,9 +595,6 @@ void XdsClusterResolverLb::UpdateLocked(UpdateArgs args) {
617
595
  }
618
596
 
619
597
  void XdsClusterResolverLb::ResetBackoffLocked() {
620
- // When the XdsClient is instantiated in the resolver instead of in this
621
- // LB policy, this is done via the resolver, so we don't need to do it here.
622
- if (!is_xds_uri_ && xds_client_ != nullptr) xds_client_->ResetBackoff();
623
598
  if (child_policy_ != nullptr) {
624
599
  child_policy_->ResetBackoffLocked();
625
600
  }
@@ -630,7 +605,7 @@ void XdsClusterResolverLb::ExitIdleLocked() {
630
605
  }
631
606
 
632
607
  void XdsClusterResolverLb::OnEndpointChanged(size_t index,
633
- XdsApi::EdsUpdate update) {
608
+ XdsEndpointResource update) {
634
609
  if (shutting_down_) return;
635
610
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
636
611
  gpr_log(GPR_INFO,
@@ -660,7 +635,7 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
660
635
  if (!mechanism.first_update_received) return;
661
636
  }
662
637
  // Construct new priority list.
663
- XdsApi::EdsUpdate::PriorityList priority_list;
638
+ XdsEndpointResource::PriorityList priority_list;
664
639
  size_t priority_index = 0;
665
640
  for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
666
641
  // If the mechanism has a pending update, use that.
@@ -694,7 +669,7 @@ void XdsClusterResolverLb::OnError(size_t index, grpc_error_handle error) {
694
669
  if (!discovery_mechanisms_[index].first_update_received) {
695
670
  // Call OnEndpointChanged with an empty update just like
696
671
  // OnResourceDoesNotExist.
697
- OnEndpointChanged(index, XdsApi::EdsUpdate());
672
+ OnEndpointChanged(index, XdsEndpointResource());
698
673
  }
699
674
  }
700
675
 
@@ -705,7 +680,7 @@ void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index) {
705
680
  this, index);
706
681
  if (shutting_down_) return;
707
682
  // Call OnEndpointChanged with an empty update.
708
- OnEndpointChanged(index, XdsApi::EdsUpdate());
683
+ OnEndpointChanged(index, XdsEndpointResource());
709
684
  }
710
685
 
711
686
  //
@@ -713,7 +688,7 @@ void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index) {
713
688
  //
714
689
 
715
690
  void XdsClusterResolverLb::UpdatePriorityList(
716
- XdsApi::EdsUpdate::PriorityList priority_list) {
691
+ XdsEndpointResource::PriorityList priority_list) {
717
692
  // Build some maps from locality to child number and the reverse from
718
693
  // the old data in priority_list_ and priority_child_numbers_.
719
694
  std::map<XdsLocalityName*, size_t /*child_number*/, XdsLocalityName::Less>
@@ -1010,7 +985,6 @@ grpc_channel_args* XdsClusterResolverLb::CreateChildPolicyArgsLocked(
1010
985
  grpc_channel_arg_integer_create(
1011
986
  const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
1012
987
  };
1013
- if (!is_xds_uri_) new_args.push_back(xds_client_->MakeChannelArg());
1014
988
  return grpc_channel_args_copy_and_add(args, new_args.data(), new_args.size());
1015
989
  }
1016
990
 
@@ -1050,39 +1024,16 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1050
1024
  public:
1051
1025
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1052
1026
  LoadBalancingPolicy::Args args) const override {
1053
- // Find server name.
1054
- const char* server_uri =
1055
- grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
1056
- GPR_ASSERT(server_uri != nullptr);
1057
- absl::StatusOr<URI> uri = URI::Parse(server_uri);
1058
- GPR_ASSERT(uri.ok() && !uri->path().empty());
1059
- absl::string_view server_name = absl::StripPrefix(uri->path(), "/");
1060
- // Determine if it's an xds URI.
1061
- bool is_xds_uri = uri->scheme() == "xds" || uri->scheme() == "google-c2p";
1062
- // Get XdsClient.
1063
1027
  RefCountedPtr<XdsClient> xds_client =
1064
1028
  XdsClient::GetFromChannelArgs(*args.args);
1065
1029
  if (xds_client == nullptr) {
1066
- if (!is_xds_uri) {
1067
- grpc_error_handle error = GRPC_ERROR_NONE;
1068
- xds_client = XdsClient::GetOrCreate(args.args, &error);
1069
- if (error != GRPC_ERROR_NONE) {
1070
- gpr_log(GPR_ERROR,
1071
- "cannot get or create XdsClient to instantiate "
1072
- "xds_cluster_resolver LB policy: %s",
1073
- grpc_error_std_string(error).c_str());
1074
- GRPC_ERROR_UNREF(error);
1075
- return nullptr;
1076
- }
1077
- } else {
1078
- gpr_log(GPR_ERROR,
1079
- "XdsClient not present in channel args -- cannot instantiate "
1080
- "xds_cluster_resolver LB policy");
1081
- return nullptr;
1082
- }
1030
+ gpr_log(GPR_ERROR,
1031
+ "XdsClient not present in channel args -- cannot instantiate "
1032
+ "xds_cluster_resolver LB policy");
1033
+ return nullptr;
1083
1034
  }
1084
- return MakeOrphanable<XdsClusterResolverChildHandler>(
1085
- std::move(xds_client), std::move(args), server_name, is_xds_uri);
1035
+ return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
1036
+ std::move(args));
1086
1037
  }
1087
1038
 
1088
1039
  const char* name() const override { return kXdsClusterResolver; }
@@ -1267,13 +1218,10 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1267
1218
  class XdsClusterResolverChildHandler : public ChildPolicyHandler {
1268
1219
  public:
1269
1220
  XdsClusterResolverChildHandler(RefCountedPtr<XdsClient> xds_client,
1270
- Args args, absl::string_view server_name,
1271
- bool is_xds_uri)
1221
+ Args args)
1272
1222
  : ChildPolicyHandler(std::move(args),
1273
1223
  &grpc_lb_xds_cluster_resolver_trace),
1274
- xds_client_(std::move(xds_client)),
1275
- server_name_(server_name),
1276
- is_xds_uri_(is_xds_uri) {}
1224
+ xds_client_(std::move(xds_client)) {}
1277
1225
 
1278
1226
  bool ConfigChangeRequiresNewPolicyInstance(
1279
1227
  LoadBalancingPolicy::Config* old_config,
@@ -1290,14 +1238,11 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1290
1238
 
1291
1239
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1292
1240
  const char* /*name*/, LoadBalancingPolicy::Args args) const override {
1293
- return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args),
1294
- server_name_, is_xds_uri_);
1241
+ return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
1295
1242
  }
1296
1243
 
1297
1244
  private:
1298
1245
  RefCountedPtr<XdsClient> xds_client_;
1299
- std::string server_name_;
1300
- bool is_xds_uri_;
1301
1246
  };
1302
1247
  };
1303
1248
 
@@ -54,27 +54,27 @@ void LoadBalancingPolicy::Orphan() {
54
54
  // LoadBalancingPolicy::UpdateArgs
55
55
  //
56
56
 
57
- LoadBalancingPolicy::UpdateArgs::UpdateArgs(const UpdateArgs& other) {
58
- addresses = other.addresses;
59
- config = other.config;
60
- args = grpc_channel_args_copy(other.args);
61
- }
62
-
63
- LoadBalancingPolicy::UpdateArgs::UpdateArgs(UpdateArgs&& other) noexcept {
64
- addresses = std::move(other.addresses);
65
- config = std::move(other.config);
66
- // TODO(roth): Use std::move() once channel args is converted to C++.
67
- args = other.args;
57
+ LoadBalancingPolicy::UpdateArgs::UpdateArgs(const UpdateArgs& other)
58
+ : addresses(other.addresses),
59
+ config(other.config),
60
+ resolution_note(other.resolution_note),
61
+ args(grpc_channel_args_copy(other.args)) {}
62
+
63
+ LoadBalancingPolicy::UpdateArgs::UpdateArgs(UpdateArgs&& other) noexcept
64
+ : addresses(std::move(other.addresses)),
65
+ config(std::move(other.config)),
66
+ resolution_note(std::move(other.resolution_note)),
67
+ // TODO(roth): Use std::move() once channel args is converted to C++.
68
+ args(other.args) {
68
69
  other.args = nullptr;
69
70
  }
70
71
 
71
72
  LoadBalancingPolicy::UpdateArgs& LoadBalancingPolicy::UpdateArgs::operator=(
72
73
  const UpdateArgs& other) {
73
- if (&other == this) {
74
- return *this;
75
- }
74
+ if (&other == this) return *this;
76
75
  addresses = other.addresses;
77
76
  config = other.config;
77
+ resolution_note = other.resolution_note;
78
78
  grpc_channel_args_destroy(args);
79
79
  args = grpc_channel_args_copy(other.args);
80
80
  return *this;
@@ -84,6 +84,7 @@ LoadBalancingPolicy::UpdateArgs& LoadBalancingPolicy::UpdateArgs::operator=(
84
84
  UpdateArgs&& other) noexcept {
85
85
  addresses = std::move(other.addresses);
86
86
  config = std::move(other.config);
87
+ resolution_note = std::move(other.resolution_note);
87
88
  // TODO(roth): Use std::move() once channel args is converted to C++.
88
89
  grpc_channel_args_destroy(args);
89
90
  args = other.args;
@@ -23,15 +23,16 @@
23
23
  #include <iterator>
24
24
 
25
25
  #include "absl/status/status.h"
26
+ #include "absl/status/statusor.h"
26
27
  #include "absl/strings/string_view.h"
27
28
  #include "absl/types/variant.h"
28
29
 
29
- #include "src/core/ext/filters/client_channel/server_address.h"
30
30
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
31
31
  #include "src/core/lib/gprpp/orphanable.h"
32
32
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
33
  #include "src/core/lib/iomgr/polling_entity.h"
34
34
  #include "src/core/lib/iomgr/work_serializer.h"
35
+ #include "src/core/lib/resolver/server_address.h"
35
36
  #include "src/core/lib/transport/connectivity_state.h"
36
37
 
37
38
  namespace grpc_core {
@@ -325,8 +326,20 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
325
326
  /// Data passed to the UpdateLocked() method when new addresses and
326
327
  /// config are available.
327
328
  struct UpdateArgs {
328
- ServerAddressList addresses;
329
+ /// A list of addresses, or an error indicating a failure to obtain the
330
+ /// list of addresses.
331
+ absl::StatusOr<ServerAddressList> addresses;
332
+ /// The LB policy config.
329
333
  RefCountedPtr<Config> config;
334
+ /// A human-readable note providing context about the name resolution that
335
+ /// provided this update. LB policies may wish to include this message
336
+ /// in RPC failure status messages. For example, if the update has an
337
+ /// empty list of addresses, this message might say "no DNS entries
338
+ /// found for <name>".
339
+ std::string resolution_note;
340
+
341
+ // TODO(roth): Before making this a public API, find a better
342
+ // abstraction for representing channel args.
330
343
  const grpc_channel_args* args = nullptr;
331
344
 
332
345
  // TODO(roth): Remove everything below once channel args is
@@ -368,6 +381,9 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
368
381
  /// Updates the policy with new data from the resolver. Will be invoked
369
382
  /// immediately after LB policy is constructed, and then again whenever
370
383
  /// the resolver returns a new result.
384
+ // TODO(roth): Change this to return some indication as to whether the
385
+ // update has been accepted, so that we can indicate to the resolver
386
+ // whether it should go into backoff to retry the resolution.
371
387
  virtual void UpdateLocked(UpdateArgs) = 0; // NOLINT
372
388
 
373
389
  /// Tries to enter a READY connectivity state.
@@ -438,4 +454,4 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
438
454
 
439
455
  } // namespace grpc_core
440
456
 
441
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_H */
457
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_H
@@ -23,11 +23,11 @@
23
23
  #include <grpc/support/alloc.h>
24
24
  #include <grpc/support/string_util.h>
25
25
 
26
- #include "src/core/ext/filters/client_channel/resolver_registry.h"
27
- #include "src/core/ext/filters/client_channel/server_address.h"
28
26
  #include "src/core/lib/address_utils/parse_address.h"
29
27
  #include "src/core/lib/channel/channel_args.h"
30
28
  #include "src/core/lib/gpr/string.h"
29
+ #include "src/core/lib/resolver/resolver_registry.h"
30
+ #include "src/core/lib/resolver/server_address.h"
31
31
 
32
32
  namespace grpc_core {
33
33
  namespace {
@@ -46,7 +46,7 @@ class BinderResolver : public Resolver {
46
46
  result.addresses = std::move(addresses_);
47
47
  result.args = channel_args_;
48
48
  channel_args_ = nullptr;
49
- result_handler_->ReturnResult(std::move(result));
49
+ result_handler_->ReportResult(std::move(result));
50
50
  }
51
51
 
52
52
  void ShutdownLocked() override {}