grpc 1.33.0.pre1 → 1.37.0.pre1

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

Potentially problematic release.


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

Files changed (1106) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1075 -2814
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +29 -2
  6. data/include/grpc/grpc_security.h +215 -175
  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 +10 -3
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/port_platform.h +24 -55
  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 +2829 -1588
  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 +15 -4
  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 +10 -7
  27. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  28. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +7 -8
  29. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  30. data/src/core/ext/filters/client_channel/lb_policy.cc +9 -2
  31. data/src/core/ext/filters/client_channel/lb_policy.h +5 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
  33. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +115 -106
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +3 -3
  41. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +55 -23
  42. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
  45. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
  46. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +370 -109
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  49. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/{eds_drop.cc → xds_cluster_impl.cc} +332 -108
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +22 -27
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
  53. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  54. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  55. data/src/core/ext/filters/client_channel/resolver.cc +7 -5
  56. data/src/core/ext/filters/client_channel/resolver.h +5 -13
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +42 -58
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +444 -22
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +22 -23
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -18
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  66. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  67. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +37 -30
  68. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +342 -133
  69. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  70. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  71. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +24 -38
  73. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  74. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  75. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  76. data/src/core/ext/filters/client_channel/server_address.cc +9 -0
  77. data/src/core/ext/filters/client_channel/server_address.h +31 -4
  78. data/src/core/ext/filters/client_channel/service_config.cc +3 -1
  79. data/src/core/ext/filters/client_channel/service_config.h +1 -1
  80. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  81. data/src/core/ext/filters/client_channel/subchannel.cc +117 -207
  82. data/src/core/ext/filters/client_channel/subchannel.h +75 -113
  83. data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  85. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
  86. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  87. data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
  88. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  89. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +495 -0
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  91. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  92. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  93. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  94. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  95. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  96. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  97. data/src/core/ext/filters/max_age/max_age_filter.cc +36 -33
  98. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  99. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  100. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  101. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  102. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  103. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  104. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  105. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  106. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +29 -16
  107. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +629 -211
  108. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  109. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  110. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  111. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  112. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +50 -39
  114. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  115. data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
  116. data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  120. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  122. data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
  123. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  124. data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
  125. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  126. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  127. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  128. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  129. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  131. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -28
  132. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  133. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  134. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  135. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  136. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  137. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +119 -124
  138. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +450 -284
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  140. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  141. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +24 -23
  142. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +62 -21
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +69 -45
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +275 -78
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +19 -19
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +80 -43
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +41 -41
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +172 -89
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +53 -47
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +188 -78
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +48 -7
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -14
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  172. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  173. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  174. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +34 -32
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +151 -61
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +33 -29
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +138 -54
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -3
  182. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  185. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  187. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  189. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +15 -13
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +70 -37
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +257 -216
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +995 -495
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  195. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -4
  196. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  197. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  198. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  199. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  200. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  201. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  202. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  203. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  204. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  205. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +96 -98
  206. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +378 -226
  207. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  208. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  209. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +28 -25
  210. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +124 -53
  211. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +9 -12
  212. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +29 -24
  213. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -33
  214. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  215. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  216. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  217. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  218. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  219. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +51 -44
  220. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +179 -129
  221. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -4
  222. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  223. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -4
  224. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  225. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -8
  226. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  227. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -3
  228. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  229. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  230. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  231. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  232. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  233. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  234. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  235. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  236. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  237. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  238. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  239. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  240. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  241. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  242. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  243. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -3
  244. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  245. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  246. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  247. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  248. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  249. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  250. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  251. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  252. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  253. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  254. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  255. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  256. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  257. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  258. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  259. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  260. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  261. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  262. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  263. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +54 -37
  264. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +171 -59
  265. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  266. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  267. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  268. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  269. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  270. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  271. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  272. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  273. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  274. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  275. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  276. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  277. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  278. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  279. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  280. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  281. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  282. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  283. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  284. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  285. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  286. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  287. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  288. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  289. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  290. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  291. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  292. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  293. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  294. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  295. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  296. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  297. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  298. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  299. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  300. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  301. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  302. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  303. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  304. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  305. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  306. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  307. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  308. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +6 -6
  309. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  310. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  311. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  312. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  313. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  314. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  315. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  316. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  317. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  318. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  319. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  320. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  321. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  322. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  323. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  324. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  325. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +251 -0
  327. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  328. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  329. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  331. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  332. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +543 -0
  333. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  334. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  335. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  336. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  337. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  338. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  339. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  340. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  341. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  342. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +272 -0
  343. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +135 -0
  344. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  345. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  346. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  347. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  348. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  349. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  350. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  351. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  352. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  353. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  354. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  355. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  356. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +231 -0
  357. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +85 -0
  358. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  359. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  360. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  361. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  362. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +68 -0
  363. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  364. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  365. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  366. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  367. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  368. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  369. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  370. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  371. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +195 -0
  373. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  374. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +193 -0
  375. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  376. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +59 -0
  377. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  379. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  380. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  381. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  382. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +101 -0
  383. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +944 -0
  385. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +290 -0
  386. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  388. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  389. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  390. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  391. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  392. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  393. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  394. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  395. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +505 -0
  399. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  400. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  401. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  402. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +170 -0
  403. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  404. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  405. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  406. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  407. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  408. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  409. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  410. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  411. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  412. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  413. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  414. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  415. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  416. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  417. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  418. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  419. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  420. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  421. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  422. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  423. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  424. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  425. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  426. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  427. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  428. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  429. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  430. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  431. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  432. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  433. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  434. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  435. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  436. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  437. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  438. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  439. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  440. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  441. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  442. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  443. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  444. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  445. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  446. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  447. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  448. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  449. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  450. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  451. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  452. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  453. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  454. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  455. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  456. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  457. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  458. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  459. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  460. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  461. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  462. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  463. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  464. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  465. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  466. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  467. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  468. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  469. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  470. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  471. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  472. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  473. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  474. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  475. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  476. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  477. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  478. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  479. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  480. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  481. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  482. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  483. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  484. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  485. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  486. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +310 -0
  487. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  488. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  489. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  490. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  491. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  492. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  493. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  494. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  495. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  496. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  497. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  498. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  499. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  500. data/src/core/ext/xds/certificate_provider_factory.h +7 -5
  501. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  502. data/src/core/ext/xds/certificate_provider_store.h +70 -8
  503. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  504. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  505. data/src/core/ext/xds/xds_api.cc +2378 -1183
  506. data/src/core/ext/xds/xds_api.h +373 -99
  507. data/src/core/ext/xds/xds_bootstrap.cc +250 -68
  508. data/src/core/ext/xds/xds_bootstrap.h +40 -13
  509. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  510. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  511. data/src/core/ext/xds/xds_client.cc +364 -182
  512. data/src/core/ext/xds/xds_client.h +47 -12
  513. data/src/core/ext/xds/xds_client_stats.cc +43 -5
  514. data/src/core/ext/xds/xds_client_stats.h +4 -4
  515. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  516. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  517. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  518. data/src/core/ext/xds/xds_http_filters.h +130 -0
  519. data/src/core/ext/xds/xds_server_config_fetcher.cc +532 -0
  520. data/src/core/lib/channel/channel_args.cc +9 -8
  521. data/src/core/lib/channel/channel_stack.cc +12 -0
  522. data/src/core/lib/channel/channel_stack.h +7 -0
  523. data/src/core/lib/channel/channel_trace.cc +4 -2
  524. data/src/core/lib/channel/channel_trace.h +1 -1
  525. data/src/core/lib/channel/channelz.cc +105 -18
  526. data/src/core/lib/channel/channelz.h +32 -4
  527. data/src/core/lib/channel/channelz_registry.cc +14 -0
  528. data/src/core/lib/channel/channelz_registry.h +0 -1
  529. data/src/core/lib/channel/handshaker.cc +4 -46
  530. data/src/core/lib/channel/handshaker.h +3 -20
  531. data/src/core/lib/channel/status_util.cc +12 -2
  532. data/src/core/lib/channel/status_util.h +5 -0
  533. data/src/core/lib/compression/compression.cc +8 -4
  534. data/src/core/lib/compression/compression_args.cc +3 -2
  535. data/src/core/lib/compression/compression_internal.cc +10 -5
  536. data/src/core/lib/compression/compression_internal.h +2 -1
  537. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  538. data/src/core/lib/debug/stats.h +2 -2
  539. data/src/core/lib/debug/stats_data.cc +1 -0
  540. data/src/core/lib/debug/stats_data.h +13 -13
  541. data/src/core/lib/gpr/alloc.cc +3 -2
  542. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  543. data/src/core/lib/gpr/log.cc +59 -17
  544. data/src/core/lib/gpr/log_linux.cc +19 -3
  545. data/src/core/lib/gpr/log_posix.cc +15 -1
  546. data/src/core/lib/gpr/log_windows.cc +18 -4
  547. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  548. data/src/core/lib/gpr/spinlock.h +10 -2
  549. data/src/core/lib/gpr/string.cc +23 -22
  550. data/src/core/lib/gpr/string.h +5 -6
  551. data/src/core/lib/gpr/sync.cc +4 -4
  552. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  553. data/src/core/lib/gpr/sync_windows.cc +2 -2
  554. data/src/core/lib/gpr/time.cc +12 -12
  555. data/src/core/lib/gpr/time_precise.cc +3 -2
  556. data/src/core/lib/gpr/tls.h +4 -0
  557. data/src/core/lib/gpr/tls_msvc.h +2 -0
  558. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  559. data/src/core/lib/gpr/useful.h +5 -4
  560. data/src/core/lib/gprpp/arena.h +3 -2
  561. data/src/core/lib/gprpp/atomic.h +3 -3
  562. data/src/core/lib/gprpp/dual_ref_counted.h +46 -51
  563. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  564. data/src/core/lib/gprpp/examine_stack.h +46 -0
  565. data/src/core/lib/gprpp/fork.cc +2 -2
  566. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  567. data/src/core/lib/gprpp/mpscq.cc +2 -2
  568. data/src/core/lib/gprpp/orphanable.h +4 -8
  569. data/src/core/lib/gprpp/ref_counted.h +42 -48
  570. data/src/core/lib/gprpp/ref_counted_ptr.h +20 -12
  571. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  572. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  573. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  574. data/src/core/lib/gprpp/sync.h +129 -40
  575. data/src/core/lib/gprpp/thd.h +3 -3
  576. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  577. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  578. data/src/core/lib/gprpp/time_util.cc +77 -0
  579. data/src/core/lib/gprpp/time_util.h +42 -0
  580. data/src/core/lib/http/httpcli.cc +1 -1
  581. data/src/core/lib/http/httpcli.h +2 -3
  582. data/src/core/lib/http/httpcli_security_connector.cc +3 -3
  583. data/src/core/lib/http/parser.cc +47 -27
  584. data/src/core/lib/iomgr/buffer_list.h +1 -1
  585. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  586. data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
  587. data/src/core/lib/iomgr/combiner.cc +2 -1
  588. data/src/core/lib/iomgr/endpoint.h +1 -1
  589. data/src/core/lib/iomgr/error.cc +17 -12
  590. data/src/core/lib/iomgr/error.h +1 -1
  591. data/src/core/lib/iomgr/error_internal.h +1 -1
  592. data/src/core/lib/iomgr/ev_apple.cc +11 -8
  593. data/src/core/lib/iomgr/ev_epoll1_linux.cc +23 -16
  594. data/src/core/lib/iomgr/ev_epollex_linux.cc +29 -21
  595. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  596. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  597. data/src/core/lib/iomgr/exec_ctx.cc +7 -3
  598. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  599. data/src/core/lib/iomgr/executor.cc +2 -1
  600. data/src/core/lib/iomgr/executor.h +1 -1
  601. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  602. data/src/core/lib/iomgr/executor/threadpool.h +4 -4
  603. data/src/core/lib/iomgr/iomgr.cc +1 -1
  604. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  605. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  606. data/src/core/lib/iomgr/load_file.h +1 -1
  607. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  608. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  609. data/src/core/lib/iomgr/parse_address.cc +127 -43
  610. data/src/core/lib/iomgr/parse_address.h +32 -8
  611. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  612. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  613. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  614. data/src/core/lib/iomgr/python_util.h +4 -4
  615. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  616. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  617. data/src/core/lib/iomgr/resource_quota.cc +5 -5
  618. data/src/core/lib/iomgr/sockaddr_utils.cc +131 -11
  619. data/src/core/lib/iomgr/sockaddr_utils.h +26 -1
  620. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  621. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  622. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  623. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  624. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  625. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  626. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  627. data/src/core/lib/iomgr/tcp_posix.cc +17 -16
  628. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  629. data/src/core/lib/iomgr/tcp_uv.cc +2 -2
  630. data/src/core/lib/iomgr/timer_custom.cc +5 -5
  631. data/src/core/lib/iomgr/timer_generic.cc +5 -5
  632. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  633. data/src/core/lib/iomgr/udp_server.cc +1 -2
  634. data/src/core/lib/iomgr/udp_server.h +1 -2
  635. data/src/core/lib/iomgr/unix_sockets_posix.cc +32 -21
  636. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  637. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  638. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  639. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  640. data/src/core/lib/json/json.h +12 -2
  641. data/src/core/lib/json/json_reader.cc +8 -4
  642. data/src/core/lib/json/json_util.h +167 -0
  643. data/src/core/lib/json/json_writer.cc +2 -1
  644. data/src/core/lib/matchers/matchers.cc +339 -0
  645. data/src/core/lib/matchers/matchers.h +160 -0
  646. data/src/core/lib/security/context/security_context.cc +4 -3
  647. data/src/core/lib/security/context/security_context.h +3 -1
  648. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  649. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  650. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  651. data/src/core/lib/security/credentials/credentials.cc +7 -7
  652. data/src/core/lib/security/credentials/credentials.h +5 -4
  653. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  654. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  655. data/src/core/lib/security/credentials/external/aws_request_signer.cc +213 -0
  656. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  657. data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
  658. data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
  659. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  660. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
  661. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  662. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
  663. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
  664. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -18
  665. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  666. data/src/core/lib/security/credentials/jwt/json_token.cc +3 -3
  667. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  668. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -4
  669. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  670. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  671. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +39 -46
  672. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  673. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  674. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -6
  675. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  676. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +30 -5
  677. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
  678. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
  679. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
  680. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -150
  681. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +57 -187
  682. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  683. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  684. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  685. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  686. data/src/core/lib/security/credentials/xds/xds_credentials.cc +209 -10
  687. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  688. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  689. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -3
  690. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  691. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
  692. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  693. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  694. data/src/core/lib/security/security_connector/local/local_security_connector.cc +3 -3
  695. data/src/core/lib/security/security_connector/security_connector.cc +4 -3
  696. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  697. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  698. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -6
  699. data/src/core/lib/security/security_connector/ssl_utils.h +16 -21
  700. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +360 -279
  701. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +105 -61
  702. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  703. data/src/core/lib/security/transport/security_handshaker.cc +36 -8
  704. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  705. data/src/core/lib/security/util/json_util.h +1 -0
  706. data/src/core/lib/slice/slice.cc +7 -4
  707. data/src/core/lib/slice/slice_buffer.cc +2 -1
  708. data/src/core/lib/slice/slice_intern.cc +11 -13
  709. data/src/core/lib/slice/slice_internal.h +2 -2
  710. data/src/core/lib/surface/call.cc +41 -32
  711. data/src/core/lib/surface/call_details.cc +8 -8
  712. data/src/core/lib/surface/channel.cc +16 -10
  713. data/src/core/lib/surface/channel.h +6 -5
  714. data/src/core/lib/surface/channel_init.cc +1 -1
  715. data/src/core/lib/surface/completion_queue.cc +31 -25
  716. data/src/core/lib/surface/completion_queue.h +16 -16
  717. data/src/core/lib/surface/init.cc +19 -20
  718. data/src/core/lib/surface/lame_client.cc +47 -54
  719. data/src/core/lib/surface/lame_client.h +5 -0
  720. data/src/core/lib/surface/server.cc +106 -53
  721. data/src/core/lib/surface/server.h +114 -20
  722. data/src/core/lib/surface/validate_metadata.h +3 -0
  723. data/src/core/lib/surface/version.cc +2 -2
  724. data/src/core/lib/transport/authority_override.cc +6 -4
  725. data/src/core/lib/transport/authority_override.h +7 -2
  726. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  727. data/src/core/lib/transport/byte_stream.h +3 -3
  728. data/src/core/lib/transport/connectivity_state.h +9 -7
  729. data/src/core/lib/transport/error_utils.h +1 -1
  730. data/src/core/lib/transport/metadata.cc +6 -2
  731. data/src/core/lib/transport/metadata.h +2 -2
  732. data/src/core/lib/transport/metadata_batch.cc +27 -0
  733. data/src/core/lib/transport/metadata_batch.h +18 -4
  734. data/src/core/lib/transport/static_metadata.cc +1 -1
  735. data/src/core/lib/transport/status_metadata.cc +4 -3
  736. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  737. data/src/core/lib/transport/transport.cc +5 -3
  738. data/src/core/lib/transport/transport.h +8 -8
  739. data/src/core/lib/uri/uri_parser.cc +131 -249
  740. data/src/core/lib/uri/uri_parser.h +57 -21
  741. data/src/core/plugin_registry/grpc_plugin_registry.cc +26 -8
  742. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  743. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  744. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -25
  745. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -47
  746. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  747. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
  748. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  749. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  750. data/src/core/tsi/fake_transport_security.cc +17 -5
  751. data/src/core/tsi/local_transport_security.cc +5 -1
  752. data/src/core/tsi/local_transport_security.h +6 -7
  753. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  754. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  755. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -2
  756. data/src/core/tsi/ssl_transport_security.cc +73 -56
  757. data/src/core/tsi/ssl_transport_security.h +6 -6
  758. data/src/core/tsi/transport_security.cc +10 -8
  759. data/src/core/tsi/transport_security_interface.h +1 -1
  760. data/src/ruby/ext/grpc/extconf.rb +10 -2
  761. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  762. data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
  763. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  764. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  765. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  766. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  767. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  768. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -14
  769. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +70 -37
  770. data/src/ruby/ext/grpc/rb_server.c +13 -1
  771. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  772. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  773. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  774. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  775. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  776. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  777. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  778. data/src/ruby/lib/grpc/version.rb +1 -1
  779. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +35 -0
  780. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  781. data/src/ruby/spec/call_spec.rb +1 -1
  782. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  783. data/src/ruby/spec/channel_spec.rb +17 -6
  784. data/src/ruby/spec/client_auth_spec.rb +27 -1
  785. data/src/ruby/spec/errors_spec.rb +1 -1
  786. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  787. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  788. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  789. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  790. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  791. data/src/ruby/spec/server_spec.rb +22 -0
  792. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  793. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  794. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  795. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  796. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  797. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  798. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  799. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  800. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  801. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  802. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  803. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  804. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  805. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  806. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  807. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  808. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  809. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  810. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  811. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  812. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  813. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  814. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  815. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  816. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  817. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  818. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  819. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  820. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  821. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  822. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  823. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  824. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  825. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  826. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  827. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  828. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  829. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  830. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  831. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  832. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  833. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  834. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  835. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  836. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  837. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  838. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  839. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  840. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  841. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  842. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  843. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  844. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  845. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  846. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  847. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  848. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  849. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  850. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  851. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  852. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  853. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  854. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  855. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  856. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  857. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  858. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  859. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  860. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  861. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  862. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  863. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  864. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  865. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  866. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  867. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  868. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  869. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  870. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  871. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  872. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  873. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  874. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  875. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  876. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  877. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  878. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  879. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  880. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  881. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  882. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  883. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  884. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  885. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  886. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  887. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  888. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  889. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  890. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  891. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  892. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  893. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +4 -3
  894. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  895. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  896. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  897. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  898. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  899. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  900. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  901. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  902. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  903. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  904. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  905. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  906. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  907. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  908. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  909. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  910. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  911. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  912. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  913. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  914. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  915. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  916. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  917. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  918. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  919. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  920. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  921. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  922. data/third_party/boringssl-with-bazel/err_data.c +728 -722
  923. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  924. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  925. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  926. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  927. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  928. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  929. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  930. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
  931. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  932. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  933. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  934. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  935. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  936. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  937. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  938. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  939. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  940. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  941. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  942. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  943. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  944. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  945. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  946. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  947. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  948. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  949. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  950. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  953. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  954. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  955. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  956. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  957. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  958. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  959. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  960. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  961. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  962. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  963. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
  965. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  966. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +97 -39
  967. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +155 -2
  968. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
  969. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
  970. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  971. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  972. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  975. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  976. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
  977. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
  978. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
  979. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  980. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  981. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  982. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
  983. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  984. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  985. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
  986. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  987. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  988. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  989. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
  990. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  991. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
  992. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  993. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  994. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  995. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  996. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  997. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  998. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  999. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  1000. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  1001. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1002. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  1003. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  1004. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
  1005. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  1006. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  1007. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +10 -8
  1008. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
  1009. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  1010. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +14 -6
  1011. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  1012. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1013. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  1014. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
  1015. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1016. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1017. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  1018. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  1019. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  1020. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
  1021. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1022. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  1023. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  1024. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  1025. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +122 -34
  1026. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -8
  1027. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
  1028. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
  1029. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +546 -402
  1030. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1031. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  1032. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
  1033. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  1034. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
  1035. data/third_party/boringssl-with-bazel/src/ssl/internal.h +73 -17
  1036. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  1037. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +49 -9
  1038. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +87 -14
  1039. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +18 -22
  1040. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  1041. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  1042. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +570 -53
  1043. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +55 -13
  1044. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  1045. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +192 -56
  1046. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  1047. data/third_party/upb/upb/decode.c +248 -167
  1048. data/third_party/upb/upb/decode.h +20 -1
  1049. data/third_party/upb/upb/decode.int.h +163 -0
  1050. data/third_party/upb/upb/decode_fast.c +1040 -0
  1051. data/third_party/upb/upb/decode_fast.h +126 -0
  1052. data/third_party/upb/upb/def.c +2178 -0
  1053. data/third_party/upb/upb/def.h +315 -0
  1054. data/third_party/upb/upb/def.hpp +439 -0
  1055. data/third_party/upb/upb/encode.c +227 -169
  1056. data/third_party/upb/upb/encode.h +27 -2
  1057. data/third_party/upb/upb/msg.c +167 -88
  1058. data/third_party/upb/upb/msg.h +174 -34
  1059. data/third_party/upb/upb/port_def.inc +74 -61
  1060. data/third_party/upb/upb/port_undef.inc +3 -7
  1061. data/third_party/upb/upb/reflection.c +408 -0
  1062. data/third_party/upb/upb/reflection.h +168 -0
  1063. data/third_party/upb/upb/table.c +34 -197
  1064. data/third_party/upb/upb/table.int.h +14 -5
  1065. data/third_party/upb/upb/text_encode.c +421 -0
  1066. data/third_party/upb/upb/text_encode.h +38 -0
  1067. data/third_party/upb/upb/upb.c +18 -41
  1068. data/third_party/upb/upb/upb.h +36 -7
  1069. data/third_party/upb/upb/upb.hpp +4 -4
  1070. data/third_party/upb/upb/upb.int.h +29 -0
  1071. data/third_party/xxhash/xxhash.h +5443 -0
  1072. metadata +335 -75
  1073. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -1136
  1074. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  1075. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1076. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  1077. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  1078. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -53
  1079. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  1080. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -129
  1081. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  1082. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -77
  1083. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
  1084. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -85
  1085. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  1086. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -160
  1087. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  1088. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -84
  1089. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -377
  1090. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -102
  1091. data/src/core/lib/gprpp/map.h +0 -53
  1092. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1093. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  1094. data/src/core/lib/security/authorization/authorization_engine.h +0 -84
  1095. data/src/core/lib/security/authorization/evaluate_args.cc +0 -153
  1096. data/src/core/lib/security/authorization/evaluate_args.h +0 -59
  1097. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  1098. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -42
  1099. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -68
  1100. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -93
  1101. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  1102. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -56
  1103. data/src/core/lib/security/certificate_provider.h +0 -60
  1104. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1105. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -503
  1106. data/third_party/upb/upb/port.c +0 -26
