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
@@ -21,52 +21,129 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "src/core/ext/xds/xds_api.h"
24
25
  #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
25
26
 
27
+ #define GRPC_ARG_XDS_CERTIFICATE_PROVIDER \
28
+ "grpc.internal.xds_certificate_provider"
29
+
26
30
  namespace grpc_core {
27
31
 
28
32
  class XdsCertificateProvider : public grpc_tls_certificate_provider {
29
33
  public:
30
- XdsCertificateProvider(
31
- absl::string_view root_cert_name,
32
- RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor,
33
- absl::string_view identity_cert_name,
34
- RefCountedPtr<grpc_tls_certificate_distributor>
35
- identity_cert_distributor);
34
+ XdsCertificateProvider();
35
+ ~XdsCertificateProvider() override;
36
+
37
+ grpc_core::RefCountedPtr<grpc_tls_certificate_distributor> distributor()
38
+ const override {
39
+ return distributor_;
40
+ }
36
41
 
42
+ bool ProvidesRootCerts(const std::string& cert_name);
37
43
  void UpdateRootCertNameAndDistributor(
38
- absl::string_view root_cert_name,
44
+ const std::string& cert_name, absl::string_view root_cert_name,
39
45
  RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor);
46
+
47
+ bool ProvidesIdentityCerts(const std::string& cert_name);
40
48
  void UpdateIdentityCertNameAndDistributor(
41
- absl::string_view identity_cert_name,
49
+ const std::string& cert_name, absl::string_view identity_cert_name,
42
50
  RefCountedPtr<grpc_tls_certificate_distributor>
43
51
  identity_cert_distributor);
44
52
 
45
- grpc_core::RefCountedPtr<grpc_tls_certificate_distributor> distributor()
46
- const override {
47
- return distributor_;
48
- }
53
+ bool GetRequireClientCertificate(const std::string& cert_name);
54
+ // Updating \a require_client_certificate for a non-existing \a cert_name has
55
+ // no effect.
56
+ void UpdateRequireClientCertificate(const std::string& cert_name,
57
+ bool require_client_certificate);
58
+
59
+ std::vector<StringMatcher> GetSanMatchers(const std::string& cluster);
60
+ void UpdateSubjectAlternativeNameMatchers(
61
+ const std::string& cluster, std::vector<StringMatcher> matchers);
62
+
63
+ grpc_arg MakeChannelArg() const;
64
+
65
+ static RefCountedPtr<XdsCertificateProvider> GetFromChannelArgs(
66
+ const grpc_channel_args* args);
49
67
 
50
68
  private:
69
+ class ClusterCertificateState {
70
+ public:
71
+ explicit ClusterCertificateState(
72
+ XdsCertificateProvider* xds_certificate_provider)
73
+ : xds_certificate_provider_(xds_certificate_provider) {}
74
+
75
+ ~ClusterCertificateState();
76
+
77
+ // Returns true if the certs aren't being watched and there are no
78
+ // distributors configured.
79
+ bool IsSafeToRemove() const;
80
+
81
+ bool ProvidesRootCerts() const { return root_cert_distributor_ != nullptr; }
82
+ bool ProvidesIdentityCerts() const {
83
+ return identity_cert_distributor_ != nullptr;
84
+ }
85
+
86
+ void UpdateRootCertNameAndDistributor(
87
+ const std::string& cert_name, absl::string_view root_cert_name,
88
+ RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor);
89
+ void UpdateIdentityCertNameAndDistributor(
90
+ const std::string& cert_name, absl::string_view identity_cert_name,
91
+ RefCountedPtr<grpc_tls_certificate_distributor>
92
+ identity_cert_distributor);
93
+
94
+ void UpdateRootCertWatcher(
95
+ const std::string& cert_name,
96
+ grpc_tls_certificate_distributor* root_cert_distributor);
97
+ void UpdateIdentityCertWatcher(
98
+ const std::string& cert_name,
99
+ grpc_tls_certificate_distributor* identity_cert_distributor);
100
+
101
+ bool require_client_certificate() const {
102
+ return require_client_certificate_;
103
+ }
104
+ void set_require_client_certificate(bool require_client_certificate) {
105
+ require_client_certificate_ = require_client_certificate;
106
+ }
107
+
108
+ void WatchStatusCallback(const std::string& cert_name,
109
+ bool root_being_watched,
110
+ bool identity_being_watched);
111
+
112
+ private:
113
+ XdsCertificateProvider* xds_certificate_provider_;
114
+ bool watching_root_certs_ = false;
115
+ bool watching_identity_certs_ = false;
116
+ std::string root_cert_name_;
117
+ std::string identity_cert_name_;
118
+ RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor_;
119
+ RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor_;
120
+ grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
121
+ root_cert_watcher_ = nullptr;
122
+ grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
123
+ identity_cert_watcher_ = nullptr;
124
+ bool require_client_certificate_ = false;
125
+ };
126
+
51
127
  void WatchStatusCallback(std::string cert_name, bool root_being_watched,
52
128
  bool identity_being_watched);
53
- void UpdateRootCertWatcher(
54
- grpc_tls_certificate_distributor* root_cert_distributor);
55
- void UpdateIdentityCertWatcher(
56
- grpc_tls_certificate_distributor* identity_cert_distributor);
57
129
 
58
130
  Mutex mu_;
59
- bool watching_root_certs_ = false;
60
- bool watching_identity_certs_ = false;
61
- std::string root_cert_name_;
62
- std::string identity_cert_name_;
63
- RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor_;
64
- RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor_;
131
+ std::map<std::string /*cert_name*/, std::unique_ptr<ClusterCertificateState>>
132
+ certificate_state_map_;
133
+
134
+ // Use a separate mutex for san_matchers_ to avoid deadlocks since
135
+ // san_matchers_ needs to be accessed when a handshake is being done and we
136
+ // run into a possible deadlock scenario if using the same mutex. The mutex
137
+ // deadlock cycle is formed as -
138
+ // WatchStatusCallback() -> SetKeyMaterials() ->
139
+ // TlsChannelSecurityConnector::TlsChannelCertificateWatcher::OnCertificatesChanged()
140
+ // -> HandshakeManager::Add() -> SecurityHandshaker::DoHandshake() ->
141
+ // subject_alternative_names_matchers()
142
+ Mutex san_matchers_mu_;
143
+ std::map<std::string /*cluster_name*/, std::vector<StringMatcher>>
144
+ san_matcher_map_;
145
+
65
146
  RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
66
- grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
67
- root_cert_watcher_ = nullptr;
68
- grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
69
- identity_cert_watcher_ = nullptr;
70
147
  };
71
148
 
72
149
  } // namespace grpc_core
