grpc 1.45.0 → 1.46.3

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 (515) 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_bootstrap.cc +2 -2
  343. data/src/core/ext/xds/xds_bootstrap.h +2 -0
  344. data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
  345. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  346. data/src/core/ext/xds/xds_client.cc +87 -95
  347. data/src/core/ext/xds/xds_client.h +13 -5
  348. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  349. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  350. data/src/core/ext/xds/xds_common_types.cc +9 -9
  351. data/src/core/ext/xds/xds_common_types.h +3 -3
  352. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  353. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  354. data/src/core/ext/xds/xds_listener.cc +1 -1
  355. data/src/core/ext/xds/xds_route_config.cc +162 -25
  356. data/src/core/ext/xds/xds_route_config.h +13 -10
  357. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  358. data/src/core/lib/avl/avl.h +68 -5
  359. data/src/core/lib/channel/call_tracer.h +4 -1
  360. data/src/core/lib/channel/channel_args.cc +138 -59
  361. data/src/core/lib/channel/channel_args.h +210 -9
  362. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  363. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  364. data/src/core/lib/channel/channel_stack.h +2 -5
  365. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  366. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  367. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  368. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  369. data/src/core/lib/channel/connected_channel.h +1 -0
  370. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  371. data/src/core/lib/channel/promise_based_filter.h +55 -41
  372. data/src/core/lib/compression/compression_internal.cc +1 -7
  373. data/src/core/lib/debug/stats_data.cc +2 -6
  374. data/src/core/lib/debug/stats_data.h +18 -21
  375. data/src/core/lib/gpr/tls.h +1 -0
  376. data/src/core/lib/gprpp/bitset.h +12 -0
  377. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  378. data/src/core/lib/gprpp/match.h +73 -0
  379. data/src/core/lib/gprpp/overload.h +59 -0
  380. data/src/core/lib/gprpp/ref_counted.h +2 -0
  381. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  382. data/src/core/lib/gprpp/status_helper.cc +18 -2
  383. data/src/core/lib/gprpp/time.cc +12 -0
  384. data/src/core/lib/gprpp/time.h +1 -1
  385. data/src/core/lib/http/format_request.cc +1 -2
  386. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  387. data/src/core/lib/http/parser.cc +80 -9
  388. data/src/core/lib/http/parser.h +14 -1
  389. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  390. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  391. data/src/core/lib/iomgr/port.h +0 -2
  392. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  393. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  394. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  395. data/src/core/lib/json/json_util.h +3 -3
  396. data/src/core/lib/promise/call_push_pull.h +144 -0
  397. data/src/core/lib/promise/detail/status.h +2 -1
  398. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  399. data/src/core/lib/promise/latch.h +104 -0
  400. data/src/core/lib/resource_quota/api.cc +5 -30
  401. data/src/core/lib/resource_quota/api.h +1 -1
  402. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  403. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  404. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  405. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  406. data/src/core/lib/security/context/security_context.h +8 -1
  407. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  408. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  409. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  410. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  411. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  412. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  413. data/src/core/lib/security/credentials/credentials.h +16 -33
  414. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  415. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  416. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  417. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  418. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  419. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  420. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  421. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  422. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  423. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  424. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  425. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  426. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  427. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  428. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  429. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  430. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  431. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  433. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  434. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  435. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  436. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  437. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  438. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  439. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  440. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  441. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  442. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  443. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  444. data/src/core/lib/security/transport/auth_filters.h +7 -7
  445. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  446. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  447. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  448. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  449. data/src/core/lib/surface/call.cc +1023 -903
  450. data/src/core/lib/surface/call.h +0 -14
  451. data/src/core/lib/surface/channel.cc +4 -3
  452. data/src/core/lib/surface/channel_init.cc +2 -3
  453. data/src/core/lib/surface/channel_init.h +2 -6
  454. data/src/core/lib/surface/init.cc +1 -1
  455. data/src/core/lib/surface/server.cc +3 -14
  456. data/src/core/lib/surface/server.h +1 -2
  457. data/src/core/lib/surface/version.cc +2 -2
  458. data/src/core/lib/transport/byte_stream.cc +2 -0
  459. data/src/core/lib/transport/metadata_batch.h +12 -8
  460. data/src/core/lib/transport/transport.h +20 -5
  461. data/src/core/lib/transport/transport_impl.h +4 -3
  462. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  463. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  464. data/src/core/tsi/ssl_transport_security.cc +75 -38
  465. data/src/core/tsi/ssl_transport_security.h +8 -2
  466. data/src/core/tsi/transport_security_interface.h +2 -0
  467. data/src/ruby/ext/grpc/extconf.rb +1 -1
  468. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  469. data/src/ruby/lib/grpc/grpc.rb +1 -1
  470. data/src/ruby/lib/grpc/version.rb +1 -1
  471. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  472. data/src/ruby/pb/test/client.rb +769 -0
  473. data/src/ruby/pb/test/server.rb +252 -0
  474. data/src/ruby/pb/test/xds_client.rb +415 -0
  475. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  476. data/third_party/upb/upb/decode.c +32 -16
  477. data/third_party/upb/upb/def.c +118 -55
  478. data/third_party/upb/upb/def.h +12 -3
  479. data/third_party/upb/upb/encode.c +14 -8
  480. data/third_party/upb/upb/json_encode.c +776 -0
  481. data/third_party/upb/upb/json_encode.h +62 -0
  482. data/third_party/upb/upb/msg.c +5 -7
  483. data/third_party/upb/upb/msg.h +1 -2
  484. data/third_party/upb/upb/msg_internal.h +49 -36
  485. data/third_party/upb/upb/port_def.inc +8 -0
  486. data/third_party/upb/upb/port_undef.inc +1 -0
  487. data/third_party/upb/upb/table.c +10 -6
  488. data/third_party/upb/upb/table_internal.h +2 -0
  489. data/third_party/upb/upb/upb.h +41 -11
  490. data/third_party/zlib/crc32.c +966 -292
  491. data/third_party/zlib/crc32.h +9441 -436
  492. data/third_party/zlib/deflate.c +78 -30
  493. data/third_party/zlib/deflate.h +12 -15
  494. data/third_party/zlib/gzguts.h +3 -2
  495. data/third_party/zlib/gzlib.c +5 -3
  496. data/third_party/zlib/gzread.c +5 -7
  497. data/third_party/zlib/gzwrite.c +25 -13
  498. data/third_party/zlib/infback.c +2 -1
  499. data/third_party/zlib/inffast.c +14 -14
  500. data/third_party/zlib/inflate.c +39 -8
  501. data/third_party/zlib/inflate.h +3 -2
  502. data/third_party/zlib/inftrees.c +3 -3
  503. data/third_party/zlib/trees.c +27 -48
  504. data/third_party/zlib/zlib.h +123 -100
  505. data/third_party/zlib/zutil.c +2 -2
  506. data/third_party/zlib/zutil.h +12 -9
  507. metadata +66 -45
  508. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  509. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  510. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  511. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  512. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  513. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  514. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  515. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -365,23 +365,23 @@ grpc_error_handle CommonTlsContext::Parse(
365
365
  &errors);