@@ -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"
@@ -50,8 +51,6 @@
50
51
  #include "src/core/lib/iomgr/sockaddr.h"
51
52
  #include "src/core/lib/iomgr/sockaddr_utils.h"
52
53
  #include "src/core/lib/iomgr/timer.h"
53
- #include "src/core/lib/security/credentials/credentials.h"
54
- #include "src/core/lib/security/credentials/fake/fake_credentials.h"
55
54
  #include "src/core/lib/slice/slice_internal.h"
56
55
  #include "src/core/lib/slice/slice_string_helpers.h"
57
56
  #include "src/core/lib/surface/call.h"
@@ -68,12 +67,14 @@
68
67
  namespace grpc_core {
69
68
 
70
69
  TraceFlag grpc_xds_client_trace(false, "xds_client");
70
+ TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
71
71
 
72
72
  namespace {
73
73
 
74
74
  Mutex* g_mu = nullptr;
75
75
  const grpc_channel_args* g_channel_args = nullptr;
76
76
  XdsClient* g_xds_client = nullptr;
77
+ char* g_fallback_bootstrap_config = nullptr;
77
78
 
78
79
  } // namespace
79
80
 
@@ -143,8 +144,11 @@ class XdsClient::ChannelState::AdsCallState
143
144
  private:
144
145
  class ResourceState : public InternallyRefCounted<ResourceState> {
145
146
  public:
146
- ResourceState(const std::string& type_url, const std::string& name)
147
- : type_url_(type_url), name_(name) {
147
+ ResourceState(const std::string& type_url, const std::string& name,
148
+ bool sent_initial_request)
149
+ : type_url_(type_url),
150
+ name_(name),
151
+ sent_initial_request_(sent_initial_request) {
148
152
  GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
149
153
  grpc_schedule_on_exec_ctx);
150
154
  }
@@ -155,8 +159,8 @@ class XdsClient::ChannelState::AdsCallState
155
159
  }
156
160
 
157
161
  void Start(RefCountedPtr<AdsCallState> ads_calld) {
158
- if (sent_) return;
159
- sent_ = true;
162
+ if (sent_initial_request_) return;
163
+ sent_initial_request_ = true;
160
164
  ads_calld_ = std::move(ads_calld);
161
165
  Ref(DEBUG_LOCATION, "timer").release();
162
166
  timer_pending_ = true;
@@ -192,28 +196,34 @@ class XdsClient::ChannelState::AdsCallState
192
196
  "timeout obtaining resource {type=%s name=%s} from xds server",
193
197
  type_url_, name_)
194
198
  .c_str());
