grpc 1.41.1 → 1.44.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (1156) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +185 -102
  3. data/include/grpc/event_engine/event_engine.h +118 -54
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  5. data/include/grpc/event_engine/memory_allocator.h +226 -0
  6. data/include/grpc/event_engine/memory_request.h +57 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +304 -145
  9. data/include/grpc/grpc_security_constants.h +2 -14
  10. data/include/grpc/impl/codegen/compression_types.h +0 -2
  11. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  12. data/include/grpc/impl/codegen/port_platform.h +14 -3
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +21 -23
  14. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  17. data/src/core/ext/filters/client_channel/client_channel.cc +305 -335
  18. data/src/core/ext/filters/client_channel/client_channel.h +84 -36
  19. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  20. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  21. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -15
  22. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +5 -6
  24. data/src/core/ext/filters/client_channel/connector.h +18 -18
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -5
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  28. data/src/core/ext/filters/client_channel/health/health_check_client.cc +25 -22
  29. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +13 -15
  31. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  33. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  34. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +5 -18
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +198 -116
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  45. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +66 -36
  46. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +21 -12
  47. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +124 -74
  48. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2514 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +68 -62
  50. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  51. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +18 -6
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -96
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +101 -46
  56. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +11 -3
  57. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +101 -209
  58. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  59. data/src/core/ext/filters/client_channel/lb_policy.h +105 -63
  60. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  61. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +220 -88
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  65. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +31 -50
  66. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +124 -240
  67. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +38 -25
  68. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  69. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +90 -77
  70. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -11
  71. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  72. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +7 -16
  73. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  74. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +423 -396
  75. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +2 -2
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  77. data/src/core/ext/filters/client_channel/retry_filter.cc +66 -131
  78. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  79. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  80. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  81. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  82. data/src/core/ext/filters/client_channel/subchannel.cc +99 -161
  83. data/src/core/ext/filters/client_channel/subchannel.h +31 -52
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  85. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  86. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  87. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  88. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +42 -53
  91. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -9
  92. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  93. data/src/core/ext/filters/http/client/http_client_filter.cc +70 -160
  94. data/src/core/ext/filters/http/client_authority_filter.cc +19 -36
  95. data/src/core/ext/filters/http/http_filters_plugin.cc +51 -71
  96. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +46 -139
  97. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  98. data/src/core/ext/filters/http/server/http_server_filter.cc +84 -183
  99. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  100. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  101. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  102. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  103. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  104. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  105. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  106. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  107. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  108. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +270 -0
  109. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
  110. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -23
  111. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
  112. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +26 -28
  113. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
  114. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +33 -53
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +146 -113
  116. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
  117. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
  118. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
  119. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  120. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -278
  121. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
  122. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  123. data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -23
  125. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -6
  126. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -5
  127. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  128. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  129. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  130. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  131. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  132. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +384 -218
  133. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +89 -143
  134. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  135. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  136. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -202
  137. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -9
  138. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +106 -26
  139. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +29 -44
  140. data/src/core/ext/transport/chttp2/transport/internal.h +10 -38
  141. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -179
  142. data/src/core/ext/transport/chttp2/transport/writing.cc +65 -127
  143. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  144. data/src/core/ext/transport/inproc/inproc_transport.cc +114 -161
  145. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  146. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
  147. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
  148. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
  149. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
  150. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
  151. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  152. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
  153. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
  154. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
  155. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
  156. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
  157. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
  158. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +277 -208
  159. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +141 -1
  160. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
  161. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
  162. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
  163. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +171 -125
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +55 -4
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +90 -71
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +17 -0
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +121 -92
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
  194. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
  195. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
  196. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -44
  197. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
  198. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
  199. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
  200. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
  201. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
  202. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
  203. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
  204. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
  205. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
  206. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
  207. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
  208. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
  210. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
  211. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
  212. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
  213. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
  214. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +99 -78
  215. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +19 -0
  216. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
  217. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
  218. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +508 -442
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +51 -19
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
  224. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
  233. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
  235. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
  243. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
  244. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
  245. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
  247. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
  248. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
  249. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
  250. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
  251. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
  252. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
  253. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
  254. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
  255. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
  256. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
  257. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
  258. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
  259. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
  260. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
  261. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
  262. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
  263. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
  280. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
  281. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
  282. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
  283. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
  284. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
  287. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
  288. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
  289. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
  290. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
  291. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
  292. data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
  293. data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
  294. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
  295. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
  296. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
  297. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
  298. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
  299. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
  300. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
  301. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
  302. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
  303. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
  304. data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
  305. data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
  306. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
  307. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
  308. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
  309. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
  310. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
  311. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
  312. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
  313. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
  314. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
  315. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
  316. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
  317. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
  318. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
  319. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
  320. data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
  321. data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
  322. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
  323. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
  324. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
  328. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
  329. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
  330. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
  331. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
  332. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +68 -0
  333. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +156 -0
  334. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
  335. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -5
  337. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  338. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
  341. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
  342. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
  343. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  344. data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
  345. data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
  346. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +103 -0
  347. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +199 -0
  348. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +14 -3
  349. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
  350. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +25 -13
  351. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
  352. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +20 -8
  353. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +19 -8
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +28 -16
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +19 -8
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +71 -0
  361. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +132 -0
  362. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +44 -0
  363. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +85 -0
  364. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
  365. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
  366. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
  367. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
  368. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
  369. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
  370. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +307 -336
  371. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
  373. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
  374. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
  375. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
  376. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +100 -138
  377. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
  382. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +61 -77
  383. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
  384. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +61 -79
  385. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
  386. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
  387. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
  388. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
  389. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
  390. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
  391. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +80 -99
  392. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
  393. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
  394. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
  395. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
  396. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
  397. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
  398. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
  399. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
  400. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
  403. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +325 -427
  404. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
  405. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
  406. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
  407. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
  408. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
  409. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  410. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  411. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
  412. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
  413. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
  414. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
  415. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
  416. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
  417. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
  418. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
  419. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
  420. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
  421. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
  422. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
  423. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
  424. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
  425. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
  426. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
  427. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
  428. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
  429. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
  430. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
  431. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
  432. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
  433. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
  434. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
  435. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
  436. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
  437. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
  438. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
  439. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
  440. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
  441. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
  442. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  443. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  444. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  445. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  446. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  447. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  448. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  449. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  450. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  451. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  452. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
  453. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
  454. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
  455. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
  456. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
  457. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
  458. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
  459. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
  460. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
  461. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +7 -15
  462. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +21 -30
  463. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -5
  464. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +7 -10
  465. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +7 -11
  466. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
  467. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  468. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  469. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +15 -19
  470. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +27 -33
  471. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +18 -24
  472. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +19 -23
  473. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +35 -41
  474. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +21 -25
  475. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  476. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  477. data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
  478. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  479. data/src/core/ext/xds/upb_utils.h +65 -0
  480. data/src/core/ext/xds/xds_api.cc +159 -3468
  481. data/src/core/ext/xds/xds_api.h +57 -558
  482. data/src/core/ext/xds/xds_bootstrap.cc +189 -122
  483. data/src/core/ext/xds/xds_bootstrap.h +30 -15
  484. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  485. data/src/core/ext/xds/xds_certificate_provider.h +2 -2
  486. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  487. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  488. data/src/core/ext/xds/xds_channel_stack_modifier.cc +112 -0
  489. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  490. data/src/core/ext/xds/xds_client.cc +751 -844
  491. data/src/core/ext/xds/xds_client.h +100 -143
  492. data/src/core/ext/xds/xds_client_stats.h +1 -1
  493. data/src/core/ext/xds/xds_cluster.cc +451 -0
  494. data/src/core/ext/xds/xds_cluster.h +111 -0
  495. data/src/core/ext/xds/xds_common_types.cc +388 -0
  496. data/src/core/ext/xds/xds_common_types.h +110 -0
  497. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  498. data/src/core/ext/xds/xds_endpoint.h +135 -0
  499. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  500. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  501. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  502. data/src/core/ext/xds/xds_listener.cc +1036 -0
  503. data/src/core/ext/xds/xds_listener.h +220 -0
  504. data/src/core/ext/{filters/workarounds/workaround_cronet_compression_filter.h → xds/xds_resource_type.cc} +14 -8
  505. data/src/core/ext/xds/xds_resource_type.h +98 -0
  506. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  507. data/src/core/ext/xds/xds_route_config.cc +993 -0
  508. data/src/core/ext/xds/xds_route_config.h +215 -0
  509. data/src/core/ext/xds/xds_routing.cc +250 -0
  510. data/src/core/ext/xds/xds_routing.h +101 -0
  511. data/src/core/ext/xds/xds_server_config_fetcher.cc +1061 -289
  512. data/src/core/lib/address_utils/parse_address.cc +22 -0
  513. data/src/core/lib/address_utils/parse_address.h +5 -0
  514. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  515. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  516. data/src/core/lib/avl/avl.h +389 -88
  517. data/src/core/lib/backoff/backoff.cc +6 -32
  518. data/src/core/lib/backoff/backoff.h +3 -3
  519. data/src/core/lib/channel/channel_args.cc +25 -8
  520. data/src/core/lib/channel/channel_args.h +11 -1
  521. data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
  522. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  523. data/src/core/lib/channel/channel_stack.cc +8 -0
  524. data/src/core/lib/channel/channel_stack.h +1 -1
  525. data/src/core/lib/channel/channel_stack_builder.cc +8 -14
  526. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  527. data/src/core/lib/channel/channel_trace.cc +7 -7
  528. data/src/core/lib/channel/channel_trace.h +1 -1
  529. data/src/core/lib/channel/channelz.cc +4 -3
  530. data/src/core/lib/channel/channelz.h +2 -2
  531. data/src/core/lib/channel/channelz_registry.cc +1 -1
  532. data/src/core/lib/channel/channelz_registry.h +1 -1
  533. data/src/core/lib/channel/connected_channel.cc +1 -3
  534. data/src/core/lib/channel/connected_channel.h +1 -2
  535. data/src/core/lib/compression/compression.cc +21 -113
  536. data/src/core/lib/compression/compression_internal.cc +142 -202
  537. data/src/core/lib/compression/compression_internal.h +64 -69
  538. data/src/core/lib/compression/message_compress.cc +11 -11
  539. data/src/core/lib/compression/message_compress.h +2 -2
  540. data/src/core/lib/config/core_configuration.cc +46 -2
  541. data/src/core/lib/config/core_configuration.h +50 -1
  542. data/src/core/lib/debug/stats.cc +1 -1
  543. data/src/core/lib/debug/stats_data.cc +13 -13
  544. data/src/core/lib/debug/trace.h +2 -2
  545. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
  546. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  547. data/src/core/lib/event_engine/event_engine.cc +0 -13
  548. data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
  549. data/src/core/lib/event_engine/event_engine_factory.h +33 -0
  550. data/src/core/lib/event_engine/memory_allocator.cc +70 -0
  551. data/src/core/lib/gpr/atm.cc +1 -1
  552. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  553. data/src/core/lib/gpr/string.cc +2 -2
  554. data/src/core/lib/gpr/tls.h +7 -1
  555. data/src/core/lib/gpr/useful.h +83 -32
  556. data/src/core/lib/gprpp/bitset.h +45 -16
  557. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  558. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  559. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  560. data/src/core/lib/gprpp/global_config_env.cc +7 -7
  561. data/src/core/lib/gprpp/global_config_env.h +2 -2
  562. data/src/core/lib/gprpp/manual_constructor.h +2 -3
  563. data/src/core/lib/gprpp/memory.h +6 -0
  564. data/src/core/lib/gprpp/orphanable.h +1 -1
  565. data/src/core/lib/gprpp/ref_counted.h +1 -1
  566. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  567. data/src/core/lib/gprpp/status_helper.cc +35 -23
  568. data/src/core/lib/gprpp/status_helper.h +14 -16
  569. data/src/core/lib/gprpp/table.h +434 -0
  570. data/src/core/lib/http/httpcli.cc +215 -202
  571. data/src/core/lib/http/httpcli.h +17 -27
  572. data/src/core/lib/http/parser.cc +2 -2
  573. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  574. data/src/core/lib/iomgr/buffer_list.h +13 -13
  575. data/src/core/lib/iomgr/call_combiner.cc +44 -16
  576. data/src/core/lib/iomgr/closure.h +29 -9
  577. data/src/core/lib/iomgr/combiner.cc +31 -24
  578. data/src/core/lib/iomgr/endpoint.h +0 -1
  579. data/src/core/lib/iomgr/endpoint_cfstream.cc +14 -30
  580. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  581. data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
  582. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  583. data/src/core/lib/iomgr/error.cc +115 -52
  584. data/src/core/lib/iomgr/error.h +53 -9
  585. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  586. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  587. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  588. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  589. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  590. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  591. data/src/core/lib/iomgr/event_engine/endpoint.cc +5 -6
  592. data/src/core/lib/iomgr/event_engine/iomgr.cc +9 -28
  593. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  594. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  595. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  596. data/src/core/lib/iomgr/event_engine/resolver.cc +68 -46
  597. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  598. data/src/core/lib/iomgr/event_engine/tcp.cc +16 -13
  599. data/src/core/lib/iomgr/event_engine/timer.cc +10 -4
  600. data/src/core/lib/iomgr/exec_ctx.cc +23 -18
  601. data/src/core/lib/iomgr/exec_ctx.h +11 -11
  602. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  603. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  604. data/src/core/lib/iomgr/executor.cc +26 -34
  605. data/src/core/lib/iomgr/executor.h +1 -1
  606. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  607. data/src/core/lib/iomgr/iomgr.cc +3 -1
  608. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  609. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  610. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  611. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  612. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  613. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  614. data/src/core/lib/iomgr/load_file.cc +2 -2
  615. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  616. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  617. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  618. data/src/core/lib/iomgr/port.h +2 -2
  619. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  620. data/src/core/lib/iomgr/resolve_address.h +47 -44
  621. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  622. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  623. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  624. data/src/core/lib/iomgr/resolve_address_posix.cc +87 -73
  625. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  626. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  627. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  628. data/src/core/lib/iomgr/resolved_address.h +39 -0
  629. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  630. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  631. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  632. data/src/core/lib/iomgr/tcp_client.cc +2 -4
  633. data/src/core/lib/iomgr/tcp_client.h +1 -3
  634. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -12
  635. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -11
  636. data/src/core/lib/iomgr/tcp_client_posix.cc +16 -41
  637. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  638. data/src/core/lib/iomgr/tcp_client_windows.cc +3 -13
  639. data/src/core/lib/iomgr/tcp_custom.cc +9 -36
  640. data/src/core/lib/iomgr/tcp_custom.h +0 -1
  641. data/src/core/lib/iomgr/tcp_posix.cc +32 -38
  642. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  643. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  644. data/src/core/lib/iomgr/tcp_server.h +6 -8
  645. data/src/core/lib/iomgr/tcp_server_custom.cc +7 -16
  646. data/src/core/lib/iomgr/tcp_server_posix.cc +20 -25
  647. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  648. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  649. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  650. data/src/core/lib/iomgr/tcp_server_windows.cc +9 -17
  651. data/src/core/lib/iomgr/tcp_windows.cc +4 -9
  652. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  653. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  654. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  655. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  656. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  657. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  658. data/src/core/lib/iomgr/work_serializer.cc +115 -44
  659. data/src/core/lib/iomgr/work_serializer.h +16 -4
  660. data/src/core/lib/json/json_reader.cc +83 -35
  661. data/src/core/lib/json/json_util.cc +69 -1
  662. data/src/core/lib/json/json_util.h +57 -99
  663. data/src/core/lib/json/json_writer.cc +0 -3
  664. data/src/core/lib/matchers/matchers.cc +1 -1
  665. data/src/core/lib/promise/activity.cc +115 -0
  666. data/src/core/lib/promise/activity.h +528 -0
  667. data/src/core/lib/promise/context.h +86 -0
  668. data/src/core/lib/promise/detail/basic_seq.h +407 -0
  669. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  670. data/src/core/lib/promise/detail/promise_like.h +85 -0
  671. data/src/core/lib/promise/detail/status.h +49 -0
  672. data/src/core/lib/promise/detail/switch.h +1455 -0
  673. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  674. data/src/core/lib/promise/loop.h +108 -0
  675. data/src/core/lib/promise/map.h +88 -0
  676. data/src/core/lib/promise/poll.h +60 -0
  677. data/src/core/lib/promise/race.h +84 -0
  678. data/src/core/lib/promise/seq.h +71 -0
  679. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  680. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  681. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +12 -5
  682. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +15 -17
  683. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +5 -7
  684. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  685. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  686. data/src/core/lib/resource_quota/api.cc +108 -0
  687. data/src/core/lib/resource_quota/api.h +40 -0
  688. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  689. data/src/core/lib/{gprpp → resource_quota}/arena.h +32 -11
  690. data/src/core/lib/resource_quota/memory_quota.cc +454 -0
  691. data/src/core/lib/resource_quota/memory_quota.h +421 -0
  692. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  693. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  694. data/src/core/lib/{transport/authority_override.h → resource_quota/thread_quota.cc} +22 -16
  695. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  696. data/src/core/lib/resource_quota/trace.cc +19 -0
  697. data/src/core/lib/resource_quota/trace.h +24 -0
  698. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  699. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  700. data/src/core/lib/security/authorization/evaluate_args.cc +41 -30
  701. data/src/core/lib/security/authorization/evaluate_args.h +3 -1
  702. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  703. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  704. data/src/core/lib/security/authorization/matchers.cc +227 -0
  705. data/src/core/lib/security/authorization/matchers.h +211 -0
  706. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  707. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  708. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +15 -1
  709. data/src/core/lib/security/context/security_context.cc +8 -4
  710. data/src/core/lib/security/context/security_context.h +1 -1
  711. data/src/core/lib/security/credentials/composite/composite_credentials.cc +6 -6
  712. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  713. data/src/core/lib/security/credentials/credentials.cc +4 -2
  714. data/src/core/lib/security/credentials/credentials.h +16 -21
  715. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +8 -12
  716. data/src/core/lib/security/credentials/external/external_account_credentials.cc +57 -24
  717. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -7
  718. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -4
  719. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  720. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  721. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -9
  722. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  723. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  724. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  725. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -29
  726. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  727. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -24
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +53 -70
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -9
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  733. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  737. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +15 -88
  738. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +26 -82
  739. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  740. data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
  741. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  742. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
  743. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
  744. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +5 -6
  745. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  746. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
  747. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
  748. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
  749. data/src/core/lib/security/security_connector/security_connector.cc +9 -8
  750. data/src/core/lib/security/security_connector/security_connector.h +6 -2
  751. data/src/core/lib/security/security_connector/ssl_utils.cc +25 -27
  752. data/src/core/lib/security/security_connector/ssl_utils.h +6 -15
  753. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +347 -198
  754. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -43
  755. data/src/core/lib/security/transport/auth_filters.h +7 -0
  756. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  757. data/src/core/lib/security/transport/security_handshaker.cc +75 -45
  758. data/src/core/lib/security/transport/server_auth_filter.cc +40 -37
  759. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  760. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.cc +2 -2
  761. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.h +4 -4
  762. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  763. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +3 -3
  764. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.h +8 -6
  765. data/src/core/lib/slice/percent_encoding.cc +30 -86
  766. data/src/core/lib/slice/percent_encoding.h +5 -11
  767. data/src/core/lib/slice/slice.cc +10 -24
  768. data/src/core/lib/slice/slice.h +371 -0
  769. data/src/core/lib/{compression/stream_compression_gzip.h → slice/slice_api.cc} +18 -7
  770. data/src/core/lib/slice/slice_buffer.cc +9 -5
  771. data/src/core/lib/slice/slice_intern.cc +4 -107
  772. data/src/core/lib/slice/slice_internal.h +2 -246
  773. data/src/core/lib/slice/slice_refcount.cc +17 -0
  774. data/src/core/lib/slice/slice_refcount.h +116 -0
  775. data/src/core/lib/slice/slice_refcount_base.h +165 -0
  776. data/src/core/lib/slice/slice_split.cc +100 -0
  777. data/src/core/lib/slice/slice_split.h +40 -0
  778. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  779. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  780. data/src/core/lib/surface/builtins.cc +49 -0
  781. data/src/core/lib/surface/builtins.h +26 -0
  782. data/src/core/lib/surface/call.cc +249 -482
  783. data/src/core/lib/surface/call.h +4 -10
  784. data/src/core/lib/surface/channel.cc +53 -93
  785. data/src/core/lib/surface/channel.h +6 -25
  786. data/src/core/lib/surface/channel_init.cc +23 -76
  787. data/src/core/lib/surface/channel_init.h +52 -44
  788. data/src/core/lib/surface/completion_queue.cc +8 -7
  789. data/src/core/lib/surface/init.cc +0 -42
  790. data/src/core/lib/surface/init_secure.cc +17 -14
  791. data/src/core/lib/surface/lame_client.cc +41 -28
  792. data/src/core/lib/surface/lame_client.h +1 -1
  793. data/src/core/lib/surface/server.cc +46 -55
  794. data/src/core/lib/surface/server.h +27 -21
  795. data/src/core/lib/surface/validate_metadata.cc +7 -4
  796. data/src/core/lib/surface/version.cc +2 -2
  797. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  798. data/src/core/lib/transport/byte_stream.cc +4 -0
  799. data/src/core/lib/transport/error_utils.cc +42 -17
  800. data/src/core/lib/transport/error_utils.h +15 -1
  801. data/src/core/lib/transport/metadata_batch.h +1167 -176
  802. data/src/core/lib/transport/{authority_override.cc → parsed_metadata.cc} +14 -17
  803. data/src/core/lib/transport/parsed_metadata.h +385 -0
  804. data/src/core/lib/transport/pid_controller.cc +4 -4
  805. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  806. data/src/core/lib/transport/timeout_encoding.h +40 -10
  807. data/src/core/lib/transport/transport.cc +8 -31
  808. data/src/core/lib/transport/transport.h +1 -2
  809. data/src/core/lib/transport/transport_op_string.cc +7 -20
  810. data/src/core/lib/uri/uri_parser.cc +233 -63
  811. data/src/core/lib/uri/uri_parser.h +38 -23
  812. data/src/core/plugin_registry/grpc_plugin_registry.cc +69 -45
  813. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  814. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  815. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  816. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -4
  817. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  818. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  819. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  820. data/src/core/tsi/fake_transport_security.cc +15 -7
  821. data/src/core/tsi/local_transport_security.cc +43 -80
  822. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  823. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  824. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  825. data/src/core/tsi/ssl_transport_security.cc +93 -16
  826. data/src/core/tsi/ssl_transport_security.h +19 -6
  827. data/src/core/tsi/transport_security.cc +12 -0
  828. data/src/core/tsi/transport_security.h +16 -1
  829. data/src/core/tsi/transport_security_interface.h +26 -0
  830. data/src/ruby/ext/grpc/extconf.rb +21 -11
  831. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -10
  832. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -15
  833. data/src/ruby/lib/grpc/version.rb +1 -1
  834. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  835. data/src/ruby/spec/client_server_spec.rb +1 -1
  836. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  837. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  838. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  839. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  840. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  841. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  842. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  843. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  844. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  845. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
  846. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  847. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  848. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  849. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  850. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  851. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  852. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  853. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  854. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  855. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  856. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  857. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  858. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  859. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  860. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  861. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  862. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  863. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  864. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  865. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  866. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  867. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  868. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  869. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  870. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  871. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  872. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  873. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  874. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  875. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  876. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  877. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  878. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  879. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  880. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  881. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  882. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  883. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  884. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  885. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  886. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  887. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  888. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  889. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  890. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  891. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  892. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  893. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  894. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  895. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  896. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  897. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  898. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  899. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  900. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  901. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  902. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  903. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  904. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  905. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  906. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  907. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  908. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  909. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  910. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  911. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  912. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  913. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  914. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  915. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  916. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  917. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  918. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  919. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  920. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  921. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  922. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  923. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  924. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  925. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  926. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  927. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  928. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  929. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  930. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  931. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  932. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  933. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  934. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  935. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  936. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  937. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  938. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  939. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  940. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  941. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  942. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  951. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  952. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  953. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  954. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  955. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  956. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  957. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  958. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  959. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  960. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  961. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  962. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  963. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  964. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  965. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  966. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  967. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  968. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  969. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  970. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  971. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  972. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  973. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  974. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  975. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  976. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  977. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  978. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  979. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  980. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  981. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  982. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  983. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  984. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  985. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  986. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  987. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  988. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  989. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  990. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  991. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  992. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  993. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  994. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  995. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  996. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  997. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  998. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  999. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1000. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  1001. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1002. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  1003. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1004. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1005. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1006. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +41 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1009. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1011. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1012. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1013. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1014. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1015. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1017. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1020. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  1024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  1025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  1027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  1028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  1029. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1030. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1034. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1035. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1036. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1037. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1038. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1039. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1040. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1041. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1042. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1043. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1044. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1045. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1046. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1047. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1048. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1049. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1050. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1051. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  1052. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1019 -274
  1053. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1054. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  1055. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1056. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1057. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1058. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1059. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1060. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1061. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1062. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1063. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1064. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1065. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1066. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1067. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +31 -13
  1068. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +491 -58
  1069. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  1070. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1071. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1072. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1073. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1074. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  1075. data/third_party/re2/re2/compile.cc +91 -109
  1076. data/third_party/re2/re2/dfa.cc +27 -39
  1077. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1078. data/third_party/re2/re2/filtered_re2.h +10 -5
  1079. data/third_party/re2/re2/nfa.cc +1 -1
  1080. data/third_party/re2/re2/parse.cc +42 -23
  1081. data/third_party/re2/re2/perl_groups.cc +34 -34
  1082. data/third_party/re2/re2/prefilter.cc +3 -2
  1083. data/third_party/re2/re2/prog.cc +182 -4
  1084. data/third_party/re2/re2/prog.h +28 -9
  1085. data/third_party/re2/re2/re2.cc +87 -118
  1086. data/third_party/re2/re2/re2.h +156 -141
  1087. data/third_party/re2/re2/regexp.cc +12 -5
  1088. data/third_party/re2/re2/regexp.h +8 -2
  1089. data/third_party/re2/re2/set.cc +31 -9
  1090. data/third_party/re2/re2/set.h +9 -4
  1091. data/third_party/re2/re2/simplify.cc +11 -3
  1092. data/third_party/re2/re2/tostring.cc +1 -1
  1093. data/third_party/re2/re2/walker-inl.h +1 -1
  1094. data/third_party/re2/util/mutex.h +2 -2
  1095. data/third_party/re2/util/pcre.h +3 -3
  1096. data/third_party/upb/upb/decode.c +309 -178
  1097. data/third_party/upb/upb/decode_fast.c +1 -1
  1098. data/third_party/upb/upb/decode_internal.h +1 -0
  1099. data/third_party/upb/upb/def.c +330 -85
  1100. data/third_party/upb/upb/def.h +45 -14
  1101. data/third_party/upb/upb/def.hpp +17 -4
  1102. data/third_party/upb/upb/encode.c +100 -40
  1103. data/third_party/upb/upb/msg.c +22 -9
  1104. data/third_party/upb/upb/msg_internal.h +90 -8
  1105. data/third_party/upb/upb/reflection.c +98 -58
  1106. data/third_party/upb/upb/reflection.h +6 -2
  1107. data/third_party/upb/upb/text_encode.c +3 -3
  1108. data/third_party/upb/upb/upb.c +8 -0
  1109. data/third_party/xxhash/xxhash.h +607 -352
  1110. metadata +259 -115
  1111. data/include/grpc/event_engine/slice_allocator.h +0 -71
  1112. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  1113. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  1114. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1115. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1116. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1117. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1118. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  1119. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  1120. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1121. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1122. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1123. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1124. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1125. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1126. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  1127. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1128. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  1129. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1130. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1131. data/src/core/lib/avl/avl.cc +0 -306
  1132. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1133. data/src/core/lib/compression/compression_args.cc +0 -136
  1134. data/src/core/lib/compression/compression_args.h +0 -56
  1135. data/src/core/lib/compression/stream_compression.cc +0 -81
  1136. data/src/core/lib/compression/stream_compression.h +0 -117
  1137. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1138. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1139. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1140. data/src/core/lib/gprpp/match.h +0 -73
  1141. data/src/core/lib/gprpp/overload.h +0 -59
  1142. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1143. data/src/core/lib/iomgr/resource_quota.cc +0 -1104
  1144. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1145. data/src/core/lib/iomgr/udp_server.cc +0 -747
  1146. data/src/core/lib/iomgr/udp_server.h +0 -103
  1147. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1148. data/src/core/lib/transport/metadata.cc +0 -693
  1149. data/src/core/lib/transport/metadata.h +0 -448
  1150. data/src/core/lib/transport/metadata_batch.cc +0 -430
  1151. data/src/core/lib/transport/static_metadata.cc +0 -1249
  1152. data/src/core/lib/transport/static_metadata.h +0 -604
  1153. data/src/core/lib/transport/status_metadata.cc +0 -62
  1154. data/src/core/lib/transport/status_metadata.h +0 -48
  1155. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1156. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -20,6 +20,7 @@