366
366
  }
367
367
 
368
- grpc_error_handle ExtractHttpFilterTypeName(const XdsEncodingContext& context,
369
- const google_protobuf_Any* any,
370
- absl::string_view* filter_type) {
371
- *filter_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
372
- if (*filter_type == "type.googleapis.com/xds.type.v3.TypedStruct" ||
373
- *filter_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
368
+ grpc_error_handle ExtractExtensionTypeName(const XdsEncodingContext& context,
369
+ const google_protobuf_Any* any,
370
+ absl::string_view* extension_type) {
371
+ *extension_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
372
+ if (*extension_type == "type.googleapis.com/xds.type.v3.TypedStruct" ||
373
+ *extension_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
374
374
  upb_StringView any_value = google_protobuf_Any_value(any);
375
375
  const auto* typed_struct = xds_type_v3_TypedStruct_parse(
376
376
  any_value.data, any_value.size, context.arena);
377
377
  if (typed_struct == nullptr) {
378
378
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
379
- "could not parse TypedStruct from filter config");
379
+ "could not parse TypedStruct from extension");
380
380
  }
381
- *filter_type =
381
+ *extension_type =
382
382
  UpbStringToAbsl(xds_type_v3_TypedStruct_type_url(typed_struct));
383
383
  }
384
- *filter_type = absl::StripPrefix(*filter_type, "type.googleapis.com/");
384
+ *extension_type = absl::StripPrefix(*extension_type, "type.googleapis.com/");
385
385
  return GRPC_ERROR_NONE;
386
386
  }
387
387
 
@@ -86,9 +86,9 @@ struct CommonTlsContext {
86
86
  CommonTlsContext* common_tls_context);
87
87
  };
88
88
 
89
- grpc_error_handle ExtractHttpFilterTypeName(const XdsEncodingContext& context,
90
- const google_protobuf_Any* any,
91
- absl::string_view* filter_type);
89
+ grpc_error_handle ExtractExtensionTypeName(const XdsEncodingContext& context,
90
+ const google_protobuf_Any* any,
91
+ absl::string_view* extension_type);
92
92
 
93
93
  } // namespace grpc_core
94
94
 
