grpc 1.45.0 → 1.46.2

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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +36 -29
  3. data/include/grpc/impl/codegen/grpc_types.h +7 -13
  4. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  5. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  6. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  7. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
  8. data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
  9. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
  11. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
  12. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  13. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  14. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
  15. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
  16. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
  17. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
  18. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
  22. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
  23. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  24. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
  26. data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
  27. data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
  28. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  29. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  30. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
  31. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  32. data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
  33. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  34. data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
  35. data/src/core/ext/filters/http/client_authority_filter.h +6 -5
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
  37. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
  38. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
  39. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  40. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
  41. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
  43. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
  44. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  45. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
  46. data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
  47. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
  48. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
  49. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  50. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
  51. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
  52. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
  53. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
  54. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
  55. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  56. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
  57. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
  58. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
  59. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  60. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
  61. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  62. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
  63. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  64. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
  65. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  66. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
  67. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  68. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
  69. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  70. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  71. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  72. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
  73. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  74. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
  75. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
  76. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
  85. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  86. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
  119. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  126. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
  127. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
  135. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  136. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
  137. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  138. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
  139. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  140. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
  141. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
  142. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
  143. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
  144. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
  145. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
  146. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
  149. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
  150. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
  151. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
  152. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
  155. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  156. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
  157. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  158. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
  159. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  160. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
  161. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
  163. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
  169. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
  171. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  172. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
  177. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
  178. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
  181. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
  182. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
  189. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  190. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
  191. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
  192. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  193. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
  194. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
  195. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
  196. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  197. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
  198. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
  200. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
  206. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  207. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
  208. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
  220. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  221. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
  222. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  223. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
  224. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
  232. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  233. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
  234. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  235. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  237. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
  238. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  239. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
  240. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  241. data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
  242. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  243. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
  244. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  245. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
  246. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
  247. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
  248. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  249. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
  250. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  251. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  252. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
  253. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  254. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
  255. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  256. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
  257. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  258. data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
  259. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  260. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
  261. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  262. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
  263. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  264. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
  265. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  266. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
  267. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  268. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
  269. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  270. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
  271. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  272. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
  273. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  274. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  275. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  276. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
  277. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  278. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
  279. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  280. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  281. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  282. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
  283. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  284. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
  285. data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
  286. data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
  287. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  288. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
  289. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  290. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
  291. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  292. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  293. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  294. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
  295. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  296. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
  297. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  298. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
  299. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  300. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
  301. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  302. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
  303. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  304. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
  305. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  306. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
  307. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  308. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
  309. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  310. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
  311. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
  312. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
  313. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  314. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
  315. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  316. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
  317. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  318. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
  319. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
  320. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
  321. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  322. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
  323. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  331. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
  332. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
  333. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
  334. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  335. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
  336. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  337. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  338. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  339. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  340. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  341. data/src/core/ext/xds/xds_api.cc +20 -0
  342. data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
  343. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  344. data/src/core/ext/xds/xds_client.cc +83 -93
  345. data/src/core/ext/xds/xds_client.h +11 -4
  346. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  347. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  348. data/src/core/ext/xds/xds_common_types.cc +9 -9
  349. data/src/core/ext/xds/xds_common_types.h +3 -3
  350. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  351. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  352. data/src/core/ext/xds/xds_listener.cc +1 -1
  353. data/src/core/ext/xds/xds_route_config.cc +162 -25
  354. data/src/core/ext/xds/xds_route_config.h +13 -10
  355. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  356. data/src/core/lib/avl/avl.h +68 -5
  357. data/src/core/lib/channel/call_tracer.h +4 -1
  358. data/src/core/lib/channel/channel_args.cc +138 -59
  359. data/src/core/lib/channel/channel_args.h +210 -9
  360. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  361. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  362. data/src/core/lib/channel/channel_stack.h +2 -5
  363. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  364. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  365. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  366. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  367. data/src/core/lib/channel/connected_channel.h +1 -0
  368. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  369. data/src/core/lib/channel/promise_based_filter.h +55 -41
  370. data/src/core/lib/compression/compression_internal.cc +1 -7
  371. data/src/core/lib/debug/stats_data.cc +2 -6
  372. data/src/core/lib/debug/stats_data.h +18 -21
  373. data/src/core/lib/gpr/tls.h +1 -0
  374. data/src/core/lib/gprpp/bitset.h +12 -0
  375. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  376. data/src/core/lib/gprpp/match.h +73 -0
  377. data/src/core/lib/gprpp/overload.h +59 -0
  378. data/src/core/lib/gprpp/ref_counted.h +2 -0
  379. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  380. data/src/core/lib/gprpp/status_helper.cc +18 -2
  381. data/src/core/lib/gprpp/time.cc +12 -0
  382. data/src/core/lib/gprpp/time.h +1 -1
  383. data/src/core/lib/http/format_request.cc +1 -2
  384. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  385. data/src/core/lib/http/parser.cc +80 -9
  386. data/src/core/lib/http/parser.h +14 -1
  387. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  388. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  389. data/src/core/lib/iomgr/port.h +0 -2
  390. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  391. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  392. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  393. data/src/core/lib/json/json_util.h +3 -3
  394. data/src/core/lib/promise/call_push_pull.h +144 -0
  395. data/src/core/lib/promise/detail/status.h +2 -1
  396. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  397. data/src/core/lib/promise/latch.h +104 -0
  398. data/src/core/lib/resource_quota/api.cc +5 -30
  399. data/src/core/lib/resource_quota/api.h +1 -1
  400. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  401. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  402. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  403. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  404. data/src/core/lib/security/context/security_context.h +8 -1
  405. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  406. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  407. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  408. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  409. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  410. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  411. data/src/core/lib/security/credentials/credentials.h +16 -33
  412. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  413. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  414. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  415. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  416. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  417. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  418. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  419. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  420. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  421. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  422. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  423. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  424. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  425. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  426. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  427. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  428. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  429. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  430. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  431. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  433. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  434. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  435. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  436. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  437. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  438. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  439. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  440. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  441. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  442. data/src/core/lib/security/transport/auth_filters.h +7 -7
  443. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  444. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  445. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  446. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  447. data/src/core/lib/surface/call.cc +1023 -903
  448. data/src/core/lib/surface/call.h +0 -14
  449. data/src/core/lib/surface/channel.cc +4 -3
  450. data/src/core/lib/surface/channel_init.cc +2 -3
  451. data/src/core/lib/surface/channel_init.h +2 -6
  452. data/src/core/lib/surface/init.cc +1 -1
  453. data/src/core/lib/surface/server.cc +3 -14
  454. data/src/core/lib/surface/server.h +1 -2
  455. data/src/core/lib/surface/version.cc +2 -2
  456. data/src/core/lib/transport/byte_stream.cc +2 -0
  457. data/src/core/lib/transport/metadata_batch.h +12 -8
  458. data/src/core/lib/transport/transport.h +20 -5
  459. data/src/core/lib/transport/transport_impl.h +4 -3
  460. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  461. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  462. data/src/core/tsi/ssl_transport_security.cc +75 -38
  463. data/src/core/tsi/ssl_transport_security.h +8 -2
  464. data/src/core/tsi/transport_security_interface.h +2 -0
  465. data/src/ruby/ext/grpc/extconf.rb +1 -1
  466. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  467. data/src/ruby/lib/grpc/grpc.rb +1 -1
  468. data/src/ruby/lib/grpc/version.rb +1 -1
  469. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  470. data/src/ruby/pb/test/client.rb +769 -0
  471. data/src/ruby/pb/test/server.rb +252 -0
  472. data/src/ruby/pb/test/xds_client.rb +415 -0
  473. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  474. data/third_party/upb/upb/decode.c +32 -16
  475. data/third_party/upb/upb/def.c +118 -55
  476. data/third_party/upb/upb/def.h +12 -3
  477. data/third_party/upb/upb/encode.c +14 -8
  478. data/third_party/upb/upb/json_encode.c +776 -0
  479. data/third_party/upb/upb/json_encode.h +62 -0
  480. data/third_party/upb/upb/msg.c +5 -7
  481. data/third_party/upb/upb/msg.h +1 -2
  482. data/third_party/upb/upb/msg_internal.h +49 -36
  483. data/third_party/upb/upb/port_def.inc +8 -0
  484. data/third_party/upb/upb/port_undef.inc +1 -0
  485. data/third_party/upb/upb/table.c +10 -6
  486. data/third_party/upb/upb/table_internal.h +2 -0
  487. data/third_party/upb/upb/upb.h +41 -11
  488. data/third_party/zlib/crc32.c +966 -292
  489. data/third_party/zlib/crc32.h +9441 -436
  490. data/third_party/zlib/deflate.c +78 -30
  491. data/third_party/zlib/deflate.h +12 -15
  492. data/third_party/zlib/gzguts.h +3 -2
  493. data/third_party/zlib/gzlib.c +5 -3
  494. data/third_party/zlib/gzread.c +5 -7
  495. data/third_party/zlib/gzwrite.c +25 -13
  496. data/third_party/zlib/infback.c +2 -1
  497. data/third_party/zlib/inffast.c +14 -14
  498. data/third_party/zlib/inflate.c +39 -8
  499. data/third_party/zlib/inflate.h +3 -2
  500. data/third_party/zlib/inftrees.c +3 -3
  501. data/third_party/zlib/trees.c +27 -48
  502. data/third_party/zlib/zlib.h +123 -100
  503. data/third_party/zlib/zutil.c +2 -2
  504. data/third_party/zlib/zutil.h +12 -9
  505. metadata +66 -45
  506. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  507. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  508. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  509. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  510. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  511. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  512. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  513. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -131,24 +131,14 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