199
+ watcher_error = grpc_error_set_int(
200
+ watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
195
201
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
196
202
  gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
197
203
  grpc_error_string(watcher_error));
198
204
  }
199
205
  if (type_url_ == XdsApi::kLdsTypeUrl) {
200
206
  ListenerState& state = ads_calld_->xds_client()->listener_map_[name_];
207
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
201
208
  for (const auto& p : state.watchers) {
202
209
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
203
210
  }
204
211
  } else if (type_url_ == XdsApi::kRdsTypeUrl) {
205
212
  RouteConfigState& state =
206
213
  ads_calld_->xds_client()->route_config_map_[name_];
214
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
207
215
  for (const auto& p : state.watchers) {
208
216
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
209
217
  }
210
218
  } else if (type_url_ == XdsApi::kCdsTypeUrl) {
211
219
  ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
220
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
212
221
  for (const auto& p : state.watchers) {
213
222
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
214
223
  }
215
224
  } else if (type_url_ == XdsApi::kEdsTypeUrl) {
216
225
  EndpointState& state = ads_calld_->xds_client()->endpoint_map_[name_];
226
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
217
227
  for (const auto& p : state.watchers) {
218
228
  p.first->OnError(GRPC_ERROR_REF(watcher_error));
219
229
  }
@@ -229,7 +239,7 @@ class XdsClient::ChannelState::AdsCallState
229
239
  const std::string name_;
230
240
 
231
241
  RefCountedPtr<AdsCallState> ads_calld_;
232
- bool sent_ = false;
242
+ bool sent_initial_request_;
233
243
  bool timer_pending_ = false;
234
244
  grpc_timer timer_;
235
245
  grpc_closure timer_callback_;
@@ -238,8 +248,7 @@ class XdsClient::ChannelState::AdsCallState
238
248
  struct ResourceTypeState {
239
249
  ~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
240
250
 
241
- // Version, nonce, and error for this resource type.
242
- std::string version;
251
+ // Nonce and error for this resource type.
243
252
  std::string nonce;
244
253
  grpc_error* error = GRPC_ERROR_NONE;
245
254
 
@@ -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);
@@ -336,7 +349,7 @@ class XdsClient::ChannelState::LrsCallState
336
349
  void ScheduleNextReportLocked();
337
350
  static void OnNextReportTimer(void* arg, grpc_error* error);
338
351
  bool OnNextReportTimerLocked(grpc_error* error);
339
- void SendReportLocked();
352
+ bool SendReportLocked();
340
353
  static void OnReportDone(void* arg, grpc_error* error);
341
354
  bool OnReportDoneLocked(grpc_error* error);
342
355
 
@@ -431,11 +444,45 @@ class XdsClient::ChannelState::StateWatcher
431
444
  // XdsClient::ChannelState
432
445
  //
433
446
 
447
+ namespace {
448
+
449
+ grpc_channel* CreateXdsChannel(const XdsBootstrap::XdsServer& server) {
450
+ // Build channel args.
451
+ absl::InlinedVector<grpc_arg, 2> args_to_add = {
452
+ grpc_channel_arg_integer_create(
453
+ const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
454
+ 5 * 60 * GPR_MS_PER_SEC),
455
+ grpc_channel_arg_integer_create(
456
+ const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
457
+ };
458
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
459
+ g_channel_args, args_to_add.data(), args_to_add.size());
460
+ // Create channel creds.
461
+ RefCountedPtr<grpc_channel_credentials> channel_creds =
462
+ XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
463
+ server.channel_creds_config);
464
+ // Create channel.
465
+ grpc_channel* channel = grpc_secure_channel_create(
466
+ channel_creds.get(), server.server_uri.c_str(), new_args, nullptr);
467
+ grpc_channel_args_destroy(new_args);
468
+ return channel;
469
+ }
470
+
471
+ } // namespace
472
+
434
473
  XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