@@ -202,7 +202,7 @@ grpc_error_handle LocalityParse(
202
202
  std::string region =
203
203
  UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
204
204
  std::string zone =
205
- UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
205
+ UpbStringToStdString(envoy_config_core_v3_Locality_zone(locality));
206
206
  std::string sub_zone =
207
207
  UpbStringToStdString(envoy_config_core_v3_Locality_sub_zone(locality));
208
208
  output_locality->name = MakeRefCounted<XdsLocalityName>(
@@ -285,11 +285,18 @@ grpc_error_handle EdsResourceParse(
285
285
  if (locality.lb_weight == 0) continue;
286
286
  // Make sure prorities is big enough. Note that they might not
287
287
  // arrive in priority order.
288
- while (eds_update->priorities.size() < priority + 1) {
289
- eds_update->priorities.emplace_back();
288
+ if (eds_update->priorities.size() < priority + 1) {
289
+ eds_update->priorities.resize(priority + 1);
290
+ }
291
+ auto& locality_map = eds_update->priorities[priority].localities;
292
+ auto it = locality_map.find(locality.name.get());
293
+ if (it != locality_map.end()) {
294
+ errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
295
+ "duplicate locality ", locality.name->AsHumanReadableString(),
296
+ " found in priority ", priority)));
297
+ } else {
298
+ locality_map.emplace(locality.name.get(), std::move(locality));
290
299
  }
291
- eds_update->priorities[priority].localities.emplace(locality.name.get(),
292
- std::move(locality));
293
300
  }
