grpc 1.34.0 → 1.37.0

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

Potentially problematic release.


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

Files changed (806) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +893 -2840
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +28 -0
  6. data/include/grpc/grpc_security.h +77 -14
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +1 -1
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/port_platform.h +2 -0
  12. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  13. data/include/grpc/slice_buffer.h +3 -3
  14. data/include/grpc/support/sync.h +3 -3
  15. data/include/grpc/support/time.h +7 -7
  16. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  17. data/src/core/ext/filters/client_channel/client_channel.cc +2823 -1559
  18. data/src/core/ext/filters/client_channel/client_channel.h +0 -6
  19. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  20. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  21. data/src/core/ext/filters/client_channel/config_selector.h +13 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +191 -0
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  24. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  26. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
  27. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  28. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -7
  29. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  30. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
  31. data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -35
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
  39. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +369 -108
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -27
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -2
  46. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
  47. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  48. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  49. data/src/core/ext/filters/client_channel/resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver.h +1 -12
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +41 -57
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +444 -22
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +21 -22
  58. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -17
  59. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  60. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -34
  61. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +310 -160
  62. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  63. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  64. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  65. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  67. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  68. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
  69. data/src/core/ext/filters/client_channel/server_address.cc +9 -0
  70. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  71. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  72. data/src/core/ext/filters/client_channel/subchannel.cc +100 -193
  73. data/src/core/ext/filters/client_channel/subchannel.h +73 -111
  74. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  75. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
  76. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  77. data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
  78. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +495 -0
  79. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  80. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  81. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  82. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  83. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  86. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  88. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +29 -16
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +623 -219
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +46 -15
  99. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  100. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  104. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  105. data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
  106. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
  107. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  108. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  109. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  110. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  111. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  113. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -28
  114. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  115. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  116. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  117. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  118. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  119. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +119 -124
  120. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +450 -284
  121. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  122. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  123. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +24 -23
  124. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +62 -21
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  127. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +69 -45
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +275 -78
  131. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +19 -19
  132. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +80 -43
  133. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  134. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +41 -41
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +172 -89
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +53 -47
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +188 -78
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -2
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +48 -7
  151. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -14
  152. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  153. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  154. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  155. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  156. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  157. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  158. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  159. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +34 -32
  160. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +151 -61
  161. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +33 -29
  162. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +138 -54
  163. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -3
  164. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  165. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  166. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  167. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  168. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  169. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  170. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  171. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +15 -13
  172. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +70 -37
  173. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +257 -216
  174. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +995 -495
  175. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  176. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  177. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -4
  178. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  179. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  180. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  181. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  182. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  183. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  184. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  185. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  186. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  187. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +96 -98
  188. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +378 -226
  189. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  190. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  191. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +28 -25
  192. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +124 -53
  193. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +9 -12
  194. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +29 -24
  195. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -33
  196. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  197. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  198. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  199. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  200. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  201. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +51 -44
  202. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +179 -129
  203. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -4
  204. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  205. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -4
  206. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  207. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -8
  208. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  209. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -3
  210. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  211. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  212. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  213. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  214. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  218. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  219. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  220. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  221. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  222. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  223. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  224. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  225. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -3
  226. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  227. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  228. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  229. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  230. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  231. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  232. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  233. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  234. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  235. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  236. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  237. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  238. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  239. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  240. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  241. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  242. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  243. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  244. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  245. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +54 -37
  246. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +171 -59
  247. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  248. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  249. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  250. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  251. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  252. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  253. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  254. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  255. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  256. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  257. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  258. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  259. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  260. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  261. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  262. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  263. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  264. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  265. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  266. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  267. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  268. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  269. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  270. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  271. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  272. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  273. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  274. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  275. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  276. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  277. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  278. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  279. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  280. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  281. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  282. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  283. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  284. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  285. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  286. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  287. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  288. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  289. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  290. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +6 -6
  291. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  292. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  293. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  294. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  295. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  296. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  297. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  298. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  299. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  300. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  301. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  302. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  303. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  304. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
  305. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  306. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  307. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
  308. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
  309. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  310. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
  311. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  312. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
  313. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
  314. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
  315. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
  316. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  317. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
  318. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  319. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
  320. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
  321. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
  322. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  323. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  324. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  325. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
  327. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
  328. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  329. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  330. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  331. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  332. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  333. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  334. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  335. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  336. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  337. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  338. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
  339. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  340. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
  341. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  342. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
  343. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  344. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  345. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  346. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  347. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  348. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  349. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  350. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  351. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  352. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  353. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  354. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  355. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  356. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
  357. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
  358. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
  359. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
  360. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
  361. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
  362. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
  363. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  364. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  365. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
  366. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  367. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  368. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  369. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  370. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  371. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  372. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  373. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  374. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  375. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  376. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  377. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  378. data/src/core/ext/xds/certificate_provider_store.cc +10 -7
  379. data/src/core/ext/xds/certificate_provider_store.h +12 -7
  380. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
  381. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
  382. data/src/core/ext/xds/xds_api.cc +2265 -593
  383. data/src/core/ext/xds/xds_api.h +335 -102
  384. data/src/core/ext/xds/xds_bootstrap.cc +80 -45
  385. data/src/core/ext/xds/xds_bootstrap.h +17 -6
  386. data/src/core/ext/xds/xds_certificate_provider.cc +232 -67
  387. data/src/core/ext/xds/xds_certificate_provider.h +103 -26
  388. data/src/core/ext/xds/xds_client.cc +212 -63
  389. data/src/core/ext/xds/xds_client.h +35 -1
  390. data/src/core/ext/xds/xds_client_stats.cc +4 -3
  391. data/src/core/ext/xds/xds_client_stats.h +2 -2
  392. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  393. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  394. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  395. data/src/core/ext/xds/xds_http_filters.h +130 -0
  396. data/src/core/ext/xds/xds_server_config_fetcher.cc +532 -0
  397. data/src/core/lib/channel/channel_args.cc +8 -8
  398. data/src/core/lib/channel/channel_stack.cc +12 -0
  399. data/src/core/lib/channel/channel_stack.h +7 -0
  400. data/src/core/lib/channel/channel_trace.h +1 -1
  401. data/src/core/lib/channel/channelz.cc +105 -18
  402. data/src/core/lib/channel/channelz.h +30 -2
  403. data/src/core/lib/channel/channelz_registry.cc +14 -0
  404. data/src/core/lib/channel/channelz_registry.h +0 -1
  405. data/src/core/lib/channel/handshaker.cc +4 -46
  406. data/src/core/lib/channel/handshaker.h +1 -18
  407. data/src/core/lib/channel/status_util.cc +12 -2
  408. data/src/core/lib/channel/status_util.h +5 -0
  409. data/src/core/lib/compression/compression_args.cc +3 -2
  410. data/src/core/lib/debug/stats.h +2 -2
  411. data/src/core/lib/debug/stats_data.h +13 -13
  412. data/src/core/lib/gpr/alloc.cc +3 -2
  413. data/src/core/lib/gpr/log.cc +59 -17
  414. data/src/core/lib/gpr/log_linux.cc +3 -1
  415. data/src/core/lib/gpr/log_posix.cc +3 -1
  416. data/src/core/lib/gpr/log_windows.cc +3 -1
  417. data/src/core/lib/gpr/spinlock.h +10 -2
  418. data/src/core/lib/gpr/string.cc +22 -21
  419. data/src/core/lib/gpr/string.h +5 -6
  420. data/src/core/lib/gpr/sync.cc +4 -4
  421. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  422. data/src/core/lib/gpr/sync_windows.cc +2 -2
  423. data/src/core/lib/gpr/time.cc +12 -12
  424. data/src/core/lib/gprpp/arena.h +3 -2
  425. data/src/core/lib/gprpp/atomic.h +3 -3
  426. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  427. data/src/core/lib/gprpp/mpscq.cc +2 -2
  428. data/src/core/lib/gprpp/ref_counted.h +2 -2
  429. data/src/core/lib/gprpp/ref_counted_ptr.h +11 -1
  430. data/src/core/lib/gprpp/sync.h +129 -40
  431. data/src/core/lib/gprpp/thd.h +1 -1
  432. data/src/core/lib/gprpp/thd_posix.cc +6 -1
  433. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  434. data/src/core/lib/gprpp/time_util.cc +77 -0
  435. data/src/core/lib/gprpp/time_util.h +42 -0
  436. data/src/core/lib/http/httpcli.cc +1 -1
  437. data/src/core/lib/http/httpcli.h +2 -3
  438. data/src/core/lib/http/httpcli_security_connector.cc +3 -3
  439. data/src/core/lib/http/parser.cc +1 -2
  440. data/src/core/lib/iomgr/buffer_list.h +1 -1
  441. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  442. data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
  443. data/src/core/lib/iomgr/combiner.cc +2 -1
  444. data/src/core/lib/iomgr/endpoint.h +1 -1
  445. data/src/core/lib/iomgr/error.cc +15 -11
  446. data/src/core/lib/iomgr/error.h +1 -1
  447. data/src/core/lib/iomgr/error_internal.h +1 -1
  448. data/src/core/lib/iomgr/ev_apple.cc +11 -8
  449. data/src/core/lib/iomgr/ev_epoll1_linux.cc +23 -16
  450. data/src/core/lib/iomgr/ev_epollex_linux.cc +21 -17
  451. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  452. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  453. data/src/core/lib/iomgr/exec_ctx.cc +6 -2
  454. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  455. data/src/core/lib/iomgr/executor.cc +2 -1
  456. data/src/core/lib/iomgr/executor.h +1 -1
  457. data/src/core/lib/iomgr/executor/threadpool.h +1 -1
  458. data/src/core/lib/iomgr/iomgr.cc +1 -1
  459. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  460. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  461. data/src/core/lib/iomgr/load_file.h +1 -1
  462. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  463. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  464. data/src/core/lib/iomgr/parse_address.cc +52 -46
  465. data/src/core/lib/iomgr/parse_address.h +13 -9
  466. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  467. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  468. data/src/core/lib/iomgr/python_util.h +1 -1
  469. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  470. data/src/core/lib/iomgr/resource_quota.cc +5 -5
  471. data/src/core/lib/iomgr/sockaddr_utils.cc +131 -11
  472. data/src/core/lib/iomgr/sockaddr_utils.h +26 -1
  473. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  474. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  475. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  476. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  477. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  478. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  479. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  480. data/src/core/lib/iomgr/tcp_posix.cc +14 -14
  481. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  482. data/src/core/lib/iomgr/tcp_uv.cc +2 -2
  483. data/src/core/lib/iomgr/timer_custom.cc +3 -3
  484. data/src/core/lib/iomgr/timer_generic.cc +5 -5
  485. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  486. data/src/core/lib/iomgr/udp_server.cc +1 -2
  487. data/src/core/lib/iomgr/udp_server.h +1 -2
  488. data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
  489. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  490. data/src/core/lib/json/json.h +10 -0
  491. data/src/core/lib/matchers/matchers.cc +339 -0
  492. data/src/core/lib/matchers/matchers.h +160 -0
  493. data/src/core/lib/security/context/security_context.cc +4 -3
  494. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  495. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  496. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  497. data/src/core/lib/security/credentials/credentials.cc +6 -6
  498. data/src/core/lib/security/credentials/credentials.h +2 -1
  499. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  500. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  501. data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
  502. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
  503. data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
  504. data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
  505. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  506. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
  507. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
  508. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
  509. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
  510. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -18
  511. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
  512. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -4
  513. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -6
  514. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  515. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  516. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
  517. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  518. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  519. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -6
  520. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  521. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
  522. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
  523. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
  524. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
  525. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
  526. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
  527. data/src/core/lib/security/credentials/tls/tls_credentials.cc +3 -2
  528. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  529. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  530. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  531. data/src/core/lib/security/credentials/xds/xds_credentials.cc +209 -10
  532. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  533. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  534. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  535. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +50 -17
  536. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
  537. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  538. data/src/core/lib/security/security_connector/security_connector.cc +3 -2
  539. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  540. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -6
  541. data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
  542. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +89 -26
  543. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
  544. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  545. data/src/core/lib/security/transport/security_handshaker.cc +35 -7
  546. data/src/core/lib/slice/slice_intern.cc +9 -11
  547. data/src/core/lib/slice/slice_internal.h +2 -2
  548. data/src/core/lib/surface/call.cc +32 -24
  549. data/src/core/lib/surface/call_details.cc +8 -8
  550. data/src/core/lib/surface/channel.cc +16 -10
  551. data/src/core/lib/surface/channel.h +6 -5
  552. data/src/core/lib/surface/channel_init.cc +1 -1
  553. data/src/core/lib/surface/completion_queue.cc +24 -19
  554. data/src/core/lib/surface/completion_queue.h +16 -16
  555. data/src/core/lib/surface/init.cc +19 -20
  556. data/src/core/lib/surface/lame_client.cc +47 -54
  557. data/src/core/lib/surface/lame_client.h +5 -0
  558. data/src/core/lib/surface/server.cc +102 -51
  559. data/src/core/lib/surface/server.h +112 -18
  560. data/src/core/lib/surface/version.cc +2 -2
  561. data/src/core/lib/transport/authority_override.cc +6 -4
  562. data/src/core/lib/transport/authority_override.h +5 -2
  563. data/src/core/lib/transport/connectivity_state.h +6 -4
  564. data/src/core/lib/transport/error_utils.h +1 -1
  565. data/src/core/lib/transport/metadata.cc +6 -2
  566. data/src/core/lib/transport/metadata_batch.cc +27 -0
  567. data/src/core/lib/transport/metadata_batch.h +18 -4
  568. data/src/core/lib/transport/static_metadata.cc +1 -1
  569. data/src/core/lib/transport/status_metadata.cc +4 -3
  570. data/src/core/lib/transport/transport.h +7 -7
  571. data/src/core/lib/uri/uri_parser.cc +131 -249
  572. data/src/core/lib/uri/uri_parser.h +57 -21
  573. data/src/core/plugin_registry/grpc_plugin_registry.cc +22 -4
  574. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  575. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  576. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -25
  577. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +39 -44
  578. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  579. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  580. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  581. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  582. data/src/core/tsi/fake_transport_security.cc +16 -5
  583. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  584. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  585. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  586. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
  587. data/src/core/tsi/ssl_transport_security.cc +62 -52
  588. data/src/core/tsi/ssl_transport_security.h +6 -9
  589. data/src/core/tsi/transport_security.cc +6 -6
  590. data/src/core/tsi/transport_security_interface.h +1 -1
  591. data/src/ruby/ext/grpc/extconf.rb +9 -1
  592. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  593. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  594. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  595. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  596. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  597. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  598. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  599. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +14 -0
  600. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +34 -13
  601. data/src/ruby/ext/grpc/rb_server.c +13 -1
  602. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  603. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  604. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  605. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  606. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  607. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  608. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  609. data/src/ruby/lib/grpc/version.rb +1 -1
  610. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +35 -0
  611. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  612. data/src/ruby/spec/call_spec.rb +1 -1
  613. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  614. data/src/ruby/spec/channel_spec.rb +17 -6
  615. data/src/ruby/spec/client_auth_spec.rb +27 -1
  616. data/src/ruby/spec/errors_spec.rb +1 -1
  617. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  618. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  619. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  620. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  621. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  622. data/src/ruby/spec/server_spec.rb +22 -0
  623. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  624. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  625. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  626. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  627. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  628. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  629. data/third_party/boringssl-with-bazel/err_data.c +715 -713
  630. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  631. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  632. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  633. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  634. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  635. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  636. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  637. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
  638. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  639. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  640. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  641. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  642. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  643. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  644. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  645. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  646. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  647. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  648. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  649. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  650. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  651. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  652. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  653. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  654. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  655. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  656. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  657. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  658. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  659. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  660. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  661. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  663. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  664. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  665. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  666. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  667. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  668. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  669. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  670. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  671. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
  672. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
  673. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
  674. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
  675. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  676. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  677. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  678. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  679. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  680. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  681. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  682. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
  683. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  684. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  685. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
  686. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  687. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  688. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  689. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
  690. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  691. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  692. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  693. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  694. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
  695. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  696. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  697. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  698. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  699. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  700. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  701. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  702. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  703. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
  704. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  705. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
  706. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
  707. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  708. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
  709. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  710. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  711. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
  712. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  713. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  714. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  715. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  716. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
  717. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  718. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  719. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +67 -33
  720. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
  721. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
  722. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
  723. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
  724. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  725. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
  726. data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
  727. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  728. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  729. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
  730. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
  731. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  732. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  733. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +362 -50
  734. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
  735. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  736. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
  737. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  738. data/third_party/upb/upb/decode.c +248 -167
  739. data/third_party/upb/upb/decode.h +20 -1
  740. data/third_party/upb/upb/decode.int.h +163 -0
  741. data/third_party/upb/upb/decode_fast.c +1040 -0
  742. data/third_party/upb/upb/decode_fast.h +126 -0
  743. data/third_party/upb/upb/def.c +525 -516
  744. data/third_party/upb/upb/def.h +16 -31
  745. data/third_party/upb/upb/def.hpp +37 -123
  746. data/third_party/upb/upb/encode.c +227 -169
  747. data/third_party/upb/upb/encode.h +27 -2
  748. data/third_party/upb/upb/msg.c +167 -88
  749. data/third_party/upb/upb/msg.h +174 -34
  750. data/third_party/upb/upb/port_def.inc +74 -61
  751. data/third_party/upb/upb/port_undef.inc +3 -7
  752. data/third_party/upb/upb/reflection.c +36 -19
  753. data/third_party/upb/upb/table.c +34 -197
  754. data/third_party/upb/upb/table.int.h +14 -5
  755. data/third_party/upb/upb/text_encode.c +45 -22
  756. data/third_party/upb/upb/text_encode.h +4 -1
  757. data/third_party/upb/upb/upb.c +18 -41
  758. data/third_party/upb/upb/upb.h +36 -7
  759. data/third_party/upb/upb/upb.hpp +4 -4
  760. data/third_party/upb/upb/upb.int.h +29 -0
  761. data/third_party/xxhash/xxhash.h +5443 -0
  762. metadata +152 -82
  763. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
  764. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  765. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  766. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  767. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  768. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -53
  769. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  770. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -129
  771. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  772. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -77
  773. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
  774. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -85
  775. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  776. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -160
  777. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  778. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -84
  779. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  780. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  781. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  782. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  783. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  784. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  785. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  786. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  787. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  788. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  789. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  790. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  791. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
  792. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
  793. data/src/core/lib/gprpp/map.h +0 -53
  794. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  795. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  796. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  797. data/src/core/lib/security/authorization/evaluate_args.cc +0 -153
  798. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  799. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  800. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  801. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  802. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  803. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  804. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  805. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
  806. data/third_party/upb/upb/port.c +0 -26