20
20
 
21
21
  #include "absl/strings/match.h"
22
22
  #include "absl/strings/str_join.h"
23
+ #include "absl/strings/str_replace.h"
23
24
  #include "absl/strings/str_split.h"
24
25
  #include "re2/re2.h"
25
26
  #define XXH_INLINE_ALL
@@ -27,13 +28,17 @@
27
28
 
28
29
  #include "src/core/ext/filters/client_channel/config_selector.h"
29
30
  #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
30
- #include "src/core/ext/filters/client_channel/resolver_registry.h"
31
31
  #include "src/core/ext/xds/xds_channel_args.h"
32
32
  #include "src/core/ext/xds/xds_client.h"
33
33
  #include "src/core/ext/xds/xds_http_filters.h"
34
+ #include "src/core/ext/xds/xds_listener.h"
35
+ #include "src/core/ext/xds/xds_route_config.h"
36
+ #include "src/core/ext/xds/xds_routing.h"
34
37
  #include "src/core/lib/channel/channel_args.h"
35
38
  #include "src/core/lib/iomgr/closure.h"
36
39
  #include "src/core/lib/iomgr/exec_ctx.h"
40
+ #include "src/core/lib/resolver/resolver_registry.h"
41
+ #include "src/core/lib/transport/error_utils.h"
37
42
  #include "src/core/lib/transport/timeout_encoding.h"