435
- grpc_channel* channel)
436
- : InternallyRefCounted<ChannelState>(&grpc_xds_client_trace),
474
+ const XdsBootstrap::XdsServer& server)
475
+ : InternallyRefCounted<ChannelState>(
476
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
477
+ ? "ChannelState"
478
+ : nullptr),
437
479
  xds_client_(std::move(xds_client)),
438
- channel_(channel) {
480
+ server_(server) {
481
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
482
+ gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
483
+ xds_client_.get(), server.server_uri.c_str());
484
+ }
485
+ channel_ = CreateXdsChannel(server);
439
486
  GPR_ASSERT(channel_ != nullptr);
440
487
  StartConnectivityWatchLocked();
441
488
  }
@@ -468,7 +515,7 @@ XdsClient::ChannelState::LrsCallState* XdsClient::ChannelState::lrs_calld()
468
515
  }
469
516
 
470
517
  bool XdsClient::ChannelState::HasActiveAdsCall() const {
471
- return ads_calld_->calld() != nullptr;
518
+ return ads_calld_ != nullptr && ads_calld_->calld() != nullptr;
472
519
  }
473
520
 
474
521
  void XdsClient::ChannelState::MaybeStartLrsCall() {
@@ -634,7 +681,10 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
634
681
 
635
682
  XdsClient::ChannelState::AdsCallState::AdsCallState(
636
683
  RefCountedPtr<RetryableCall<AdsCallState>> parent)
637
- : InternallyRefCounted<AdsCallState>(&grpc_xds_client_trace),
684
+ : InternallyRefCounted<AdsCallState>(
685
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
686
+ ? "AdsCallState"
687
+ : nullptr),
638
688
  parent_(std::move(parent)) {
639
689
  // Init the ADS call. Note that the call will progress every time there's
640
690
  // activity in xds_client()->interested_parties_, which is comprised of
@@ -642,7 +692,7 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
642
692
  GPR_ASSERT(xds_client() != nullptr);
643
693
  // Create a call with the specified method name.
644
694
  const auto& method =
645
- xds_client()->bootstrap_->server().ShouldUseV3()
695
+ chand()->server_.ShouldUseV3()
646
696
  ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V3_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES
647
697
  : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES;
648
698
  call_ = grpc_channel_create_pollset_set_call(
@@ -672,8 +722,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
672
722
  GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
673
723
  op->reserved = nullptr;
674
724
  op++;
675
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
676
- nullptr);
725
+ call_error = grpc_call_start_batch_and_execute(
726
+ call_, ops, static_cast<size_t>(op - ops), nullptr);
677
727
  GPR_ASSERT(GRPC_CALL_OK == call_error);
678
728
  // Op: send request message.
679
729
  GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
@@ -707,8 +757,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
707
757
  Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
708
758
  GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
709
759
  grpc_schedule_on_exec_ctx);
710
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
711
- &on_response_received_);
760
+ call_error = grpc_call_start_batch_and_execute(
761
+ call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
712
762
  GPR_ASSERT(GRPC_CALL_OK == call_error);
713
763
  // Op: recv server status.
714
764
  op = ops;
@@ -724,8 +774,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
724
774
  // unreffed.
725
775
  GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
726
776
  grpc_schedule_on_exec_ctx);