@@ -35,14 +35,15 @@
35
35
  #include "src/core/ext/filters/client_channel/client_channel.h"
36
36
  #include "src/core/ext/filters/client_channel/service_config.h"
37
37
  #include "src/core/ext/xds/xds_api.h"
38
+ #include "src/core/ext/xds/xds_bootstrap.h"
38
39
  #include "src/core/ext/xds/xds_channel_args.h"
39
40
  #include "src/core/ext/xds/xds_client.h"
40
41
  #include "src/core/ext/xds/xds_client_stats.h"
42
+ #include "src/core/ext/xds/xds_http_filters.h"
41
43
  #include "src/core/lib/backoff/backoff.h"
42
44
  #include "src/core/lib/channel/channel_args.h"
43
45
  #include "src/core/lib/channel/channel_stack.h"
44
46
  #include "src/core/lib/gpr/string.h"
45
- #include "src/core/lib/gprpp/map.h"
46
47
  #include "src/core/lib/gprpp/memory.h"
47
48
  #include "src/core/lib/gprpp/orphanable.h"
48
49
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -66,12 +67,14 @@
66
67
  namespace grpc_core {
67
68
 
68
69
  TraceFlag grpc_xds_client_trace(false, "xds_client");
70
+ TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
69
71
 
70
72
  namespace {
71
73
 
72
74
  Mutex* g_mu = nullptr;
73
75
  const grpc_channel_args* g_channel_args = nullptr;
74
76
  XdsClient* g_xds_client = nullptr;
77
+ char* g_fallback_bootstrap_config = nullptr;
75
78
 
76
79
  } // namespace
77
80
 
@@ -193,28 +196,34 @@ class XdsClient::ChannelState::AdsCallState
193
196
  "timeout obtaining resource {type=%s name=%s} from xds server",
194
197
  type_url_, name_)