131
131
  RefCountedPtr<XdsClusterResolverLb> xds_cluster_resolver_lb,
132
132
  size_t index)
133
133
  : parent_(std::move(xds_cluster_resolver_lb)), index_(index) {}
134
- virtual void Start() = 0;
135
- void Orphan() override = 0;
136
- virtual Json::Array override_child_policy() = 0;
137
- virtual bool disable_reresolution() = 0;
138
-
139
- // Returns a pair containing the cluster and eds_service_name
140
- // to use for LRS load reporting. Caller must ensure that config_ is set
141
- // before calling.
142
- std::pair<absl::string_view, absl::string_view> GetLrsClusterKey() const {
143
- return {
144
- parent_->config_->discovery_mechanisms()[index_].cluster_name,
145
- parent_->config_->discovery_mechanisms()[index_].eds_service_name};
146
- }
147
134
 
148
- protected:
149
135
  XdsClusterResolverLb* parent() const { return parent_.get(); }
150
136
  size_t index() const { return index_; }
151
137
 
138
+ virtual void Start() = 0;
139
+ virtual Json::Array override_child_policy() = 0;
140
+ virtual bool disable_reresolution() = 0;
141
+
152
142
  private:
153
143
  RefCountedPtr<XdsClusterResolverLb> parent_;