@@ -23,6 +23,8 @@
23
23
  #include <stdlib.h>
24
24
  #include <string.h>
25
25
 
26
+ #include "absl/strings/str_split.h"
27
+
26
28
  #include <grpc/support/alloc.h>
27
29
  #include <grpc/support/string_util.h>
28
30
 
@@ -33,7 +35,6 @@
33
35
  #include "src/core/lib/iomgr/parse_address.h"
34
36
  #include "src/core/lib/iomgr/resolve_address.h"
35
37
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
36
- #include "src/core/lib/iomgr/work_serializer.h"
37
38
  #include "src/core/lib/slice/slice_internal.h"
38
39
  #include "src/core/lib/slice/slice_string_helpers.h"
39
40
 
@@ -51,13 +52,14 @@ class SockaddrResolver : public Resolver {
51
52
  void ShutdownLocked() override {}
52
53
 
53
54
  private:
55
+ std::unique_ptr<ResultHandler> result_handler_;
54
56
  ServerAddressList addresses_;
55
57
  const grpc_channel_args* channel_args_ = nullptr;
56
58
  };
57
59
 
58
60
  SockaddrResolver::SockaddrResolver(ServerAddressList addresses,
59
61
  ResolverArgs args)
60
- : Resolver(std::move(args.work_serializer), std::move(args.result_handler)),
62
+ : result_handler_(std::move(args.result_handler)),
61
63
  addresses_(std::move(addresses)),