195
198
  .c_str());
199
+ watcher_error = grpc_error_set_int(
200
+ watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
196
201
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
197
202
  gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
198
203
  grpc_error_string(watcher_error));
199
204
  }
200
205
  if (type_url_ == XdsApi::kLdsTypeUrl) {
201
206
  ListenerState& state = ads_calld_->xds_client()->listener_map_[name_];
207
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
202
208
  for (const auto& p : state.watchers) {
203
209
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
204
210
  }
205
211
  } else if (type_url_ == XdsApi::kRdsTypeUrl) {
206
212
  RouteConfigState& state =
207
213
  ads_calld_->xds_client()->route_config_map_[name_];
214
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
208
215
  for (const auto& p : state.watchers) {
209
216
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
210
217
  }
211
218
  } else if (type_url_ == XdsApi::kCdsTypeUrl) {
212
219
  ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
220
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
213
221
  for (const auto& p : state.watchers) {
214
222
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
215
223
  }
216
224
  } else if (type_url_ == XdsApi::kEdsTypeUrl) {
217
225
  EndpointState& state = ads_calld_->xds_client()->endpoint_map_[name_];
226
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
218
227
  for (const auto& p : state.watchers) {
219
228
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
220
229
  }
@@ -250,10 +259,14 @@ class XdsClient::ChannelState::AdsCallState
250
259
 
251
260
  void SendMessageLocked(const std::string& type_url);
252
261
 
253
- void AcceptLdsUpdate(XdsApi::LdsUpdateMap lds_update_map);
254
- void AcceptRdsUpdate(XdsApi::RdsUpdateMap rds_update_map);
255
- void AcceptCdsUpdate(XdsApi::CdsUpdateMap cds_update_map);
256
- void AcceptEdsUpdate(XdsApi::EdsUpdateMap eds_update_map);
262
+ void AcceptLdsUpdate(std::string version, grpc_millis update_time,
263
+ XdsApi::LdsUpdateMap lds_update_map);
264
+ void AcceptRdsUpdate(std::string version, grpc_millis update_time,
265
+ XdsApi::RdsUpdateMap rds_update_map);
266
+ void AcceptCdsUpdate(std::string version, grpc_millis update_time,
267
+ XdsApi::CdsUpdateMap cds_update_map);
268
+ void AcceptEdsUpdate(std::string version, grpc_millis update_time,
269
+ XdsApi::EdsUpdateMap eds_update_map);
257
270
 
258
271
  static void OnRequestSent(void* arg, grpc_error* error);
259
272
  void OnRequestSentLocked(grpc_error* error);
@@ -460,8 +473,9 @@ grpc_channel* CreateXdsChannel(const XdsBootstrap::XdsServer& server) {
460
473
  XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
461
474
  const XdsBootstrap::XdsServer& server)
462
475
  : InternallyRefCounted<ChannelState>(
463
- GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "ChannelState"
464
- : nullptr),
476
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
477
+ ? "ChannelState"
478
+ : nullptr),
465
479
  xds_client_(std::move(xds_client)),
466
480
  server_(server) {
467
481
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@@ -501,7 +515,7 @@ XdsClient::ChannelState::LrsCallState* XdsClient::ChannelState::lrs_calld()
501
515
  }
502
516
 
503
517
  bool XdsClient::ChannelState::HasActiveAdsCall() const {
504
- return ads_calld_->calld() != nullptr;
518
+ return ads_calld_ != nullptr && ads_calld_->calld() != nullptr;
505
519
  }
506
520
 
507
521
  void XdsClient::ChannelState::MaybeStartLrsCall() {
@@ -668,8 +682,9 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
668
682
  XdsClient::ChannelState::AdsCallState::AdsCallState(
669
683
  RefCountedPtr<RetryableCall<AdsCallState>> parent)
670
684
  : InternallyRefCounted<AdsCallState>(
671
- GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "AdsCallState"
672
- : nullptr),
685
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
686
+ ? "AdsCallState"
687
+ : nullptr),
673
688
  parent_(std::move(parent)) {
674
689
  // Init the ADS call. Note that the call will progress every time there's
675
690
  // activity in xds_client()->interested_parties_, which is comprised of
@@ -707,8 +722,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
707
722
  GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
708
723
  op->reserved = nullptr;
709
724
  op++;
710
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
711
- nullptr);
725
+ call_error = grpc_call_start_batch_and_execute(
726
+ call_, ops, static_cast<size_t>(op - ops), nullptr);
712
727
  GPR_ASSERT(GRPC_CALL_OK == call_error);