154
144
  // Stores its own index in the vector of DiscoveryMechanism.
@@ -186,11 +176,11 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
186
176
  },
187
177
  DEBUG_LOCATION);
188
178
  }
189
- void OnError(grpc_error_handle error) override {
179
+ void OnError(absl::Status status) override {
190
180
  Ref().release(); // ref held by callback
191
181
  discovery_mechanism_->parent()->work_serializer()->Run(
192
- [this, error]() {
193
- OnErrorHelper(error);
182
+ [this, status]() {
183
+ OnErrorHelper(status);
194
184
  Unref();
195
185
  },
196
186
  DEBUG_LOCATION);
@@ -213,9 +203,9 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
213
203
  discovery_mechanism_->parent()->OnEndpointChanged(
214
204
  discovery_mechanism_->index(), std::move(update));
215
205
  }
216
- void OnErrorHelper(grpc_error_handle error) {
206
+ void OnErrorHelper(absl::Status status) {
217
207
  discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(),
218
- error);
208
+ status);
219
209
  }
220
210
  void OnResourceDoesNotExistHelper() {
221
211
  discovery_mechanism_->parent()->OnResourceDoesNotExist(
@@ -229,14 +219,9 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
229
219
  friend class EndpointWatcher;
230
220
 
231
221
  absl::string_view GetEdsResourceName() const {
232
- if (!parent()
233
- ->config_->discovery_mechanisms()[index()]
234
- .eds_service_name.empty()) {
235
- return parent()
236
- ->config_->discovery_mechanisms()[index()]
237
- .eds_service_name;
238
- }
239
- return parent()->config_->discovery_mechanisms()[index()].cluster_name;
222
+ auto& config = parent()->config_->discovery_mechanisms()[index()];
223
+ if (!config.eds_service_name.empty()) return config.eds_service_name;
224
+ return config.cluster_name;
240
225
  }
241
226
 
242
227
  // Note that this is not owned, so this pointer must never be dereferenced.
@@ -284,15 +269,16 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
284
269
 
285
270
  struct DiscoveryMechanismEntry {
286
271
  OrphanablePtr<DiscoveryMechanism> discovery_mechanism;
287
- bool first_update_received = false;
288
- // Number of priorities this mechanism has contributed to priority_list_.
289
- // (The sum of this across all discovery mechanisms should always equal
290
- // the number of priorities in priority_list_.)
291
- uint32_t num_priorities = 0;
292
- RefCountedPtr<XdsEndpointResource::DropConfig> drop_config;
293
- // Populated only when an update has been delivered by the mechanism
294
- // but has not yet been applied to the LB policy's combined priority_list_.
295
- absl::optional<XdsEndpointResource::PriorityList> pending_priority_list;
272
+ // Most recent update reported by the discovery mechanism.
273
+ absl::optional<XdsEndpointResource> latest_update;
274
+ // State used to retain child policy names for priority policy.
275
+ std::vector<size_t /*child_number*/> priority_child_numbers;
276
+ size_t next_available_child_number = 0;
277
+
278
+ const XdsClusterResolverLbConfig::DiscoveryMechanism& config() const;
279
+
280
+ // Returns the child policy name for a given priority.
281
+ std::string GetChildPolicyName(size_t priority) const;
296
282
  };
297
283
 
298
284
  class Helper : public ChannelControlHelper {
@@ -326,12 +312,11 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
326
312
  void ShutdownLocked() override;
327
313
 
328
314
  void OnEndpointChanged(size_t index, XdsEndpointResource update);
329
- void OnError(size_t index, grpc_error_handle error);
315
+ void OnError(size_t index, absl::Status status);
330
316
  void OnResourceDoesNotExist(size_t index);
331
317
 
332
318
  void MaybeDestroyChildPolicyLocked();
333
319
 
334
- void UpdatePriorityList(XdsEndpointResource::PriorityList priority_list);
335
320
  void UpdateChildPolicyLocked();
336
321
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
337
322
  const grpc_channel_args* args);
@@ -353,11 +338,6 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
353
338
  // Vector of discovery mechansism entries in priority order.
354
339
  std::vector<DiscoveryMechanismEntry> discovery_mechanisms_;
355
340
 
356
- // The latest data from the endpoint watcher.
357
- XdsEndpointResource::PriorityList priority_list_;
358
- // State used to retain child policy names for priority policy.
359
- std::vector<size_t /*child_number*/> priority_child_numbers_;
360
-
361
341
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
362
342
  };
363
343
 
@@ -491,9 +471,8 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Orphan() {
491
471
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
492
472
  ReportResult(Resolver::Result result) {
493
473
  if (!result.addresses.ok()) {
494
- discovery_mechanism_->parent()->OnError(
495
- discovery_mechanism_->index(),
496
- absl_status_to_grpc_error(result.addresses.status()));
474
+ discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(),
475
+ result.addresses.status());
497
476
  return;
498
477
  }
499
478
  // Convert resolver result to EDS update.
@@ -511,6 +490,22 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
511
490
  discovery_mechanism_->index(), std::move(update));
512
491
  }
513
492
 
493
+ //
494
+ // XdsClusterResolverLb::DiscoveryMechanismEntry
495
+ //
496
+
497
+ const XdsClusterResolverLbConfig::DiscoveryMechanism&
498
+ XdsClusterResolverLb::DiscoveryMechanismEntry::config() const {
499
+ return discovery_mechanism->parent()
500
+ ->config_->discovery_mechanisms()[discovery_mechanism->index()];
501
+ }
502
+
503
+ std::string XdsClusterResolverLb::DiscoveryMechanismEntry::GetChildPolicyName(
504
+ size_t priority) const {
505
+ return absl::StrCat("{cluster=", config().cluster_name,
506
+ ", child_number=", priority_child_numbers[priority], "}");
507
+ }
508
+
514
509
  //
515
510
  // XdsClusterResolverLb public methods
516
511
  //
@@ -614,100 +609,37 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
614
609
  " for discovery mechanism %" PRIuPTR "",
615
610
  this, index);