727
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
728
- &on_status_received_);
777
+ call_error = grpc_call_start_batch_and_execute(
778
+ call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
729
779
  GPR_ASSERT(GRPC_CALL_OK == call_error);
730
780
  }
731
781
 
@@ -763,7 +813,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
763
813
  std::set<absl::string_view> resource_names =
764
814
  ResourceNamesForRequest(type_url);
765
815
  request_payload_slice = xds_client()->api_.CreateAdsRequest(
766
- type_url, resource_names, state.version, state.nonce,
816
+ chand()->server_, type_url, resource_names,
817
+ xds_client()->resource_version_map_[type_url], state.nonce,
767
818
  GRPC_ERROR_REF(state.error), !sent_initial_message_);
768
819
  if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
769
820
  type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
@@ -774,7 +825,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
774
825
  gpr_log(GPR_INFO,
775
826
  "[xds_client %p] sending ADS request: type=%s version=%s nonce=%s "
776
827
  "error=%s resources=%s",
777
- xds_client(), type_url.c_str(), state.version.c_str(),
828
+ xds_client(), type_url.c_str(),
829
+ xds_client()->resource_version_map_[type_url].c_str(),
778
830
  state.nonce.c_str(), grpc_error_string(state.error),
779
831
  absl::StrJoin(resource_names, " ").c_str());
780
832
  }
@@ -806,7 +858,8 @@ void XdsClient::ChannelState::AdsCallState::Subscribe(
806
858
  const std::string& type_url, const std::string& name) {
807
859
  auto& state = state_map_[type_url].subscribed_resources[name];
808
860
  if (state == nullptr) {
809
- state = MakeOrphanable<ResourceState>(type_url, name);
861
+ state = MakeOrphanable<ResourceState>(
862
+ type_url, name, !xds_client()->resource_version_map_[type_url].empty());
810
863
  SendMessageLocked(type_url);
811
864
  }
812
865
  }
@@ -825,7 +878,24 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
825
878
  return false;
826
879
  }
827
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
+
828
897
  void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
898
+ std::string version, grpc_millis update_time,
829
899
  XdsApi::LdsUpdateMap lds_update_map) {
830
900
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
831
901
  gpr_log(GPR_INFO,
@@ -837,23 +907,17 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
837
907
  std::set<std::string> rds_resource_names_seen;
838
908
  for (auto& p : lds_update_map) {
839
909
  const std::string& listener_name = p.first;
840
- XdsApi::LdsUpdate& lds_update = p.second;
910
+ XdsApi::LdsUpdate& lds_update = p.second.resource;
841
911
  auto& state = lds_state.subscribed_resources[listener_name];
842
912
  if (state != nullptr) state->Finish();
843
913
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
844
- gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: route_config_name=%s",
845
- xds_client(), listener_name.c_str(),
846
- (!lds_update.route_config_name.empty()
847
- ? lds_update.route_config_name.c_str()
848
- : "<inlined>"));
849
- if (lds_update.rds_update.has_value()) {
850
- gpr_log(GPR_INFO, "RouteConfiguration: %s",
851
- lds_update.rds_update->ToString().c_str());
852
- }
914
+ gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
915
+ listener_name.c_str(), lds_update.ToString().c_str());
853
916
  }
854
917
  // Record the RDS resource names seen.
855
- if (!lds_update.route_config_name.empty()) {
856
- 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);
857
921
  }
858
922
  // Ignore identical update.
859
923
  ListenerState& listener_state = xds_client()->listener_map_[listener_name];
@@ -869,6 +933,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
869
933
  }
870
934
  // Update the listener state.
871
935
  listener_state.update = std::move(lds_update);
936
+ listener_state.meta = CreateResourceMetadataAcked(
937
+ std::move(p.second.serialized_proto), version, update_time);
872
938
  // Notify watchers.
873
939
  for (const auto& p : listener_state.watchers) {
874
940
  p.first->OnListenerChanged(*listener_state.update);
@@ -913,6 +979,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
913
979
  }
914
980
 
915
981
  void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