713
728
  // Op: send request message.
714
729
  GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
@@ -742,8 +757,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
742
757
  Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
743
758
  GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
744
759
  grpc_schedule_on_exec_ctx);
745
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
746
- &on_response_received_);
760
+ call_error = grpc_call_start_batch_and_execute(
761
+ call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
747
762
  GPR_ASSERT(GRPC_CALL_OK == call_error);
748
763
  // Op: recv server status.
749
764
  op = ops;
@@ -759,8 +774,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
759
774
  // unreffed.
760
775
  GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
761
776
  grpc_schedule_on_exec_ctx);
762
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
763
- &on_status_received_);
777
+ call_error = grpc_call_start_batch_and_execute(
778
+ call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
764
779
  GPR_ASSERT(GRPC_CALL_OK == call_error);
765
780
  }
766
781
 
@@ -863,7 +878,24 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
863
878
  return false;
864
879
  }
865
880
 
881
+ namespace {
882
+
883
+ // Build a resource metadata struct for ADS result accepting methods and CSDS.
884
+ XdsApi::ResourceMetadata CreateResourceMetadataAcked(
885
+ std::string serialized_proto, std::string version,
886
+ grpc_millis update_time) {
887
+ XdsApi::ResourceMetadata resource_metadata;
888
+ resource_metadata.serialized_proto = std::move(serialized_proto);
889
+ resource_metadata.update_time = update_time;
890
+ resource_metadata.version = std::move(version);
891
+ resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
892
+ return resource_metadata;
893
+ }
894
+
895
+ } // namespace
896
+
866
897
  void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
898
+ std::string version, grpc_millis update_time,
867
899
  XdsApi::LdsUpdateMap lds_update_map) {
868
900
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
869
901
  gpr_log(GPR_INFO,
@@ -875,23 +907,17 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
875
907
  std::set<std::string> rds_resource_names_seen;
876
908
  for (auto& p : lds_update_map) {
877
909
  const std::string& listener_name = p.first;
878
- XdsApi::LdsUpdate& lds_update = p.second;
910
+ XdsApi::LdsUpdate& lds_update = p.second.resource;
879
911
  auto& state = lds_state.subscribed_resources[listener_name];
880
912
  if (state != nullptr) state->Finish();
881
913
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
882
- gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: route_config_name=%s",
883
- xds_client(), listener_name.c_str(),
884
- (!lds_update.route_config_name.empty()
885
- ? lds_update.route_config_name.c_str()
886
- : "<inlined>"));
887
- if (lds_update.rds_update.has_value()) {
888
- gpr_log(GPR_INFO, "RouteConfiguration: %s",
889
- lds_update.rds_update->ToString().c_str());
890
- }
914
+ gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
915
+ listener_name.c_str(), lds_update.ToString().c_str());
891
916
  }
892
917
  // Record the RDS resource names seen.
893
- if (!lds_update.route_config_name.empty()) {
894
- rds_resource_names_seen.insert(lds_update.route_config_name);
918
+ if (!lds_update.http_connection_manager.route_config_name.empty()) {
919
+ rds_resource_names_seen.insert(
920
+ lds_update.http_connection_manager.route_config_name);
895
921
  }
896
922
  // Ignore identical update.
897
923
  ListenerState& listener_state = xds_client()->listener_map_[listener_name];
@@ -907,6 +933,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
907
933
  }
908
934
  // Update the listener state.
909
935
  listener_state.update = std::move(lds_update);
936
+ listener_state.meta = CreateResourceMetadataAcked(
937
+ std::move(p.second.serialized_proto), version, update_time);
910
938
  // Notify watchers.
911
939
  for (const auto& p : listener_state.watchers) {
912
940
  p.first->OnListenerChanged(*listener_state.update);
@@ -951,6 +979,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
951
979
  }
952
980
 
953
981
  void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
