grpc 1.48.0 → 1.49.0.pre1

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

Potentially problematic release.


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

Files changed (715) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +117 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +100 -124
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +60 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +98 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +38 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +40 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/version.rb +1 -1
  659. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  660. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  661. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  662. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  663. data/third_party/upb/upb/arena.c +277 -0
  664. data/third_party/upb/upb/arena.h +225 -0
  665. data/third_party/upb/upb/array.c +114 -0
  666. data/third_party/upb/upb/array.h +83 -0
  667. data/third_party/upb/upb/collections.h +36 -0
  668. data/third_party/upb/upb/decode.c +161 -65
  669. data/third_party/upb/upb/decode.h +1 -0
  670. data/third_party/upb/upb/decode_fast.c +1 -1
  671. data/third_party/upb/upb/def.c +10 -2
  672. data/third_party/upb/upb/def.h +8 -1
  673. data/third_party/upb/upb/def.hpp +7 -4
  674. data/third_party/upb/upb/encode.c +29 -20
  675. data/third_party/upb/upb/encode.h +16 -6
  676. data/third_party/upb/upb/extension_registry.c +93 -0
  677. data/third_party/upb/upb/extension_registry.h +84 -0
  678. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  679. data/third_party/upb/upb/internal/table.h +385 -0
  680. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  681. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  682. data/third_party/upb/upb/json_decode.c +1512 -0
  683. data/third_party/upb/upb/json_decode.h +47 -0
  684. data/third_party/upb/upb/json_encode.c +7 -3
  685. data/third_party/upb/upb/json_encode.h +6 -3
  686. data/third_party/upb/upb/map.c +108 -0
  687. data/third_party/upb/upb/map.h +117 -0
  688. data/third_party/upb/upb/message_value.h +66 -0
  689. data/third_party/upb/upb/mini_table.c +1147 -0
  690. data/third_party/upb/upb/mini_table.h +189 -0
  691. data/third_party/upb/upb/mini_table.hpp +112 -0
  692. data/third_party/upb/upb/msg.c +2 -62
  693. data/third_party/upb/upb/msg.h +2 -45
  694. data/third_party/upb/upb/msg_internal.h +28 -22
  695. data/third_party/upb/upb/port_def.inc +2 -1
  696. data/third_party/upb/upb/port_undef.inc +1 -0
  697. data/third_party/upb/upb/reflection.c +2 -159
  698. data/third_party/upb/upb/reflection.h +2 -112
  699. data/third_party/upb/upb/status.c +86 -0
  700. data/third_party/upb/upb/status.h +66 -0
  701. data/third_party/upb/upb/table.c +2 -2
  702. data/third_party/upb/upb/table_internal.h +3 -352
  703. data/third_party/upb/upb/text_encode.c +3 -2
  704. data/third_party/upb/upb/upb.c +4 -290
  705. data/third_party/upb/upb/upb.h +7 -196
  706. metadata +90 -38
  707. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  708. data/src/core/lib/iomgr/error_internal.h +0 -66
  709. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  710. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  711. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  712. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  713. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  714. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  715. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -25,7 +25,6 @@
25
25
  #include <memory>
26
26
  #include <set>
27
27
  #include <string>
28
- #include <type_traits>
29
28
  #include <utility>
30
29
  #include <vector>
31
30
 
@@ -60,6 +59,7 @@
60
59
  #include <grpc/support/log.h>
61
60
 
62
61
  #include "src/core/ext/xds/upb_utils.h"
62
+ #include "src/core/ext/xds/xds_bootstrap.h"
63
63
  #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
64
64
  #include "src/core/ext/xds/xds_common_types.h"
65
65
  #include "src/core/ext/xds/xds_http_filters.h"
@@ -70,11 +70,10 @@
70
70
  #include "src/core/lib/debug/trace.h"
71
71
  #include "src/core/lib/gpr/env.h"
72
72
  #include "src/core/lib/gpr/string.h"
73
- #include "src/core/lib/gprpp/status_helper.h"
73
+ #include "src/core/lib/gprpp/match.h"
74
74
  #include "src/core/lib/gprpp/time.h"
75
75
  #include "src/core/lib/iomgr/error.h"
76
76
  #include "src/core/lib/matchers/matchers.h"
77
- #include "src/core/lib/transport/error_utils.h"
78
77
 