982
+ std::string version, grpc_millis update_time,
916
983
  XdsApi::RdsUpdateMap rds_update_map) {
917
984
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
918
985
  gpr_log(GPR_INFO,
@@ -923,7 +990,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
923
990
  auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
924
991
  for (auto& p : rds_update_map) {
925
992
  const std::string& route_config_name = p.first;
926
- XdsApi::RdsUpdate& rds_update = p.second;
993
+ XdsApi::RdsUpdate& rds_update = p.second.resource;
927
994
  auto& state = rds_state.subscribed_resources[route_config_name];
928
995
  if (state != nullptr) state->Finish();
929
996
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@@ -944,6 +1011,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
944
1011
  }
945
1012
  // Update the cache.
946
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);
947
1016
  // Notify all watchers.
948
1017
  for (const auto& p : route_config_state.watchers) {
949
1018
  p.first->OnRouteConfigChanged(*route_config_state.update);
@@ -952,6 +1021,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
952
1021
  }
953
1022
 
954
1023
  void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
1024
+ std::string version, grpc_millis update_time,
955
1025
  XdsApi::CdsUpdateMap cds_update_map) {
956
1026
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
957
1027
  gpr_log(GPR_INFO,
@@ -963,17 +1033,12 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
963
1033
  std::set<std::string> eds_resource_names_seen;
964
1034
  for (auto& p : cds_update_map) {
965
1035
  const char* cluster_name = p.first.c_str();
966
- XdsApi::CdsUpdate& cds_update = p.second;
1036
+ XdsApi::CdsUpdate& cds_update = p.second.resource;
967
1037
  auto& state = cds_state.subscribed_resources[cluster_name];
968
1038
  if (state != nullptr) state->Finish();
969
1039
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
970
- gpr_log(GPR_INFO,
971
- "[xds_client %p] cluster=%s: eds_service_name=%s, "
972
- "lrs_load_reporting_server_name=%s",
973
- xds_client(), cluster_name, cds_update.eds_service_name.c_str(),
974
- cds_update.lrs_load_reporting_server_name.has_value()
975
- ? cds_update.lrs_load_reporting_server_name.value().c_str()
976
- : "(N/A)");
1040
+ gpr_log(GPR_INFO, "[xds_client %p] cluster=%s: %s", xds_client(),
1041
+ cluster_name, cds_update.ToString().c_str());
977
1042
  }
978
1043
  // Record the EDS resource names seen.
979
1044
  eds_resource_names_seen.insert(cds_update.eds_service_name.empty()
@@ -992,6 +1057,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
992
1057
  }
993
1058
  // Update the cluster state.
994
1059
  cluster_state.update = std::move(cds_update);
1060
+ cluster_state.meta = CreateResourceMetadataAcked(
1061
+ std::move(p.second.serialized_proto), version, update_time);
995
1062
  // Notify all watchers.
996
1063
  for (const auto& p : cluster_state.watchers) {
997
1064
  p.first->OnClusterChanged(cluster_state.update.value());
@@ -1035,6 +1102,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
1035
1102
  }
1036
1103
 
1037
1104
  void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1105
+ std::string version, grpc_millis update_time,
1038
1106
  XdsApi::EdsUpdateMap eds_update_map) {
1039
1107
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1040
1108
  gpr_log(GPR_INFO,
@@ -1045,7 +1113,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1045
1113
  auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1046
1114
  for (auto& p : eds_update_map) {
1047
1115
  const char* eds_service_name = p.first.c_str();
1048
- XdsApi::EdsUpdate& eds_update = p.second;
1116
+ XdsApi::EdsUpdate& eds_update = p.second.resource;
1049
1117
  auto& state = eds_state.subscribed_resources[eds_service_name];
1050
1118
  if (state != nullptr) state->Finish();
1051
1119
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
@@ -1066,6 +1134,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1066
1134
  }
1067
1135
  // Update the cluster state.
1068
1136
  endpoint_state.update = std::move(eds_update);
1137
+ endpoint_state.meta = CreateResourceMetadataAcked(
1138
+ std::move(p.second.serialized_proto), version, update_time);
1069
1139
  // Notify all watchers.
1070
1140
  for (const auto& p : endpoint_state.watchers) {
1071
1141
  p.first->OnEndpointChanged(endpoint_state.update.value());
@@ -1132,7 +1202,8 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1132
1202
  recv_message_payload_ = nullptr;
1133
1203
  // Parse and validate the response.
1134
1204
  XdsApi::AdsParseResult result = xds_client()->api_.ParseAdsResponse(
1135
- response_slice, ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
1205
+ chand()->server_, response_slice,
1206
+ ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
1136
1207
  ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
1137
1208
  ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
1138
1209
  ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
@@ -1144,11 +1215,14 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1144
1215
  xds_client(), grpc_error_string(result.parse_error));
1145
1216
  GRPC_ERROR_UNREF(result.parse_error);
1146
1217
  } else {
1218
+ grpc_millis update_time = grpc_core::ExecCtx::Get()->Now();
1147
1219
  // Update nonce.
1148
1220
  auto& state = state_map_[result.type_url];
1149
1221
  state.nonce = std::move(result.nonce);
1150
1222
  // NACK or ACK the response.
1151
1223
  if (result.parse_error != GRPC_ERROR_NONE) {
1224
+ xds_client()->UpdateResourceMetadataWithFailedParseResult(update_time,
1225
+ result);
1152
1226
  GRPC_ERROR_UNREF(state.error);
1153
1227
  state.error = result.parse_error;
1154
1228
  // NACK unacceptable update.
@@ -1162,15 +1236,20 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1162
1236
  seen_response_ = true;
1163
1237
  // Accept the ADS response according to the type_url.
1164
1238
  if (result.type_url == XdsApi::kLdsTypeUrl) {
1165
- AcceptLdsUpdate(std::move(result.lds_update_map));
1239
+ AcceptLdsUpdate(result.version, update_time,
1240
+ std::move(result.lds_update_map));
1166
1241
  } else if (result.type_url == XdsApi::kRdsTypeUrl) {
1167
- AcceptRdsUpdate(std::move(result.rds_update_map));
1242
+ AcceptRdsUpdate(result.version, update_time,
1243
+ std::move(result.rds_update_map));
1168
1244
  } else if (result.type_url == XdsApi::kCdsTypeUrl) {
1169
- AcceptCdsUpdate(std::move(result.cds_update_map));
1245
+ AcceptCdsUpdate(result.version, update_time,
1246
+ std::move(result.cds_update_map));
1170
1247
  } else if (result.type_url == XdsApi::kEdsTypeUrl) {
1171
- AcceptEdsUpdate(std::move(result.eds_update_map));
1248
+ AcceptEdsUpdate(result.version, update_time,
1249
+ std::move(result.eds_update_map));
1172
1250
  }
1173
- state.version = std::move(result.version);
1251
+ xds_client()->resource_version_map_[result.type_url] =
1252
+ std::move(result.version);
1174
1253
  // ACK the update.
1175
1254
  SendMessageLocked(result.type_url);
1176
1255
  // Start load reporting if needed.
@@ -1287,8 +1366,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
1287
1366
  GRPC_ERROR_UNREF(error);
1288
1367
  return true;
1289
1368
  }
1290
- SendReportLocked();
1291
- return false;
1369
+ return SendReportLocked();
1292
1370
  }
1293
1371
 
1294
1372
  namespace {
@@ -1307,7 +1385,7 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
1307
1385
 
1308
1386
  } // namespace
1309
1387
 
1310
- void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1388
+ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1311
1389
  // Construct snapshot from all reported stats.
1312
1390
  XdsApi::ClusterLoadReportMap snapshot =
1313
1391
  xds_client()->BuildLoadReportSnapshotLocked(parent_->send_all_clusters_,
@@ -1317,8 +1395,12 @@ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1317
1395
  const bool old_val = last_report_counters_were_zero_;
1318
1396
  last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
1319
1397
  if (old_val && last_report_counters_were_zero_) {
1398
+ if (xds_client()->load_report_map_.empty()) {
1399
+ parent_->chand()->StopLrsCall();
1400
+ return true;
1401
+ }
1320
1402
  ScheduleNextReportLocked();
1321
- return;
1403
+ return false;
1322
1404
  }
1323
1405
  // Create a request that contains the snapshot.
1324
1406
  grpc_slice request_payload_slice =
@@ -1339,6 +1421,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1339
1421
  xds_client(), this, call_error);
1340
1422
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1341
1423
  }
1424
+ return false;
1342
1425
  }
1343
1426
 
1344
1427
  void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
@@ -1381,14 +1464,17 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
1381
1464
 
1382
1465
  XdsClient::ChannelState::LrsCallState::LrsCallState(
1383
1466
  RefCountedPtr<RetryableCall<LrsCallState>> parent)
1384
- : InternallyRefCounted<LrsCallState>(&grpc_xds_client_trace),
1467
+ : InternallyRefCounted<LrsCallState>(
1468
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
1469
+ ? "LrsCallState"
1470
+ : nullptr),
1385
1471
  parent_(std::move(parent)) {
1386
1472
  // Init the LRS call. Note that the call will progress every time there's
1387
1473
  // activity in xds_client()->interested_parties_, which is comprised of
1388
1474
  // the polling entities from client_channel.
1389
1475
  GPR_ASSERT(xds_client() != nullptr);
1390
1476
  const auto& method =
1391
- xds_client()->bootstrap_->server().ShouldUseV3()
1477
+ chand()->server_.ShouldUseV3()
1392
1478
  ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V3_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS
1393
1479
  : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS;
1394
1480
  call_ = grpc_channel_create_pollset_set_call(
@@ -1398,7 +1484,7 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1398
1484
  GPR_ASSERT(call_ != nullptr);
1399
1485
  // Init the request payload.
1400
1486
  grpc_slice request_payload_slice =
1401
- xds_client()->api_.CreateLrsInitialRequest();
1487
+ xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
1402
1488
  send_message_payload_ =
1403
1489
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1404
1490
  grpc_slice_unref_internal(request_payload_slice);
@@ -1434,8 +1520,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1434
1520
  Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
1435
1521
  GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
1436
1522
  grpc_schedule_on_exec_ctx);
1437
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1438
- &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_);
1439
1525
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1440
1526
  // Op: recv initial metadata.
1441
1527
  op = ops;
@@ -1454,8 +1540,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1454
1540
  Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
1455
1541
  GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
1456
1542
  grpc_schedule_on_exec_ctx);