982
+ std::string version, grpc_millis update_time,
954
983
  XdsApi::RdsUpdateMap rds_update_map) {
955
984
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
956
985
  gpr_log(GPR_INFO,
@@ -961,7 +990,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
961
990
  auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
962
991
  for (auto& p : rds_update_map) {
963
992
  const std::string& route_config_name = p.first;
964
- XdsApi::RdsUpdate& rds_update = p.second;
993
+ XdsApi::RdsUpdate& rds_update = p.second.resource;
965
994
  auto& state = rds_state.subscribed_resources[route_config_name];
966
995
  if (state != nullptr) state->Finish();
967
996
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@@ -982,6 +1011,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
982
1011
  }
983
1012
  // Update the cache.
984
1013
  route_config_state.update = std::move(rds_update);
1014
+ route_config_state.meta = CreateResourceMetadataAcked(
1015
+ std::move(p.second.serialized_proto), version, update_time);
985
1016
  // Notify all watchers.
986
1017
  for (const auto& p : route_config_state.watchers) {
987
1018
  p.first->OnRouteConfigChanged(*route_config_state.update);
@@ -990,6 +1021,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
990
1021
  }
991
1022
 
992
1023
  void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
1024
+ std::string version, grpc_millis update_time,
993
1025
  XdsApi::CdsUpdateMap cds_update_map) {
994
1026
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
995
1027
  gpr_log(GPR_INFO,
@@ -1001,17 +1033,12 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
1001
1033
  std::set<std::string> eds_resource_names_seen;
1002
1034
  for (auto& p : cds_update_map) {
1003
1035
  const char* cluster_name = p.first.c_str();
1004
- XdsApi::CdsUpdate& cds_update = p.second;
1036
+ XdsApi::CdsUpdate& cds_update = p.second.resource;
1005
1037
  auto& state = cds_state.subscribed_resources[cluster_name];
1006
1038
  if (state != nullptr) state->Finish();
1007
1039
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1008
- gpr_log(GPR_INFO,
1009
- "[xds_client %p] cluster=%s: eds_service_name=%s, "
1010
- "lrs_load_reporting_server_name=%s",
1011
- xds_client(), cluster_name, cds_update.eds_service_name.c_str(),
1012
- cds_update.lrs_load_reporting_server_name.has_value()
1013
- ? cds_update.lrs_load_reporting_server_name.value().c_str()
1014
- : "(N/A)");
1040
+ gpr_log(GPR_INFO, "[xds_client %p] cluster=%s: %s", xds_client(),
1041
+ cluster_name, cds_update.ToString().c_str());
1015
1042
  }
1016
1043
  // Record the EDS resource names seen.
1017
1044
  eds_resource_names_seen.insert(cds_update.eds_service_name.empty()
@@ -1030,6 +1057,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
1030
1057
  }
1031
1058
  // Update the cluster state.
1032
1059
  cluster_state.update = std::move(cds_update);
1060
+ cluster_state.meta = CreateResourceMetadataAcked(
1061
+ std::move(p.second.serialized_proto), version, update_time);
1033
1062
  // Notify all watchers.
1034
1063
  for (const auto& p : cluster_state.watchers) {
1035
1064
  p.first->OnClusterChanged(cluster_state.update.value());
@@ -1073,6 +1102,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
1073
1102
  }
1074
1103
 
1075
1104
  void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1105
+ std::string version, grpc_millis update_time,
1076
1106
  XdsApi::EdsUpdateMap eds_update_map) {
1077
1107
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1078
1108
  gpr_log(GPR_INFO,
@@ -1083,7 +1113,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1083
1113
  auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1084
1114
  for (auto& p : eds_update_map) {
1085
1115
  const char* eds_service_name = p.first.c_str();
1086
- XdsApi::EdsUpdate& eds_update = p.second;
1116
+ XdsApi::EdsUpdate& eds_update = p.second.resource;
1087
1117
  auto& state = eds_state.subscribed_resources[eds_service_name];
1088
1118
  if (state != nullptr) state->Finish();
1089
1119
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@@ -1104,6 +1134,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1104
1134
  }
1105
1135
  // Update the cluster state.
1106
1136
  endpoint_state.update = std::move(eds_update);
1137
+ endpoint_state.meta = CreateResourceMetadataAcked(
1138
+ std::move(p.second.serialized_proto), version, update_time);
1107
1139
  // Notify all watchers.
1108
1140
  for (const auto& p : endpoint_state.watchers) {
1109
1141
  p.first->OnEndpointChanged(endpoint_state.update.value());
@@ -1170,7 +1202,8 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1170
1202
  recv_message_payload_ = nullptr;
1171
1203
  // Parse and validate the response.
1172
1204
  XdsApi::AdsParseResult result = xds_client()->api_.ParseAdsResponse(
1173
- response_slice, ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
1205
+ chand()->server_, response_slice,
1206
+ ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
1174
1207
  ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
1175
1208
  ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
1176
1209
  ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
@@ -1182,11 +1215,14 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1182
1215
  xds_client(), grpc_error_string(result.parse_error));
1183
1216
  GRPC_ERROR_UNREF(result.parse_error);
1184
1217
  } else {
1218
+ grpc_millis update_time = grpc_core::ExecCtx::Get()->Now();
1185
1219
  // Update nonce.
1186
1220
  auto& state = state_map_[result.type_url];
1187
1221
  state.nonce = std::move(result.nonce);
1188
1222
  // NACK or ACK the response.
1189
1223
  if (result.parse_error != GRPC_ERROR_NONE) {
1224
+ xds_client()->UpdateResourceMetadataWithFailedParseResult(update_time,
1225
+ result);
1190
1226
  GRPC_ERROR_UNREF(state.error);
1191
1227
  state.error = result.parse_error;
1192
1228
  // NACK unacceptable update.
@@ -1200,13 +1236,17 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1200
1236
  seen_response_ = true;
1201
1237
  // Accept the ADS response according to the type_url.
1202
1238
  if (result.type_url == XdsApi::kLdsTypeUrl) {
1203
- AcceptLdsUpdate(std::move(result.lds_update_map));
1239
+ AcceptLdsUpdate(result.version, update_time,
1240
+ std::move(result.lds_update_map));
1204
1241
  } else if (result.type_url == XdsApi::kRdsTypeUrl) {
1205
- AcceptRdsUpdate(std::move(result.rds_update_map));
1242
+ AcceptRdsUpdate(result.version, update_time,
1243
+ std::move(result.rds_update_map));
1206
1244
  } else if (result.type_url == XdsApi::kCdsTypeUrl) {
1207
- AcceptCdsUpdate(std::move(result.cds_update_map));
1245
+ AcceptCdsUpdate(result.version, update_time,
1246
+ std::move(result.cds_update_map));
1208
1247
  } else if (result.type_url == XdsApi::kEdsTypeUrl) {
1209
- AcceptEdsUpdate(std::move(result.eds_update_map));
1248
+ AcceptEdsUpdate(result.version, update_time,
1249
+ std::move(result.eds_update_map));
1210
1250
  }
1211
1251
  xds_client()->resource_version_map_[result.type_url] =
1212
1252
  std::move(result.version);
@@ -1425,8 +1465,9 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
1425
1465
  XdsClient::ChannelState::LrsCallState::LrsCallState(
1426
1466
  RefCountedPtr<RetryableCall<LrsCallState>> parent)
1427
1467
  : InternallyRefCounted<LrsCallState>(
1428
- GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "LrsCallState"
1429
- : nullptr),
1468
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
1469
+ ? "LrsCallState"
1470
+ : nullptr),
1430
1471
  parent_(std::move(parent)) {
1431
1472
  // Init the LRS call. Note that the call will progress every time there's
1432
1473
  // activity in xds_client()->interested_parties_, which is comprised of
@@ -1479,8 +1520,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1479
1520
  Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
1480
1521
  GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
1481
1522
  grpc_schedule_on_exec_ctx);
1482
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1483
- &on_initial_request_sent_);
1523
+ call_error = grpc_call_start_batch_and_execute(
1524
+ call_, ops, static_cast<size_t>(op - ops), &on_initial_request_sent_);
1484
1525
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1485
1526
  // Op: recv initial metadata.
1486
1527
  op = ops;
@@ -1499,8 +1540,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1499
1540
  Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
1500
1541
  GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
1501
1542
  grpc_schedule_on_exec_ctx);
1502
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1503
- &on_response_received_);
1543
+ call_error = grpc_call_start_batch_and_execute(
1544
+ call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
1504
1545
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1505
1546
  // Op: recv server status.
1506
1547
  op = ops;
@@ -1516,8 +1557,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1516
1557
  // unreffed.
1517
1558
  GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
1518
1559
  grpc_schedule_on_exec_ctx);
1519
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1520
- &on_status_received_);
1560
+ call_error = grpc_call_start_batch_and_execute(
1561
+ call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
1521
1562
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1522
1563
  }
1523
1564
 
@@ -1737,13 +1778,17 @@ grpc_millis GetRequestTimeout() {
1737
1778
  } // namespace
1738
1779
 
1739
1780
  XdsClient::XdsClient(grpc_error** error)
1740
- : DualRefCounted<XdsClient>(GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)
1741
- ? "XdsClient"
1742
- : nullptr),
1781
+ : DualRefCounted<XdsClient>(
1782
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
1783
+ : nullptr),
1743
1784
  request_timeout_(GetRequestTimeout()),
