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
@@ -1,28 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- /** Round Robin Policy.
20
- *
21
- * Before every pick, the \a get_next_ready_subchannel_index_locked function
22
- * returns the p->subchannel_list->subchannels index for next subchannel,
23
- * respecting the relative order of the addresses provided upon creation or
24
- * updates. Note however that updates will start picking from the beginning of
25
- * the updated list. */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
26
16
 
27
17
  #include <grpc/support/port_platform.h>
28
18
 
@@ -41,7 +31,6 @@
41
31
  #include "src/core/lib/gprpp/sync.h"
42
32
  #include "src/core/lib/transport/connectivity_state.h"
43
33
  #include "src/core/lib/transport/error_utils.h"
44
- #include "src/core/lib/transport/static_metadata.h"
45
34
 
46
35
  namespace grpc_core {
47
36
 
@@ -166,15 +155,14 @@ class RoundRobin : public LoadBalancingPolicy {
166
155
 
167
156
  void ShutdownLocked() override;
168
157
 
169
- /** list of subchannels */
158
+ // List of subchannels.
170
159
  OrphanablePtr<RoundRobinSubchannelList> subchannel_list_;
171
- /** Latest version of the subchannel list.
172
- * Subchannel connectivity callbacks will only promote updated subchannel
173
- * lists if they equal \a latest_pending_subchannel_list. In other words,
174
- * racing callbacks that reference outdated subchannel lists won't perform any
175
- * update. */
160
+ // Latest pending subchannel list.
161
+ // When we get an updated address list, we create a new subchannel list
162
+ // for it here, and we wait to swap it into subchannel_list_ until the new
163
+ // list becomes READY.
176
164
  OrphanablePtr<RoundRobinSubchannelList> latest_pending_subchannel_list_;
177
- /** are we shutting down? */
165
+
178
166
  bool shutdown_ = false;
179
167
  };
180
168
 
@@ -303,31 +291,30 @@ void RoundRobin::RoundRobinSubchannelList::
303
291
  RoundRobin* p = static_cast<RoundRobin*>(policy());
304
292
  // Only set connectivity state if this is the current subchannel list.
305
293
  if (p->subchannel_list_.get() != this) return;
306
- /* In priority order. The first rule to match terminates the search (ie, if we
307
- * are on rule n, all previous rules were unfulfilled).
308
- *
309
- * 1) RULE: ANY subchannel is READY => policy is READY.
310
- * CHECK: subchannel_list->num_ready > 0.
311
- *
312
- * 2) RULE: ANY subchannel is CONNECTING => policy is CONNECTING.
313
- * CHECK: sd->curr_connectivity_state == CONNECTING.
314
- *
315
- * 3) RULE: ALL subchannels are TRANSIENT_FAILURE => policy is
316
- * TRANSIENT_FAILURE.
317
- * CHECK: subchannel_list->num_transient_failures ==
318
- * subchannel_list->num_subchannels.
319
- */
294
+ // In priority order. The first rule to match terminates the search (ie, if we
295
+ // are on rule n, all previous rules were unfulfilled).
296
+ //
297
+ // 1) RULE: ANY subchannel is READY => policy is READY.
298
+ // CHECK: subchannel_list->num_ready > 0.
299
+ //
300
+ // 2) RULE: ANY subchannel is CONNECTING => policy is CONNECTING.
301
+ // CHECK: sd->curr_connectivity_state == CONNECTING.
302
+ //
303
+ // 3) RULE: ALL subchannels are TRANSIENT_FAILURE => policy is
304
+ // TRANSIENT_FAILURE.
305
+ // CHECK: subchannel_list->num_transient_failures ==
306
+ // subchannel_list->num_subchannels.
320
307
  if (num_ready_ > 0) {
321
- /* 1) READY */
308
+ // 1) READY
322
309
  p->channel_control_helper()->UpdateState(
323
310
  GRPC_CHANNEL_READY, absl::Status(), absl::make_unique<Picker>(p, this));
324
311
  } else if (num_connecting_ > 0) {
325
- /* 2) CONNECTING */
312
+ // 2) CONNECTING
326
313
  p->channel_control_helper()->UpdateState(
327
314
  GRPC_CHANNEL_CONNECTING, absl::Status(),
328
315
  absl::make_unique<QueuePicker>(p->Ref(DEBUG_LOCATION, "QueuePicker")));
329
316
  } else if (num_transient_failure_ == num_subchannels()) {
330
- /* 3) TRANSIENT_FAILURE */
317
+ // 3) TRANSIENT_FAILURE
331
318
  absl::Status status =
332
319
  absl::UnavailableError("connections to all backends failing");
333
320
  p->channel_control_helper()->UpdateState(
@@ -432,24 +419,38 @@ void RoundRobin::RoundRobinSubchannelData::ProcessConnectivityChangeLocked(
432
419
  }
433
420
 
434
421
  void RoundRobin::UpdateLocked(UpdateArgs args) {
435
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
436
- gpr_log(GPR_INFO, "[RR %p] received update with %" PRIuPTR " addresses",
437
- this, args.addresses.size());
438
- }
439
- // Replace latest_pending_subchannel_list_.
440
- if (latest_pending_subchannel_list_ != nullptr) {
422
+ ServerAddressList addresses;
423
+ if (args.addresses.ok()) {
441
424
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
442
- gpr_log(GPR_INFO,
443
- "[RR %p] Shutting down previous pending subchannel list %p", this,
444
- latest_pending_subchannel_list_.get());
425
+ gpr_log(GPR_INFO, "[RR %p] received update with %" PRIuPTR " addresses",
426
+ this, args.addresses->size());
427
+ }
428
+ addresses = std::move(*args.addresses);
429
+ } else {
430
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
431
+ gpr_log(GPR_INFO, "[RR %p] received update with address error: %s", this,
432
+ args.addresses.status().ToString().c_str());
445
433
  }
434
+ // If we already have a subchannel list, then ignore the resolver
435
+ // failure and keep using the existing list.
436
+ if (subchannel_list_ != nullptr) return;
437
+ }
438
+ // Replace latest_pending_subchannel_list_.
439
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace) &&
440
+ latest_pending_subchannel_list_ != nullptr) {
441
+ gpr_log(GPR_INFO,
442
+ "[RR %p] Shutting down previous pending subchannel list %p", this,
443
+ latest_pending_subchannel_list_.get());
446
444
  }