62
64
  channel_args_(grpc_channel_args_copy(args.args)) {}
63
65
 
@@ -71,37 +73,27 @@ void SockaddrResolver::StartLocked() {
71
73
  // TODO(roth): Use std::move() once channel args is converted to C++.
72
74
  result.args = channel_args_;
73
75
  channel_args_ = nullptr;
74
- result_handler()->ReturnResult(std::move(result));
76
+ result_handler_->ReturnResult(std::move(result));
75
77
  }
76
78
 
77
79
  //
78
80
  // Factory
79
81
  //
80
82
 
81
- void DoNothing(void* /*ignored*/) {}
82
-
83
- bool ParseUri(const grpc_uri* uri,
84
- bool parse(const grpc_uri* uri, grpc_resolved_address* dst),
83
+ bool ParseUri(const URI& uri,
84
+ bool parse(const URI& uri, grpc_resolved_address* dst),
85
85
  ServerAddressList* addresses) {
86
- if (0 != strcmp(uri->authority, "")) {
86
+ if (!uri.authority().empty()) {
87
87
  gpr_log(GPR_ERROR, "authority-based URIs not supported by the %s scheme",
88
- uri->scheme);
88
+ uri.scheme().c_str());
89
89
  return false;
90
90
  }
91
91
  // Construct addresses.
92
- grpc_slice path_slice =
93
- grpc_slice_new(uri->path, strlen(uri->path), DoNothing);
94
- grpc_slice_buffer path_parts;
95
- grpc_slice_buffer_init(&path_parts);
96
- grpc_slice_split(path_slice, ",", &path_parts);
97
92
  bool errors_found = false;
98
- for (size_t i = 0; i < path_parts.count; i++) {
99
- grpc_uri ith_uri = *uri;
100
- grpc_core::UniquePtr<char> part_str(
101
- grpc_slice_to_c_string(path_parts.slices[i]));
102
- ith_uri.path = part_str.get();
93
+ for (absl::string_view ith_path : absl::StrSplit(uri.path(), ',')) {
94
+ URI ith_uri(uri.scheme(), "", std::string(ith_path), {}, "");
103
95
  grpc_resolved_address addr;
104
- if (!parse(&ith_uri, &addr)) {
96
+ if (!parse(ith_uri, &addr)) {
105
97
  errors_found = true;
106
98
  break;
107
99
  }
@@ -109,14 +101,11 @@ bool ParseUri(const grpc_uri* uri,
109
101
  addresses->emplace_back(addr, nullptr /* args */);
110
102
  }
111
103
  }
112
- grpc_slice_buffer_destroy_internal(&path_parts);
113
- grpc_slice_unref_internal(path_slice);
114
104
  return !errors_found;
115
105
  }
116
106
 
117
107
  OrphanablePtr<Resolver> CreateSockaddrResolver(
118
- ResolverArgs args,
119
- bool parse(const grpc_uri* uri, grpc_resolved_address* dst)) {
108
+ ResolverArgs args, bool parse(const URI& uri, grpc_resolved_address* dst)) {
120
109
  ServerAddressList addresses;
121
110
  if (!ParseUri(args.uri, parse, &addresses)) return nullptr;
122
111
  // Instantiate resolver.
@@ -126,7 +115,7 @@ OrphanablePtr<Resolver> CreateSockaddrResolver(
126
115
 
127
116
  class IPv4ResolverFactory : public ResolverFactory {
128
117
  public:
129
- bool IsValidUri(const grpc_uri* uri) const override {
118
+ bool IsValidUri(const URI& uri) const override {
130
119
  return ParseUri(uri, grpc_parse_ipv4, nullptr);
131
120
  }
132
121
 
@@ -139,7 +128,7 @@ class IPv4ResolverFactory : public ResolverFactory {
139
128
 
140
129
  class IPv6ResolverFactory : public ResolverFactory {
141
130
  public:
142
- bool IsValidUri(const grpc_uri* uri) const override {
131
+ bool IsValidUri(const URI& uri) const override {
143
132
  return ParseUri(uri, grpc_parse_ipv6, nullptr);
144
133
  }
145
134
 
@@ -153,7 +142,7 @@ class IPv6ResolverFactory : public ResolverFactory {
153
142
  #ifdef GRPC_HAVE_UNIX_SOCKET
154
143
  class UnixResolverFactory : public ResolverFactory {
155
144
  public:
156
- bool IsValidUri(const grpc_uri* uri) const override {
145
+ bool IsValidUri(const URI& uri) const override {
157
146
  return ParseUri(uri, grpc_parse_unix, nullptr);
158
147
  }
159
148
 
@@ -161,9 +150,8 @@ class UnixResolverFactory : public ResolverFactory {
161
150
  return CreateSockaddrResolver(std::move(args), grpc_parse_unix);
162
151
  }
163
152
 
164
- grpc_core::UniquePtr<char> GetDefaultAuthority(
165
- grpc_uri* /*uri*/) const override {
166
- return grpc_core::UniquePtr<char>(gpr_strdup("localhost"));
153
+ std::string GetDefaultAuthority(const URI& /*uri*/) const override {
154
+ return "localhost";
167
155
  }
168
156
 
169
157
  const char* scheme() const override { return "unix"; }
@@ -171,7 +159,7 @@ class UnixResolverFactory : public ResolverFactory {
171
159
 
172
160
  class UnixAbstractResolverFactory : public ResolverFactory {
173
161
  public:
174
- bool IsValidUri(const grpc_uri* uri) const override {
162
+ bool IsValidUri(const URI& uri) const override {
175
163
  return ParseUri(uri, grpc_parse_unix_abstract, nullptr);
176
164
  }
177
165
 
@@ -179,9 +167,8 @@ class UnixAbstractResolverFactory : public ResolverFactory {
179
167
  return CreateSockaddrResolver(std::move(args), grpc_parse_unix_abstract);
180
168
  }
181
169
 
182
- grpc_core::UniquePtr<char> GetDefaultAuthority(
183
- grpc_uri* /*uri*/) const override {
184
- return grpc_core::UniquePtr<char>(gpr_strdup("localhost"));
170
+ std::string GetDefaultAuthority(const URI& /*uri*/) const override {
171
+ return "localhost";
185
172
  }
186
173
 
187
174
  const char* scheme() const override { return "unix-abstract"; }
@@ -22,13 +22,18 @@
22
22
  #include "absl/strings/str_join.h"
23
23
  #include "absl/strings/str_split.h"
24
24
  #include "re2/re2.h"
25
+ #define XXH_INLINE_ALL
26
+ #include "xxhash.h"
25
27
 
26
28
  #include "src/core/ext/filters/client_channel/config_selector.h"
29
+ #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
27
30
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
28
31
  #include "src/core/ext/xds/xds_client.h"
32
+ #include "src/core/ext/xds/xds_http_filters.h"
29
33
  #include "src/core/lib/channel/channel_args.h"
30
34
  #include "src/core/lib/iomgr/closure.h"
31
35
  #include "src/core/lib/iomgr/exec_ctx.h"
36
+ #include "src/core/lib/surface/lame_client.h"
32
37
  #include "src/core/lib/transport/timeout_encoding.h"
33
38
 
34
39
  namespace grpc_core {
@@ -46,13 +51,11 @@ namespace {
46
51
  class XdsResolver : public Resolver {
47
52
  public:
48
53
  explicit XdsResolver(ResolverArgs args)
49
- : Resolver(std::move(args.work_serializer),
50
- std::move(args.result_handler)),
54
+ : work_serializer_(std::move(args.work_serializer)),
55
+ result_handler_(std::move(args.result_handler)),
56
+ server_name_(absl::StripPrefix(args.uri.path(), "/")),
51
57
  args_(grpc_channel_args_copy(args.args)),
52
58
  interested_parties_(args.pollset_set) {
53
- char* path = args.uri->path;
54
- if (path[0] == '/') ++path;
55
- server_name_ = path;
56
59
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
57
60
  gpr_log(GPR_INFO, "[xds_resolver %p] created for server name %s", this,
58
61
  server_name_.c_str());
@@ -137,9 +140,7 @@ class XdsResolver : public Resolver {
137
140
 
138
141
  class XdsConfigSelector : public ConfigSelector {
139
142
  public:
140
- XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
141
- const std::vector<XdsApi::Route>& routes,
142
- grpc_error* error);
143
+ XdsConfigSelector(RefCountedPtr<XdsResolver> resolver, grpc_error** error);
143
144
  ~XdsConfigSelector() override;
144
145
 
145
146
  const char* name() const override { return "XdsConfigSelector"; }
@@ -153,26 +154,41 @@ class XdsResolver : public Resolver {
153
154
 
154
155
  CallConfig GetCallConfig(GetCallConfigArgs args) override;
155
156
 
157
+ std::vector<const grpc_channel_filter*> GetFilters() override {
158
+ return filters_;
159
+ }
160
+
161
+ grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) override;
162
+
156
163
  private:
157
164
  struct Route {
165
+ struct ClusterWeightState {
166
+ uint32_t range_end;
167
+ absl::string_view cluster;
168
+ RefCountedPtr<ServiceConfig> method_config;
169
+
170
+ bool operator==(const ClusterWeightState& other) const;
171
+ };
172
+
158
173
  XdsApi::Route route;
159
- absl::InlinedVector<std::pair<uint32_t, absl::string_view>, 2>
160
- weighted_cluster_state;
161
174
  RefCountedPtr<ServiceConfig> method_config;
162
- bool operator==(const Route& other) const {
163
- return route == other.route &&
164
- weighted_cluster_state == other.weighted_cluster_state;
165
- }
175
+ absl::InlinedVector<ClusterWeightState, 2> weighted_cluster_state;
176
+
177
+ bool operator==(const Route& other) const;
166
178
  };
167
179
  using RouteTable = std::vector<Route>;
168
180
 
169
181
  void MaybeAddCluster(const std::string& name);
170
- grpc_error* CreateMethodConfig(RefCountedPtr<ServiceConfig>* method_config,
171
- const XdsApi::Route& route);
182
+ grpc_error* CreateMethodConfig(
183
+ const XdsApi::Route& route,
184
+ const XdsApi::Route::ClusterWeight* cluster_weight,
185
+ RefCountedPtr<ServiceConfig>* method_config);
172
186
 
173
187
  RefCountedPtr<XdsResolver> resolver_;
174
188
  RouteTable route_table_;
175
189
  std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
190
+ std::vector<const grpc_channel_filter*> filters_;
191
+ grpc_error* filter_error_ = GRPC_ERROR_NONE;
176
192
  };
177
193
 
178
194
  void OnListenerUpdate(XdsApi::LdsUpdate listener);
@@ -184,16 +200,25 @@ class XdsResolver : public Resolver {
184
200
  void GenerateResult();
185
201
  void MaybeRemoveUnusedClusters();
186
202
 
203
+ std::shared_ptr<WorkSerializer> work_serializer_;
204
+ std::unique_ptr<ResultHandler> result_handler_;
187
205
  std::string server_name_;
188
206
  const grpc_channel_args* args_;
189
207
  grpc_pollset_set* interested_parties_;
208
+
190
209
  RefCountedPtr<XdsClient> xds_client_;
210
+
191
211
  XdsClient::ListenerWatcherInterface* listener_watcher_ = nullptr;
212
+ // This will not contain the RouteConfiguration, even if it comes with the
213
+ // LDS response; instead, the relevant VirtualHost from the
214
+ // RouteConfiguration will be saved in current_virtual_host_.
215
+ XdsApi::LdsUpdate current_listener_;
216
+
192
217
  std::string route_config_name_;
193
218
  XdsClient::RouteConfigWatcherInterface* route_config_watcher_ = nullptr;
219
+ XdsApi::RdsUpdate::VirtualHost current_virtual_host_;
220
+
194
221
  ClusterState::ClusterStateMap cluster_state_map_;
195
- std::vector<XdsApi::Route> current_update_;
196
- XdsApi::Duration http_max_stream_duration_;
197
222
  };
198
223
 
199
224
  //
@@ -212,7 +237,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
212
237
  XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
213
238
  XdsApi::RdsUpdate update)
214
239
  : resolver_(std::move(resolver)), type_(kRdsUpdate) {
215
- update_.rds_update = std::move(update);
240
+ update_.http_connection_manager.rds_update = std::move(update);
216
241
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
217
242
  ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
218
243
  }
@@ -233,7 +258,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
233
258
  void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error* error) {
234
259
  Notifier* self = static_cast<Notifier*>(arg);
235
260
  GRPC_ERROR_REF(error);
236
- self->resolver_->work_serializer()->Run(
261
+ self->resolver_->work_serializer_->Run(
237
262
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
238
263
  }
239
264
 
@@ -248,7 +273,8 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
248
273
  resolver_->OnListenerUpdate(std::move(update_));
249
274
  break;
250
275
  case kRdsUpdate:
251
- resolver_->OnRouteConfigUpdate(std::move(*update_.rds_update));
276
+ resolver_->OnRouteConfigUpdate(
277
+ std::move(*update_.http_connection_manager.rds_update));
252
278
  break;
253
279
  case kError:
254
280
  resolver_->OnError(error);
@@ -260,13 +286,35 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
260
286
  delete this;
261
287
  }
262
288
 
289
+ //
290
+ // XdsResolver::XdsConfigSelector::Route
291
+ //
292
+
293
+ bool MethodConfigsEqual(const ServiceConfig* sc1, const ServiceConfig* sc2) {
294
+ if (sc1 == nullptr) return sc2 == nullptr;
295
+ if (sc2 == nullptr) return false;
296
+ return sc1->json_string() == sc2->json_string();
297
+ }
298
+
299
+ bool XdsResolver::XdsConfigSelector::Route::ClusterWeightState::operator==(
300
+ const ClusterWeightState& other) const {
301
+ return range_end == other.range_end && cluster == other.cluster &&
302
+ MethodConfigsEqual(method_config.get(), other.method_config.get());
303
+ }
304
+
305
+ bool XdsResolver::XdsConfigSelector::Route::operator==(
306
+ const Route& other) const {
307
+ return route == other.route &&
308
+ weighted_cluster_state == other.weighted_cluster_state &&
309
+ MethodConfigsEqual(method_config.get(), other.method_config.get());
310
+ }
311
+
263
312
  //
264
313
  // XdsResolver::XdsConfigSelector
265
314
  //
266
315
 
267
316
  XdsResolver::XdsConfigSelector::XdsConfigSelector(
268
- RefCountedPtr<XdsResolver> resolver,
269
- const std::vector<XdsApi::Route>& routes, grpc_error* error)
317
+ RefCountedPtr<XdsResolver> resolver, grpc_error** error)
270
318
  : resolver_(std::move(resolver)) {
271
319
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
272
320
  gpr_log(GPR_INFO, "[xds_resolver %p] creating XdsConfigSelector %p",
@@ -281,8 +329,8 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
281
329
  // weighted_cluster_state field points to the memory in the route field, so
282
330
  // moving the entry in a reallocation will cause the string_view to point to
283
331
  // invalid data.
284
- route_table_.reserve(routes.size());
285
- for (auto& route : routes) {
332
+ route_table_.reserve(resolver_->current_virtual_host_.routes.size());
333
+ for (auto& route : resolver_->current_virtual_host_.routes) {
286
334
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
287
335
  gpr_log(GPR_INFO, "[xds_resolver %p] XdsConfigSelector %p: route: %s",
288
336
  resolver_.get(), this, route.ToString().c_str());
@@ -294,27 +342,95 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
294
342
  // one.
295
343
  if (!route.max_stream_duration.has_value()) {
296
344
  route_entry.route.max_stream_duration =
297
- resolver_->http_max_stream_duration_;
345
+ resolver_->current_listener_.http_connection_manager
346
+ .http_max_stream_duration;
298
347
  }
299
- error = CreateMethodConfig(&route_entry.method_config, route_entry.route);
300
348
  if (route.weighted_clusters.empty()) {
349
+ *error = CreateMethodConfig(route_entry.route, nullptr,
350
+ &route_entry.method_config);
301
351
  MaybeAddCluster(route.cluster_name);
302
352
  } else {
303
353
  uint32_t end = 0;
304
354
  for (const auto& weighted_cluster : route_entry.route.weighted_clusters) {
305
- MaybeAddCluster(weighted_cluster.name);
355
+ Route::ClusterWeightState cluster_weight_state;
356
+ *error = CreateMethodConfig(route_entry.route, &weighted_cluster,
357
+ &cluster_weight_state.method_config);
358
+ if (*error != GRPC_ERROR_NONE) return;
306
359
  end += weighted_cluster.weight;
307
- route_entry.weighted_cluster_state.emplace_back(end,
308
- weighted_cluster.name);
360
+ cluster_weight_state.range_end = end;
361
+ cluster_weight_state.cluster = weighted_cluster.name;
362
+ route_entry.weighted_cluster_state.push_back(
363
+ std::move(cluster_weight_state));
364
+ MaybeAddCluster(weighted_cluster.name);
309
365
  }
310
366
  }
311
367
  }
368
+ // Populate filter list.
369
+ bool found_router = false;
370
+ for (const auto& http_filter :
371
+ resolver_->current_listener_.http_connection_manager.http_filters) {
372
+ // Stop at the router filter. It's a no-op for us, and we ignore
373
+ // anything that may come after it, for compatibility with Envoy.
374
+ if (http_filter.config.config_proto_type_name ==
375
+ kXdsHttpRouterFilterConfigName) {
376
+ found_router = true;
377
+ break;
378
+ }
379
+ // Find filter. This is guaranteed to succeed, because it's checked
380
+ // at config validation time in the XdsApi code.
381
+ const XdsHttpFilterImpl* filter_impl =
382
+ XdsHttpFilterRegistry::GetFilterForType(
383
+ http_filter.config.config_proto_type_name);
384
+ GPR_ASSERT(filter_impl != nullptr);
385
+ // Add C-core filter to list.
386
+ filters_.push_back(filter_impl->channel_filter());
387
+ }
388
+ // For compatibility with Envoy, if the router filter is not
389
+ // configured, we fail all RPCs.
390
+ if (!found_router) {
391
+ filter_error_ =
392
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
393
+ "no xDS HTTP router filter configured"),
394
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
395
+ filters_.push_back(&grpc_lame_filter);
396
+ }
397
+ }
398
+
399
+ XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
400
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
401
+ gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
402
+ resolver_.get(), this);
403
+ }
404
+ clusters_.clear();
405
+ resolver_->MaybeRemoveUnusedClusters();
406
+ GRPC_ERROR_UNREF(filter_error_);
407
+ }
408
+
409
+ const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
410
+ const std::string& instance_name,
411
+ const XdsApi::RdsUpdate::VirtualHost& vhost, const XdsApi::Route& route,
412
+ const XdsApi::Route::ClusterWeight* cluster_weight) {
413
+ // Check ClusterWeight, if any.
414
+ if (cluster_weight != nullptr) {
415
+ auto it = cluster_weight->typed_per_filter_config.find(instance_name);
416
+ if (it != cluster_weight->typed_per_filter_config.end()) return &it->second;
417
+ }
418
+ // Check Route.
419
+ auto it = route.typed_per_filter_config.find(instance_name);
420
+ if (it != route.typed_per_filter_config.end()) return &it->second;
421
+ // Check VirtualHost.
422
+ it = vhost.typed_per_filter_config.find(instance_name);
423
+ if (it != vhost.typed_per_filter_config.end()) return &it->second;
424
+ // Not found.
425
+ return nullptr;
312
426
  }
313
427
 
314
428
  grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
315
- RefCountedPtr<ServiceConfig>* method_config, const XdsApi::Route& route) {
316
- grpc_error* error = GRPC_ERROR_NONE;
429
+ const XdsApi::Route& route,
430
+ const XdsApi::Route::ClusterWeight* cluster_weight,
431
+ RefCountedPtr<ServiceConfig>* method_config) {
317
432
  std::vector<std::string> fields;
433
+ // Set timeout.
318
434
  if (route.max_stream_duration.has_value() &&
319
435
  (route.max_stream_duration->seconds != 0 ||
320
436
  route.max_stream_duration->nanos != 0)) {
@@ -322,6 +438,51 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
322
438
  route.max_stream_duration->seconds,
323
439
  route.max_stream_duration->nanos));
324
440
  }
441
+ // Handle xDS HTTP filters.
442
+ std::map<std::string, std::vector<std::string>> per_filter_configs;
443
+ grpc_channel_args* args = grpc_channel_args_copy(resolver_->args_);
444
+ for (const auto& http_filter :
445
+ resolver_->current_listener_.http_connection_manager.http_filters) {
446
+ // Stop at the router filter. It's a no-op for us, and we ignore
447
+ // anything that may come after it, for compatibility with Envoy.
448
+ if (http_filter.config.config_proto_type_name ==
449
+ kXdsHttpRouterFilterConfigName) {
450
+ break;
451
+ }
452
+ // Find filter. This is guaranteed to succeed, because it's checked
453
+ // at config validation time in the XdsApi code.
454
+ const XdsHttpFilterImpl* filter_impl =
455
+ XdsHttpFilterRegistry::GetFilterForType(
456
+ http_filter.config.config_proto_type_name);
457
+ GPR_ASSERT(filter_impl != nullptr);
458
+ // Allow filter to add channel args that may affect service config
459
+ // parsing.
460
+ args = filter_impl->ModifyChannelArgs(args);
461
+ // Find config override, if any.
462
+ const XdsHttpFilterImpl::FilterConfig* config_override =
463
+ FindFilterConfigOverride(http_filter.name,
464
+ resolver_->current_virtual_host_, route,
465
+ cluster_weight);
466
+ // Generate service config for filter.
467
+ auto method_config_field =
468
+ filter_impl->GenerateServiceConfig(http_filter.config, config_override);
469
+ if (!method_config_field.ok()) {
470
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
471
+ absl::StrCat("failed to generate method config for HTTP filter ",
472
+ http_filter.name, ": ",
473
+ method_config_field.status().ToString())
474
+ .c_str());
475
+ }
476
+ per_filter_configs[method_config_field->service_config_field_name]
477
+ .push_back(method_config_field->element);
478
+ }
479
+ for (const auto& p : per_filter_configs) {
480
+ fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
481
+ absl::StrJoin(p.second, ",\n"),
482
+ "\n ]"));
483
+ }
484
+ // Construct service config.
485
+ grpc_error* error = GRPC_ERROR_NONE;
325
486
  if (!fields.empty()) {
326
487
  std::string json = absl::StrCat(
327
488
  "{\n"
@@ -333,19 +494,20 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
333
494
  absl::StrJoin(fields, ",\n"),
334
495
  "\n } ]\n"
335
496
  "}");
336
- *method_config =
337
- ServiceConfig::Create(resolver_->args_, json.c_str(), &error);
497
+ *method_config = ServiceConfig::Create(args, json.c_str(), &error);
338
498
  }
499
+ grpc_channel_args_destroy(args);
339
500
  return error;
340
501
  }
341
502
 
342
- XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
343
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
344
- gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
345
- resolver_.get(), this);
346
- }
347
- clusters_.clear();
348
- resolver_->MaybeRemoveUnusedClusters();
503
+ grpc_channel_args* XdsResolver::XdsConfigSelector::ModifyChannelArgs(
504
+ grpc_channel_args* args) {
505
+ if (filter_error_ == GRPC_ERROR_NONE) return args;
506
+ grpc_arg error_arg = MakeLameClientErrorArg(filter_error_);
507
+ grpc_channel_args* new_args =
508
+ grpc_channel_args_copy_and_add(args, &error_arg, 1);
509
+ grpc_channel_args_destroy(args);
510
+ return new_args;
349
511
  }
350
512
 
351
513
  void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
@@ -361,108 +523,50 @@ void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
361
523
  }
362
524
  }
363
525
 
364
- bool PathMatch(const absl::string_view& path,
365
- const XdsApi::Route::Matchers::PathMatcher& path_matcher) {
366
- switch (path_matcher.type) {
367
- case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PREFIX:
368
- return path_matcher.case_sensitive
369
- ? absl::StartsWith(path, path_matcher.string_matcher)
370
- : absl::StartsWithIgnoreCase(path,
371
- path_matcher.string_matcher);
372
- case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PATH:
373
- return path_matcher.case_sensitive
374
- ? path == path_matcher.string_matcher
375
- : absl::EqualsIgnoreCase(path, path_matcher.string_matcher);
376
- case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::REGEX:
377
- // Note: Case-sensitive option will already have been set appropriately
378
- // in path_matcher.regex_matcher when it was constructed, so no
379
- // need to check it here.
380
- return RE2::FullMatch(path.data(), *path_matcher.regex_matcher);
381
- default:
382
- return false;
383
- }
384
- }
385
-
386
- absl::optional<absl::string_view> GetMetadataValue(
387
- const std::string& target_key, grpc_metadata_batch* initial_metadata,
526
+ absl::optional<absl::string_view> GetHeaderValue(
527
+ grpc_metadata_batch* initial_metadata, absl::string_view header_name,
388
528
  std::string* concatenated_value) {
389
- // Find all values for the specified key.
390
- GPR_DEBUG_ASSERT(initial_metadata != nullptr);
391
- absl::InlinedVector<absl::string_view, 1> values;
392
- for (grpc_linked_mdelem* md = initial_metadata->list.head; md != nullptr;
393
- md = md->next) {
394
- absl::string_view key = StringViewFromSlice(GRPC_MDKEY(md->md));
395
- absl::string_view value = StringViewFromSlice(GRPC_MDVALUE(md->md));
396
- if (target_key == key) values.push_back(value);
397
- }
398
- // If none found, no match.
399
- if (values.empty()) return absl::nullopt;
400
- // If exactly one found, return it as-is.
401
- if (values.size() == 1) return values.front();
402
- // If more than one found, concatenate the values, using
403
- // *concatenated_values as a temporary holding place for the
404
- // concatenated string.
405
- *concatenated_value = absl::StrJoin(values, ",");
406
- return *concatenated_value;
407
- }
408
-
409
- bool HeaderMatchHelper(
410
- const XdsApi::Route::Matchers::HeaderMatcher& header_matcher,
411
- grpc_metadata_batch* initial_metadata) {
412
- std::string concatenated_value;
413
- absl::optional<absl::string_view> value;
414
529
  // Note: If we ever allow binary headers here, we still need to
415
530
  // special-case ignore "grpc-tags-bin" and "grpc-trace-bin", since
416
531
  // they are not visible to the LB policy in grpc-go.
417
- if (absl::EndsWith(header_matcher.name, "-bin") ||
418
- header_matcher.name == "grpc-previous-rpc-attempts") {
419
- value = absl::nullopt;
420
- } else if (header_matcher.name == "content-type") {
421
- value = "application/grpc";
422
- } else {
423
- value = GetMetadataValue(header_matcher.name, initial_metadata,
424
- &concatenated_value);
532
+ if (absl::EndsWith(header_name, "-bin")) {
533
+ return absl::nullopt;
534
+ } else if (header_name == "content-type") {
535
+ return "application/grpc";
425
536
  }
426
- if (!value.has_value()) {
427
- if (header_matcher.type ==
428
- XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PRESENT) {
429
- return !header_matcher.present_match;
430
- } else {
431
- // For all other header matcher types, we need the header value to
432
- // exist to consider matches.
537
+ return grpc_metadata_batch_get_value(initial_metadata, header_name,
538
+ concatenated_value);
539
+ }
540
+
541
+ bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
542
+ grpc_metadata_batch* initial_metadata) {
543
+ for (const auto& header_matcher : header_matchers) {
544
+ std::string concatenated_value;
545
+ if (!header_matcher.Match(GetHeaderValue(
546
+ initial_metadata, header_matcher.name(), &concatenated_value))) {
433
547
  return false;
434
548
  }
435
549
  }
436
- switch (header_matcher.type) {
437
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::EXACT:
438
- return value.value() == header_matcher.string_matcher;
439
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::REGEX:
440
- return RE2::FullMatch(value.value().data(), *header_matcher.regex_match);
441
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::RANGE:
442
- int64_t int_value;
443
- if (!absl::SimpleAtoi(value.value(), &int_value)) {
444
- return false;
445
- }
446
- return int_value >= header_matcher.range_start &&
447
- int_value < header_matcher.range_end;
448
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PREFIX:
449
- return absl::StartsWith(value.value(), header_matcher.string_matcher);
450
- case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::SUFFIX:
451
- return absl::EndsWith(value.value(), header_matcher.string_matcher);
452
- default:
453
- return false;
454
- }
550
+ return true;
455
551
  }
456
552
 
457
- bool HeadersMatch(
458
- const std::vector<XdsApi::Route::Matchers::HeaderMatcher>& header_matchers,
553
+ absl::optional<uint64_t> HeaderHashHelper(
554
+ const XdsApi::Route::HashPolicy& policy,
459
555
  grpc_metadata_batch* initial_metadata) {
460
- for (const auto& header_matcher : header_matchers) {
461
- bool match = HeaderMatchHelper(header_matcher, initial_metadata);
462
- if (header_matcher.invert_match) match = !match;
463
- if (!match) return false;
556
+ GPR_ASSERT(policy.type == XdsApi::Route::HashPolicy::HEADER);
557
+ std::string value_buffer;
558
+ absl::optional<absl::string_view> header_value =
559
+ GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
560
+ if (policy.regex != nullptr) {
561
+ // If GetHeaderValue() did not already store the value in
562
+ // value_buffer, copy it there now, so we can modify it.
563
+ if (header_value->data() != value_buffer.data()) {
564
+ value_buffer = std::string(*header_value);
565
+ }
566
+ RE2::GlobalReplace(&value_buffer, *policy.regex, policy.regex_substitution);
567
+ header_value = value_buffer;
464
568
  }
465
- return true;
569
+ return XXH64(header_value->data(), header_value->size(), 0);
466
570
  }
467
571
 
468
572
  bool UnderFraction(const uint32_t fraction_per_million) {
@@ -475,8 +579,8 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
475
579
  GetCallConfigArgs args) {
476
580
  for (const auto& entry : route_table_) {
477
581
  // Path matching.
478
- if (!PathMatch(StringViewFromSlice(*args.path),
479
- entry.route.matchers.path_matcher)) {
582
+ if (!entry.route.matchers.path_matcher.Match(
583
+ StringViewFromSlice(*args.path))) {
480
584
  continue;
481
585
  }
482
586
  // Header Matching.
@@ -491,13 +595,15 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
491
595
  }
492
596
  // Found a route match
493
597
  absl::string_view cluster_name;
598
+ RefCountedPtr<ServiceConfig> method_config;
494
599
  if (entry.route.weighted_clusters.empty()) {
495
600
  cluster_name = entry.route.cluster_name;
601
+ method_config = entry.method_config;
496
602
  } else {
497
603
  const uint32_t key =
498
604
  rand() %
499
605
  entry.weighted_cluster_state[entry.weighted_cluster_state.size() - 1]
500
- .first;
606
+ .range_end;
501
607
  // Find the index in weighted clusters corresponding to key.
502
608
  size_t mid = 0;
503
609
  size_t start_index = 0;
@@ -505,9 +611,9 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
505
611
  size_t index = 0;
506
612
  while (end_index > start_index) {
507
613
  mid = (start_index + end_index) / 2;
508
- if (entry.weighted_cluster_state[mid].first > key) {
614
+ if (entry.weighted_cluster_state[mid].range_end > key) {
509
615
  end_index = mid;
510
- } else if (entry.weighted_cluster_state[mid].first < key) {
616
+ } else if (entry.weighted_cluster_state[mid].range_end < key) {
511
617
  start_index = mid + 1;
512
618
  } else {
513
619
  index = mid + 1;
@@ -515,21 +621,56 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
515
621
  }
516
622
  }
517
623
  if (index == 0) index = start_index;
518
- GPR_ASSERT(entry.weighted_cluster_state[index].first > key);
519
- cluster_name = entry.weighted_cluster_state[index].second;
624
+ GPR_ASSERT(entry.weighted_cluster_state[index].range_end > key);
625
+ cluster_name = entry.weighted_cluster_state[index].cluster;
626
+ method_config = entry.weighted_cluster_state[index].method_config;
520
627
  }
521
628
  auto it = clusters_.find(cluster_name);
522
629
  GPR_ASSERT(it != clusters_.end());
523
630
  XdsResolver* resolver =
524
631
  static_cast<XdsResolver*>(resolver_->Ref().release());
525
632
  ClusterState* cluster_state = it->second->Ref().release();
633
+ // Generate a hash
634
+ absl::optional<uint64_t> hash;
635
+ for (const auto& hash_policy : entry.route.hash_policies) {
636
+ absl::optional<uint64_t> new_hash;
637
+ switch (hash_policy.type) {
638
+ case XdsApi::Route::HashPolicy::HEADER:
639
+ new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
640
+ break;
641
+ case XdsApi::Route::HashPolicy::CHANNEL_ID:
642
+ new_hash =
643
+ static_cast<uint64_t>(reinterpret_cast<uintptr_t>(resolver));
644
+ break;
645
+ default:
646
+ GPR_ASSERT(0);
647
+ }
648
+ if (new_hash.has_value()) {
649
+ // Rotating the old value prevents duplicate hash rules from cancelling
650
+ // each other out and preserves all of the entropy
651
+ const uint64_t old_value =
652
+ hash.has_value() ? ((hash.value() << 1) | (hash.value() >> 63)) : 0;
653
+ hash = old_value ^ new_hash.value();
654
+ }
655
+ // If the policy is a terminal policy and a hash has been generated,
656
+ // ignore the rest of the hash policies.
657
+ if (hash_policy.terminal && hash.has_value()) {
658
+ break;
659
+ }
660
+ }
661
+ if (!hash.has_value()) {
662
+ // If there is no hash, we just choose a random value as a default.
663
+ hash = rand();
664
+ }
526
665
  CallConfig call_config;
527
- if (entry.method_config != nullptr) {
528
- call_config.service_config = entry.method_config;
666
+ if (method_config != nullptr) {
529
667
  call_config.method_configs =
530
- entry.method_config->GetMethodParsedConfigVector(grpc_empty_slice());
668
+ method_config->GetMethodParsedConfigVector(grpc_empty_slice());
669
+ call_config.service_config = std::move(method_config);
531
670
  }
532
671
  call_config.call_attributes[kXdsClusterAttribute] = it->first;
672
+ call_config.call_attributes[kRequestRingHashAttribute] =
673
+ absl::StrFormat("%" PRIu64, hash.value());
533
674
  call_config.on_call_committed = [resolver, cluster_state]() {
534
675
  cluster_state->Unref();
535
676
  ExecCtx::Run(
@@ -545,7 +686,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
545
686
  GRPC_CLOSURE_CREATE(
546
687
  [](void* arg, grpc_error* /*error*/) {
547
688
  auto* resolver = static_cast<XdsResolver*>(arg);
548
- resolver->work_serializer()->Run(
689
+ resolver->work_serializer_->Run(
549
690
  [resolver]() {
550
691
  resolver->MaybeRemoveUnusedClusters();
551
692
  resolver->Unref();
@@ -572,7 +713,7 @@ void XdsResolver::StartLocked() {
572
713
  "Failed to create xds client -- channel will remain in "
573
714
  "TRANSIENT_FAILURE: %s",
574
715
  grpc_error_string(error));
575
- result_handler()->ReturnError(error);
716
+ result_handler_->ReturnError(error);
576
717
  return;
577
718
  }
578
719
  grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
@@ -617,24 +758,34 @@ void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
617
758
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
618
759
  gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
619
760
  }
620
- if (listener.route_config_name != route_config_name_) {
761
+ if (listener.http_connection_manager.route_config_name !=
762
+ route_config_name_) {
621
763
  if (route_config_watcher_ != nullptr) {
622
764
  xds_client_->CancelRouteConfigDataWatch(
623
765
  route_config_name_, route_config_watcher_,
624
- /*delay_unsubscription=*/!listener.route_config_name.empty());
766
+ /*delay_unsubscription=*/
767
+ !listener.http_connection_manager.route_config_name.empty());
625
768
  route_config_watcher_ = nullptr;
626
769
  }
627
- route_config_name_ = std::move(listener.route_config_name);
770
+ route_config_name_ =
771
+ std::move(listener.http_connection_manager.route_config_name);
628
772
  if (!route_config_name_.empty()) {
773
+ current_virtual_host_.routes.clear();
629
774
  auto watcher = absl::make_unique<RouteConfigWatcher>(Ref());
630
775
  route_config_watcher_ = watcher.get();
631
776
  xds_client_->WatchRouteConfigData(route_config_name_, std::move(watcher));
632
777
  }
633
778
  }
634
- http_max_stream_duration_ = listener.http_max_stream_duration;
779
+ current_listener_ = std::move(listener);
635
780
  if (route_config_name_.empty()) {
636
- GPR_ASSERT(listener.rds_update.has_value());
637
- OnRouteConfigUpdate(std::move(*listener.rds_update));
781
+ GPR_ASSERT(
782
+ current_listener_.http_connection_manager.rds_update.has_value());
783
+ OnRouteConfigUpdate(
784
+ std::move(*current_listener_.http_connection_manager.rds_update));
785
+ } else {
786
+ // HCM may contain newer filter config. We need to propagate the update as
787
+ // config selector to the channel
788
+ GenerateResult();
638
789
  }
639
790
  }
640
791
 
@@ -652,8 +803,8 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
652
803
  .c_str()));
653
804
  return;
654
805
  }
655
- // Save the list of routes in the resolver.
656
- current_update_ = std::move(vhost->routes);
806
+ // Save the virtual host in the resolver.
807
+ current_virtual_host_ = std::move(*vhost);
657
808
  // Send a new result to the channel.
658
809
  GenerateResult();
659
810
  }
@@ -664,7 +815,7 @@ void XdsResolver::OnError(grpc_error* error) {
664
815
  Result result;
665
816
  result.args = grpc_channel_args_copy(args_);
666
817
  result.service_config_error = error;
667
- result_handler()->ReturnResult(std::move(result));
818
+ result_handler_->ReturnResult(std::move(result));
668
819
  }
669
820
 
670
821
  void XdsResolver::OnResourceDoesNotExist() {
@@ -672,13 +823,13 @@ void XdsResolver::OnResourceDoesNotExist() {
672
823
  "[xds_resolver %p] LDS/RDS resource does not exist -- clearing "
673
824
  "update and returning empty service config",
674
825
  this);
675
- current_update_.clear();
826
+ current_virtual_host_.routes.clear();
676
827
  Result result;
677
828
  result.service_config =
678
829
  ServiceConfig::Create(args_, "{}", &result.service_config_error);
679
830
  GPR_ASSERT(result.service_config != nullptr);
680
831
  result.args = grpc_channel_args_copy(args_);
681
- result_handler()->ReturnResult(std::move(result));
832
+ result_handler_->ReturnResult(std::move(result));
682
833
  }
683
834
 
684
835
  grpc_error* XdsResolver::CreateServiceConfig(
@@ -714,12 +865,11 @@ grpc_error* XdsResolver::CreateServiceConfig(
714
865
  }
715
866
 
716
867
  void XdsResolver::GenerateResult() {
717
- if (current_update_.empty()) return;
868
+ if (current_virtual_host_.routes.empty()) return;
718
869
  // First create XdsConfigSelector, which may add new entries to the cluster
719
870
  // state map, and then CreateServiceConfig for LB policies.
720
871
  grpc_error* error = GRPC_ERROR_NONE;
721
- auto config_selector =
722
- MakeRefCounted<XdsConfigSelector>(Ref(), current_update_, error);
872
+ auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
723
873
  if (error != GRPC_ERROR_NONE) {
724
874
  OnError(error);
725
875
  return;
@@ -736,7 +886,7 @@ void XdsResolver::GenerateResult() {
736
886
  }
737
887
  grpc_arg new_arg = config_selector->MakeChannelArg();
738
888
  result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
739
- result_handler()->ReturnResult(std::move(result));
889
+ result_handler_->ReturnResult(std::move(result));
740
890
  }
741
891
 
742
892
  void XdsResolver::MaybeRemoveUnusedClusters() {
@@ -762,8 +912,8 @@ void XdsResolver::MaybeRemoveUnusedClusters() {
762
912
 
763
913
  class XdsResolverFactory : public ResolverFactory {
764
914
  public:
765
- bool IsValidUri(const grpc_uri* uri) const override {
766
- if (GPR_UNLIKELY(0 != strcmp(uri->authority, ""))) {
915
+ bool IsValidUri(const URI& uri) const override {
916
+ if (GPR_UNLIKELY(!uri.authority().empty())) {
767
917
  gpr_log(GPR_ERROR, "URI authority not supported");
768
918
  return false;
769
919
  }