1744
1785
  interested_parties_(grpc_pollset_set_create()),
1745
- bootstrap_(
1746
- XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
1786
+ bootstrap_(XdsBootstrap::Create(this, &grpc_xds_client_trace,
1787
+ g_fallback_bootstrap_config, error)),
1788
+ certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
1789
+ bootstrap_ == nullptr
1790
+ ? CertificateProviderStore::PluginDefinitionMap()
1791
+ : bootstrap_->certificate_providers())),
1747
1792
  api_(this, &grpc_xds_client_trace,
1748
1793
  bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
1749
1794
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@@ -2196,25 +2241,109 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2196
2241
  return snapshot_map;
2197
2242
  }
2198
2243
 
2244
+ void XdsClient::UpdateResourceMetadataWithFailedParseResult(
2245
+ grpc_millis update_time, const XdsApi::AdsParseResult& result) {
2246
+ // ADS update is rejected and the resource names in the failed update is
2247
+ // available.
2248
+ absl::string_view details = grpc_error_string(result.parse_error);
2249
+ for (auto& name : result.resource_names_failed) {
2250
+ XdsApi::ResourceMetadata* resource_metadata = nullptr;
2251
+ if (result.type_url == XdsApi::kLdsTypeUrl) {
2252
+ auto it = listener_map_.find(name);
2253
+ if (it != listener_map_.end()) {
2254
+ resource_metadata = &it->second.meta;
2255
+ }
2256
+ } else if (result.type_url == XdsApi::kRdsTypeUrl) {
2257
+ auto it = route_config_map_.find(name);
2258
+ if (route_config_map_.find(name) != route_config_map_.end()) {
2259
+ resource_metadata = &it->second.meta;
2260
+ }
2261
+ } else if (result.type_url == XdsApi::kCdsTypeUrl) {
2262
+ auto it = cluster_map_.find(name);
2263
+ if (cluster_map_.find(name) != cluster_map_.end()) {
2264
+ resource_metadata = &it->second.meta;
2265
+ }
2266
+ } else if (result.type_url == XdsApi::kEdsTypeUrl) {
2267
+ auto it = endpoint_map_.find(name);
2268
+ if (endpoint_map_.find(name) != endpoint_map_.end()) {
2269
+ resource_metadata = &it->second.meta;
2270
+ }
2271
+ }
2272
+ if (resource_metadata == nullptr) {
2273
+ return;
2274
+ }
2275
+ resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
2276
+ resource_metadata->failed_version = result.version;
2277
+ resource_metadata->failed_details = std::string(details);
2278
+ resource_metadata->failed_update_time = update_time;
2279
+ }
2280
+ }
2281
+
2282
+ std::string XdsClient::DumpClientConfigBinary() {
2283
+ MutexLock lock(&mu_);
2284
+ XdsApi::ResourceTypeMetadataMap resource_type_metadata_map;
2285
+ // Update per-xds-type version if available, this version corresponding to the
2286
+ // last successful ADS update version.
2287
+ for (auto& p : resource_version_map_) {
2288
+ resource_type_metadata_map[p.first].version = p.second;
2289
+ }
2290
+ // Collect resource metadata from listeners
2291
+ auto& lds_map =
2292
+ resource_type_metadata_map[XdsApi::kLdsTypeUrl].resource_metadata_map;
2293
+ for (auto& p : listener_map_) {
2294
+ lds_map[p.first] = &p.second.meta;
2295
+ }
2296
+ // Collect resource metadata from route configs
2297
+ auto& rds_map =
2298
+ resource_type_metadata_map[XdsApi::kRdsTypeUrl].resource_metadata_map;
2299
+ for (auto& p : route_config_map_) {
2300
+ rds_map[p.first] = &p.second.meta;
2301
+ }
2302
+ // Collect resource metadata from clusters
2303
+ auto& cds_map =
2304
+ resource_type_metadata_map[XdsApi::kCdsTypeUrl].resource_metadata_map;
2305
+ for (auto& p : cluster_map_) {
2306
+ cds_map[p.first] = &p.second.meta;
2307
+ }
2308
+ // Collect resource metadata from endpoints
2309
+ auto& eds_map =
2310
+ resource_type_metadata_map[XdsApi::kEdsTypeUrl].resource_metadata_map;
2311
+ for (auto& p : endpoint_map_) {
2312
+ eds_map[p.first] = &p.second.meta;
2313
+ }
2314
+ // Assemble config dump messages
2315
+ return api_.AssembleClientConfig(resource_type_metadata_map);
2316
+ }
2317
+
2199
2318
  //