447
445
  latest_pending_subchannel_list_ = MakeOrphanable<RoundRobinSubchannelList>(
448
- this, &grpc_lb_round_robin_trace, std::move(args.addresses), *args.args);
446
+ this, &grpc_lb_round_robin_trace, std::move(addresses), *args.args);
449
447
  if (latest_pending_subchannel_list_->num_subchannels() == 0) {
450
448
  // If the new list is empty, immediately promote the new list to the
451
449
  // current list and transition to TRANSIENT_FAILURE.
452
- absl::Status status = absl::UnavailableError("Empty update");
450
+ absl::Status status =
451
+ args.addresses.ok() ? absl::UnavailableError(absl::StrCat(
452
+ "empty address list: ", args.resolution_note))
453
+ : args.addresses.status();
453
454
  channel_control_helper()->UpdateState(
454
455
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
455
456
  absl::make_unique<TransientFailurePicker>(status));
@@ -28,18 +28,16 @@
28
28
  #include <grpc/support/alloc.h>
29
29
 
30
30
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
31
- #include "src/core/ext/filters/client_channel/server_address.h"
32
- // TODO(roth): Should not need the include of subchannel.h here, since
33
- // that implementation should be hidden from the LB policy API.
34
- #include "src/core/ext/filters/client_channel/subchannel.h"
35
31
  #include "src/core/ext/filters/client_channel/subchannel_interface.h"
36
32
  #include "src/core/lib/address_utils/sockaddr_utils.h"
37
33
  #include "src/core/lib/channel/channel_args.h"
38
34
  #include "src/core/lib/debug/trace.h"
35
+ #include "src/core/lib/gprpp/manual_constructor.h"
39
36
  #include "src/core/lib/gprpp/orphanable.h"
40
37
  #include "src/core/lib/gprpp/ref_counted.h"
41
38
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
42
39
  #include "src/core/lib/iomgr/closure.h"
40
+ #include "src/core/lib/resolver/server_address.h"
43
41
  #include "src/core/lib/transport/connectivity_state.h"
44
42
 
45
43
  // Code for maintaining a list of subchannels within an LB policy.
@@ -175,13 +173,18 @@ class SubchannelData {
175
173
  template <typename SubchannelListType, typename SubchannelDataType>
176
174
  class SubchannelList : public InternallyRefCounted<SubchannelListType> {
177
175
  public:
178
- typedef absl::InlinedVector<SubchannelDataType, 10> SubchannelVector;
176
+ // We use ManualConstructor here to support SubchannelDataType classes
177
+ // that are not copyable.
178
+ typedef absl::InlinedVector<ManualConstructor<SubchannelDataType>, 10>
179
+ SubchannelVector;
179
180
 
180
181
  // The number of subchannels in the list.
181
182
  size_t num_subchannels() const { return subchannels_.size(); }
182
183
 
183
184
  // The data for the subchannel at a particular index.
184
- SubchannelDataType* subchannel(size_t index) { return &subchannels_[index]; }
185
+ SubchannelDataType* subchannel(size_t index) {
186
+ return subchannels_[index].get();
187
+ }
185
188
 
186
189
  // Returns true if the subchannel list is shutting down.
187
190
  bool shutting_down() const { return shutting_down_; }
@@ -386,7 +389,8 @@ SubchannelList<SubchannelListType, SubchannelDataType>::SubchannelList(
386
389
  tracer_->name(), policy_, this, subchannels_.size(),
387
390
  subchannel.get(), address.ToString().c_str());
388
391
  }
389
- subchannels_.emplace_back(this, std::move(address), std::move(subchannel));
392
+ subchannels_.emplace_back();
393
+ subchannels_.back().Init(this, std::move(address), std::move(subchannel));
390
394
  }
391
395
  }