38
43
 
39
44
  namespace grpc_core {
@@ -44,6 +49,24 @@ const char* kXdsClusterAttribute = "xds_cluster_name";
44
49
 
45
50
  namespace {
46
51
 
52
+ std::string GetDefaultAuthorityInternal(const URI& uri) {
53
+ // Obtain the authority to use for the data plane connections, which is
54
+ // also used to select the right VirtualHost from the RouteConfiguration.
55
+ // We need to take the part of the URI path following the last
56
+ // "/" character or the entire path if the path contains no "/" character.
57
+ size_t pos = uri.path().find_last_of('/');
58
+ if (pos == uri.path().npos) return uri.path();
59
+ return uri.path().substr(pos + 1);
60
+ }
61
+
62
+ std::string GetDataPlaneAuthority(const grpc_channel_args& args,
63
+ const URI& uri) {
64
+ const char* authority =
65
+ grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
66
+ if (authority != nullptr) return authority;
67
+ return GetDefaultAuthorityInternal(uri);
68
+ }
69
+
47
70
  //
48
71
  // XdsResolver
49
72
  //
@@ -53,12 +76,15 @@ class XdsResolver : public Resolver {
53
76
  explicit XdsResolver(ResolverArgs args)
54
77
  : work_serializer_(std::move(args.work_serializer)),
55
78
  result_handler_(std::move(args.result_handler)),
56
- server_name_(absl::StripPrefix(args.uri.path(), "/")),
57
79
  args_(grpc_channel_args_copy(args.args)),
58
- interested_parties_(args.pollset_set) {
80
+ interested_parties_(args.pollset_set),
81
+ uri_(std::move(args.uri)),
82
+ data_plane_authority_(GetDataPlaneAuthority(*args.args, uri_)) {
59
83
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
60
- gpr_log(GPR_INFO, "[xds_resolver %p] created for server name %s", this,
61
- server_name_.c_str());
84
+ gpr_log(
85
+ GPR_INFO,
86
+ "[xds_resolver %p] created for URI %s; data plane authority is %s",
87
+ this, uri_.ToString().c_str(), data_plane_authority_.c_str());
62
88
  }
63
89
  }
64
90
 
@@ -78,52 +104,78 @@ class XdsResolver : public Resolver {
78
104
  }
79
105
 
80
106
  private:
81
- class Notifier {
82
- public:
83
- Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::LdsUpdate update);
84
- Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::RdsUpdate update);
85
- Notifier(RefCountedPtr<XdsResolver> resolver, grpc_error_handle error);
86
- explicit Notifier(RefCountedPtr<XdsResolver> resolver);
87
-
88
- private:
89
- enum Type { kLdsUpdate, kRdsUpdate, kError, kDoesNotExist };
90
-
91
- static void RunInExecCtx(void* arg, grpc_error_handle error);
92
- void RunInWorkSerializer(grpc_error_handle error);
93
-
94
- RefCountedPtr<XdsResolver> resolver_;
95
- grpc_closure closure_;
96
- XdsApi::LdsUpdate update_;
97
- Type type_;
98
- };
99
-
100
- class ListenerWatcher : public XdsClient::ListenerWatcherInterface {
107
+ class ListenerWatcher : public XdsListenerResourceType::WatcherInterface {
101
108
  public:
102
109
  explicit ListenerWatcher(RefCountedPtr<XdsResolver> resolver)
103
110
  : resolver_(std::move(resolver)) {}
104
- void OnListenerChanged(XdsApi::LdsUpdate listener) override {
105
- new Notifier(resolver_, std::move(listener));
111
+ void OnResourceChanged(XdsListenerResource listener) override {
112
+ Ref().release(); // ref held by lambda
113
+ resolver_->work_serializer_->Run(
114
+ // TODO(yashykt): When we move to C++14, capture listener with
115
+ // std::move
116
+ [this, listener]() mutable {
117
+ resolver_->OnListenerUpdate(std::move(listener));
118
+ Unref();
119
+ },
120
+ DEBUG_LOCATION);
106
121
  }
107
122
  void OnError(grpc_error_handle error) override {
108
- new Notifier(resolver_, error);
123
+ Ref().release(); // ref held by lambda
124
+ resolver_->work_serializer_->Run(
125
+ [this, error]() {
126
+ resolver_->OnError(error);
127
+ Unref();
128
+ },
129
+ DEBUG_LOCATION);
130
+ }
131
+ void OnResourceDoesNotExist() override {
132
+ Ref().release(); // ref held by lambda
133
+ resolver_->work_serializer_->Run(
134
+ [this]() {
135
+ resolver_->OnResourceDoesNotExist();
136
+ Unref();
137
+ },
138
+ DEBUG_LOCATION);
109
139
  }
110
- void OnResourceDoesNotExist() override { new Notifier(resolver_); }
111
140
 
112
141
  private:
113
142
  RefCountedPtr<XdsResolver> resolver_;
114
143
  };
115
144
 
116
- class RouteConfigWatcher : public XdsClient::RouteConfigWatcherInterface {
145
+ class RouteConfigWatcher
146
+ : public XdsRouteConfigResourceType::WatcherInterface {
117
147
  public:
118
148
  explicit RouteConfigWatcher(RefCountedPtr<XdsResolver> resolver)
119
149
  : resolver_(std::move(resolver)) {}
120
- void OnRouteConfigChanged(XdsApi::RdsUpdate route_config) override {
121
- new Notifier(resolver_, std::move(route_config));
150
+ void OnResourceChanged(XdsRouteConfigResource route_config) override {
151
+ Ref().release(); // ref held by lambda
152
+ resolver_->work_serializer_->Run(
153
+ // TODO(yashykt): When we move to C++14, capture route_config with
154
+ // std::move
155
+ [this, route_config]() mutable {
156
+ resolver_->OnRouteConfigUpdate(std::move(route_config));
157
+ Unref();
158
+ },
159
+ DEBUG_LOCATION);
122
160
  }
123
161
  void OnError(grpc_error_handle error) override {
124
- new Notifier(resolver_, error);
162
+ Ref().release(); // ref held by lambda
163
+ resolver_->work_serializer_->Run(
164
+ [this, error]() {
165
+ resolver_->OnError(error);
166
+ Unref();
167
+ },
168
+ DEBUG_LOCATION);
169
+ }
170
+ void OnResourceDoesNotExist() override {
171
+ Ref().release(); // ref held by lambda
172
+ resolver_->work_serializer_->Run(
173
+ [this]() {
174
+ resolver_->OnResourceDoesNotExist();
175
+ Unref();
176
+ },
177
+ DEBUG_LOCATION);
125
178
  }
126
- void OnResourceDoesNotExist() override { new Notifier(resolver_); }
127
179
 
128
180
  private:
129
181
  RefCountedPtr<XdsResolver> resolver_;
@@ -224,7 +276,7 @@ class XdsResolver : public Resolver {
224
276
  bool operator==(const ClusterWeightState& other) const;
225
277
  };
226
278
 
227
- XdsApi::Route route;
279
+ XdsRouteConfigResource::Route route;
228
280
  RefCountedPtr<ServiceConfig> method_config;
229
281
  absl::InlinedVector<ClusterWeightState, 2> weighted_cluster_state;
230
282
 
@@ -232,10 +284,13 @@ class XdsResolver : public Resolver {
232
284
  };
233
285
  using RouteTable = std::vector<Route>;
234
286
 
287
+ class RouteListIterator;
288
+
235
289
  void MaybeAddCluster(const std::string& name);
236
290
  grpc_error_handle CreateMethodConfig(
237
- const XdsApi::Route& route,
238
- const XdsApi::Route::ClusterWeight* cluster_weight,
291
+ const XdsRouteConfigResource::Route& route,
292
+ const XdsRouteConfigResource::Route::RouteAction::ClusterWeight*
293
+ cluster_weight,
239
294
  RefCountedPtr<ServiceConfig>* method_config);
240
295
 
241
296
  RefCountedPtr<XdsResolver> resolver_;
@@ -244,102 +299,37 @@ class XdsResolver : public Resolver {
244
299
  std::vector<const grpc_channel_filter*> filters_;
245
300
  };
246
301
 
247
- void OnListenerUpdate(XdsApi::LdsUpdate listener);
248
- void OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update);
302
+ void OnListenerUpdate(XdsListenerResource listener);
303
+ void OnRouteConfigUpdate(XdsRouteConfigResource rds_update);
249
304
  void OnError(grpc_error_handle error);
250
305
  void OnResourceDoesNotExist();
251
306
 
252
- grpc_error_handle CreateServiceConfig(
253
- RefCountedPtr<ServiceConfig>* service_config);
307
+ absl::StatusOr<RefCountedPtr<ServiceConfig>> CreateServiceConfig();
254
308
  void GenerateResult();
255
309
  void MaybeRemoveUnusedClusters();
256
310
 
257
311
  std::shared_ptr<WorkSerializer> work_serializer_;
258
312
  std::unique_ptr<ResultHandler> result_handler_;
259
- std::string server_name_;
260
313
  const grpc_channel_args* args_;
261
314
  grpc_pollset_set* interested_parties_;
262
-
315
+ URI uri_;
263
316
  RefCountedPtr<XdsClient> xds_client_;
317
+ std::string lds_resource_name_;
318
+ std::string data_plane_authority_;
264
319
 
265
- XdsClient::ListenerWatcherInterface* listener_watcher_ = nullptr;
320
+ ListenerWatcher* listener_watcher_ = nullptr;
266
321
  // This will not contain the RouteConfiguration, even if it comes with the
267
322
  // LDS response; instead, the relevant VirtualHost from the
268
323
  // RouteConfiguration will be saved in current_virtual_host_.
269
- XdsApi::LdsUpdate current_listener_;
324
+ XdsListenerResource current_listener_;
270
325
 
271
326
  std::string route_config_name_;
272
- XdsClient::RouteConfigWatcherInterface* route_config_watcher_ = nullptr;
273
- XdsApi::RdsUpdate::VirtualHost current_virtual_host_;
327
+ RouteConfigWatcher* route_config_watcher_ = nullptr;
328
+ XdsRouteConfigResource::VirtualHost current_virtual_host_;
274
329
 
275
330
  ClusterState::ClusterStateMap cluster_state_map_;
276
331
  };
277
332
 
278
- //
279
- // XdsResolver::Notifier
280
- //
281
-
282
- XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
283
- XdsApi::LdsUpdate update)
284
- : resolver_(std::move(resolver)),
285
- update_(std::move(update)),
286
- type_(kLdsUpdate) {
287
- GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
288
- ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
289
- }
290
-
291
- XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
292
- XdsApi::RdsUpdate update)
293
- : resolver_(std::move(resolver)), type_(kRdsUpdate) {
294
- update_.http_connection_manager.rds_update = std::move(update);
295
- GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
296
- ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
297
- }
298
-
299
- XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
300
- grpc_error_handle error)
301
- : resolver_(std::move(resolver)), type_(kError) {
302
- GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
303
- ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
304
- }
305
-
306
- XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
307
- : resolver_(std::move(resolver)), type_(kDoesNotExist) {
308
- GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
309
- ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
310
- }
311
-
312
- void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error_handle error) {
313
- Notifier* self = static_cast<Notifier*>(arg);
314
- GRPC_ERROR_REF(error);
315
- self->resolver_->work_serializer_->Run(
316
- [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
317
- }
318
-
319
- void XdsResolver::Notifier::RunInWorkSerializer(grpc_error_handle error) {
320
- if (resolver_->xds_client_ == nullptr) {
321
- GRPC_ERROR_UNREF(error);
322
- delete this;
323
- return;
324
- }
325
- switch (type_) {
326
- case kLdsUpdate:
327
- resolver_->OnListenerUpdate(std::move(update_));
328
- break;
329
- case kRdsUpdate:
330
- resolver_->OnRouteConfigUpdate(
331
- std::move(*update_.http_connection_manager.rds_update));
332
- break;
333
- case kError:
334
- resolver_->OnError(error);
335
- break;
336
- case kDoesNotExist:
337
- resolver_->OnResourceDoesNotExist();
338
- break;
339
- };
340
- delete this;
341
- }
342
-
343
333
  //
344
334
  // XdsResolver::XdsConfigSelector::Route
345
335
  //
@@ -363,6 +353,25 @@ bool XdsResolver::XdsConfigSelector::Route::operator==(
363
353
  MethodConfigsEqual(method_config.get(), other.method_config.get());
364
354
  }
365
355
 
356
+ // Implementation of XdsRouting::RouteListIterator for getting the matching
357
+ // route for a request.
358
+ class XdsResolver::XdsConfigSelector::RouteListIterator
359
+ : public XdsRouting::RouteListIterator {
360
+ public:
361
+ explicit RouteListIterator(const RouteTable* route_table)
362
+ : route_table_(route_table) {}
363
+
364
+ size_t Size() const override { return route_table_->size(); }
365
+
366
+ const XdsRouteConfigResource::Route::Matchers& GetMatchersForRoute(
367
+ size_t index) const override {
368
+ return (*route_table_)[index].route.matchers;
369
+ }
370
+
371
+ private:
372
+ const RouteTable* route_table_;
373
+ };
374
+
366
375
  //
367
376
  // XdsResolver::XdsConfigSelector
368
377
  //
@@ -392,30 +401,35 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
392
401
  route_table_.emplace_back();
393
402
  auto& route_entry = route_table_.back();
394
403
  route_entry.route = route;
395
- // If the route doesn't specify a timeout, set its timeout to the global
396
- // one.
397
- if (!route.max_stream_duration.has_value()) {
398
- route_entry.route.max_stream_duration =
399
- resolver_->current_listener_.http_connection_manager
400
- .http_max_stream_duration;
401
- }
402
- if (route.weighted_clusters.empty()) {
403
- *error = CreateMethodConfig(route_entry.route, nullptr,
404
- &route_entry.method_config);
405
- MaybeAddCluster(route.cluster_name);
406
- } else {
407
- uint32_t end = 0;
408
- for (const auto& weighted_cluster : route_entry.route.weighted_clusters) {
409
- Route::ClusterWeightState cluster_weight_state;
410
- *error = CreateMethodConfig(route_entry.route, &weighted_cluster,
411
- &cluster_weight_state.method_config);
412
- if (*error != GRPC_ERROR_NONE) return;
413
- end += weighted_cluster.weight;
414
- cluster_weight_state.range_end = end;
415
- cluster_weight_state.cluster = weighted_cluster.name;
416
- route_entry.weighted_cluster_state.push_back(
417
- std::move(cluster_weight_state));
418
- MaybeAddCluster(weighted_cluster.name);
404
+ auto* route_action =
405
+ absl::get_if<XdsRouteConfigResource::Route::RouteAction>(
406
+ &route_entry.route.action);
407
+ if (route_action != nullptr) {
408
+ // If the route doesn't specify a timeout, set its timeout to the global
409
+ // one.
410
+ if (!route_action->max_stream_duration.has_value()) {
411
+ route_action->max_stream_duration =
412
+ resolver_->current_listener_.http_connection_manager
413
+ .http_max_stream_duration;
414
+ }
415
+ if (route_action->weighted_clusters.empty()) {
416
+ *error = CreateMethodConfig(route_entry.route, nullptr,
417
+ &route_entry.method_config);
418
+ MaybeAddCluster(route_action->cluster_name);
419
+ } else {
420
+ uint32_t end = 0;
421
+ for (const auto& weighted_cluster : route_action->weighted_clusters) {
422
+ Route::ClusterWeightState cluster_weight_state;
423
+ *error = CreateMethodConfig(route_entry.route, &weighted_cluster,
424
+ &cluster_weight_state.method_config);
425
+ if (*error != GRPC_ERROR_NONE) return;
426
+ end += weighted_cluster.weight;
427
+ cluster_weight_state.range_end = end;
428
+ cluster_weight_state.cluster = weighted_cluster.name;
429
+ route_entry.weighted_cluster_state.push_back(
430
+ std::move(cluster_weight_state));
431
+ MaybeAddCluster(weighted_cluster.name);
432
+ }
419
433
  }
420
434
  }
421
435
  }
@@ -444,32 +458,17 @@ XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
444
458
  resolver_->MaybeRemoveUnusedClusters();
445
459
  }
446
460
 
447
- const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
448
- const std::string& instance_name,
449
- const XdsApi::RdsUpdate::VirtualHost& vhost, const XdsApi::Route& route,
450
- const XdsApi::Route::ClusterWeight* cluster_weight) {
451
- // Check ClusterWeight, if any.
452
- if (cluster_weight != nullptr) {
453
- auto it = cluster_weight->typed_per_filter_config.find(instance_name);
454
- if (it != cluster_weight->typed_per_filter_config.end()) return &it->second;
455
- }
456
- // Check Route.
457
- auto it = route.typed_per_filter_config.find(instance_name);
458
- if (it != route.typed_per_filter_config.end()) return &it->second;
459
- // Check VirtualHost.
460
- it = vhost.typed_per_filter_config.find(instance_name);
461
- if (it != vhost.typed_per_filter_config.end()) return &it->second;
462
- // Not found.
463
- return nullptr;
464
- }
465
-
466
461
  grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
467
- const XdsApi::Route& route,
468
- const XdsApi::Route::ClusterWeight* cluster_weight,
462
+ const XdsRouteConfigResource::Route& route,
463
+ const XdsRouteConfigResource::Route::RouteAction::ClusterWeight*
464
+ cluster_weight,
469
465
  RefCountedPtr<ServiceConfig>* method_config) {
470
466
  std::vector<std::string> fields;
467
+ const auto& route_action =
468
+ absl::get<XdsRouteConfigResource::Route::RouteAction>(route.action);
471
469
  // Set retry policy if any.
472
- if (route.retry_policy.has_value()) {
470
+ if (route_action.retry_policy.has_value() &&
471
+ !route_action.retry_policy->retry_on.Empty()) {
473
472
  std::vector<std::string> retry_parts;
474
473
  retry_parts.push_back(absl::StrFormat(
475
474
  "\"retryPolicy\": {\n"
@@ -477,25 +476,27 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
477
476
  " \"initialBackoff\": \"%d.%09ds\",\n"
478
477
  " \"maxBackoff\": \"%d.%09ds\",\n"
479
478
  " \"backoffMultiplier\": 2,\n",
480
- route.retry_policy->num_retries + 1,
481
- route.retry_policy->retry_back_off.base_interval.seconds,
482
- route.retry_policy->retry_back_off.base_interval.nanos,
483
- route.retry_policy->retry_back_off.max_interval.seconds,
484
- route.retry_policy->retry_back_off.max_interval.nanos));
479
+ route_action.retry_policy->num_retries + 1,
480
+ route_action.retry_policy->retry_back_off.base_interval.seconds,
481
+ route_action.retry_policy->retry_back_off.base_interval.nanos,
482
+ route_action.retry_policy->retry_back_off.max_interval.seconds,
483
+ route_action.retry_policy->retry_back_off.max_interval.nanos));
485
484
  std::vector<std::string> code_parts;
486
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_CANCELLED)) {
485
+ if (route_action.retry_policy->retry_on.Contains(GRPC_STATUS_CANCELLED)) {
487
486
  code_parts.push_back(" \"CANCELLED\"");
488
487
  }
489
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_DEADLINE_EXCEEDED)) {
488
+ if (route_action.retry_policy->retry_on.Contains(
489
+ GRPC_STATUS_DEADLINE_EXCEEDED)) {
490
490
  code_parts.push_back(" \"DEADLINE_EXCEEDED\"");
491
491
  }
492
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_INTERNAL)) {
492
+ if (route_action.retry_policy->retry_on.Contains(GRPC_STATUS_INTERNAL)) {
493
493
  code_parts.push_back(" \"INTERNAL\"");
494
494
  }
495
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_RESOURCE_EXHAUSTED)) {
495
+ if (route_action.retry_policy->retry_on.Contains(
496
+ GRPC_STATUS_RESOURCE_EXHAUSTED)) {
496
497
  code_parts.push_back(" \"RESOURCE_EXHAUSTED\"");
497
498
  }
498
- if (route.retry_policy->retry_on.Contains(GRPC_STATUS_UNAVAILABLE)) {
499
+ if (route_action.retry_policy->retry_on.Contains(GRPC_STATUS_UNAVAILABLE)) {
499
500
  code_parts.push_back(" \"UNAVAILABLE\"");
500
501
  }
501
502
  retry_parts.push_back(
@@ -505,47 +506,24 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
505
506
  fields.emplace_back(absl::StrJoin(retry_parts, ""));
506
507
  }
507
508
  // Set timeout.
508
- if (route.max_stream_duration.has_value() &&
509
- (route.max_stream_duration->seconds != 0 ||
510
- route.max_stream_duration->nanos != 0)) {
511
- fields.emplace_back(absl::StrFormat(" \"timeout\": \"%d.%09ds\"",
512
- route.max_stream_duration->seconds,
513
- route.max_stream_duration->nanos));
509
+ if (route_action.max_stream_duration.has_value() &&
510
+ (route_action.max_stream_duration->seconds != 0 ||
511
+ route_action.max_stream_duration->nanos != 0)) {
512
+ fields.emplace_back(
513
+ absl::StrFormat(" \"timeout\": \"%d.%09ds\"",
514
+ route_action.max_stream_duration->seconds,
515
+ route_action.max_stream_duration->nanos));
514
516
  }
515
517
  // Handle xDS HTTP filters.
516
- std::map<std::string, std::vector<std::string>> per_filter_configs;
517
- grpc_channel_args* args = grpc_channel_args_copy(resolver_->args_);
518
- for (const auto& http_filter :
519
- resolver_->current_listener_.http_connection_manager.http_filters) {
520
- // Find filter. This is guaranteed to succeed, because it's checked
521
- // at config validation time in the XdsApi code.
522
- const XdsHttpFilterImpl* filter_impl =
523
- XdsHttpFilterRegistry::GetFilterForType(
524
- http_filter.config.config_proto_type_name);
525
- GPR_ASSERT(filter_impl != nullptr);
526
- // If there is not actually any C-core filter associated with this
527
- // xDS filter, then it won't need any config, so skip it.
528
- if (filter_impl->channel_filter() == nullptr) continue;
529
- // Allow filter to add channel args that may affect service config
530
- // parsing.
531
- args = filter_impl->ModifyChannelArgs(args);
532
- // Find config override, if any.
533
- const XdsHttpFilterImpl::FilterConfig* config_override =
534
- FindFilterConfigOverride(http_filter.name,
535
- resolver_->current_virtual_host_, route,
536
- cluster_weight);
537
- // Generate service config for filter.
538
- auto method_config_field =
539
- filter_impl->GenerateServiceConfig(http_filter.config, config_override);
540
- if (!method_config_field.ok()) {
541
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
542
- "failed to generate method config for HTTP filter ", http_filter.name,
543
- ": ", method_config_field.status().ToString()));
544
- }
545
- per_filter_configs[method_config_field->service_config_field_name]
546
- .push_back(method_config_field->element);
547
- }
548
- for (const auto& p : per_filter_configs) {
518
+ XdsRouting::GeneratePerHttpFilterConfigsResult result =
519
+ XdsRouting::GeneratePerHTTPFilterConfigs(
520
+ resolver_->current_listener_.http_connection_manager.http_filters,
521
+ resolver_->current_virtual_host_, route, cluster_weight,
522
+ grpc_channel_args_copy(resolver_->args_));
523
+ if (result.error != GRPC_ERROR_NONE) {
524
+ return result.error;
525
+ }
526
+ for (const auto& p : result.per_filter_configs) {
549
527
  fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
550
528
  absl::StrJoin(p.second, ",\n"),
551
529
  "\n ]"));
@@ -563,9 +541,9 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
563
541
  absl::StrJoin(fields, ",\n"),
564
542
  "\n } ]\n"
565
543
  "}");