2200
2319
  // accessors for global state
2201
2320
  //
2202
2321
 
2203
- void XdsClientGlobalInit() { g_mu = new Mutex; }
2322
+ void XdsClientGlobalInit() {
2323
+ g_mu = new Mutex;
2324
+ XdsHttpFilterRegistry::Init();
2325
+ }
2204
2326
 
2205
2327
  void XdsClientGlobalShutdown() {
2206
2328
  delete g_mu;
2207
2329
  g_mu = nullptr;
2330
+ gpr_free(g_fallback_bootstrap_config);
2331
+ g_fallback_bootstrap_config = nullptr;
2332
+ XdsHttpFilterRegistry::Shutdown();
2208
2333
  }
2209
2334
 
2210
2335
  RefCountedPtr<XdsClient> XdsClient::GetOrCreate(grpc_error** error) {
2211
- MutexLock lock(g_mu);
2212
- if (g_xds_client != nullptr) {
2213
- auto xds_client = g_xds_client->RefIfNonZero();
2214
- if (xds_client != nullptr) return xds_client;
2336
+ RefCountedPtr<XdsClient> xds_client;
2337
+ {
2338
+ MutexLock lock(g_mu);
2339
+ if (g_xds_client != nullptr) {
2340
+ auto xds_client = g_xds_client->RefIfNonZero();
2341
+ if (xds_client != nullptr) return xds_client;
2342
+ }
2343
+ xds_client = MakeRefCounted<XdsClient>(error);
2344
+ if (*error != GRPC_ERROR_NONE) return nullptr;
2345
+ g_xds_client = xds_client.get();
2215
2346
  }
2216
- auto xds_client = MakeRefCounted<XdsClient>(error);
2217
- g_xds_client = xds_client.get();
2218
2347
  return xds_client;
2219
2348
  }
2220
2349
 
@@ -2230,6 +2359,26 @@ void UnsetGlobalXdsClientForTest() {
2230
2359
  g_xds_client = nullptr;
2231
2360
  }
2232
2361
 
2362
+ void SetXdsFallbackBootstrapConfig(const char* config) {
2363
+ MutexLock lock(g_mu);
2364
+ gpr_free(g_fallback_bootstrap_config);
2365
+ g_fallback_bootstrap_config = gpr_strdup(config);
2366
+ }
2367
+
2233
2368
  } // namespace internal
2234
2369
 
2235
2370
  } // namespace grpc_core
2371
+
2372
+ // The returned bytes may contain NULL(0), so we can't use c-string.
2373
+ grpc_slice grpc_dump_xds_configs() {
2374
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2375
+ grpc_core::ExecCtx exec_ctx;
2376
+ grpc_error* error = GRPC_ERROR_NONE;
2377
+ auto xds_client = grpc_core::XdsClient::GetOrCreate(&error);
2378
+ if (error != GRPC_ERROR_NONE) {
2379
+ // If we isn't using xDS, just return an empty string.
2380
+ GRPC_ERROR_UNREF(error);
2381
+ return grpc_empty_slice();
2382
+ }
2383
+ return grpc_slice_from_cpp_string(xds_client->DumpClientConfigBinary());
2384
+ }