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