566
- *method_config = ServiceConfig::Create(args, json.c_str(), &error);
544
+ *method_config = ServiceConfig::Create(result.args, json.c_str(), &error);
567
545
  }
568
- grpc_channel_args_destroy(args);
546
+ grpc_channel_args_destroy(result.args);
569
547
  return error;
570
548
  }
571
549
 
@@ -586,40 +564,14 @@ void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
586
564
  }
587
565
  }
588
566
 
589
- absl::optional<absl::string_view> GetHeaderValue(
590
- grpc_metadata_batch* initial_metadata, absl::string_view header_name,
591
- std::string* concatenated_value) {
592
- // Note: If we ever allow binary headers here, we still need to
593
- // special-case ignore "grpc-tags-bin" and "grpc-trace-bin", since
594
- // they are not visible to the LB policy in grpc-go.
595
- if (absl::EndsWith(header_name, "-bin")) {
596
- return absl::nullopt;
597
- } else if (header_name == "content-type") {
598
- return "application/grpc";
599
- }
600
- return grpc_metadata_batch_get_value(initial_metadata, header_name,
601
- concatenated_value);
602
- }
603
-
604
- bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
605
- grpc_metadata_batch* initial_metadata) {
606
- for (const auto& header_matcher : header_matchers) {
607
- std::string concatenated_value;
608
- if (!header_matcher.Match(GetHeaderValue(
609
- initial_metadata, header_matcher.name(), &concatenated_value))) {
610
- return false;
611
- }
612
- }
613
- return true;
614
- }
615
-
616
567
  absl::optional<uint64_t> HeaderHashHelper(
617
- const XdsApi::Route::HashPolicy& policy,
568
+ const XdsRouteConfigResource::Route::RouteAction::HashPolicy& policy,
618
569
  grpc_metadata_batch* initial_metadata) {
619
- GPR_ASSERT(policy.type == XdsApi::Route::HashPolicy::HEADER);
570
+ GPR_ASSERT(policy.type ==
571
+ XdsRouteConfigResource::Route::RouteAction::HashPolicy::HEADER);
620
572
  std::string value_buffer;
621
- absl::optional<absl::string_view> header_value =
622
- GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
573
+ absl::optional<absl::string_view> header_value = XdsRouting::GetHeaderValue(
574
+ initial_metadata, policy.header_name, &value_buffer);
623
575
  if (!header_value.has_value()) {
624
576
  return absl::nullopt;
625
577
  }
@@ -635,119 +587,113 @@ absl::optional<uint64_t> HeaderHashHelper(
635
587
  return XXH64(header_value->data(), header_value->size(), 0);
636
588
  }
637
589
 
638
- bool UnderFraction(const uint32_t fraction_per_million) {
639
- // Generate a random number in [0, 1000000).
640
- const uint32_t random_number = rand() % 1000000;
641
- return random_number < fraction_per_million;
642
- }
643
-
644
590
  ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
645
591
  GetCallConfigArgs args) {
646
- for (const auto& entry : route_table_) {
647
- // Path matching.
648
- if (!entry.route.matchers.path_matcher.Match(
649
- StringViewFromSlice(*args.path))) {
650
- continue;
651
- }
652
- // Header Matching.
653
- if (!HeadersMatch(entry.route.matchers.header_matchers,
654
- args.initial_metadata)) {
655
- continue;
656
- }
657
- // Match fraction check
658
- if (entry.route.matchers.fraction_per_million.has_value() &&
659
- !UnderFraction(entry.route.matchers.fraction_per_million.value())) {
660
- continue;
661
- }
662
- // Found a route match
663
- absl::string_view cluster_name;
664
- RefCountedPtr<ServiceConfig> method_config;
665
- if (entry.route.weighted_clusters.empty()) {
666
- cluster_name = entry.route.cluster_name;
667
- method_config = entry.method_config;
668
- } else {
669
- const uint32_t key =
670
- rand() %
671
- entry.weighted_cluster_state[entry.weighted_cluster_state.size() - 1]
672
- .range_end;
673
- // Find the index in weighted clusters corresponding to key.
674
- size_t mid = 0;
675
- size_t start_index = 0;
676
- size_t end_index = entry.weighted_cluster_state.size() - 1;
677
- size_t index = 0;
678
- while (end_index > start_index) {
679
- mid = (start_index + end_index) / 2;
680
- if (entry.weighted_cluster_state[mid].range_end > key) {
681
- end_index = mid;
682
- } else if (entry.weighted_cluster_state[mid].range_end < key) {
683
- start_index = mid + 1;
684
- } else {
685
- index = mid + 1;
686
- break;
687
- }
688
- }
689
- if (index == 0) index = start_index;
690
- GPR_ASSERT(entry.weighted_cluster_state[index].range_end > key);
691
- cluster_name = entry.weighted_cluster_state[index].cluster;
692
- method_config = entry.weighted_cluster_state[index].method_config;
693
- }
694
- auto it = clusters_.find(cluster_name);
695
- GPR_ASSERT(it != clusters_.end());
696
- // Generate a hash.
697
- absl::optional<uint64_t> hash;
698
- for (const auto& hash_policy : entry.route.hash_policies) {
699
- absl::optional<uint64_t> new_hash;
700
- switch (hash_policy.type) {
701
- case XdsApi::Route::HashPolicy::HEADER:
702
- new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
703
- break;
704
- case XdsApi::Route::HashPolicy::CHANNEL_ID:
705
- new_hash = static_cast<uint64_t>(
706
- reinterpret_cast<uintptr_t>(resolver_.get()));
707
- break;
708
- default:
709
- GPR_ASSERT(0);
710
- }
711
- if (new_hash.has_value()) {
712
- // Rotating the old value prevents duplicate hash rules from cancelling
713
- // each other out and preserves all of the entropy
714
- const uint64_t old_value =
715
- hash.has_value() ? ((hash.value() << 1) | (hash.value() >> 63)) : 0;
716
- hash = old_value ^ new_hash.value();
717
- }
718
- // If the policy is a terminal policy and a hash has been generated,
719
- // ignore the rest of the hash policies.
720
- if (hash_policy.terminal && hash.has_value()) {
592
+ auto route_index = XdsRouting::GetRouteForRequest(
593
+ RouteListIterator(&route_table_), StringViewFromSlice(*args.path),
594
+ args.initial_metadata);
595
+ if (!route_index.has_value()) {
596
+ return CallConfig();
597
+ }
598
+ auto& entry = route_table_[*route_index];
599
+ // Found a route match
600
+ const auto* route_action =
601
+ absl::get_if<XdsRouteConfigResource::Route::RouteAction>(
602
+ &entry.route.action);
603
+ if (route_action == nullptr) {
604
+ CallConfig call_config;
605
+ call_config.error =
606
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
607
+ "Matching route has inappropriate action"),
608
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
609
+ return call_config;
610
+ }
611
+ absl::string_view cluster_name;
612
+ RefCountedPtr<ServiceConfig> method_config;
613
+ if (route_action->weighted_clusters.empty()) {
614
+ cluster_name = route_action->cluster_name;
615
+ method_config = entry.method_config;
616
+ } else {
617
+ const uint32_t key =
618
+ rand() %
619
+ entry.weighted_cluster_state[entry.weighted_cluster_state.size() - 1]
620
+ .range_end;
621
+ // Find the index in weighted clusters corresponding to key.
622
+ size_t mid = 0;
623
+ size_t start_index = 0;
624
+ size_t end_index = entry.weighted_cluster_state.size() - 1;
625
+ size_t index = 0;
626
+ while (end_index > start_index) {
627
+ mid = (start_index + end_index) / 2;
628
+ if (entry.weighted_cluster_state[mid].range_end > key) {
629
+ end_index = mid;
630
+ } else if (entry.weighted_cluster_state[mid].range_end < key) {
631
+ start_index = mid + 1;
632
+ } else {
633
+ index = mid + 1;
721
634
  break;
722
635
  }
723
636
  }
724
- if (!hash.has_value()) {
725
- // If there is no hash, we just choose a random value as a default.
726
- // We cannot directly use the result of rand() as the hash value,
727
- // since it is a 32-bit number and not a 64-bit number and will
728
- // therefore not be evenly distributed.
729
- uint32_t upper = rand();
730
- uint32_t lower = rand();
731
- hash = (static_cast<uint64_t>(upper) << 32) | lower;
637
+ if (index == 0) index = start_index;
638
+ GPR_ASSERT(entry.weighted_cluster_state[index].range_end > key);
639
+ cluster_name = entry.weighted_cluster_state[index].cluster;
640
+ method_config = entry.weighted_cluster_state[index].method_config;
641
+ }
642
+ auto it = clusters_.find(cluster_name);
643
+ GPR_ASSERT(it != clusters_.end());
644
+ // Generate a hash.
645
+ absl::optional<uint64_t> hash;
646
+ for (const auto& hash_policy : route_action->hash_policies) {
647
+ absl::optional<uint64_t> new_hash;
648
+ switch (hash_policy.type) {
649
+ case XdsRouteConfigResource::Route::RouteAction::HashPolicy::HEADER:
650
+ new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
651
+ break;
652
+ case XdsRouteConfigResource::Route::RouteAction::HashPolicy::CHANNEL_ID:
653
+ new_hash =
654
+ static_cast<uint64_t>(reinterpret_cast<uintptr_t>(resolver_.get()));
655
+ break;
656
+ default:
657
+ GPR_ASSERT(0);
658
+ }
659
+ if (new_hash.has_value()) {
660
+ // Rotating the old value prevents duplicate hash rules from cancelling
661
+ // each other out and preserves all of the entropy
662
+ const uint64_t old_value =
663
+ hash.has_value() ? ((hash.value() << 1) | (hash.value() >> 63)) : 0;
664
+ hash = old_value ^ new_hash.value();
665
+ }
666
+ // If the policy is a terminal policy and a hash has been generated,
667
+ // ignore the rest of the hash policies.
668
+ if (hash_policy.terminal && hash.has_value()) {
669
+ break;
732
670
  }
733
- CallConfig call_config;
734
- if (method_config != nullptr) {
735
- call_config.method_configs =
736
- method_config->GetMethodParsedConfigVector(grpc_empty_slice());
737
- call_config.service_config = std::move(method_config);
738
- }
739
- call_config.call_attributes[kXdsClusterAttribute] = it->first;
740
- std::string hash_string = absl::StrCat(hash.value());
741
- char* hash_value =
742
- static_cast<char*>(args.arena->Alloc(hash_string.size() + 1));
743
- memcpy(hash_value, hash_string.c_str(), hash_string.size());
744
- hash_value[hash_string.size()] = '\0';
745
- call_config.call_attributes[kRequestRingHashAttribute] = hash_value;
746
- call_config.call_dispatch_controller =
747
- args.arena->New<XdsCallDispatchController>(it->second->Ref());
748
- return call_config;
749
671
  }
750
- return CallConfig();
672
+ if (!hash.has_value()) {
673
+ // If there is no hash, we just choose a random value as a default.
674
+ // We cannot directly use the result of rand() as the hash value,
675
+ // since it is a 32-bit number and not a 64-bit number and will
676
+ // therefore not be evenly distributed.
677
+ uint32_t upper = rand();
678
+ uint32_t lower = rand();
679
+ hash = (static_cast<uint64_t>(upper) << 32) | lower;
680
+ }
681
+ CallConfig call_config;
682
+ if (method_config != nullptr) {
683
+ call_config.method_configs =
684
+ method_config->GetMethodParsedConfigVector(grpc_empty_slice());
685
+ call_config.service_config = std::move(method_config);
686
+ }
687
+ call_config.call_attributes[kXdsClusterAttribute] = it->first;
688
+ std::string hash_string = absl::StrCat(hash.value());
689
+ char* hash_value =
690
+ static_cast<char*>(args.arena->Alloc(hash_string.size() + 1));
691
+ memcpy(hash_value, hash_string.c_str(), hash_string.size());
692
+ hash_value[hash_string.size()] = '\0';
693
+ call_config.call_attributes[kRequestRingHashAttribute] = hash_value;
694
+ call_config.call_dispatch_controller =
695
+ args.arena->New<XdsCallDispatchController>(it->second->Ref());
696
+ return call_config;
751
697
  }
752
698
 
753
699
  //
@@ -762,20 +708,61 @@ void XdsResolver::StartLocked() {
762
708
  "Failed to create xds client -- channel will remain in "
763
709
  "TRANSIENT_FAILURE: %s",
764
710
  grpc_error_std_string(error).c_str());
765
- result_handler_->ReturnError(error);
711
+ std::string error_message;
712
+ grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &error_message);
713
+ Result result;
714
+ result.service_config = absl::UnavailableError(
715
+ absl::StrCat("Failed to create XdsClient: ", error_message));
716
+ result_handler_->ReportResult(std::move(result));
717
+ GRPC_ERROR_UNREF(error);
766
718
  return;
767
719
  }
720
+ std::string resource_name_fragment(absl::StripPrefix(uri_.path(), "/"));
721
+ if (!uri_.authority().empty()) {
722
+ // target_uri.authority is set case
723
+ const auto* authority_config =
724
+ xds_client_->bootstrap().LookupAuthority(uri_.authority());
725
+ if (authority_config == nullptr) {
726
+ Result result;
727
+ result.service_config = absl::UnavailableError(
728
+ absl::StrCat("Invalid target URI -- authority not found for %s.",
729
+ uri_.authority().c_str()));
730
+ result_handler_->ReportResult(std::move(result));
731
+ return;
732
+ }
733
+ std::string name_template =
734
+ authority_config->client_listener_resource_name_template;
735
+ if (name_template.empty()) {
736
+ name_template = absl::StrCat("xdstp://", uri_.authority(),
737
+ "/envoy.config.listener.v3.Listener/%s");
738
+ }
739
+ lds_resource_name_ = absl::StrReplaceAll(
740
+ name_template,
741
+ {{"%s", URI::PercentEncodePath(resource_name_fragment)}});
742
+ } else {
743
+ // target_uri.authority not set
744
+ absl::string_view name_template =
745
+ xds_client_->bootstrap()
746
+ .client_default_listener_resource_name_template();
747
+ if (name_template.empty()) {
748
+ name_template = "%s";
749
+ }
750
+ if (absl::StartsWith(name_template, "xdstp:")) {
751
+ resource_name_fragment = URI::PercentEncodePath(resource_name_fragment);
752
+ }
753
+ lds_resource_name_ =
754
+ absl::StrReplaceAll(name_template, {{"%s", resource_name_fragment}});
755
+ }
756
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
757
+ gpr_log(GPR_INFO, "[xds_resolver %p] Started with lds_resource_name %s.",
758
+ this, lds_resource_name_.c_str());
759
+ }
768
760
  grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