392
396
 
@@ -396,6 +400,9 @@ SubchannelList<SubchannelListType, SubchannelDataType>::~SubchannelList() {
396
400
  gpr_log(GPR_INFO, "[%s %p] Destroying subchannel_list %p", tracer_->name(),
397
401
  policy_, this);
398
402
  }
403
+ for (auto& sd : subchannels_) {
404
+ sd.Destroy();
405
+ }
399
406
  }
400
407
 
401
408
  template <typename SubchannelListType, typename SubchannelDataType>
@@ -406,8 +413,7 @@ void SubchannelList<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
406
413
  }
407
414
  GPR_ASSERT(!shutting_down_);
408
415
  shutting_down_ = true;
409
- for (size_t i = 0; i < subchannels_.size(); i++) {
410
- SubchannelDataType* sd = &subchannels_[i];
416
+ for (auto& sd : subchannels_) {
411
417
  sd->ShutdownLocked();
412
418
  }
413
419
  }
@@ -415,8 +421,7 @@ void SubchannelList<SubchannelListType, SubchannelDataType>::ShutdownLocked() {
415
421
  template <typename SubchannelListType, typename SubchannelDataType>
416
422
  void SubchannelList<SubchannelListType,
417
423
  SubchannelDataType>::ResetBackoffLocked() {
418
- for (size_t i = 0; i < subchannels_.size(); i++) {
419
- SubchannelDataType* sd = &subchannels_[i];
424
+ for (auto& sd : subchannels_) {
420
425
  sd->ResetBackoffLocked();
421
426
  }
422
427
  }
@@ -123,7 +123,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
123
123
  void Orphan() override;
124
124
 
125
125
  void UpdateLocked(const WeightedTargetLbConfig::ChildConfig& config,
126
- ServerAddressList addresses,
126
+ absl::StatusOr<ServerAddressList> addresses,
127
127
  const grpc_channel_args* args);
128
128
  void ResetBackoffLocked();
129
129
  void DeactivateLocked();
@@ -296,13 +296,18 @@ void WeightedTargetLb::UpdateLocked(UpdateArgs args) {
296
296
  }
297
297
  }
298
298
  // Update all children.
299
- HierarchicalAddressMap address_map =
299
+ absl::StatusOr<HierarchicalAddressMap> address_map =
300
300
  MakeHierarchicalAddressMap(args.addresses);
301
301
  for (const auto& p : config_->target_map()) {
302
302
  const std::string& name = p.first;
303
303
  const WeightedTargetLbConfig::ChildConfig& config = p.second;
304
- targets_[name]->UpdateLocked(config, std::move(address_map[name]),
305
- args.args);
304
+ absl::StatusOr<ServerAddressList> addresses;
305
+ if (address_map.ok()) {
306
+ addresses = std::move((*address_map)[name]);
307
+ } else {
308
+ addresses = address_map.status();
309
+ }
310
+ targets_[name]->UpdateLocked(config, std::move(addresses), args.args);
306
311
  }
307
312
  UpdateStateLocked();
308
313
  }