1457
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1458
- &on_response_received_);
1543
+ call_error = grpc_call_start_batch_and_execute(
1544
+ call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
1459
1545
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1460
1546
  // Op: recv server status.
1461
1547
  op = ops;
@@ -1471,8 +1557,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1471
1557
  // unreffed.
1472
1558
  GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
1473
1559
  grpc_schedule_on_exec_ctx);
1474
- call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1475
- &on_status_received_);
1560
+ call_error = grpc_call_start_batch_and_execute(
1561
+ call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
1476
1562
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1477
1563
  }
1478
1564
 
@@ -1689,56 +1775,22 @@ grpc_millis GetRequestTimeout() {
1689
1775
  {15000, 0, INT_MAX});
1690
1776
  }
1691
1777
 
1692
- grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
1693
- grpc_error** error) {
1694
- // Build channel args.
1695
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1696
- grpc_channel_arg_integer_create(
1697
- const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
1698
- 5 * 60 * GPR_MS_PER_SEC),
1699
- grpc_channel_arg_integer_create(
1700
- const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1701
- };
1702
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1703
- g_channel_args, args_to_add.data(), args_to_add.size());
1704
- // Find credentials and create channel.
1705
- RefCountedPtr<grpc_channel_credentials> creds;
1706
- for (const auto& channel_creds : bootstrap.server().channel_creds) {
1707
- if (channel_creds.type == "google_default") {
1708
- creds.reset(grpc_google_default_credentials_create(nullptr));
1709
- break;
1710
- }
1711
- if (channel_creds.type == "insecure") {
1712
- grpc_channel* channel = grpc_insecure_channel_create(
1713
- bootstrap.server().server_uri.c_str(), new_args, nullptr);
1714
- grpc_channel_args_destroy(new_args);
1715
- return channel;
1716
- }
1717
- if (channel_creds.type == "fake") {
1718
- creds.reset(grpc_fake_transport_security_credentials_create());
1719
- break;
1720
- }
1721
- }
1722
- if (creds == nullptr) {
1723
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1724
- "no supported credential types found");
1725
- return nullptr;
1726
- }
1727
- grpc_channel* channel = grpc_secure_channel_create(
1728
- creds.get(), bootstrap.server().server_uri.c_str(), new_args, nullptr);
1729
- grpc_channel_args_destroy(new_args);
1730
- return channel;
1731
- }
1732
-
1733
1778
  } // namespace
1734
1779
 
1735
1780
  XdsClient::XdsClient(grpc_error** error)
1736
- : DualRefCounted<XdsClient>(&grpc_xds_client_trace),
1781
+ : DualRefCounted<XdsClient>(
1782
+ GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
1783
+ : nullptr),
1737
1784
  request_timeout_(GetRequestTimeout()),
1738
1785
  interested_parties_(grpc_pollset_set_create()),
1739
- bootstrap_(
1740
- XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
1741
- api_(this, &grpc_xds_client_trace, bootstrap_.get()) {
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())),
1792
+ api_(this, &grpc_xds_client_trace,
1793
+ bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
1742
1794
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1743
1795
  gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
1744
1796
  }
@@ -1747,19 +1799,9 @@ XdsClient::XdsClient(grpc_error** error)
1747
1799
  this, grpc_error_string(*error));
1748
1800
  return;
1749
1801
  }
1750
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1751
- gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s", this,
1752
- bootstrap_->server().server_uri.c_str());
1753
- }
1754
- grpc_channel* channel = CreateXdsChannel(*bootstrap_, error);
1755
- if (*error != GRPC_ERROR_NONE) {
1756
- gpr_log(GPR_ERROR, "[xds_client %p] failed to create xds channel: %s", this,
1757
- grpc_error_string(*error));
1758
- return;
1759
- }
1760
1802
  // Create ChannelState object.
1761
1803
  chand_ = MakeOrphanable<ChannelState>(
1762
- WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), channel);
1804
+ WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
1763
1805
  }
1764
1806
 
1765
1807
  XdsClient::~XdsClient() {
@@ -1982,10 +2024,22 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
1982
2024
  auto it = load_report_map_
1983
2025
  .emplace(std::make_pair(std::move(key), LoadReportState()))
1984
2026
  .first;
1985
- auto cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
1986
- Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
1987
- it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/);
1988
- it->second.drop_stats.insert(cluster_drop_stats.get());
2027
+ LoadReportState& load_report_state = it->second;
2028
+ RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
2029
+ if (load_report_state.drop_stats != nullptr) {
2030
+ cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
2031
+ }
2032
+ if (cluster_drop_stats == nullptr) {
2033
+ if (load_report_state.drop_stats != nullptr) {
2034
+ load_report_state.deleted_drop_stats +=
2035
+ load_report_state.drop_stats->GetSnapshotAndReset();
2036
+ }
2037
+ cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
2038
+ Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
2039
+ it->first.first /*cluster_name*/,
2040
+ it->first.second /*eds_service_name*/);
2041
+ load_report_state.drop_stats = cluster_drop_stats.get();
2042
+ }
1989
2043
  chand_->MaybeStartLrsCall();
1990
2044
  return cluster_drop_stats;
1991
2045
  }
@@ -1995,19 +2049,18 @@ void XdsClient::RemoveClusterDropStats(
1995
2049
  absl::string_view eds_service_name,
1996
2050
  XdsClusterDropStats* cluster_drop_stats) {
1997
2051
  MutexLock lock(&mu_);
1998
- auto load_report_it = load_report_map_.find(
1999
- std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2000
- if (load_report_it == load_report_map_.end()) return;
2001
- LoadReportState& load_report_state = load_report_it->second;
2002
2052
  // TODO(roth): When we add support for direct federation, use the
2003
2053
  // server name specified in lrs_server.
2004
- auto it = load_report_state.drop_stats.find(cluster_drop_stats);
2005
- if (it != load_report_state.drop_stats.end()) {
2006
- // Record final drop stats in deleted_drop_stats, which will be
2054
+ auto it = load_report_map_.find(
2055
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2056
+ if (it == load_report_map_.end()) return;
2057
+ LoadReportState& load_report_state = it->second;
2058
+ if (load_report_state.drop_stats == cluster_drop_stats) {
2059
+ // Record final snapshot in deleted_drop_stats, which will be
2007
2060
  // added to the next load report.
2008
- auto dropped_requests = cluster_drop_stats->GetSnapshotAndReset();
2009
- load_report_state.deleted_drop_stats += dropped_requests;
2010
- load_report_state.drop_stats.erase(it);
2061
+ load_report_state.deleted_drop_stats +=
2062
+ load_report_state.drop_stats->GetSnapshotAndReset();
2063
+ load_report_state.drop_stats = nullptr;
2011
2064
  }
2012
2065
  }
2013
2066
 
@@ -2026,12 +2079,24 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
2026
2079
  auto it = load_report_map_
2027
2080
  .emplace(std::make_pair(std::move(key), LoadReportState()))
2028
2081
  .first;
2029
- auto cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
2030
- Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
2031
- it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
2032
- locality);
2033
- it->second.locality_stats[std::move(locality)].locality_stats.insert(
2034
- cluster_locality_stats.get());
2082
+ LoadReportState& load_report_state = it->second;
2083
+ LoadReportState::LocalityState& locality_state =
2084
+ load_report_state.locality_stats[locality];
2085
+ RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
2086
+ if (locality_state.locality_stats != nullptr) {
2087
+ cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
2088
+ }
2089
+ if (cluster_locality_stats == nullptr) {
2090
+ if (locality_state.locality_stats != nullptr) {
2091
+ locality_state.deleted_locality_stats +=
2092
+ locality_state.locality_stats->GetSnapshotAndReset();
2093
+ }
2094
+ cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
2095
+ Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
2096
+ it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
2097
+ std::move(locality));
2098
+ locality_state.locality_stats = cluster_locality_stats.get();
2099
+ }
2035
2100
  chand_->MaybeStartLrsCall();
2036
2101
  return cluster_locality_stats;
2037
2102
  }