769
761
  interested_parties_);
770
- channelz::ChannelNode* parent_channelz_node =
771
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
772
- args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
773
- if (parent_channelz_node != nullptr) {
774
- xds_client_->AddChannelzLinkage(parent_channelz_node);
775
- }
776
- auto watcher = absl::make_unique<ListenerWatcher>(Ref());
762
+ auto watcher = MakeRefCounted<ListenerWatcher>(Ref());
777
763
  listener_watcher_ = watcher.get();
778
- xds_client_->WatchListenerData(server_name_, std::move(watcher));
764
+ XdsListenerResourceType::StartWatch(xds_client_.get(), lds_resource_name_,
765
+ std::move(watcher));
779
766
  }
780
767
 
781
768
  void XdsResolver::ShutdownLocked() {
@@ -784,18 +771,14 @@ void XdsResolver::ShutdownLocked() {
784
771
  }
785
772
  if (xds_client_ != nullptr) {
786
773
  if (listener_watcher_ != nullptr) {
787
- xds_client_->CancelListenerDataWatch(server_name_, listener_watcher_,
788
- /*delay_unsubscription=*/false);
774
+ XdsListenerResourceType::CancelWatch(
775
+ xds_client_.get(), lds_resource_name_, listener_watcher_,
776
+ /*delay_unsubscription=*/false);
789
777
  }
790
778
  if (route_config_watcher_ != nullptr) {
791
- xds_client_->CancelRouteConfigDataWatch(
792
- server_name_, route_config_watcher_, /*delay_unsubscription=*/false);
793
- }
794
- channelz::ChannelNode* parent_channelz_node =
795
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
796
- args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
797
- if (parent_channelz_node != nullptr) {
798
- xds_client_->RemoveChannelzLinkage(parent_channelz_node);
779
+ XdsRouteConfigResourceType::CancelWatch(
780
+ xds_client_.get(), route_config_name_, route_config_watcher_,
781
+ /*delay_unsubscription=*/false);
799
782
  }
800
783
  grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
801
784
  interested_parties_);
@@ -803,15 +786,18 @@ void XdsResolver::ShutdownLocked() {
803
786
  }
804
787
  }