79
78
  namespace grpc_core {
80
79
 
@@ -251,19 +250,23 @@ std::string XdsRouteConfigResource::Route::RouteAction::ToString() const {
251
250
  if (retry_policy.has_value()) {
252
251
  contents.push_back(absl::StrCat("retry_policy=", retry_policy->ToString()));
253
252
  }
254
- if (action.index() == kClusterIndex) {
255
- contents.push_back(
256
- absl::StrFormat("Cluster name: %s", absl::get<kClusterIndex>(action)));
257
- } else if (action.index() == kWeightedClustersIndex) {
258
- auto& action_weighted_clusters = absl::get<kWeightedClustersIndex>(action);
259
- for (const ClusterWeight& cluster_weight : action_weighted_clusters) {
260
- contents.push_back(cluster_weight.ToString());
261
- }
262
- } else if (action.index() == kClusterSpecifierPluginIndex) {
263
- contents.push_back(
264
- absl::StrFormat("Cluster specifier plugin name: %s",
265
- absl::get<kClusterSpecifierPluginIndex>(action)));
266
- }
253
+ Match(
254
+ action,
255
+ [&contents](const ClusterName& cluster_name) {
256
+ contents.push_back(
257
+ absl::StrFormat("Cluster name: %s", cluster_name.cluster_name));
258
+ },
259
+ [&contents](const std::vector<ClusterWeight>& weighted_clusters) {
260
+ for (const ClusterWeight& cluster_weight : weighted_clusters) {
261
+ contents.push_back(cluster_weight.ToString());
262
+ }
263
+ },
264
+ [&contents](
265
+ const ClusterSpecifierPluginName& cluster_specifier_plugin_name) {
266
+ contents.push_back(absl::StrFormat(
267
+ "Cluster specifier plugin name: %s",
268
+ cluster_specifier_plugin_name.cluster_specifier_plugin_name));
269
+ });
267
270
  if (max_stream_duration.has_value()) {
268
271
  contents.push_back(max_stream_duration->ToString());
269
272
  }
@@ -337,10 +340,12 @@ std::string XdsRouteConfigResource::ToString() const {
337
340
 
338
341
  namespace {
339
342
 
340
- grpc_error_handle ClusterSpecifierPluginParse(
341
- const XdsEncodingContext& context,
342
- const envoy_config_route_v3_RouteConfiguration* route_config,
343
- XdsRouteConfigResource* rds_update) {
343
+ absl::StatusOr<XdsRouteConfigResource::ClusterSpecifierPluginMap>
344
+ ClusterSpecifierPluginParse(
345
+ const XdsResourceType::DecodeContext& context,
346
+ const envoy_config_route_v3_RouteConfiguration* route_config) {
347
+ XdsRouteConfigResource::ClusterSpecifierPluginMap
348
+ cluster_specifier_plugin_map;
344
349
  size_t num_cluster_specifier_plugins;
345
350
  const envoy_config_route_v3_ClusterSpecifierPlugin* const*
346
351
  cluster_specifier_plugin =
@@ -352,21 +357,19 @@ grpc_error_handle ClusterSpecifierPluginParse(
352
357
  cluster_specifier_plugin[i]);
353
358
  std::string name = UpbStringToStdString(
354
359
  envoy_config_core_v3_TypedExtensionConfig_name(extension));
355
- if (rds_update->cluster_specifier_plugin_map.find(name) !=
356
- rds_update->cluster_specifier_plugin_map.end()) {
357
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
360
+ if (cluster_specifier_plugin_map.find(name) !=
361
+ cluster_specifier_plugin_map.end()) {
362
+ return absl::InvalidArgumentError(absl::StrCat(
358
363
  "Duplicated definition of cluster_specifier_plugin ", name));
359
364
  }
360
365
  const google_protobuf_Any* any =
361
366
  envoy_config_core_v3_TypedExtensionConfig_typed_config(extension);
362
367
  if (any == nullptr) {
363
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
368
+ return absl::InvalidArgumentError(
364
369
  "Could not obtrain TypedExtensionConfig for plugin config.");
365
370
  }
366
371
  auto plugin_type = ExtractExtensionTypeName(context, any);
367
- if (!plugin_type.ok()) {
368
- return absl_status_to_grpc_error(plugin_type.status());
369
- }
372
+ if (!plugin_type.ok()) return plugin_type.status();
370
373
  bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
371
374
  cluster_specifier_plugin[i]);
372
375
  const XdsClusterSpecifierPluginImpl* cluster_specifier_plugin_impl =
@@ -374,7 +377,7 @@ grpc_error_handle ClusterSpecifierPluginParse(
374
377
  std::string lb_policy_config;
375
378
  if (cluster_specifier_plugin_impl == nullptr) {
376
379
  if (!is_optional) {
377
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
380
+ return absl::InvalidArgumentError(absl::StrCat(
378
381
  "Unknown ClusterSpecifierPlugin type ", plugin_type->type));
379
382
  }
380
383
  // Optional plugin, leave lb_policy_config empty.
@@ -382,20 +385,17 @@ grpc_error_handle ClusterSpecifierPluginParse(
382
385
  auto config =
383
386
  cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
384
387
  google_protobuf_Any_value(any), context.arena, context.symtab);
385
- if (!config.ok()) {
386
- return absl_status_to_grpc_error(config.status());
387
- }
388
+ if (!config.ok()) return config.status();
388
389
  lb_policy_config = std::move(*config);
389
390
  }
390
- rds_update->cluster_specifier_plugin_map[std::move(name)] =
391
- std::move(lb_policy_config);
391
+ cluster_specifier_plugin_map[std::move(name)] = std::move(lb_policy_config);
392
392
  }
393
- return GRPC_ERROR_NONE;
393
+ return cluster_specifier_plugin_map;
394
394
  }
395
395
 
396
- grpc_error_handle RoutePathMatchParse(
397
- const envoy_config_route_v3_RouteMatch* match,
398
- XdsRouteConfigResource::Route* route, bool* ignore_route) {
396
+ absl::Status RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
397
+ XdsRouteConfigResource::Route* route,
398
+ bool* ignore_route) {
399
399
  auto* case_sensitive_ptr =
400
400
  envoy_config_route_v3_RouteMatch_case_sensitive(match);
401
401
  bool case_sensitive = true;
@@ -414,18 +414,18 @@ grpc_error_handle RoutePathMatchParse(
414
414
  // Prefix which does not start with a / will never match anything, so
415
415
  // ignore this route.
416
416
  *ignore_route = true;
417
- return GRPC_ERROR_NONE;
417
+ return absl::OkStatus();
418
418
  }
419
419
  std::vector<absl::string_view> prefix_elements =
420
420
  absl::StrSplit(prefix.substr(1), absl::MaxSplits('/', 2));
421
421
  if (prefix_elements.size() > 2) {
422
422
  // Prefix cannot have more than 2 slashes.
423
423
  *ignore_route = true;
424
- return GRPC_ERROR_NONE;
424
+ return absl::OkStatus();
425
425
  } else if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
426
426
  // Prefix contains empty string between the 2 slashes
427
427
  *ignore_route = true;
428
- return GRPC_ERROR_NONE;
428
+ return absl::OkStatus();
429
429
  }
430
430
  }
431
431
  type = StringMatcher::Type::kPrefix;
@@ -436,13 +436,13 @@ grpc_error_handle RoutePathMatchParse(
436
436
  if (path.empty()) {
437
437
  // Path that is empty will never match anything, so ignore this route.
438
438
  *ignore_route = true;
439
- return GRPC_ERROR_NONE;
439
+ return absl::OkStatus();
440
440
  }
441
441
  if (path[0] != '/') {
442
442
  // Path which does not start with a / will never match anything, so
443
443
  // ignore this route.
444
444
  *ignore_route = true;
445
- return GRPC_ERROR_NONE;
445
+ return absl::OkStatus();
446
446
  }
447
447
  std::vector<absl::string_view> path_elements =
448
448
  absl::StrSplit(path.substr(1), absl::MaxSplits('/', 2));
@@ -450,17 +450,17 @@ grpc_error_handle RoutePathMatchParse(
450
450
  // Path not in the required format of /service/method will never match
451
451
  // anything, so ignore this route.
452
452
  *ignore_route = true;
453
- return GRPC_ERROR_NONE;
453
+ return absl::OkStatus();
454
454
  } else if (path_elements[0].empty()) {
455
455
  // Path contains empty service name will never match anything, so ignore
456
456
  // this route.
457
457
  *ignore_route = true;
458
- return GRPC_ERROR_NONE;
458
+ return absl::OkStatus();
459
459
  } else if (path_elements[1].empty()) {
460
460
  // Path contains empty method name will never match anything, so ignore
461
461
  // this route.
462
462
  *ignore_route = true;
463
- return GRPC_ERROR_NONE;
463
+ return absl::OkStatus();
464
464
  }
465
465
  type = StringMatcher::Type::kExact;
466
466
  match_string = std::string(path);
@@ -472,20 +472,20 @@ grpc_error_handle RoutePathMatchParse(
472
472
  match_string = UpbStringToStdString(
473
473
  envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
474
474
  } else {
475
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
475
+ return absl::InvalidArgumentError(
476
476
  "Invalid route path specifier specified.");
477
477
  }
478
478
  absl::StatusOr<StringMatcher> string_matcher =
479
479
  StringMatcher::Create(type, match_string, case_sensitive);
480
480
  if (!string_matcher.ok()) {
481
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
481
+ return absl::InvalidArgumentError(
482
482
  absl::StrCat("path matcher: ", string_matcher.status().message()));
483
483
  }
484
484
  route->matchers.path_matcher = std::move(string_matcher.value());
485
- return GRPC_ERROR_NONE;
485
+ return absl::OkStatus();
486
486
  }
487
487
 
488
- grpc_error_handle RouteHeaderMatchersParse(
488
+ absl::Status RouteHeaderMatchersParse(
489
489
  const envoy_config_route_v3_RouteMatch* match,
490
490
  XdsRouteConfigResource::Route* route) {
491
491
  size_t size;
@@ -534,7 +534,7 @@ grpc_error_handle RouteHeaderMatchersParse(
534
534
  match_string = UpbStringToStdString(
535
535
  envoy_config_route_v3_HeaderMatcher_contains_match(header));
536
536
  } else {
537
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
537
+ return absl::InvalidArgumentError(
538
538
  "Invalid route header matcher specified.");
539
539
  }
540
540
  bool invert_match =
@@ -543,16 +543,16 @@ grpc_error_handle RouteHeaderMatchersParse(
543
543
  HeaderMatcher::Create(name, type, match_string, range_start, range_end,
544
544
  present_match, invert_match);
545
545
  if (!header_matcher.ok()) {
546
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
546
+ return absl::InvalidArgumentError(
547
547
  absl::StrCat("header matcher: ", header_matcher.status().message()));
548
548
  }
549
549
  route->matchers.header_matchers.emplace_back(
550
550
  std::move(header_matcher.value()));
551
551
  }
552
- return GRPC_ERROR_NONE;
552
+ return absl::OkStatus();
553
553
  }
554
554
 
555
- grpc_error_handle RouteRuntimeFractionParse(
555
+ absl::Status RouteRuntimeFractionParse(
556
556
  const envoy_config_route_v3_RouteMatch* match,
557
557
  XdsRouteConfigResource::Route* route) {
558
558
  const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
@@ -577,8 +577,7 @@ grpc_error_handle RouteRuntimeFractionParse(
577
577
  case envoy_type_v3_FractionalPercent_MILLION:
578
578
  break;
579
579
  default:
580
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
581
- "Unknown denominator type");
580
+ return absl::InvalidArgumentError("Unknown denominator type");
582
581
  }
583
582
  route->matchers.fraction_per_million = numerator;
584
583
  }
@@ -587,26 +586,27 @@ grpc_error_handle RouteRuntimeFractionParse(
587
586
  }
588
587
 
589
588
  template <typename ParentType, typename EntryType>
590
- grpc_error_handle ParseTypedPerFilterConfig(
591
- const XdsEncodingContext& context, const ParentType* parent,
589
+ absl::StatusOr<XdsRouteConfigResource::TypedPerFilterConfig>
590
+ ParseTypedPerFilterConfig(
591
+ const XdsResourceType::DecodeContext& context, const ParentType* parent,
592
592
  const EntryType* (*entry_func)(const ParentType*, size_t*),
593
593
  upb_StringView (*key_func)(const EntryType*),
594
- const google_protobuf_Any* (*value_func)(const EntryType*),
595
- XdsRouteConfigResource::TypedPerFilterConfig* typed_per_filter_config) {
594
+ const google_protobuf_Any* (*value_func)(const EntryType*)) {
595
+ XdsRouteConfigResource::TypedPerFilterConfig typed_per_filter_config;
596
596
  size_t filter_it = kUpb_Map_Begin;
597
597
  while (true) {
598
598
  const auto* filter_entry = entry_func(parent, &filter_it);
599
599
  if (filter_entry == nullptr) break;
600
600
  absl::string_view key = UpbStringToAbsl(key_func(filter_entry));
601
601
  if (key.empty()) {
602
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("empty filter name in map");
602
+ return absl::InvalidArgumentError("empty filter name in map");
603
603
  }
604
604
  const google_protobuf_Any* any = value_func(filter_entry);
605
605
  GPR_ASSERT(any != nullptr);
606
606
  absl::string_view filter_type =
607
607
  UpbStringToAbsl(google_protobuf_Any_type_url(any));
608
608
  if (filter_type.empty()) {
609
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
609
+ return absl::InvalidArgumentError(
610
610
  absl::StrCat("no filter config specified for filter name ", key));
611
611
  }
612
612
  bool is_optional = false;
@@ -616,7 +616,7 @@ grpc_error_handle ParseTypedPerFilterConfig(
616
616
  const auto* filter_config = envoy_config_route_v3_FilterConfig_parse(
617
617
  any_value.data, any_value.size, context.arena);
618
618
  if (filter_config == nullptr) {
619
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
619
+ return absl::InvalidArgumentError(
620
620
  absl::StrCat("could not parse FilterConfig wrapper for ", key));
621
621
  }
622
622
  is_optional =
@@ -624,39 +624,37 @@ grpc_error_handle ParseTypedPerFilterConfig(
624
624
  any = envoy_config_route_v3_FilterConfig_config(filter_config);
625
625
  if (any == nullptr) {
626
626
  if (is_optional) continue;
627
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
627
+ return absl::InvalidArgumentError(
628
628
  absl::StrCat("no filter config specified for filter name ", key));
629
629
  }
630
630
  }
631
631
  auto type = ExtractExtensionTypeName(context, any);
632
- if (!type.ok()) {
633
- return absl_status_to_grpc_error(type.status());
634
- }
632
+ if (!type.ok()) return type.status();
635
633
  const XdsHttpFilterImpl* filter_impl =
636
634
  XdsHttpFilterRegistry::GetFilterForType(type->type);
637
635
  if (filter_impl == nullptr) {
638
636
  if (is_optional) continue;
639
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
637
+ return absl::InvalidArgumentError(
640
638
  absl::StrCat("no filter registered for config type ", type->type));
641
639
  }
642
640
  absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
643
641
  filter_impl->GenerateFilterConfigOverride(
644
642
  google_protobuf_Any_value(any), context.arena);
645
643
  if (!filter_config.ok()) {
646
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
647
- "filter config for type ", type->type,
648
- " failed to parse: ", StatusToString(filter_config.status())));
644
+ return absl::InvalidArgumentError(
645
+ absl::StrCat("filter config for type ", type->type,
646
+ " failed to parse: ", filter_config.status().message()));
649
647
  }
650
- (*typed_per_filter_config)[std::string(key)] = std::move(*filter_config);
648
+ typed_per_filter_config[std::string(key)] = std::move(*filter_config);
651
649
  }
652
- return GRPC_ERROR_NONE;
650
+ return typed_per_filter_config;
653
651
  }
654
652
 
655
- grpc_error_handle RetryPolicyParse(
656
- const XdsEncodingContext& context,
653
+ absl::Status RetryPolicyParse(
654
+ const XdsResourceType::DecodeContext& context,
657
655
  const envoy_config_route_v3_RetryPolicy* retry_policy,
658
656
  absl::optional<XdsRouteConfigResource::RetryPolicy>* retry) {
659
- std::vector<grpc_error_handle> errors;
657
+ std::vector<std::string> errors;
660
658
  XdsRouteConfigResource::RetryPolicy retry_to_return;
661
659
  auto retry_on = UpbStringToStdString(
662
660
  envoy_config_route_v3_RetryPolicy_retry_on(retry_policy));
@@ -684,8 +682,8 @@ grpc_error_handle RetryPolicyParse(
684
682
  if (num_retries != nullptr) {
685
683
  uint32_t num_retries_value = google_protobuf_UInt32Value_value(num_retries);
686
684
  if (num_retries_value == 0) {
687
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
688
- "RouteAction RetryPolicy num_retries set to invalid value 0."));
685
+ errors.emplace_back(
686
+ "RouteAction RetryPolicy num_retries set to invalid value 0.");
689
687
  } else {
690
688
  retry_to_return.num_retries = num_retries_value;
691
689
  }
@@ -698,8 +696,8 @@ grpc_error_handle RetryPolicyParse(
698
696
  const google_protobuf_Duration* base_interval =
699
697
  envoy_config_route_v3_RetryPolicy_RetryBackOff_base_interval(backoff);
700
698
  if (base_interval == nullptr) {
701
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
702
- "RouteAction RetryPolicy RetryBackoff missing base interval."));
699
+ errors.emplace_back(
700
+ "RouteAction RetryPolicy RetryBackoff missing base interval.");
703
701
  } else {
704
702
  retry_to_return.retry_back_off.base_interval =
705
703
  ParseDuration(base_interval);
@@ -718,22 +716,23 @@ grpc_error_handle RetryPolicyParse(
718
716
  retry_to_return.retry_back_off.base_interval = Duration::Milliseconds(25);
719
717
  retry_to_return.retry_back_off.max_interval = Duration::Milliseconds(250);
720
718
  }
721
- if (errors.empty()) {
722
- *retry = retry_to_return;
723
- return GRPC_ERROR_NONE;
724
- } else {
725
- return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing retry policy",
726
- &errors);
719
+ // Return result.
720
+ if (!errors.empty()) {
721
+ return absl::InvalidArgumentError(absl::StrCat(
722
+ "Errors parsing retry policy: [", absl::StrJoin(errors, "; "), "]"));
727
723
  }
724
+ *retry = retry_to_return;
725
+ return absl::OkStatus();
728
726
  }
729
727
 
730
- grpc_error_handle RouteActionParse(
731
- const XdsEncodingContext& context,
728
+ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
729
+ const XdsResourceType::DecodeContext& context,
732
730
  const envoy_config_route_v3_Route* route_msg,
733
731
  const std::map<std::string /*cluster_specifier_plugin_name*/,
734
732
  std::string /*LB policy config*/>&
735
733
  cluster_specifier_plugin_map,
736
- XdsRouteConfigResource::Route::RouteAction* route, bool* ignore_route) {
734
+ bool* ignore_route) {
735
+ XdsRouteConfigResource::Route::RouteAction route;
737
736
  const envoy_config_route_v3_RouteAction* route_action =
738
737
  envoy_config_route_v3_Route_route(route_msg);
739
738
  // Get the cluster or weighted_clusters in the RouteAction.
@@ -741,12 +740,11 @@ grpc_error_handle RouteActionParse(
741
740
  std::string cluster_name = UpbStringToStdString(
742
741
  envoy_config_route_v3_RouteAction_cluster(route_action));
743
742
  if (cluster_name.empty()) {
744
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
743
+ return absl::InvalidArgumentError(
745
744
  "RouteAction cluster contains empty cluster name.");
746
745
  }
747
- route->action
748
- .emplace<XdsRouteConfigResource::Route::RouteAction::kClusterIndex>(
749
- std::move(cluster_name));
746
+ route.action = XdsRouteConfigResource::Route::RouteAction::ClusterName{
747
+ std::move(cluster_name)};
750
748
  } else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
751
749
  route_action)) {
752
750
  std::vector<XdsRouteConfigResource::Route::RouteAction::ClusterWeight>
@@ -772,7 +770,7 @@ grpc_error_handle RouteActionParse(
772
770
  envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
773
771
  cluster_weight));
774
772
  if (cluster.name.empty()) {
775
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
773
+ return absl::InvalidArgumentError(
776
774
  "RouteAction weighted_cluster cluster contains empty cluster "
777
775
  "name.");
778
776
  }
@@ -780,34 +778,36 @@ grpc_error_handle RouteActionParse(
780
778
  envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
781
779
  cluster_weight);
782
780
  if (weight == nullptr) {
783
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
781
+ return absl::InvalidArgumentError(
784
782
  "RouteAction weighted_cluster cluster missing weight");
785
783
  }
786
784
  cluster.weight = google_protobuf_UInt32Value_value(weight);
787
785
  if (cluster.weight == 0) continue;
788
786
  sum_of_weights += cluster.weight;
789
- if (context.use_v3) {
790
- grpc_error_handle error = ParseTypedPerFilterConfig<
787
+ if (context.server.ShouldUseV3()) {
788
+ auto typed_per_filter_config = ParseTypedPerFilterConfig<
791
789
  envoy_config_route_v3_WeightedCluster_ClusterWeight,
792
790
  envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
793
791
  context, cluster_weight,
794
792
  envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
795
793
  envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
796
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value,
797
- &cluster.typed_per_filter_config);
798
- if (!GRPC_ERROR_IS_NONE(error)) return error;
794
+ envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value);
795
+ if (!typed_per_filter_config.ok()) {
796
+ return typed_per_filter_config.status();
797
+ }
798
+ cluster.typed_per_filter_config = std::move(*typed_per_filter_config);
799
799
  }
800
800
  action_weighted_clusters.emplace_back(std::move(cluster));
801
801
  }
802
802
  if (total_weight != sum_of_weights) {
803
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
803
+ return absl::InvalidArgumentError(
804
804
  "RouteAction weighted_cluster has incorrect total weight");
805
805
  }
806
806
  if (action_weighted_clusters.empty()) {
807
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
807
+ return absl::InvalidArgumentError(
808
808
  "RouteAction weighted_cluster has no valid clusters specified.");
809
809
  }
810
- route->action = std::move(action_weighted_clusters);
810
+ route.action = std::move(action_weighted_clusters);
811
811
  } else if (XdsRlsEnabled() &&
812
812
  envoy_config_route_v3_RouteAction_has_cluster_specifier_plugin(
813
813
  route_action)) {
@@ -815,20 +815,20 @@ grpc_error_handle RouteActionParse(
815
815
  envoy_config_route_v3_RouteAction_cluster_specifier_plugin(
816
816
  route_action));
817
817
  if (plugin_name.empty()) {
818
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
818
+ return absl::InvalidArgumentError(
819
819
  "RouteAction cluster contains empty cluster specifier plugin name.");
820
820
  }
821
821
  auto it = cluster_specifier_plugin_map.find(plugin_name);
822
822
  if (it == cluster_specifier_plugin_map.end()) {
823
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
823
+ return absl::InvalidArgumentError(
824
824
  absl::StrCat("RouteAction cluster contains cluster specifier plugin "
825
825
  "name not configured: ",
826
826
  plugin_name));
827
827
  }
828
828
  if (it->second.empty()) *ignore_route = true;
829
- route->action.emplace<XdsRouteConfigResource::Route::RouteAction::
830
- kClusterSpecifierPluginIndex>(
831
- std::move(plugin_name));
829
+ route.action =
830
+ XdsRouteConfigResource::Route::RouteAction::ClusterSpecifierPluginName{
831
+ std::move(plugin_name)};
832
832
  } else {
833
833
  // No cluster or weighted_clusters or plugin found in RouteAction, ignore
834
834
  // this route.
@@ -848,7 +848,7 @@ grpc_error_handle RouteActionParse(
848
848
  max_stream_duration);
849
849
  }
850
850
  if (duration != nullptr) {
851
- route->max_stream_duration = ParseDuration(duration);
851
+ route.max_stream_duration = ParseDuration(duration);
852
852
  }
853
853
  }
854
854
  }
@@ -926,31 +926,35 @@ grpc_error_handle RouteActionParse(
926
926
  "RouteAction HashPolicy contains unsupported policy specifier.");
927
927
  continue;
928
928
  }