@@ -473,7 +478,8 @@ WeightedTargetLb::WeightedChild::CreateChildPolicyLocked(
473
478
 
474
479
  void WeightedTargetLb::WeightedChild::UpdateLocked(
475
480
  const WeightedTargetLbConfig::ChildConfig& config,
476
- ServerAddressList addresses, const grpc_channel_args* args) {
481
+ absl::StatusOr<ServerAddressList> addresses,
482
+ const grpc_channel_args* args) {
477
483
  if (weighted_target_policy_->shutting_down_) return;
478
484
  // Update child weight.
479
485
  weight_ = config.weight;
@@ -25,6 +25,7 @@
25
25
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
26
26
  #include "src/core/ext/xds/xds_certificate_provider.h"
27
27
  #include "src/core/ext/xds/xds_client.h"
28
+ #include "src/core/ext/xds/xds_cluster.h"
28
29
  #include "src/core/lib/channel/channel_args.h"
29
30
  #include "src/core/lib/gprpp/memory.h"
30
31
  #include "src/core/lib/gprpp/orphanable.h"
@@ -66,12 +67,12 @@ class CdsLb : public LoadBalancingPolicy {
66
67
 
67
68
  private:
68
69
  // Watcher for getting cluster data from XdsClient.
69
- class ClusterWatcher : public XdsClient::ClusterWatcherInterface {
70
+ class ClusterWatcher : public XdsClusterResourceType::WatcherInterface {
70
71
  public:
71
72
  ClusterWatcher(RefCountedPtr<CdsLb> parent, std::string name)
72
73
  : parent_(std::move(parent)), name_(std::move(name)) {}
73
74
 
74
- void OnClusterChanged(XdsApi::CdsUpdate cluster_data) override {
75
+ void OnResourceChanged(XdsClusterResource cluster_data) override {
75
76
  Ref().release(); // Ref held by lambda
76
77
  parent_->work_serializer()->Run(
77
78
  // TODO(roth): When we move to C++14, capture cluster_data with
@@ -111,7 +112,7 @@ class CdsLb : public LoadBalancingPolicy {
111
112
  // Not owned, so do not dereference.
112
113
  ClusterWatcher* watcher = nullptr;
113
114
  // Most recent update obtained from this watcher.
114
- absl::optional<XdsApi::CdsUpdate> update;
115
+ absl::optional<XdsClusterResource> update;
115
116
  };
116
117
 
117
118
  // Delegating helper to be passed to child policy.
@@ -139,15 +140,15 @@ class CdsLb : public LoadBalancingPolicy {
139
140
  const std::string& name, Json::Array* discovery_mechanisms,
140
141
  std::set<std::string>* clusters_needed);
141
142
  void OnClusterChanged(const std::string& name,
142
- XdsApi::CdsUpdate cluster_data);
143
+ XdsClusterResource cluster_data);
143
144
  void OnError(const std::string& name, grpc_error_handle error);
144
145
  void OnResourceDoesNotExist(const std::string& name);
145
146
 
146
147
  grpc_error_handle UpdateXdsCertificateProvider(
147
- const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data);
148
+ const std::string& cluster_name, const XdsClusterResource& cluster_data);
148
149
 
149
150
  void CancelClusterDataWatch(absl::string_view cluster_name,
150
- XdsClient::ClusterWatcherInterface* watcher,
151
+ ClusterWatcher* watcher,
151
152
  bool delay_unsubscription = false);
152
153
 
153
154
  void MaybeDestroyChildPolicyLocked();
@@ -301,7 +302,8 @@ void CdsLb::UpdateLocked(UpdateArgs args) {
301
302
  }
302
303
  auto watcher = MakeRefCounted<ClusterWatcher>(Ref(), config_->cluster());
303
304
  watchers_[config_->cluster()].watcher = watcher.get();
304
- xds_client_->WatchClusterData(config_->cluster(), std::move(watcher));
305
+ XdsClusterResourceType::StartWatch(xds_client_.get(), config_->cluster(),
306
+ std::move(watcher));
305
307
  }
306
308
  }
307
309
 
@@ -326,13 +328,15 @@ bool CdsLb::GenerateDiscoveryMechanismForCluster(
326
328
  name.c_str());
327
329
  }
328
330
  state.watcher = watcher.get();
329
- xds_client_->WatchClusterData(name, std::move(watcher));
331
+ XdsClusterResourceType::StartWatch(xds_client_.get(), name,
332
+ std::move(watcher));
330
333
  return false;
331
334
  }
332
335
  // Don't have the update we need yet.
333
336
  if (!state.update.has_value()) return false;
334
337
  // For AGGREGATE clusters, recursively expand to child clusters.
335
- if (state.update->cluster_type == XdsApi::CdsUpdate::ClusterType::AGGREGATE) {
338
+ if (state.update->cluster_type ==
339
+ XdsClusterResource::ClusterType::AGGREGATE) {
336
340
  bool missing_cluster = false;
337
341
  for (const std::string& child_name :
338
342
  state.update->prioritized_cluster_names) {
@@ -348,13 +352,13 @@ bool CdsLb::GenerateDiscoveryMechanismForCluster(
348
352
  {"max_concurrent_requests", state.update->max_concurrent_requests},
349
353
  };
350
354
  switch (state.update->cluster_type) {
351
- case XdsApi::CdsUpdate::ClusterType::EDS:
355
+ case XdsClusterResource::ClusterType::EDS:
352
356
  mechanism["type"] = "EDS";
353
357
  if (!state.update->eds_service_name.empty()) {
354
358
  mechanism["edsServiceName"] = state.update->eds_service_name;
355
359
  }
356
360
  break;
357
- case XdsApi::CdsUpdate::ClusterType::LOGICAL_DNS:
361
+ case XdsClusterResource::ClusterType::LOGICAL_DNS:
358
362
  mechanism["type"] = "LOGICAL_DNS";
359
363
  mechanism["dnsHostname"] = state.update->dns_hostname;
360
364
  break;
@@ -371,7 +375,7 @@ bool CdsLb::GenerateDiscoveryMechanismForCluster(
371
375
  }
372
376
 
373
377
  void CdsLb::OnClusterChanged(const std::string& name,
374
- XdsApi::CdsUpdate cluster_data) {
378
+ XdsClusterResource cluster_data) {
375
379
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
376
380
  gpr_log(
377
381
  GPR_INFO,
@@ -509,7 +513,7 @@ void CdsLb::OnResourceDoesNotExist(const std::string& name) {
509
513
  }
510
514
 
511
515
  grpc_error_handle CdsLb::UpdateXdsCertificateProvider(
512
- const std::string& cluster_name, const XdsApi::CdsUpdate& cluster_data) {
516
+ const std::string& cluster_name, const XdsClusterResource& cluster_data) {
513
517
  // Early out if channel is not configured to use xds security.
514
518
  grpc_channel_credentials* channel_credentials =
515
519
  grpc_channel_credentials_find_in_args(args_);
@@ -609,7 +613,7 @@ grpc_error_handle CdsLb::UpdateXdsCertificateProvider(
609
613
  }
610
614
 
611
615
  void CdsLb::CancelClusterDataWatch(absl::string_view cluster_name,
612
- XdsClient::ClusterWatcherInterface* watcher,
616
+ ClusterWatcher* watcher,
613
617
  bool delay_unsubscription) {
614
618
  if (xds_certificate_provider_ != nullptr) {
615
619
  std::string name(cluster_name);
@@ -619,7 +623,7 @@ void CdsLb::CancelClusterDataWatch(absl::string_view cluster_name,
619
623
  nullptr);
620
624
  xds_certificate_provider_->UpdateSubjectAlternativeNameMatchers(name, {});
621
625
  }
622
- xds_client_->CancelClusterDataWatch(cluster_name, watcher,
626
+ XdsClusterResourceType::CancelWatch(xds_client_.get(), cluster_name, watcher,
623
627
  delay_unsubscription);
624
628
  }
625
629
  //
@@ -19,9 +19,9 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include "src/core/ext/filters/client_channel/server_address.h"
23
22
  #include "src/core/ext/xds/xds_client_stats.h"
24
23
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
24
+ #include "src/core/lib/resolver/server_address.h"
25
25
 
26
26
  namespace grpc_core {
27
27
 
@@ -30,6 +30,7 @@
30
30
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
31
31
  #include "src/core/ext/xds/xds_client.h"
32
32
  #include "src/core/ext/xds/xds_client_stats.h"
33
+ #include "src/core/ext/xds/xds_endpoint.h"
33
34
  #include "src/core/lib/channel/channel_args.h"
34
35
  #include "src/core/lib/gpr/env.h"
35
36
  #include "src/core/lib/gpr/string.h"
@@ -120,7 +121,7 @@ class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
120
121
  std::string cluster_name, std::string eds_service_name,
121
122
  absl::optional<std::string> lrs_load_reporting_server_name,
122
123
  uint32_t max_concurrent_requests,
123
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config)
124
+ RefCountedPtr<XdsEndpointResource::DropConfig> drop_config)
124
125
  : child_policy_(std::move(child_policy)),
125
126
  cluster_name_(std::move(cluster_name)),
126
127
  eds_service_name_(std::move(eds_service_name)),
@@ -140,7 +141,7 @@ class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
140
141
  return lrs_load_reporting_server_name_;
141
142
  };
142
143
  uint32_t max_concurrent_requests() const { return max_concurrent_requests_; }
143
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config() const {
144
+ RefCountedPtr<XdsEndpointResource::DropConfig> drop_config() const {
144
145
  return drop_config_;
145
146
  }
146
147
 
@@ -150,7 +151,7 @@ class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
150
151
  std::string eds_service_name_;
151
152
  absl::optional<std::string> lrs_load_reporting_server_name_;
152
153
  uint32_t max_concurrent_requests_;
153
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
154
+ RefCountedPtr<XdsEndpointResource::DropConfig> drop_config_;
154
155
  };
155
156
 
156
157
  // xDS Cluster Impl LB policy.
@@ -205,7 +206,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
205
206
 
206
207
  RefCountedPtr<CircuitBreakerCallCounterMap::CallCounter> call_counter_;
207
208
  uint32_t max_concurrent_requests_;
208
- RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
209
+ RefCountedPtr<XdsEndpointResource::DropConfig> drop_config_;
209
210
  RefCountedPtr<XdsClusterDropStats> drop_stats_;
210
211
  RefCountedPtr<RefCountedPicker> picker_;
211
212
  };
@@ -238,7 +239,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
238
239
 
239
240
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
240
241
  const grpc_channel_args* args);
241
- void UpdateChildPolicyLocked(ServerAddressList addresses,
242
+ void UpdateChildPolicyLocked(absl::StatusOr<ServerAddressList> addresses,
242
243
  const grpc_channel_args* args);
243
244
 
244
245
  void MaybeUpdatePickerLocked();
@@ -470,8 +471,8 @@ void XdsClusterImplLb::UpdateLocked(UpdateArgs args) {
470
471
  config_->cluster_name(), config_->eds_service_name());
471
472
  } else {
472
473
  // Cluster name, EDS service name, and LRS server name should never
473
- // change, because the EDS policy above us should be swapped out if
474
- // that happens.
474
+ // change, because the xds_cluster_resolver policy above us should be
475
+ // swapped out if that happens.
475
476
  GPR_ASSERT(config_->cluster_name() == old_config->cluster_name());
476
477
  GPR_ASSERT(config_->eds_service_name() == old_config->eds_service_name());
477
478
  GPR_ASSERT(config_->lrs_load_reporting_server_name() ==
@@ -541,8 +542,9 @@ OrphanablePtr<LoadBalancingPolicy> XdsClusterImplLb::CreateChildPolicyLocked(
541
542
  return lb_policy;
542
543
  }
543
544
 
544
- void XdsClusterImplLb::UpdateChildPolicyLocked(ServerAddressList addresses,
545
- const grpc_channel_args* args) {
545
+ void XdsClusterImplLb::UpdateChildPolicyLocked(
546
+ absl::StatusOr<ServerAddressList> addresses,
547
+ const grpc_channel_args* args) {
546
548
  // Create policy if needed.
547
549
  if (child_policy_ == nullptr) {
548
550
  child_policy_ = CreateChildPolicyLocked(args);
@@ -736,7 +738,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
736
738
  }
737
739
  }
738
740
  // Drop config.
739
- auto drop_config = MakeRefCounted<XdsApi::EdsUpdate::DropConfig>();
741
+ auto drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
740
742
  it = json.object_value().find("dropCategories");
741
743
  if (it == json.object_value().end()) {
742
744
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -762,7 +764,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
762
764
 
763
765
  private:
764
766
  static std::vector<grpc_error_handle> ParseDropCategories(
765
- const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
767
+ const Json& json, XdsEndpointResource::DropConfig* drop_config) {
766
768
  std::vector<grpc_error_handle> error_list;
767
769
  if (json.type() != Json::Type::ARRAY) {
768
770
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -786,7 +788,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
786
788
  }
787
789
 
788
790
  static std::vector<grpc_error_handle> ParseDropCategory(
789
- const Json& json, XdsApi::EdsUpdate::DropConfig* drop_config) {
791
+ const Json& json, XdsEndpointResource::DropConfig* drop_config) {
790
792
  std::vector<grpc_error_handle> error_list;
791
793
  if (json.type() != Json::Type::OBJECT) {
792
794
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -122,7 +122,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
122
122
  void Orphan() override;
123
123
 
124
124
  void UpdateLocked(RefCountedPtr<LoadBalancingPolicy::Config> config,
125
- const ServerAddressList& addresses,
125
+ const absl::StatusOr<ServerAddressList>& addresses,
126
126
  const grpc_channel_args* args);
127
127
  void ExitIdleLocked();
128
128
  void ResetBackoffLocked();
@@ -441,7 +441,8 @@ XdsClusterManagerLb::ClusterChild::CreateChildPolicyLocked(
441
441
 
442
442
  void XdsClusterManagerLb::ClusterChild::UpdateLocked(
443
443
  RefCountedPtr<LoadBalancingPolicy::Config> config,
444
- const ServerAddressList& addresses, const grpc_channel_args* args) {
444
+ const absl::StatusOr<ServerAddressList>& addresses,
445
+ const grpc_channel_args* args) {
445
446
  if (xds_cluster_manager_policy_->shutting_down_) return;
446
447
  // Update child weight.
447
448
  // Reactivate if needed.