805
788
 
806
- void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
789
+ void XdsResolver::OnListenerUpdate(XdsListenerResource listener) {
807
790
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
808
791
  gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
809
792
  }
793
+ if (xds_client_ == nullptr) {
794
+ return;
795
+ }
810
796
  if (listener.http_connection_manager.route_config_name !=
811
797
  route_config_name_) {
812
798
  if (route_config_watcher_ != nullptr) {
813
- xds_client_->CancelRouteConfigDataWatch(
814
- route_config_name_, route_config_watcher_,
799
+ XdsRouteConfigResourceType::CancelWatch(
800
+ xds_client_.get(), route_config_name_, route_config_watcher_,
815
801
  /*delay_unsubscription=*/
816
802
  !listener.http_connection_manager.route_config_name.empty());
817
803
  route_config_watcher_ = nullptr;
@@ -820,9 +806,10 @@ void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
820
806
  std::move(listener.http_connection_manager.route_config_name);
821
807
  if (!route_config_name_.empty()) {
822
808
  current_virtual_host_.routes.clear();
823
- auto watcher = absl::make_unique<RouteConfigWatcher>(Ref());
809
+ auto watcher = MakeRefCounted<RouteConfigWatcher>(Ref());
824
810
  route_config_watcher_ = watcher.get();
825
- xds_client_->WatchRouteConfigData(route_config_name_, std::move(watcher));
811
+ XdsRouteConfigResourceType::StartWatch(
812
+ xds_client_.get(), route_config_name_, std::move(watcher));
826
813
  }
827
814
  }
828
815
  current_listener_ = std::move(listener);
@@ -838,21 +825,44 @@ void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
838
825
  }
839
826
  }