616
611
  }
612
+ DiscoveryMechanismEntry& discovery_entry = discovery_mechanisms_[index];
617
613
  // We need at least one priority for each discovery mechanism, just so that we
618
614
  // have a child in which to create the xds_cluster_impl policy. This ensures
619
615
  // that we properly handle the case of a discovery mechanism dropping 100% of
620
616
  // calls, the OnError() case, and the OnResourceDoesNotExist() case.
621
617
  if (update.priorities.empty()) update.priorities.emplace_back();
622
- discovery_mechanisms_[index].drop_config = std::move(update.drop_config);
623
- discovery_mechanisms_[index].pending_priority_list =
624
- std::move(update.priorities);
625
- discovery_mechanisms_[index].first_update_received = true;
626
- // If any discovery mechanism has not received its first update,
627
- // wait until that happens before creating the child policy.
628
- // TODO(roth): If this becomes problematic in the future (e.g., a
629
- // secondary discovery mechanism delaying us from starting up at all),
630
- // we can consider some sort of optimization whereby we can create the
631
- // priority policy with only a subset of its children. But we need to
632
- // make sure not to get into a situation where the priority policy
633
- // will put the channel into TRANSIENT_FAILURE instead of CONNECTING
634
- // while we're still waiting for the other discovery mechanism(s).
635
- for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
636
- if (!mechanism.first_update_received) return;
637
- }
638
- // Construct new priority list.
639
- XdsEndpointResource::PriorityList priority_list;
640
- size_t priority_index = 0;
641
- for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
642
- // If the mechanism has a pending update, use that.
643
- // Otherwise, use the priorities that it previously contributed to the
644
- // combined list.
645
- if (mechanism.pending_priority_list.has_value()) {
646
- priority_list.insert(priority_list.end(),
647
- mechanism.pending_priority_list->begin(),
648
- mechanism.pending_priority_list->end());
649
- priority_index += mechanism.num_priorities;
650
- mechanism.num_priorities = mechanism.pending_priority_list->size();
651
- mechanism.pending_priority_list.reset();
652
- } else {
653
- priority_list.insert(
654
- priority_list.end(), priority_list_.begin() + priority_index,
655
- priority_list_.begin() + priority_index + mechanism.num_priorities);
656
- priority_index += mechanism.num_priorities;
657
- }
658
- }
659
- // Update child policy.
660
- UpdatePriorityList(std::move(priority_list));
661
- }
662
-
663
- void XdsClusterResolverLb::OnError(size_t index, grpc_error_handle error) {
664
- gpr_log(GPR_ERROR,
665
- "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
666
- " xds watcher reported error: %s",
667
- this, index, grpc_error_std_string(error).c_str());
668
- GRPC_ERROR_UNREF(error);
669
- if (shutting_down_) return;
670
- if (!discovery_mechanisms_[index].first_update_received) {
671
- // Call OnEndpointChanged with an empty update just like
672
- // OnResourceDoesNotExist.
673
- OnEndpointChanged(index, XdsEndpointResource());
674
- }
675
- }
676
-
677
- void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index) {
678
- gpr_log(GPR_ERROR,
679
- "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
680
- " resource does not exist",
681
- this, index);
682
- if (shutting_down_) return;
683
- // Call OnEndpointChanged with an empty update.
684
- OnEndpointChanged(index, XdsEndpointResource());
685
- }
686
-
687
- //
688
- // child policy-related methods
689
- //
690
-
691
- void XdsClusterResolverLb::UpdatePriorityList(
692
- XdsEndpointResource::PriorityList priority_list) {
693
- // Build some maps from locality to child number and the reverse from
694
- // the old data in priority_list_ and priority_child_numbers_.
618
+ // Update priority_child_numbers, reusing old child numbers in an
619
+ // intelligent way to avoid unnecessary churn.
620
+ // First, build some maps from locality to child number and the reverse
621
+ // from the old data in the entry's update and priority_child_numbers.
695
622
  std::map<XdsLocalityName*, size_t /*child_number*/, XdsLocalityName::Less>
696
623
  locality_child_map;
697
- std::map<size_t, std::set<XdsLocalityName*>> child_locality_map;
698
- for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
699
- size_t child_number = priority_child_numbers_[priority];
700
- const auto& localities = priority_list_[priority].localities;
701
- for (const auto& p : localities) {
702
- XdsLocalityName* locality_name = p.first;
703
- locality_child_map[locality_name] = child_number;
704
- child_locality_map[child_number].insert(locality_name);
624
+ std::map<size_t, std::set<XdsLocalityName*, XdsLocalityName::Less>>
625
+ child_locality_map;
626
+ if (discovery_entry.latest_update.has_value()) {
627
+ const auto& prev_priority_list = discovery_entry.latest_update->priorities;
628
+ for (size_t priority = 0; priority < prev_priority_list.size();
629
+ ++priority) {
630
+ size_t child_number = discovery_entry.priority_child_numbers[priority];
631
+ const auto& localities = prev_priority_list[priority].localities;
632
+ for (const auto& p : localities) {
633
+ XdsLocalityName* locality_name = p.first;
634
+ locality_child_map[locality_name] = child_number;
635
+ child_locality_map[child_number].insert(locality_name);
636
+ }
705
637
  }
706
638
  }
707
639
  // Construct new list of children.
708
640
  std::vector<size_t> priority_child_numbers;
709
- for (size_t priority = 0; priority < priority_list.size(); ++priority) {
710
- const auto& localities = priority_list[priority].localities;
641
+ for (size_t priority = 0; priority < update.priorities.size(); ++priority) {
642
+ const auto& localities = update.priorities[priority].localities;
711
643
  absl::optional<size_t> child_number;
712
644
  // If one of the localities in this priority already existed, reuse its
713
645
  // child number.
@@ -735,10 +667,11 @@ void XdsClusterResolverLb::UpdatePriorityList(
735
667
  }
736
668
  // If we didn't find an existing child number, assign a new one.
737
669
  if (!child_number.has_value()) {
738
- for (child_number = 0;
670
+ for (child_number = discovery_entry.next_available_child_number;
739
671
  child_locality_map.find(*child_number) != child_locality_map.end();
740
672
  ++(*child_number)) {
741
673
  }
674
+ discovery_entry.next_available_child_number = *child_number + 1;
742
675
  // Add entry so we know that the child number is in use.
743
676
  // (Don't need to add the list of localities, since we won't use them.)
744
677
  child_locality_map[*child_number];
@@ -746,42 +679,87 @@ void XdsClusterResolverLb::UpdatePriorityList(
746
679
  priority_child_numbers.push_back(*child_number);
747
680
  }
748
681
  // Save update.
749
- priority_list_ = std::move(priority_list);
750
- priority_child_numbers_ = std::move(priority_child_numbers);
682
+ discovery_entry.latest_update = std::move(update);
683
+ discovery_entry.priority_child_numbers = std::move(priority_child_numbers);
684
+ // If any discovery mechanism has not received its first update,
685
+ // wait until that happens before creating the child policy.
686
+ // TODO(roth): If this becomes problematic in the future (e.g., a
687
+ // secondary discovery mechanism delaying us from starting up at all),
688
+ // we can consider some sort of optimization whereby we can create the
689
+ // priority policy with only a subset of its children. But we need to
690
+ // make sure not to get into a situation where the priority policy
691
+ // will put the channel into TRANSIENT_FAILURE instead of CONNECTING
692
+ // while we're still waiting for the other discovery mechanism(s).
693
+ for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
694
+ if (!mechanism.latest_update.has_value()) return;
695
+ }
751
696
  // Update child policy.
752
697
  UpdateChildPolicyLocked();
753
698
  }
754
699
 
700
+ void XdsClusterResolverLb::OnError(size_t index, absl::Status status) {
701
+ gpr_log(GPR_ERROR,
702
+ "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
703
+ " xds watcher reported error: %s",
704
+ this, index, status.ToString().c_str());
705
+ if (shutting_down_) return;
706
+ if (!discovery_mechanisms_[index].latest_update.has_value()) {
707
+ // Call OnEndpointChanged with an empty update just like
708
+ // OnResourceDoesNotExist.
709
+ OnEndpointChanged(index, XdsEndpointResource());
710
+ }
711
+ }
712
+
713
+ void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index) {
714
+ gpr_log(GPR_ERROR,
715
+ "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
716
+ " resource does not exist",
717
+ this, index);
718
+ if (shutting_down_) return;
719
+ // Call OnEndpointChanged with an empty update.
720
+ OnEndpointChanged(index, XdsEndpointResource());
721
+ }
722
+
723
+ //
724
+ // child policy-related methods
725
+ //
726
+
755
727
  ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
756
728
  ServerAddressList addresses;
757
- for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
758
- const auto& localities = priority_list_[priority].localities;
759
- std::string priority_child_name =
760
- absl::StrCat("child", priority_child_numbers_[priority]);
761
- for (const auto& p : localities) {
762
- const auto& locality_name = p.first;
763
- const auto& locality = p.second;
764
- std::vector<std::string> hierarchical_path = {
765
- priority_child_name, locality_name->AsHumanReadableString()};
766
- for (const auto& endpoint : locality.endpoints) {
767
- const ServerAddressWeightAttribute* weight_attribute = static_cast<
768
- const ServerAddressWeightAttribute*>(endpoint.GetAttribute(
769
- ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
770
- uint32_t weight = locality.lb_weight;
771
- if (weight_attribute != nullptr) {
772
- weight = locality.lb_weight * weight_attribute->weight();
729
+ for (const auto& discovery_entry : discovery_mechanisms_) {
730
+ for (size_t priority = 0;
731
+ priority < discovery_entry.latest_update->priorities.size();
732
+ ++priority) {
733
+ const auto& priority_entry =
734
+ discovery_entry.latest_update->priorities[priority];
735
+ std::string priority_child_name =
736
+ discovery_entry.GetChildPolicyName(priority);
737
+ for (const auto& p : priority_entry.localities) {
738
+ const auto& locality_name = p.first;
739
+ const auto& locality = p.second;
740
+ std::vector<std::string> hierarchical_path = {
741
+ priority_child_name, locality_name->AsHumanReadableString()};
742
+ for (const auto& endpoint : locality.endpoints) {
743
+ const ServerAddressWeightAttribute* weight_attribute = static_cast<
744
+ const ServerAddressWeightAttribute*>(endpoint.GetAttribute(
745
+ ServerAddressWeightAttribute::kServerAddressWeightAttributeKey));
746
+ uint32_t weight = locality.lb_weight;
747
+ if (weight_attribute != nullptr) {
748
+ weight = locality.lb_weight * weight_attribute->weight();
749
+ }
750
+ addresses.emplace_back(
751
+ endpoint
752
+ .WithAttribute(
753
+ kHierarchicalPathAttributeKey,
754
+ MakeHierarchicalPathAttribute(hierarchical_path))
755
+ .WithAttribute(kXdsLocalityNameAttributeKey,
756
+ absl::make_unique<XdsLocalityAttribute>(
757
+ locality_name->Ref()))
758
+ .WithAttribute(
759
+ ServerAddressWeightAttribute::
760
+ kServerAddressWeightAttributeKey,
761
+ absl::make_unique<ServerAddressWeightAttribute>(weight)));
773
762
  }
774
- addresses.emplace_back(
775
- endpoint
776
- .WithAttribute(kHierarchicalPathAttributeKey,
777
- MakeHierarchicalPathAttribute(hierarchical_path))
778
- .WithAttribute(kXdsLocalityNameAttributeKey,
779
- absl::make_unique<XdsLocalityAttribute>(
780
- locality_name->Ref()))
781
- .WithAttribute(
782
- ServerAddressWeightAttribute::
783
- kServerAddressWeightAttributeKey,
784
- absl::make_unique<ServerAddressWeightAttribute>(weight)));
785
763
  }
786
764
  }
787
765
  }
@@ -792,139 +770,106 @@ RefCountedPtr<LoadBalancingPolicy::Config>
792
770
  XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
793
771
  Json::Object priority_children;
794
772
  Json::Array priority_priorities;
795
- // Setting up index to iterate through the discovery mechanisms and keeping
796
- // track the discovery_mechanism each priority belongs to.
797
- size_t discovery_index = 0;
798
- // Setting up num_priorities_remaining to track the priorities in each
799
- // discovery_mechanism.
800
- size_t num_priorities_remaining_in_discovery =
801
- discovery_mechanisms_[discovery_index].num_priorities;
802
- for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
803
- Json child_policy;
804
- if (!discovery_mechanisms_[discovery_index]
805
- .discovery_mechanism->override_child_policy()
806
- .empty()) {
807
- child_policy = discovery_mechanisms_[discovery_index]
808
- .discovery_mechanism->override_child_policy();
809
- } else {
810
- const auto& xds_lb_policy = config_->xds_lb_policy().object_value();
811
- if (xds_lb_policy.find("ROUND_ROBIN") != xds_lb_policy.end()) {
812
- const auto& localities = priority_list_[priority].localities;
813
- Json::Object weighted_targets;
814
- for (const auto& p : localities) {
815
- XdsLocalityName* locality_name = p.first;
816
- const auto& locality = p.second;
817
- // Construct JSON object containing locality name.
818
- Json::Object locality_name_json;
819
- if (!locality_name->region().empty()) {
820
- locality_name_json["region"] = locality_name->region();
821
- }
822
- if (!locality_name->zone().empty()) {
823
- locality_name_json["zone"] = locality_name->zone();
824
- }
825
- if (!locality_name->sub_zone().empty()) {
826
- locality_name_json["sub_zone"] = locality_name->sub_zone();
773
+ for (const auto& discovery_entry : discovery_mechanisms_) {
774
+ const auto& discovery_config = discovery_entry.config();
775
+ for (size_t priority = 0;
776
+ priority < discovery_entry.latest_update->priorities.size();
777
+ ++priority) {
778
+ const auto& priority_entry =
779
+ discovery_entry.latest_update->priorities[priority];
780
+ Json child_policy;
781
+ if (!discovery_entry.discovery_mechanism->override_child_policy()
782
+ .empty()) {
783
+ child_policy =
784
+ discovery_entry.discovery_mechanism->override_child_policy();
785
+ } else {
786
+ const auto& xds_lb_policy = config_->xds_lb_policy().object_value();
787
+ if (xds_lb_policy.find("ROUND_ROBIN") != xds_lb_policy.end()) {
788
+ const auto& localities = priority_entry.localities;
789
+ Json::Object weighted_targets;
790
+ for (const auto& p : localities) {
791
+ XdsLocalityName* locality_name = p.first;
792
+ const auto& locality = p.second;
793
+ // Add weighted target entry.
794
+ weighted_targets[locality_name->AsHumanReadableString()] =
795
+ Json::Object{
796
+ {"weight", locality.lb_weight},
797
+ {"childPolicy",
798
+ Json::Array{
799
+ Json::Object{
800
+ {"round_robin", Json::Object()},
801
+ },
802
+ }},
803
+ };
827
804
  }
828
- // Add weighted target entry.
829
- weighted_targets[locality_name->AsHumanReadableString()] =
805
+ // Construct locality-picking policy.
806
+ // Start with field from our config and add the "targets" field.
807
+ child_policy = Json::Array{
830
808
  Json::Object{
831
- {"weight", locality.lb_weight},
832
- {"childPolicy",
833
- Json::Array{
834
- Json::Object{
835
- {"round_robin", Json::Object()},
836
- },
809
+ {"weighted_target_experimental",
810
+ Json::Object{
811
+ {"targets", Json::Object()},
837
812
  }},
838
- };
813
+ },
814
+ };
815
+ Json::Object& config =
816
+ *(*child_policy.mutable_array())[0].mutable_object();
817
+ auto it = config.begin();
818
+ GPR_ASSERT(it != config.end());
819
+ (*it->second.mutable_object())["targets"] =
820
+ std::move(weighted_targets);
821
+ } else {
822
+ auto it = xds_lb_policy.find("RING_HASH");
823
+ GPR_ASSERT(it != xds_lb_policy.end());
824
+ Json::Object ring_hash_experimental_policy =
825
+ it->second.object_value();
826
+ child_policy = Json::Array{
827
+ Json::Object{
828
+ {"ring_hash_experimental", ring_hash_experimental_policy},
829
+ },
830
+ };
839
831
  }
840
- // Construct locality-picking policy.
841
- // Start with field from our config and add the "targets" field.
842
- child_policy = Json::Array{
843
- Json::Object{
844
- {"weighted_target_experimental",
845
- Json::Object{
846
- {"targets", Json::Object()},
847
- }},
848
- },
849
- };
850
- Json::Object& config =
851
- *(*child_policy.mutable_array())[0].mutable_object();
852
- auto it = config.begin();
853
- GPR_ASSERT(it != config.end());
854
- (*it->second.mutable_object())["targets"] = std::move(weighted_targets);
855
- } else {
856
- auto it = xds_lb_policy.find("RING_HASH");
857
- GPR_ASSERT(it != xds_lb_policy.end());
858
- Json::Object ring_hash_experimental_policy = it->second.object_value();
859
- child_policy = Json::Array{
860
- Json::Object{
861
- {"ring_hash_experimental", ring_hash_experimental_policy},
862
- },
863
- };
864
832
  }
865
- }
866
- // Wrap it in the drop policy.
867
- Json::Array drop_categories;
868
- if (discovery_mechanisms_[discovery_index].drop_config != nullptr) {
869
- for (const auto& category : discovery_mechanisms_[discovery_index]
870
- .drop_config->drop_category_list()) {
871
- drop_categories.push_back(Json::Object{
872
- {"category", category.name},
873
- {"requests_per_million", category.parts_per_million},
874
- });
833
+ // Wrap it in the drop policy.
834
+ Json::Array drop_categories;
835
+ if (discovery_entry.latest_update->drop_config != nullptr) {
836
+ for (const auto& category :
837
+ discovery_entry.latest_update->drop_config->drop_category_list()) {
838
+ drop_categories.push_back(Json::Object{
839
+ {"category", category.name},
840
+ {"requests_per_million", category.parts_per_million},
841
+ });
842
+ }
875
843
  }
876
- }
877
- const auto lrs_key = discovery_mechanisms_[discovery_index]
878
- .discovery_mechanism->GetLrsClusterKey();
879
- Json::Object xds_cluster_impl_config = {
880
- {"clusterName", std::string(lrs_key.first)},
881
- {"childPolicy", std::move(child_policy)},
882
- {"dropCategories", std::move(drop_categories)},
883
- {"maxConcurrentRequests",
884
- config_->discovery_mechanisms()[discovery_index]
885
- .max_concurrent_requests},
886
- };
887
- if (!lrs_key.second.empty()) {
888
- xds_cluster_impl_config["edsServiceName"] = std::string(lrs_key.second);
889
- }
890
- if (config_->discovery_mechanisms()[discovery_index]
891
- .lrs_load_reporting_server.has_value()) {
892
- xds_cluster_impl_config["lrsLoadReportingServer"] =
893
- config_->discovery_mechanisms()[discovery_index]
894
- .lrs_load_reporting_server->ToJson();
895
- }
896
- Json locality_picking_policy = Json::Array{Json::Object{
897
- {"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
898
- }};
899
- // Add priority entry.
900
- const size_t child_number = priority_child_numbers_[priority];
901
- std::string child_name = absl::StrCat("child", child_number);
902
- priority_priorities.emplace_back(child_name);
903
- Json::Object child_config = {
904
- {"config", std::move(locality_picking_policy)},
905
- };
906
- if (discovery_mechanisms_[discovery_index]
907
- .discovery_mechanism->disable_reresolution()) {
908
- child_config["ignore_reresolution_requests"] = true;
909
- }
910
- priority_children[child_name] = std::move(child_config);
911
- // Each priority in the priority_list_ should correspond to a priority in a
912
- // discovery mechanism in discovery_mechanisms_ (both in the same order).
913
- // Keeping track of the discovery_mechanism each priority belongs to.
914
- --num_priorities_remaining_in_discovery;
915
- while (num_priorities_remaining_in_discovery == 0 &&
916
- discovery_index < discovery_mechanisms_.size() - 1) {
917
- ++discovery_index;
918
- num_priorities_remaining_in_discovery =
919
- discovery_mechanisms_[discovery_index].num_priorities;
844
+ Json::Object xds_cluster_impl_config = {
845
+ {"clusterName", discovery_config.cluster_name},
846
+ {"childPolicy", std::move(child_policy)},
847
+ {"dropCategories", std::move(drop_categories)},
848
+ {"maxConcurrentRequests", discovery_config.max_concurrent_requests},
849
+ };
850
+ if (!discovery_config.eds_service_name.empty()) {
851
+ xds_cluster_impl_config["edsServiceName"] =
852
+ discovery_config.eds_service_name;
853
+ }
854
+ if (discovery_config.lrs_load_reporting_server.has_value()) {
855
+ xds_cluster_impl_config["lrsLoadReportingServer"] =
856
+ discovery_config.lrs_load_reporting_server->ToJson();
857
+ }
858
+ Json locality_picking_policy = Json::Array{Json::Object{
859
+ {"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
860
+ }};
861
+ // Add priority entry, with the appropriate child name.
862
+ std::string child_name = discovery_entry.GetChildPolicyName(priority);
863
+ priority_priorities.emplace_back(child_name);
864
+ Json::Object child_config = {
865
+ {"config", std::move(locality_picking_policy)},
866
+ };
867
+ if (discovery_entry.discovery_mechanism->disable_reresolution()) {
868
+ child_config["ignore_reresolution_requests"] = true;
869
+ }
870
+ priority_children[child_name] = std::move(child_config);
920
871
  }
921
872
  }
922
- // There should be matching number of priorities in discovery_mechanisms_ and
923
- // in priority_list_; therefore at the end of looping through all the
924
- // priorities, num_priorities_remaining should be down to 0, and index should
925
- // be the last index in discovery_mechanisms_.
926
- GPR_ASSERT(num_priorities_remaining_in_discovery == 0);
927
- GPR_ASSERT(discovery_index == discovery_mechanisms_.size() - 1);
928
873
  Json json = Json::Array{Json::Object{
929
874
  {"priority_experimental",
930
875
  Json::Object{