@@ -2042,22 +2107,21 @@ void XdsClient::RemoveClusterLocalityStats(
2042
2107
  const RefCountedPtr<XdsLocalityName>& locality,
2043
2108
  XdsClusterLocalityStats* cluster_locality_stats) {
2044
2109
  MutexLock lock(&mu_);
2045
- auto load_report_it = load_report_map_.find(
2046
- std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2047
- if (load_report_it == load_report_map_.end()) return;
2048
- LoadReportState& load_report_state = load_report_it->second;
2049
2110
  // TODO(roth): When we add support for direct federation, use the
2050
2111
  // server name specified in lrs_server.
2112
+ auto it = load_report_map_.find(
2113
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2114
+ if (it == load_report_map_.end()) return;
2115
+ LoadReportState& load_report_state = it->second;
2051
2116
  auto locality_it = load_report_state.locality_stats.find(locality);
2052
2117
  if (locality_it == load_report_state.locality_stats.end()) return;
2053
- auto& locality_set = locality_it->second.locality_stats;
2054
- auto it = locality_set.find(cluster_locality_stats);
2055
- if (it != locality_set.end()) {
2118
+ LoadReportState::LocalityState& locality_state = locality_it->second;
2119
+ if (locality_state.locality_stats == cluster_locality_stats) {
2056
2120
  // Record final snapshot in deleted_locality_stats, which will be
2057
2121
  // added to the next load report.
2058
- locality_it->second.deleted_locality_stats.emplace_back(
2059
- cluster_locality_stats->GetSnapshotAndReset());
2060
- locality_set.erase(it);
2122
+ locality_state.deleted_locality_stats +=
2123
+ locality_state.locality_stats->GetSnapshotAndReset();
2124
+ locality_state.locality_stats = nullptr;
2061
2125
  }
2062
2126
  }
2063
2127
 
@@ -2098,6 +2162,9 @@ void XdsClient::NotifyOnErrorLocked(grpc_error* error) {
2098
2162
 
2099
2163
  XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2100
2164
  bool send_all_clusters, const std::set<std::string>& clusters) {
2165
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2166
+ gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
2167
+ }
2101
2168
  XdsApi::ClusterLoadReportMap snapshot_map;
2102
2169
  for (auto load_report_it = load_report_map_.begin();
2103
2170
  load_report_it != load_report_map_.end();) {
@@ -2116,9 +2183,15 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2116
2183
  XdsApi::ClusterLoadReport snapshot;
2117
2184
  // Aggregate drop stats.
2118
2185
  snapshot.dropped_requests = std::move(load_report.deleted_drop_stats);
2119
- for (auto& drop_stats : load_report.drop_stats) {
2120
- auto dropped_requests = drop_stats->GetSnapshotAndReset();
2121
- snapshot.dropped_requests += dropped_requests;
2186
+ if (load_report.drop_stats != nullptr) {
2187
+ snapshot.dropped_requests +=
2188
+ load_report.drop_stats->GetSnapshotAndReset();
2189
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2190
+ gpr_log(GPR_INFO,
2191
+ "[xds_client %p] cluster=%s eds_service_name=%s drop_stats=%p",
2192
+ this, cluster_key.first.c_str(), cluster_key.second.c_str(),
2193
+ load_report.drop_stats);
2194
+ }
2122
2195
  }
2123
2196
  // Aggregate locality stats.
2124
2197
  for (auto it = load_report.locality_stats.begin();
@@ -2127,34 +2200,39 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2127
2200
  auto& locality_state = it->second;
2128
2201
  XdsClusterLocalityStats::Snapshot& locality_snapshot =
2129
2202
  snapshot.locality_stats[locality_name];
2130
- for (auto& locality_stats : locality_state.locality_stats) {
2131
- locality_snapshot += locality_stats->GetSnapshotAndReset();
2132
- }
2133
- // Add final snapshots from recently deleted locality stats objects.
2134
- for (auto& deleted_locality_stats :
2135
- locality_state.deleted_locality_stats) {
2136
- locality_snapshot += deleted_locality_stats;
2203
+ locality_snapshot = std::move(locality_state.deleted_locality_stats);
2204
+ if (locality_state.locality_stats != nullptr) {
2205
+ locality_snapshot +=
2206
+ locality_state.locality_stats->GetSnapshotAndReset();
2207
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2208
+ gpr_log(GPR_INFO,
2209
+ "[xds_client %p] cluster=%s eds_service_name=%s "
2210
+ "locality=%s locality_stats=%p",
2211
+ this, cluster_key.first.c_str(), cluster_key.second.c_str(),
2212
+ locality_name->AsHumanReadableString().c_str(),
2213
+ locality_state.locality_stats);
2214
+ }
2137
2215
  }
2138
- locality_state.deleted_locality_stats.clear();
2139
2216
  // If the only thing left in this entry was final snapshots from
2140
2217
  // deleted locality stats objects, remove the entry.
2141
- if (locality_state.locality_stats.empty()) {
2218
+ if (locality_state.locality_stats == nullptr) {
2142
2219
  it = load_report.locality_stats.erase(it);
2143
2220
  } else {
2144
2221
  ++it;
2145
2222
  }
2146
2223
  }
2224
+ // Compute load report interval.
2225
+ const grpc_millis now = ExecCtx::Get()->Now();
2226
+ snapshot.load_report_interval = now - load_report.last_report_time;
2227
+ load_report.last_report_time = now;
2228
+ // Record snapshot.
2147
2229
  if (record_stats) {
2148
- // Compute load report interval.
2149
- const grpc_millis now = ExecCtx::Get()->Now();
2150
- snapshot.load_report_interval = now - load_report.last_report_time;
2151
- load_report.last_report_time = now;
2152
- // Record snapshot.
2153
2230
  snapshot_map[cluster_key] = std::move(snapshot);
2154
2231
  }
2155
2232
  // If the only thing left in this entry was final snapshots from
2156
2233
  // deleted stats objects, remove the entry.
2157
- if (load_report.locality_stats.empty() && load_report.drop_stats.empty()) {
2234
+ if (load_report.locality_stats.empty() &&
2235
+ load_report.drop_stats == nullptr) {
2158
2236
  load_report_it = load_report_map_.erase(load_report_it);
2159
2237
  } else {
2160
2238
  ++load_report_it;
@@ -2163,25 +2241,109 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2163
2241
  return snapshot_map;
2164
2242
  }
2165
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
+
2166
2318
  //
2167
2319
  // accessors for global state
2168
2320
  //
2169
2321
 
2170
- void XdsClientGlobalInit() { g_mu = new Mutex; }
2322
+ void XdsClientGlobalInit() {
2323
+ g_mu = new Mutex;
2324
+ XdsHttpFilterRegistry::Init();
2325
+ }
2171
2326
 
2172
2327
  void XdsClientGlobalShutdown() {
2173
2328
  delete g_mu;
2174
2329
  g_mu = nullptr;
2330
+ gpr_free(g_fallback_bootstrap_config);
2331
+ g_fallback_bootstrap_config = nullptr;
2332
+ XdsHttpFilterRegistry::Shutdown();
2175
2333
  }
2176
2334
 
2177
2335
  RefCountedPtr<XdsClient> XdsClient::GetOrCreate(grpc_error** error) {
2178
- MutexLock lock(g_mu);
2179
- if (g_xds_client != nullptr) {
2180
- auto xds_client = g_xds_client->RefIfNonZero();
2181
- 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();
2182
2346
  }
2183
- auto xds_client = MakeRefCounted<XdsClient>(error);
2184
- g_xds_client = xds_client.get();
2185
2347
  return xds_client;
2186
2348
  }
2187
2349
 
@@ -2197,6 +2359,26 @@ void UnsetGlobalXdsClientForTest() {
2197
2359
  g_xds_client = nullptr;
2198
2360
  }
2199
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
+
2200
2368
  } // namespace internal
2201
2369
 
2202
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
+ }