840
827
 
841
- void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
828
+ namespace {
829
+ class VirtualHostListIterator : public XdsRouting::VirtualHostListIterator {
830
+ public:
831
+ explicit VirtualHostListIterator(
832
+ const std::vector<XdsRouteConfigResource::VirtualHost>* virtual_hosts)
833
+ : virtual_hosts_(virtual_hosts) {}
834
+
835
+ size_t Size() const override { return virtual_hosts_->size(); }
836
+
837
+ const std::vector<std::string>& GetDomainsForVirtualHost(
838
+ size_t index) const override {
839
+ return (*virtual_hosts_)[index].domains;
840
+ }
841
+
842
+ private:
843
+ const std::vector<XdsRouteConfigResource::VirtualHost>* virtual_hosts_;
844
+ };
845
+ } // namespace
846
+
847
+ void XdsResolver::OnRouteConfigUpdate(XdsRouteConfigResource rds_update) {
842
848
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
843
849
  gpr_log(GPR_INFO, "[xds_resolver %p] received updated route config", this);
844
850
  }
851
+ if (xds_client_ == nullptr) {
852
+ return;
853
+ }
845
854
  // Find the relevant VirtualHost from the RouteConfiguration.
846
- XdsApi::RdsUpdate::VirtualHost* vhost =
847
- rds_update.FindVirtualHostForDomain(server_name_);
848
- if (vhost == nullptr) {
855
+ auto vhost_index = XdsRouting::FindVirtualHostForDomain(
856
+ VirtualHostListIterator(&rds_update.virtual_hosts),
857
+ data_plane_authority_);
858
+ if (!vhost_index.has_value()) {
849
859
  OnError(GRPC_ERROR_CREATE_FROM_CPP_STRING(
850
- absl::StrCat("could not find VirtualHost for ", server_name_,
860
+ absl::StrCat("could not find VirtualHost for ", data_plane_authority_,
851
861
  " in RouteConfiguration")));
852
862
  return;
853
863
  }
854
864
  // Save the virtual host in the resolver.
855
- current_virtual_host_ = std::move(*vhost);
865
+ current_virtual_host_ = std::move(rds_update.virtual_hosts[*vhost_index]);
856
866
  // Send a new result to the channel.
857
867
  GenerateResult();
858
868
  }
@@ -860,11 +870,16 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
860
870
  void XdsResolver::OnError(grpc_error_handle error) {
861
871
  gpr_log(GPR_ERROR, "[xds_resolver %p] received error from XdsClient: %s",
862
872
  this, grpc_error_std_string(error).c_str());
873
+ if (xds_client_ == nullptr) {
874
+ GRPC_ERROR_UNREF(error);
875
+ return;
876
+ }
863
877
  Result result;
864
878
  grpc_arg new_arg = xds_client_->MakeChannelArg();
865
879
  result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
866
- result.service_config_error = error;
867
- result_handler_->ReturnResult(std::move(result));
880
+ result.service_config = grpc_error_to_absl_status(error);
881
+ result_handler_->ReportResult(std::move(result));
882
+ GRPC_ERROR_UNREF(error);
868
883
  }
869
884
 
870
885
  void XdsResolver::OnResourceDoesNotExist() {
@@ -872,17 +887,20 @@ void XdsResolver::OnResourceDoesNotExist() {
872
887
  "[xds_resolver %p] LDS/RDS resource does not exist -- clearing "
873
888
  "update and returning empty service config",
874
889
  this);
890
+ if (xds_client_ == nullptr) {
891
+ return;
892
+ }
875
893
  current_virtual_host_.routes.clear();
876
894
  Result result;
877
- result.service_config =
878
- ServiceConfig::Create(args_, "{}", &result.service_config_error);
879
- GPR_ASSERT(result.service_config != nullptr);
895
+ grpc_error_handle error = GRPC_ERROR_NONE;
896
+ result.service_config = ServiceConfig::Create(args_, "{}", &error);
897
+ GPR_ASSERT(*result.service_config != nullptr);
880
898
  result.args = grpc_channel_args_copy(args_);
881
- result_handler_->ReturnResult(std::move(result));
899
+ result_handler_->ReportResult(std::move(result));
882
900
  }
883
901
 
884
- grpc_error_handle XdsResolver::CreateServiceConfig(
885
- RefCountedPtr<ServiceConfig>* service_config) {
902
+ absl::StatusOr<RefCountedPtr<ServiceConfig>>
903
+ XdsResolver::CreateServiceConfig() {
886
904
  std::vector<std::string> clusters;
887
905
  for (const auto& cluster : cluster_state_map_) {
888
906
  clusters.push_back(
@@ -909,8 +927,13 @@ grpc_error_handle XdsResolver::CreateServiceConfig(
909
927
  "}");
910
928
  std::string json = absl::StrJoin(config_parts, "");
911
929
  grpc_error_handle error = GRPC_ERROR_NONE;
912
- *service_config = ServiceConfig::Create(args_, json.c_str(), &error);
913
- return error;
930
+ absl::StatusOr<RefCountedPtr<ServiceConfig>> result =
931
+ ServiceConfig::Create(args_, json.c_str(), &error);
932
+ if (error != GRPC_ERROR_NONE) {
933
+ result = grpc_error_to_absl_status(error);
934
+ GRPC_ERROR_UNREF(error);
935
+ }
936
+ return result;
914
937
  }
915
938
 
916
939
  void XdsResolver::GenerateResult() {
@@ -920,18 +943,17 @@ void XdsResolver::GenerateResult() {
920
943
  grpc_error_handle error = GRPC_ERROR_NONE;
921
944
  auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
922
945
  if (error != GRPC_ERROR_NONE) {
923
- OnError(error);
946
+ OnError(grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
947
+ GRPC_STATUS_UNAVAILABLE));
924
948
  return;
925
949
  }
926
950
  Result result;
927
- error = CreateServiceConfig(&result.service_config);
928
- if (error != GRPC_ERROR_NONE) {
929
- OnError(error);
930
- return;
931
- }
951
+ result.service_config = CreateServiceConfig();
932
952
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
933
953
  gpr_log(GPR_INFO, "[xds_resolver %p] generated service config: %s", this,
934
- result.service_config->json_string().c_str());
954
+ result.service_config.ok()
955
+ ? (*result.service_config)->json_string().c_str()
956
+ : result.service_config.status().ToString().c_str());
935
957
  }
936
958
  grpc_arg new_args[] = {
937
959
  xds_client_->MakeChannelArg(),
@@ -939,7 +961,7 @@ void XdsResolver::GenerateResult() {
939
961
  };
940
962
  result.args =
941
963
  grpc_channel_args_copy_and_add(args_, new_args, GPR_ARRAY_SIZE(new_args));
942
- result_handler_->ReturnResult(std::move(result));
964
+ result_handler_->ReportResult(std::move(result));
943
965
  }
944
966
 
945
967
  void XdsResolver::MaybeRemoveUnusedClusters() {
@@ -966,13 +988,18 @@ void XdsResolver::MaybeRemoveUnusedClusters() {
966
988
  class XdsResolverFactory : public ResolverFactory {
967
989
  public:
968
990
  bool IsValidUri(const URI& uri) const override {
969
- if (GPR_UNLIKELY(!uri.authority().empty())) {
970
- gpr_log(GPR_ERROR, "URI authority not supported");
991
+ if (uri.path().empty() || uri.path().back() == '/') {
992
+ gpr_log(GPR_ERROR,
993
+ "URI path does not contain valid data plane authority");
971
994
  return false;
972
995
  }
973
996
  return true;
974
997
  }
975
998
 
999
+ std::string GetDefaultAuthority(const URI& uri) const override {
1000
+ return GetDefaultAuthorityInternal(uri);
1001
+ }
1002
+
976
1003
  OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
977
1004
  if (!IsValidUri(args.uri)) return nullptr;
978
1005
  return MakeOrphanable<XdsResolver>(std::move(args));