294
301
  for (const auto& priority : eds_update->priorities) {
295
302
  if (priority.localities.empty()) {
@@ -198,7 +198,7 @@ XdsHttpFaultFilter::GenerateFilterConfigOverride(
198
198
  }
199
199
 
200
200
  const grpc_channel_filter* XdsHttpFaultFilter::channel_filter() const {
201
- return &FaultInjectionFilterVtable;
201
+ return &FaultInjectionFilter::kFilter;
202
202
  }
203
203
 
204
204
  grpc_channel_args* XdsHttpFaultFilter::ModifyChannelArgs(
@@ -332,7 +332,7 @@ grpc_error_handle HttpConnectionManagerParse(
332
332
  }
333
333
  absl::string_view filter_type;
334
334
  grpc_error_handle error =
335
- ExtractHttpFilterTypeName(context, any, &filter_type);
335
+ ExtractExtensionTypeName(context, any, &filter_type);
336
336
  if (error != GRPC_ERROR_NONE) return error;
337
337
  const XdsHttpFilterImpl* filter_impl =
338
338
  XdsHttpFilterRegistry::GetFilterForType(filter_type);
@@ -23,6 +23,7 @@
23
23
  #include "absl/strings/str_split.h"
24
24
  #include "absl/strings/string_view.h"
25
25
  #include "envoy/config/core/v3/base.upb.h"
26
+ #include "envoy/config/core/v3/extension.upb.h"
26
27
  #include "envoy/config/route/v3/route.upb.h"
27
28
  #include "envoy/config/route/v3/route.upbdefs.h"
28
29
  #include "envoy/config/route/v3/route_components.upb.h"
@@ -39,12 +40,14 @@
39
40
 
40
41
  #include "src/core/ext/xds/upb_utils.h"
41
42
  #include "src/core/ext/xds/xds_api.h"
43
+ #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
42
44
  #include "src/core/ext/xds/xds_common_types.h"
43
45
  #include "src/core/ext/xds/xds_resource_type.h"
44
46
  #include "src/core/ext/xds/xds_routing.h"
45
47
  #include "src/core/lib/gpr/env.h"
46
48
  #include "src/core/lib/gpr/string.h"
47
49
  #include "src/core/lib/iomgr/error.h"
50
+ #include "src/core/lib/transport/error_utils.h"
48
51
 
49
52
  namespace grpc_core {
50
53
 
@@ -57,6 +60,15 @@ bool XdsRbacEnabled() {
57
60
  return parse_succeeded && parsed_value;
58
61
  }
59
62
 
63
+ // TODO(donnadionne): Remove once RLS is no longer experimental
64
+ bool XdsRlsEnabled() {
65
+ char* value = gpr_getenv("GRPC_EXPERIMENTAL_XDS_RLS_LB");
66
+ bool parsed_value;
67
+ bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
68
+ gpr_free(value);
69
+ return parse_succeeded && parsed_value;
70
+ }
71
+
60
72
  //
61
73
  // XdsRouteConfigResource::RetryPolicy
62
74
  //
@@ -212,11 +224,18 @@ std::string XdsRouteConfigResource::Route::RouteAction::ToString() const {
212
224
  if (retry_policy.has_value()) {
213
225
  contents.push_back(absl::StrCat("retry_policy=", retry_policy->ToString()));
214
226
  }
215
- if (!cluster_name.empty()) {
216
- contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
217
- }
218
- for (const ClusterWeight& cluster_weight : weighted_clusters) {
219
- contents.push_back(cluster_weight.ToString());
227
+ if (action.index() == kClusterIndex) {
228
+ contents.push_back(
229
+ absl::StrFormat("Cluster name: %s", absl::get<kClusterIndex>(action)));
230
+ } else if (action.index() == kWeightedClustersIndex) {
231
+ auto& action_weighted_clusters = absl::get<kWeightedClustersIndex>(action);
232
+ for (const ClusterWeight& cluster_weight : action_weighted_clusters) {
233
+ contents.push_back(cluster_weight.ToString());
234
+ }
235
+ } else if (action.index() == kClusterSpecifierPluginIndex) {
236
+ contents.push_back(
237
+ absl::StrFormat("Cluster specifier plugin name: %s",
238
+ absl::get<kClusterSpecifierPluginIndex>(action)));
220
239
  }
221
240
  if (max_stream_duration.has_value()) {
222
241
  contents.push_back(max_stream_duration->ToString());
@@ -258,35 +277,95 @@ std::string XdsRouteConfigResource::Route::ToString() const {
258
277
  //
259
278
 
260
279
  std::string XdsRouteConfigResource::ToString() const {
261
- std::vector<std::string> vhosts;
280
+ std::vector<std::string> parts;
262
281
  for (const VirtualHost& vhost : virtual_hosts) {
263
- vhosts.push_back(
282
+ parts.push_back(
264
283
  absl::StrCat("vhost={\n"
265
284
  " domains=[",
266
285
  absl::StrJoin(vhost.domains, ", "),
267
286
  "]\n"
268
287
  " routes=[\n"));
269
288
  for (const XdsRouteConfigResource::Route& route : vhost.routes) {
270
- vhosts.push_back(" {\n");
271
- vhosts.push_back(route.ToString());
272
- vhosts.push_back("\n }\n");
289
+ parts.push_back(" {\n");
290
+ parts.push_back(route.ToString());
291
+ parts.push_back("\n }\n");
273
292
  }
274
- vhosts.push_back(" ]\n");
275
- vhosts.push_back(" typed_per_filter_config={\n");
293
+ parts.push_back(" ]\n");
294
+ parts.push_back(" typed_per_filter_config={\n");
276
295
  for (const auto& p : vhost.typed_per_filter_config) {
277
296
  const std::string& name = p.first;
278
297
  const auto& config = p.second;
279
- vhosts.push_back(
280
- absl::StrCat(" ", name, "=", config.ToString(), "\n"));
298
+ parts.push_back(absl::StrCat(" ", name, "=", config.ToString(), "\n"));
281
299
  }
282
- vhosts.push_back(" }\n");
283
- vhosts.push_back("]\n");
300
+ parts.push_back(" }\n");
301
+ parts.push_back("]\n");
284
302
  }
285
- return absl::StrJoin(vhosts, "");
303
+ parts.push_back("cluster_specifier_plugins={\n");
304
+ for (const auto& it : cluster_specifier_plugin_map) {
305
+ parts.push_back(absl::StrFormat("%s={%s}\n", it.first, it.second));
306
+ }
307
+ parts.push_back("}");
308
+ return absl::StrJoin(parts, "");
286
309
  }
287
310
 
288
311
  namespace {
289
312
 
313
+ grpc_error_handle ClusterSpecifierPluginParse(
314
+ const XdsEncodingContext& context,
315
+ const envoy_config_route_v3_RouteConfiguration* route_config,
316
+ XdsRouteConfigResource* rds_update) {
317
+ size_t num_cluster_specifier_plugins;
318
+ const envoy_config_route_v3_ClusterSpecifierPlugin* const*
319
+ cluster_specifier_plugin =
320
+ envoy_config_route_v3_RouteConfiguration_cluster_specifier_plugins(
321
+ route_config, &num_cluster_specifier_plugins);
322
+ for (size_t i = 0; i < num_cluster_specifier_plugins; ++i) {
323
+ const envoy_config_core_v3_TypedExtensionConfig* extension =
324
+ envoy_config_route_v3_ClusterSpecifierPlugin_extension(
325
+ cluster_specifier_plugin[i]);
326
+ std::string name = UpbStringToStdString(
327
+ envoy_config_core_v3_TypedExtensionConfig_name(extension));
328
+ if (rds_update->cluster_specifier_plugin_map.find(name) !=
329
+ rds_update->cluster_specifier_plugin_map.end()) {
330
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
331
+ "Duplicated definition of cluster_specifier_plugin ", name));
332
+ }
333
+ const google_protobuf_Any* any =
334
+ envoy_config_core_v3_TypedExtensionConfig_typed_config(extension);
335
+ if (any == nullptr) {
336
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
337
+ "Could not obtrain TypedExtensionConfig for plugin config.");
338
+ }
339
+ absl::string_view plugin_type;
340
+ grpc_error_handle error =
341
+ ExtractExtensionTypeName(context, any, &plugin_type);
342
+ if (error != GRPC_ERROR_NONE) return error;
343
+ bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
344
+ cluster_specifier_plugin[i]);
345
+ const XdsClusterSpecifierPluginImpl* cluster_specifier_plugin_impl =
346
+ XdsClusterSpecifierPluginRegistry::GetPluginForType(plugin_type);
347
+ std::string lb_policy_config;
348
+ if (cluster_specifier_plugin_impl == nullptr) {
349
+ if (!is_optional) {
350
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(
351
+ absl::StrCat("Unknown ClusterSpecifierPlugin type ", plugin_type));
352
+ }
353
+ // Optional plugin, leave lb_policy_config empty.
354
+ } else {
355
+ auto config =
356
+ cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
357
+ google_protobuf_Any_value(any), context.arena, context.symtab);
358
+ if (!config.ok()) {
359
+ return absl_status_to_grpc_error(config.status());
360
+ }
361
+ lb_policy_config = std::move(*config);
362
+ }
363
+ rds_update->cluster_specifier_plugin_map[std::move(name)] =
364
+ std::move(lb_policy_config);
365
+ }
366
+ return GRPC_ERROR_NONE;
367
+ }
368
+
290
369
  grpc_error_handle RoutePathMatchParse(
291
370
  const envoy_config_route_v3_RouteMatch* match,
292
371
  XdsRouteConfigResource::Route* route, bool* ignore_route) {
@@ -523,7 +602,7 @@ grpc_error_handle ParseTypedPerFilterConfig(
523
602
  }
524
603
  }
525
604
  grpc_error_handle error =
526
- ExtractHttpFilterTypeName(context, any, &filter_type);
605
+ ExtractExtensionTypeName(context, any, &filter_type);
527
606
  if (error != GRPC_ERROR_NONE) return error;
528
607
  const XdsHttpFilterImpl* filter_impl =
529
608
  XdsHttpFilterRegistry::GetFilterForType(filter_type);
@@ -623,19 +702,27 @@ grpc_error_handle RetryPolicyParse(
623
702
  grpc_error_handle RouteActionParse(
624
703
  const XdsEncodingContext& context,
625
704
  const envoy_config_route_v3_Route* route_msg,
705
+ const std::map<std::string /*cluster_specifier_plugin_name*/,
706
+ std::string /*LB policy config*/>&
707
+ cluster_specifier_plugin_map,
626
708
  XdsRouteConfigResource::Route::RouteAction* route, bool* ignore_route) {
627
709
  const envoy_config_route_v3_RouteAction* route_action =
628
710
  envoy_config_route_v3_Route_route(route_msg);
629
711
  // Get the cluster or weighted_clusters in the RouteAction.
630
712
  if (envoy_config_route_v3_RouteAction_has_cluster(route_action)) {
631
- route->cluster_name = UpbStringToStdString(
713
+ std::string cluster_name = UpbStringToStdString(
632
714
  envoy_config_route_v3_RouteAction_cluster(route_action));
633
- if (route->cluster_name.empty()) {
715
+ if (cluster_name.empty()) {
634
716
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
635
717
  "RouteAction cluster contains empty cluster name.");
636
718
  }
719
+ route->action
720
+ .emplace<XdsRouteConfigResource::Route::RouteAction::kClusterIndex>(
721
+ std::move(cluster_name));
637
722
  } else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
638
723
  route_action)) {
724
+ std::vector<XdsRouteConfigResource::Route::RouteAction::ClusterWeight>
725
+ action_weighted_clusters;
639
726
  const envoy_config_route_v3_WeightedCluster* weighted_cluster =
640
727
  envoy_config_route_v3_RouteAction_weighted_clusters(route_action);
641
728
  uint32_t total_weight = 100;
@@ -682,18 +769,41 @@ grpc_error_handle RouteActionParse(
682
769
  &cluster.typed_per_filter_config);
683
770
  if (error != GRPC_ERROR_NONE) return error;
684
771
  }
685
- route->weighted_clusters.emplace_back(std::move(cluster));
772
+ action_weighted_clusters.emplace_back(std::move(cluster));
686
773
  }
687
774
  if (total_weight != sum_of_weights) {
688
775
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
689
776
  "RouteAction weighted_cluster has incorrect total weight");
690
777
  }
691
- if (route->weighted_clusters.empty()) {
778
+ if (action_weighted_clusters.empty()) {
692
779
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
693
780
  "RouteAction weighted_cluster has no valid clusters specified.");
694
781
  }
782
+ route->action = std::move(action_weighted_clusters);
783
+ } else if (XdsRlsEnabled() &&
784
+ envoy_config_route_v3_RouteAction_has_cluster_specifier_plugin(
785
+ route_action)) {
786
+ std::string plugin_name = UpbStringToStdString(
787
+ envoy_config_route_v3_RouteAction_cluster_specifier_plugin(
788
+ route_action));
789
+ if (plugin_name.empty()) {
790
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
791
+ "RouteAction cluster contains empty cluster specifier plugin name.");
792
+ }
793
+ auto it = cluster_specifier_plugin_map.find(plugin_name);
794
+ if (it == cluster_specifier_plugin_map.end()) {
795
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(
796
+ absl::StrCat("RouteAction cluster contains cluster specifier plugin "
797
+ "name not configured: ",
798
+ plugin_name));
799
+ }
800
+ if (it->second.empty()) *ignore_route = true;
801
+ route->action.emplace<XdsRouteConfigResource::Route::RouteAction::
802
+ kClusterSpecifierPluginIndex>(
803
+ std::move(plugin_name));
695
804
  } else {
696
- // No cluster or weighted_clusters found in RouteAction, ignore this route.
805
+ // No cluster or weighted_clusters or plugin found in RouteAction, ignore
806
+ // this route.
697
807
  *ignore_route = true;
698
808
  }
699
809
  if (!*ignore_route) {
@@ -808,6 +918,12 @@ grpc_error_handle XdsRouteConfigResource::Parse(
808
918
  const XdsEncodingContext& context,
809
919
  const envoy_config_route_v3_RouteConfiguration* route_config,
810
920
  XdsRouteConfigResource* rds_update) {
921
+ // Get the cluster spcifier plugins
922
+ if (XdsRlsEnabled()) {
923
+ grpc_error_handle error =
924
+ ClusterSpecifierPluginParse(context, route_config, rds_update);
925
+ if (error != GRPC_ERROR_NONE) return error;
926
+ }
811
927
  // Get the virtual hosts.
812
928
  size_t num_virtual_hosts;
813
929
  const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
@@ -862,6 +978,12 @@ grpc_error_handle XdsRouteConfigResource::Parse(
862
978
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
863
979
  "No route found in the virtual host.");
864
980
  }
981
+ // Build a set of cluster_specifier_plugin configured to make sure each is
982
+ // actually referenced by a route action.
983
+ std::set<absl::string_view> cluster_specifier_plugins;
984
+ for (auto& plugin : rds_update->cluster_specifier_plugin_map) {
985
+ cluster_specifier_plugins.emplace(plugin.first);
986
+ }
865
987
  // Loop over the whole list of routes
866
988
  for (size_t j = 0; j < num_routes; ++j) {
867
989
  const envoy_config_route_v3_RouteMatch* match =
@@ -889,14 +1011,23 @@ grpc_error_handle XdsRouteConfigResource::Parse(
889
1011
  route.action.emplace<XdsRouteConfigResource::Route::RouteAction>();
890
1012
  auto& route_action =
891
1013
  absl::get<XdsRouteConfigResource::Route::RouteAction>(route.action);
892
- error =
893
- RouteActionParse(context, routes[j], &route_action, &ignore_route);
1014
+ error = RouteActionParse(context, routes[j],
1015
+ rds_update->cluster_specifier_plugin_map,
1016
+ &route_action, &ignore_route);
894
1017
  if (error != GRPC_ERROR_NONE) return error;
895
1018
  if (ignore_route) continue;
896
1019
  if (route_action.retry_policy == absl::nullopt &&
897
1020
  retry_policy != nullptr) {
898
1021
  route_action.retry_policy = virtual_host_retry_policy;
899
1022
  }
1023
+ // Mark off plugins used in route action.
1024
+ std::string* cluster_specifier_action =
1025
+ absl::get_if<XdsRouteConfigResource::Route::RouteAction::
1026
+ kClusterSpecifierPluginIndex>(
1027
+ &route_action.action);
1028
+ if (cluster_specifier_action != nullptr) {
1029
+ cluster_specifier_plugins.erase(*cluster_specifier_action);
1030
+ }
900
1031
  } else if (envoy_config_route_v3_Route_has_non_forwarding_action(
901
1032
  routes[j])) {
902
1033
  route.action
@@ -918,6 +1049,12 @@ grpc_error_handle XdsRouteConfigResource::Parse(
918
1049
  if (vhost.routes.empty()) {
919
1050
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
920
1051
  }
1052
+ // For plugins not used in route action, delete from the update to prevent
1053
+ // further use.
1054
+ for (auto& unused_plugin : cluster_specifier_plugins) {
1055
+ rds_update->cluster_specifier_plugin_map.erase(
1056
+ std::string(unused_plugin));
1057
+ }
921
1058
  }
922
1059
  return GRPC_ERROR_NONE;
923
1060
  }
@@ -30,6 +30,7 @@
30
30
  #include "re2/re2.h"
31
31
 
32
32
  #include "src/core/ext/xds/xds_client.h"
33
+ #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
33
34
  #include "src/core/ext/xds/xds_common_types.h"
34
35
  #include "src/core/ext/xds/xds_http_filters.h"
35
36
  #include "src/core/ext/xds/xds_resource_type_impl.h"
@@ -67,8 +68,6 @@ struct XdsRouteConfigResource {
67
68
  std::string ToString() const;
68
69
  };
69
70
 
70
- // TODO(donnadionne): When we can use absl::variant<>, consider using that
71
- // for: PathMatcher, HeaderMatcher, cluster_name and weighted_clusters
72
71
  struct Route {
73
72
  // Matchers for this route.
74
73
  struct Matchers {
@@ -130,10 +129,11 @@ struct XdsRouteConfigResource {
130
129
  absl::optional<RetryPolicy> retry_policy;
131
130
 
132
131
  // Action for this route.
133
- // TODO(roth): When we can use absl::variant<>, consider using that
134
- // here, to enforce the fact that only one of the two fields can be set.
135
- std::string cluster_name;
136
- std::vector<ClusterWeight> weighted_clusters;
132
+ static constexpr size_t kClusterIndex = 0;
133
+ static constexpr size_t kWeightedClustersIndex = 1;
134
+ static constexpr size_t kClusterSpecifierPluginIndex = 2;
135
+ absl::variant<std::string, std::vector<ClusterWeight>, std::string>
136
+ action;
137
137
  // Storing the timeout duration from route action:
138
138
  // RouteAction.max_stream_duration.grpc_timeout_header_max or
139
139
  // RouteAction.max_stream_duration.max_stream_duration if the former is
@@ -142,9 +142,7 @@ struct XdsRouteConfigResource {
142
142
 
143
143
  bool operator==(const RouteAction& other) const {
144
144
  return hash_policies == other.hash_policies &&
145
- retry_policy == other.retry_policy &&
146
- cluster_name == other.cluster_name &&
147
- weighted_clusters == other.weighted_clusters &&
145
+ retry_policy == other.retry_policy && action == other.action &&
148
146
  max_stream_duration == other.max_stream_duration;
149
147
  }
150
148
  std::string ToString() const;
@@ -178,9 +176,13 @@ struct XdsRouteConfigResource {
178
176
  };
179
177
 
180
178
  std::vector<VirtualHost> virtual_hosts;
179
+ std::map<std::string /*cluster_specifier_plugin_name*/,
180
+ std::string /*LB policy config*/>
181
+ cluster_specifier_plugin_map;
181
182
 
182
183
  bool operator==(const XdsRouteConfigResource& other) const {
183
- return virtual_hosts == other.virtual_hosts;
184
+ return virtual_hosts == other.virtual_hosts &&
185
+ cluster_specifier_plugin_map == other.cluster_specifier_plugin_map;
184
186
  }
185
187
  std::string ToString() const;
186
188
 
@@ -207,6 +209,7 @@ class XdsRouteConfigResourceType
207
209
 
208
210
  void InitUpbSymtab(upb_DefPool* symtab) const override {
209
211
  envoy_config_route_v3_RouteConfiguration_getmsgdef(symtab);
212
+ XdsClusterSpecifierPluginRegistry::PopulateSymtab(symtab);
210
213
  }
211
214
  };
212
215
 
@@ -100,7 +100,7 @@ class XdsServerConfigFetcher::ListenerWatcher
100
100
 
101
101
  void OnResourceChanged(XdsListenerResource listener) override;
102
102
 
103
- void OnError(grpc_error_handle error) override;
103
+ void OnError(absl::Status status) override;
104
104
 
105
105
  void OnResourceDoesNotExist() override;
106
106
 
@@ -195,7 +195,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
195
195
  // RDS resources.
196
196
  void OnRouteConfigChanged(const std::string& resource_name,
197
197
  XdsRouteConfigResource route_config);
198
- void OnError(const std::string& resource_name, grpc_error_handle error);
198
+ void OnError(const std::string& resource_name, absl::Status status);
199
199
  void OnResourceDoesNotExist(const std::string& resource_name);
200
200
 
201
201
  RefCountedPtr<XdsClient> xds_client_;
@@ -233,8 +233,8 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
233
233
  std::move(route_config));
234
234
  }
235
235
 
236
- void OnError(grpc_error_handle error) override {
237
- filter_chain_match_manager_->OnError(resource_name_, error);
236
+ void OnError(absl::Status status) override {
237
+ filter_chain_match_manager_->OnError(resource_name_, status);
238
238
  }
239
239
 
240
240
  void OnResourceDoesNotExist() override {
@@ -370,7 +370,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
370
370
  class RouteConfigWatcher;
371
371
 
372
372
  void OnRouteConfigChanged(XdsRouteConfigResource rds_update);
373
- void OnError(grpc_error_handle error);
373
+ void OnError(absl::Status status);
374
374
  void OnResourceDoesNotExist();
375
375
 
376
376
  RefCountedPtr<XdsClient> xds_client_;
@@ -398,7 +398,7 @@ class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
398
398
  parent_->OnRouteConfigChanged(std::move(route_config));
399
399
  }
400
400
 
401
- void OnError(grpc_error_handle error) override { parent_->OnError(error); }
401
+ void OnError(absl::Status status) override { parent_->OnError(status); }
402
402
 
403
403
  void OnResourceDoesNotExist() override { parent_->OnResourceDoesNotExist(); }
404
404
 
@@ -510,29 +510,26 @@ void XdsServerConfigFetcher::ListenerWatcher::OnResourceChanged(
510
510
  }
511
511
  }
512
512
 
513
- void XdsServerConfigFetcher::ListenerWatcher::OnError(grpc_error_handle error) {
513
+ void XdsServerConfigFetcher::ListenerWatcher::OnError(absl::Status status) {
514
514
  MutexLock lock(&mu_);
515
515
  if (filter_chain_match_manager_ != nullptr ||
516
516
  pending_filter_chain_match_manager_ != nullptr) {
517
517
  gpr_log(GPR_ERROR,
518
518
  "ListenerWatcher:%p XdsClient reports error: %s for %s; "
519
519
  "ignoring in favor of existing resource",
520
- this, grpc_error_std_string(error).c_str(),
521
- listening_address_.c_str());
520
+ this, status.ToString().c_str(), listening_address_.c_str());
522
521
  } else {
523
522
  if (serving_status_notifier_.on_serving_status_update != nullptr) {
524
523
  serving_status_notifier_.on_serving_status_update(
525
524
  serving_status_notifier_.user_data, listening_address_.c_str(),
526
- {GRPC_STATUS_UNAVAILABLE, grpc_error_std_string(error).c_str()});
525
+ {GRPC_STATUS_UNAVAILABLE, status.ToString().c_str()});
527
526
  } else {
528
527
  gpr_log(GPR_ERROR,
529
528
  "ListenerWatcher:%p error obtaining xDS Listener resource: %s; "
530
529
  "not serving on %s",
531
- this, grpc_error_std_string(error).c_str(),
532
- listening_address_.c_str());
530
+ this, status.ToString().c_str(), listening_address_.c_str());
533
531
  }
534
532
  }
535
- GRPC_ERROR_UNREF(error);
536
533
  }
537
534
 
538
535
  void XdsServerConfigFetcher::ListenerWatcher::OnFatalError(
@@ -778,7 +775,7 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
778
775
  }
779
776
 
780
777
  void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::OnError(
781
- const std::string& resource_name, grpc_error_handle error) {
778
+ const std::string& resource_name, absl::Status status) {
782
779
  RefCountedPtr<ListenerWatcher> listener_watcher;
783
780
  {
784
781
  MutexLock lock(&mu_);
@@ -787,11 +784,11 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::OnError(
787
784
  if (--rds_resources_yet_to_fetch_ == 0) {
788
785
  listener_watcher = std::move(listener_watcher_);
789
786
  }
790
- state.rds_update = grpc_error_to_absl_status(error);
787
+ state.rds_update = status;
791
788
  } else {
792
789
  // Prefer existing good version over current errored version
793
790
  if (!state.rds_update->ok()) {
794
- state.rds_update = grpc_error_to_absl_status(error);
791
+ state.rds_update = status;
795
792
  }
796
793
  }
797
794
  }
@@ -800,7 +797,6 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::OnError(
800
797
  if (listener_watcher != nullptr) {
801
798
  listener_watcher->PendingFilterChainMatchManagerReady(this);
802
799
  }
803
- GRPC_ERROR_UNREF(error);
804
800
  }
805
801
 
806
802
  void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
@@ -1051,7 +1047,8 @@ absl::StatusOr<grpc_channel_args*> XdsServerConfigFetcher::ListenerWatcher::
1051
1047
  // Add XdsCertificateProvider if credentials are xDS.
1052
1048
  grpc_server_credentials* server_creds =
1053
1049
  grpc_find_server_credentials_in_args(args);
1054
- if (server_creds != nullptr && server_creds->type() == kCredentialsTypeXds) {
1050
+ if (server_creds != nullptr &&
1051
+ server_creds->type() == XdsServerCredentials::Type()) {
1055
1052
  absl::StatusOr<RefCountedPtr<XdsCertificateProvider>> result =
1056
1053
  CreateOrGetXdsCertificateProviderFromFilterChainData(filter_chain);
1057
1054
  if (!result.ok()) {
@@ -1258,15 +1255,13 @@ void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1258
1255
  }
1259
1256
 
1260
1257
  void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
1261
- DynamicXdsServerConfigSelectorProvider::OnError(grpc_error_handle error) {
1258
+ DynamicXdsServerConfigSelectorProvider::OnError(absl::Status status) {
1262
1259
  MutexLock lock(&mu_);
1263
1260
  // Prefer existing good update.
1264
1261
  if (resource_.ok()) {
1265
- GRPC_ERROR_UNREF(error);
1266
1262
  return;
1267
1263
  }
1268
- resource_ = grpc_error_to_absl_status(error);
1269
- GRPC_ERROR_UNREF(error);
1264
+ resource_ = status;
1270
1265
  if (watcher_ == nullptr) {
1271
1266
  return;
1272
1267
  }