929
- route->hash_policies.emplace_back(std::move(policy));
929
+ route.hash_policies.emplace_back(std::move(policy));
930
930
  }
931
931
  // Get retry policy
932
932
  const envoy_config_route_v3_RetryPolicy* retry_policy =
933
933
  envoy_config_route_v3_RouteAction_retry_policy(route_action);
934
934
  if (retry_policy != nullptr) {
935
935
  absl::optional<XdsRouteConfigResource::RetryPolicy> retry;
936
- grpc_error_handle error = RetryPolicyParse(context, retry_policy, &retry);
937
- if (!GRPC_ERROR_IS_NONE(error)) return error;
938
- route->retry_policy = retry;
936
+ absl::Status status = RetryPolicyParse(context, retry_policy, &retry);
937
+ if (!status.ok()) return status;
938
+ route.retry_policy = retry;
939
939
  }
940
- return GRPC_ERROR_NONE;
940
+ return route;
941
941
  }
942
942
 
943
943
  } // namespace
944
944
 
945
- grpc_error_handle XdsRouteConfigResource::Parse(
946
- const XdsEncodingContext& context,
947
- const envoy_config_route_v3_RouteConfiguration* route_config,
948
- XdsRouteConfigResource* rds_update) {
945
+ absl::StatusOr<XdsRouteConfigResource> XdsRouteConfigResource::Parse(
946
+ const XdsResourceType::DecodeContext& context,
947
+ const envoy_config_route_v3_RouteConfiguration* route_config) {
948
+ XdsRouteConfigResource rds_update;
949
949
  // Get the cluster spcifier plugins
950
950
  if (XdsRlsEnabled()) {
951
- grpc_error_handle error =
952
- ClusterSpecifierPluginParse(context, route_config, rds_update);
953
- if (!GRPC_ERROR_IS_NONE(error)) return error;
951
+ auto cluster_specifier_plugin_map =
952
+ ClusterSpecifierPluginParse(context, route_config);
953
+ if (!cluster_specifier_plugin_map.ok()) {
954
+ return cluster_specifier_plugin_map.status();
955
+ }
956
+ rds_update.cluster_specifier_plugin_map =
957
+ std::move(*cluster_specifier_plugin_map);
954
958
  }
955
959
  // Get the virtual hosts.
956
960
  size_t num_virtual_hosts;
@@ -958,9 +962,9 @@ grpc_error_handle XdsRouteConfigResource::Parse(
958
962
  envoy_config_route_v3_RouteConfiguration_virtual_hosts(
959
963
  route_config, &num_virtual_hosts);
960
964
  for (size_t i = 0; i < num_virtual_hosts; ++i) {
961
- rds_update->virtual_hosts.emplace_back();
965
+ rds_update.virtual_hosts.emplace_back();
962
966
  XdsRouteConfigResource::VirtualHost& vhost =
963
- rds_update->virtual_hosts.back();
967
+ rds_update.virtual_hosts.back();
964
968
  // Parse domains.
965
969
  size_t domain_size;
966
970
  upb_StringView const* domains = envoy_config_route_v3_VirtualHost_domains(
@@ -968,25 +972,27 @@ grpc_error_handle XdsRouteConfigResource::Parse(
968
972
  for (size_t j = 0; j < domain_size; ++j) {
969
973
  std::string domain_pattern = UpbStringToStdString(domains[j]);
970
974
  if (!XdsRouting::IsValidDomainPattern(domain_pattern)) {
971
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
975
+ return absl::InvalidArgumentError(
972
976
  absl::StrCat("Invalid domain pattern \"", domain_pattern, "\"."));
973
977
  }
974
978
  vhost.domains.emplace_back(std::move(domain_pattern));
975
979
  }
976
980
  if (vhost.domains.empty()) {
977
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("VirtualHost has no domains");
981
+ return absl::InvalidArgumentError("VirtualHost has no domains");
978
982
  }
979
983
  // Parse typed_per_filter_config.
980
- if (context.use_v3) {
981
- grpc_error_handle error = ParseTypedPerFilterConfig<
984
+ if (context.server.ShouldUseV3()) {
985
+ auto typed_per_filter_config = ParseTypedPerFilterConfig<
982
986
  envoy_config_route_v3_VirtualHost,
983
987
  envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
984
988
  context, virtual_hosts[i],
985
989
  envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
986
990
  envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
987
- envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value,
988
- &vhost.typed_per_filter_config);
989
- if (!GRPC_ERROR_IS_NONE(error)) return error;
991
+ envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value);
992
+ if (!typed_per_filter_config.ok()) {
993
+ return typed_per_filter_config.status();
994
+ }
995
+ vhost.typed_per_filter_config = std::move(*typed_per_filter_config);
990
996
  }
991
997
  // Parse retry policy.
992
998
  absl::optional<XdsRouteConfigResource::RetryPolicy>
@@ -994,22 +1000,21 @@ grpc_error_handle XdsRouteConfigResource::Parse(
994
1000
  const envoy_config_route_v3_RetryPolicy* retry_policy =
995
1001
  envoy_config_route_v3_VirtualHost_retry_policy(virtual_hosts[i]);
996
1002
  if (retry_policy != nullptr) {
997
- grpc_error_handle error =
1003
+ absl::Status status =
998
1004
  RetryPolicyParse(context, retry_policy, &virtual_host_retry_policy);
999
- if (!GRPC_ERROR_IS_NONE(error)) return error;
1005
+ if (!status.ok()) return status;
1000
1006
  }
1001
1007
  // Parse routes.
1002
1008
  size_t num_routes;
1003
1009
  const envoy_config_route_v3_Route* const* routes =
1004
1010
  envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
1005
1011
  if (num_routes < 1) {
1006
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1007
- "No route found in the virtual host.");
1012
+ return absl::InvalidArgumentError("No route found in the virtual host.");
1008
1013
  }
1009
1014
  // Build a set of cluster_specifier_plugin configured to make sure each is
1010
1015
  // actually referenced by a route action.
1011
1016
  std::set<absl::string_view> cluster_specifier_plugins;
1012
- for (auto& plugin : rds_update->cluster_specifier_plugin_map) {
1017
+ for (auto& plugin : rds_update.cluster_specifier_plugin_map) {
1013
1018
  cluster_specifier_plugins.emplace(plugin.first);
1014
1019
  }
1015
1020
  // Loop over the whole list of routes
@@ -1017,7 +1022,7 @@ grpc_error_handle XdsRouteConfigResource::Parse(
1017
1022
  const envoy_config_route_v3_RouteMatch* match =
1018
1023
  envoy_config_route_v3_Route_match(routes[j]);
1019
1024
  if (match == nullptr) {
1020
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Match can't be null.");
1025
+ return absl::InvalidArgumentError("Match can't be null.");
1021
1026
  }
1022
1027
  size_t query_parameters_size;
1023
1028
  static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
@@ -1027,64 +1032,63 @@ grpc_error_handle XdsRouteConfigResource::Parse(
1027
1032
  }
1028
1033
  XdsRouteConfigResource::Route route;
1029
1034
  bool ignore_route = false;
1030
- grpc_error_handle error =
1031
- RoutePathMatchParse(match, &route, &ignore_route);
1032
- if (!GRPC_ERROR_IS_NONE(error)) return error;
1035
+ absl::Status status = RoutePathMatchParse(match, &route, &ignore_route);
1036
+ if (!status.ok()) return status;
1033
1037
  if (ignore_route) continue;
1034
- error = RouteHeaderMatchersParse(match, &route);
1035
- if (!GRPC_ERROR_IS_NONE(error)) return error;
1036
- error = RouteRuntimeFractionParse(match, &route);
1037
- if (!GRPC_ERROR_IS_NONE(error)) return error;
1038
+ status = RouteHeaderMatchersParse(match, &route);
1039
+ if (!status.ok()) return status;
1040
+ status = RouteRuntimeFractionParse(match, &route);
1041
+ if (!status.ok()) return status;
1038
1042
  if (envoy_config_route_v3_Route_has_route(routes[j])) {
1039
1043
  route.action.emplace<XdsRouteConfigResource::Route::RouteAction>();
1040
- auto& route_action =
1041
- absl::get<XdsRouteConfigResource::Route::RouteAction>(route.action);
1042
- error = RouteActionParse(context, routes[j],
1043
- rds_update->cluster_specifier_plugin_map,
1044
- &route_action, &ignore_route);
1045
- if (!GRPC_ERROR_IS_NONE(error)) return error;
1044
+ auto route_action = RouteActionParse(
1045
+ context, routes[j], rds_update.cluster_specifier_plugin_map,
1046
+ &ignore_route);
1047
+ if (!route_action.ok()) return route_action.status();
1046
1048
  if (ignore_route) continue;
1047
- if (route_action.retry_policy == absl::nullopt &&
1049
+ if (route_action->retry_policy == absl::nullopt &&
1048
1050
  retry_policy != nullptr) {
1049
- route_action.retry_policy = virtual_host_retry_policy;
1051
+ route_action->retry_policy = virtual_host_retry_policy;
1050
1052
  }
1051
1053
  // Mark off plugins used in route action.
1052
- std::string* cluster_specifier_action =
1054
+ auto* cluster_specifier_action =
1053
1055
  absl::get_if<XdsRouteConfigResource::Route::RouteAction::
1054
- kClusterSpecifierPluginIndex>(
1055
- &route_action.action);
1056
+ ClusterSpecifierPluginName>(&route_action->action);
1056
1057
  if (cluster_specifier_action != nullptr) {
1057
- cluster_specifier_plugins.erase(*cluster_specifier_action);
1058
+ cluster_specifier_plugins.erase(
1059
+ cluster_specifier_action->cluster_specifier_plugin_name);
1058
1060
  }
1061
+ route.action = std::move(*route_action);
1059
1062
  } else if (envoy_config_route_v3_Route_has_non_forwarding_action(
1060
1063
  routes[j])) {
1061
1064
  route.action
1062
1065
  .emplace<XdsRouteConfigResource::Route::NonForwardingAction>();
1063
1066
  }
1064
- if (context.use_v3) {
1065
- grpc_error_handle error = ParseTypedPerFilterConfig<
1067
+ if (context.server.ShouldUseV3()) {
1068
+ auto typed_per_filter_config = ParseTypedPerFilterConfig<
1066
1069
  envoy_config_route_v3_Route,
1067
1070
  envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
1068
1071
  context, routes[j],
1069
1072
  envoy_config_route_v3_Route_typed_per_filter_config_next,
1070
1073
  envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
1071
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value,
1072
- &route.typed_per_filter_config);
1073
- if (!GRPC_ERROR_IS_NONE(error)) return error;
1074
+ envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value);
1075
+ if (!typed_per_filter_config.ok()) {
1076
+ return typed_per_filter_config.status();
1077
+ }
1078
+ route.typed_per_filter_config = std::move(*typed_per_filter_config);
1074
1079
  }
1075
1080
  vhost.routes.emplace_back(std::move(route));
1076
1081
  }
1077
1082
  if (vhost.routes.empty()) {
1078
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
1083
+ return absl::InvalidArgumentError("No valid routes specified.");
1079
1084
  }
1080
1085
  // For plugins not used in route action, delete from the update to prevent
1081
1086
  // further use.
1082
1087
  for (auto& unused_plugin : cluster_specifier_plugins) {
1083
- rds_update->cluster_specifier_plugin_map.erase(
1084
- std::string(unused_plugin));
1088
+ rds_update.cluster_specifier_plugin_map.erase(std::string(unused_plugin));
1085
1089
  }
1086
1090
  }
1087
- return GRPC_ERROR_NONE;
1091
+ return rds_update;
1088
1092
  }
1089
1093
 
1090
1094
  //
@@ -1094,7 +1098,7 @@ grpc_error_handle XdsRouteConfigResource::Parse(
1094
1098
  namespace {
1095
1099
 
1096
1100
  void MaybeLogRouteConfiguration(
1097
- const XdsEncodingContext& context,
1101
+ const XdsResourceType::DecodeContext& context,
1098
1102
  const envoy_config_route_v3_RouteConfiguration* route_config) {
1099
1103
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1100
1104
  gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
@@ -1110,9 +1114,9 @@ void MaybeLogRouteConfiguration(
1110
1114
  } // namespace
1111
1115
 
1112
1116
  absl::StatusOr<XdsResourceType::DecodeResult>
1113
- XdsRouteConfigResourceType::Decode(const XdsEncodingContext& context,
1114
- absl::string_view serialized_resource,
1115
- bool /*is_v2*/) const {
1117
+ XdsRouteConfigResourceType::Decode(
1118
+ const XdsResourceType::DecodeContext& context,
1119
+ absl::string_view serialized_resource, bool /*is_v2*/) const {
1116
1120
  // Parse serialized proto.
1117
1121
  auto* resource = envoy_config_route_v3_RouteConfiguration_parse(
1118
1122
  serialized_resource.data(), serialized_resource.size(), context.arena);
@@ -1125,24 +1129,23 @@ XdsRouteConfigResourceType::Decode(const XdsEncodingContext& context,
1125
1129
  DecodeResult result;
1126
1130
  result.name = UpbStringToStdString(
1127
1131
  envoy_config_route_v3_RouteConfiguration_name(resource));
1128
- auto route_config_data = absl::make_unique<ResourceDataSubclass>();
1129
- grpc_error_handle error = XdsRouteConfigResource::Parse(
1130
- context, resource, &route_config_data->resource);
1131
- if (!GRPC_ERROR_IS_NONE(error)) {
1132
- std::string error_str = grpc_error_std_string(error);
1133
- GRPC_ERROR_UNREF(error);
1132
+ auto rds_update = XdsRouteConfigResource::Parse(context, resource);
1133
+ if (!rds_update.ok()) {
1134
1134
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1135
1135
  gpr_log(GPR_ERROR, "[xds_client %p] invalid RouteConfiguration %s: %s",
1136
- context.client, result.name.c_str(), error_str.c_str());
1136
+ context.client, result.name.c_str(),
1137
+ rds_update.status().ToString().c_str());
1137
1138
  }
1138
- result.resource = absl::InvalidArgumentError(error_str);
1139
+ result.resource = rds_update.status();
1139
1140
  } else {
1140
1141
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1141
1142
  gpr_log(GPR_INFO, "[xds_client %p] parsed RouteConfiguration %s: %s",
1142
1143
  context.client, result.name.c_str(),
1143
- route_config_data->resource.ToString().c_str());
1144
+ rds_update->ToString().c_str());
1144
1145
  }
1145
- result.resource = std::move(route_config_data);
1146
+ auto resource = absl::make_unique<ResourceDataSubclass>();
1147
+ resource->resource = std::move(*rds_update);
1148
+ result.resource = std::move(resource);
1146
1149
  }
1147
1150
  return std::move(result);
1148
1151
  }