grpc 1.40.0 → 1.46.3

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 (1941) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +462 -267
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/event_engine/endpoint_config.h +6 -11
  7. data/include/grpc/event_engine/event_engine.h +164 -95
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  9. data/include/grpc/event_engine/memory_allocator.h +226 -0
  10. data/include/grpc/event_engine/memory_request.h +57 -0
  11. data/include/grpc/event_engine/port.h +1 -3
  12. data/include/grpc/fork.h +1 -1
  13. data/include/grpc/grpc.h +54 -18
  14. data/include/grpc/grpc_posix.h +22 -18
  15. data/include/grpc/grpc_security.h +328 -193
  16. data/include/grpc/grpc_security_constants.h +2 -14
  17. data/include/grpc/impl/codegen/atm.h +5 -3
  18. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  19. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  20. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  21. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  22. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  23. data/include/grpc/impl/codegen/compression_types.h +2 -2
  24. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  25. data/include/grpc/impl/codegen/fork.h +2 -0
  26. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  27. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  28. data/include/grpc/impl/codegen/grpc_types.h +28 -26
  29. data/include/grpc/impl/codegen/log.h +2 -0
  30. data/include/grpc/impl/codegen/port_platform.h +37 -22
  31. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  32. data/include/grpc/impl/codegen/slice.h +6 -1
  33. data/include/grpc/impl/codegen/status.h +2 -0
  34. data/include/grpc/impl/codegen/sync.h +8 -5
  35. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  36. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  38. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  39. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  40. data/include/grpc/slice.h +1 -12
  41. data/include/grpc/status.h +1 -1
  42. data/include/grpc/support/atm.h +1 -1
  43. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  44. data/include/grpc/support/atm_gcc_sync.h +1 -1
  45. data/include/grpc/support/atm_windows.h +1 -1
  46. data/include/grpc/support/log.h +1 -1
  47. data/include/grpc/support/port_platform.h +1 -1
  48. data/include/grpc/support/sync.h +1 -1
  49. data/include/grpc/support/sync_abseil.h +1 -1
  50. data/include/grpc/support/sync_custom.h +1 -1
  51. data/include/grpc/support/sync_generic.h +1 -1
  52. data/include/grpc/support/sync_posix.h +1 -1
  53. data/include/grpc/support/sync_windows.h +1 -1
  54. data/include/grpc/support/time.h +2 -2
  55. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  56. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  57. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  58. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  59. data/src/core/ext/filters/channel_idle/idle_filter_state.h +66 -0
  60. data/src/core/ext/filters/client_channel/backend_metric.cc +24 -27
  61. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  62. data/src/core/ext/filters/client_channel/backup_poller.cc +14 -9
  63. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  64. data/src/core/ext/filters/client_channel/channel_connectivity.cc +75 -94
  65. data/src/core/ext/filters/client_channel/client_channel.cc +532 -501
  66. data/src/core/ext/filters/client_channel/client_channel.h +115 -64
  67. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  68. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  69. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  70. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  71. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -24
  72. data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
  73. data/src/core/ext/filters/client_channel/config_selector.h +5 -6
  74. data/src/core/ext/filters/client_channel/connector.h +19 -19
  75. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -7
  76. data/src/core/ext/filters/client_channel/dynamic_filters.h +2 -2
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
  78. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -16
  79. data/src/core/ext/filters/client_channel/health/health_check_client.cc +128 -582
  80. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -159
  81. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +30 -34
  82. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  83. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  84. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  86. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  87. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -2
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -18
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +247 -150
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -4
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +4 -4
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +17 -18
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
  97. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +73 -39
  98. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +226 -181
  99. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +126 -79
  100. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2542 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +68 -62
  102. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +18 -13
  103. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +106 -71
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +119 -159
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +162 -77
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +29 -19
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +331 -488
  110. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  111. data/src/core/ext/filters/client_channel/lb_policy.h +115 -106
  112. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  113. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -7
  114. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +133 -0
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +296 -324
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +23 -12
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -18
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -55
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +153 -275
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +38 -25
  121. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  122. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +96 -254
  123. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +23 -20
  124. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  125. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +85 -69
  126. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  127. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  128. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +40 -39
  129. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +509 -439
  130. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -15
  131. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +13 -7
  132. data/src/core/ext/filters/client_channel/retry_filter.cc +282 -238
  133. data/src/core/ext/filters/client_channel/retry_service_config.cc +16 -18
  134. data/src/core/ext/filters/client_channel/retry_service_config.h +18 -12
  135. data/src/core/ext/filters/client_channel/retry_throttle.cc +14 -59
  136. data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
  137. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +51 -37
  138. data/src/core/ext/filters/client_channel/subchannel.cc +132 -197
  139. data/src/core/ext/filters/client_channel/subchannel.h +36 -56
  140. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  141. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  142. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  143. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  144. data/src/core/ext/filters/deadline/deadline_filter.cc +31 -33
  145. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  146. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +158 -401
  147. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  148. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -27
  149. data/src/core/ext/filters/fault_injection/service_config_parser.h +10 -4
  150. data/src/core/ext/filters/http/client/http_client_filter.cc +83 -548
  151. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  152. data/src/core/ext/filters/http/client_authority_filter.cc +39 -103
  153. data/src/core/ext/filters/http/client_authority_filter.h +24 -5
  154. data/src/core/ext/filters/http/http_filters_plugin.cc +55 -73
  155. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +49 -140
  156. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +22 -35
  157. data/src/core/ext/filters/http/server/http_server_filter.cc +64 -274
  158. data/src/core/ext/filters/message_size/message_size_filter.cc +49 -58
  159. data/src/core/ext/filters/message_size/message_size_filter.h +10 -3
  160. data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
  161. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  162. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  163. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  164. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +61 -0
  165. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  166. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
  167. data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → server_config_selector/server_config_selector_filter.h} +11 -6
  168. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  169. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +245 -12
  170. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +294 -95
  171. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -1
  172. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  173. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  174. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +368 -349
  175. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -4
  176. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  177. data/src/core/ext/transport/chttp2/transport/context_list.h +3 -5
  178. data/src/core/ext/transport/chttp2/transport/flow_control.cc +63 -44
  179. data/src/core/ext/transport/chttp2/transport/flow_control.h +18 -12
  180. data/src/core/ext/transport/chttp2/transport/frame_data.cc +11 -12
  181. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -0
  182. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -4
  183. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
  184. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +10 -9
  185. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -0
  186. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -8
  187. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -0
  188. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +40 -7
  189. data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -0
  190. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +12 -7
  191. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -0
  192. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  193. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +516 -749
  194. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +183 -71
  195. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  196. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +71 -0
  197. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +764 -1062
  198. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +75 -178
  199. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +239 -0
  200. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +115 -0
  201. data/src/core/ext/transport/chttp2/transport/internal.h +22 -48
  202. data/src/core/ext/transport/chttp2/transport/parsing.cc +61 -212
  203. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  204. data/src/core/ext/transport/chttp2/transport/varint.cc +7 -3
  205. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  206. data/src/core/ext/transport/chttp2/transport/writing.cc +125 -169
  207. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  208. data/src/core/ext/transport/inproc/inproc_transport.cc +132 -173
  209. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  210. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +248 -210
  215. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1382 -685
  216. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  217. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +151 -0
  218. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +124 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +102 -0
  224. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +97 -0
  226. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  227. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -0
  228. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  229. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +103 -0
  230. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  231. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +52 -1
  232. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  233. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +57 -18
  234. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +144 -117
  235. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +761 -386
  236. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +240 -200
  237. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1376 -667
  238. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +50 -29
  239. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +224 -95
  240. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +337 -255
  241. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1901 -790
  242. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
  243. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +50 -24
  244. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +61 -28
  245. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +280 -99
  246. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  247. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +75 -54
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +398 -190
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -8
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +53 -25
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +220 -171
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1224 -567
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +106 -46
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +561 -171
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +46 -24
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +17 -23
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +49 -95
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +151 -0
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +146 -118
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +853 -415
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +142 -92
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +797 -345
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +65 -31
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +205 -122
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1097 -393
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -5
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +36 -17
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +28 -14
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +97 -49
  274. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +83 -34
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +27 -14
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +101 -49
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -9
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +54 -26
  280. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -36
  281. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +214 -109
  282. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +92 -39
  283. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +449 -131
  284. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
  285. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +389 -188
  286. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
  287. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +42 -21
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +99 -72
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +541 -259
  290. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +105 -80
  291. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +610 -307
  292. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +32 -17
  293. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +112 -49
  294. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +25 -11
  295. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +79 -40
  296. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  297. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
  298. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +83 -62
  299. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +463 -235
  300. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +93 -60
  301. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +483 -214
  302. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +130 -100
  303. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +628 -282
  304. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +54 -35
  305. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +291 -142
  306. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +665 -567
  307. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3977 -1883
  308. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -20
  309. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +168 -72
  310. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
  311. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -0
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +88 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +103 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -14
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +91 -46
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +134 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +94 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +213 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  328. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  329. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +218 -0
  330. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  331. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +146 -0
  332. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +18 -5
  333. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +42 -24
  334. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +46 -29
  335. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +219 -112
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +52 -37
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +282 -134
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
  340. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +27 -14
  341. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +94 -43
  342. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +284 -225
  343. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1673 -738
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -1
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +7 -4
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +113 -54
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +621 -216
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +42 -27
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +176 -87
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +128 -83
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +673 -259
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +160 -0
  354. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
  355. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +29 -15
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +92 -73
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +516 -260
  358. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -18
  359. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +121 -62
  360. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  361. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +379 -186
  362. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  363. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +112 -0
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +35 -19
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +149 -81
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +214 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +116 -56
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -9
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +58 -31
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +56 -27
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +46 -24
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +36 -21
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +137 -69
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -18
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +137 -65
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +27 -13
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +99 -53
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +170 -83
  384. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
  385. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +273 -145
  386. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
  387. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +268 -132
  388. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  389. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +201 -0
  390. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
  391. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +4 -1
  392. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +139 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
  395. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +76 -36
  396. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
  397. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +118 -52
  398. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  399. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  400. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -7
  401. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -19
  402. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  403. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +127 -0
  404. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  405. data/src/core/ext/upb-generated/google/api/annotations.upb.h +24 -1
  406. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +155 -126
  407. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +791 -385
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +159 -127
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +869 -402
  410. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  411. data/src/core/ext/upb-generated/google/api/http.upb.h +236 -115
  412. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  413. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -0
  414. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  415. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +46 -22
  416. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -283
  417. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2263 -1053
  418. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  419. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +44 -20
  420. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  421. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +29 -15
  422. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  423. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +197 -93
  424. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  425. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +44 -20
  426. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  427. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +296 -149
  428. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  429. data/src/core/ext/upb-generated/google/rpc/status.upb.h +60 -30
  430. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  431. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +319 -0
  432. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  433. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +111 -48
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +136 -108
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +753 -365
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +28 -13
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +90 -41
  438. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  439. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +70 -35
  440. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  441. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +448 -232
  442. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  443. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +208 -0
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  446. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  447. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +213 -57
  448. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +32 -8
  449. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +62 -18
  450. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  451. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +17 -1
  452. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  453. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -20
  454. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +57 -18
  456. data/src/core/ext/upb-generated/validate/validate.upb.c +407 -311
  457. data/src/core/ext/upb-generated/validate/validate.upb.h +2904 -1200
  458. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  459. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +278 -0
  460. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +108 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +290 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  467. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +99 -0
  468. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +19 -6
  469. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +38 -19
  470. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +32 -18
  471. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +112 -55
  472. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +27 -13
  473. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +61 -30
  474. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  475. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +103 -0
  476. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +24 -11
  477. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +63 -30
  478. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +35 -21
  479. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +144 -70
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +24 -11
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +66 -30
  482. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  483. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +187 -0
  484. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  485. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -0
  486. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  487. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +143 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +218 -0
  490. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  491. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +103 -0
  492. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  493. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  494. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  495. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  513. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  514. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  515. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  516. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +22 -52
  517. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  518. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +250 -281
  519. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  520. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  521. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  522. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +445 -458
  523. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +80 -70
  524. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  525. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  528. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  530. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  531. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  532. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  533. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +121 -154
  535. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +75 -70
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -184
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +263 -252
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +20 -22
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  562. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  563. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  564. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +98 -83
  565. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +23 -13
  566. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  567. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  568. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  569. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  570. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +54 -62
  571. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +19 -19
  572. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  573. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +17 -21
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  578. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  581. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  582. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +40 -47
  583. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +30 -25
  584. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +38 -38
  587. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +10 -10
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +845 -913
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +160 -160
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  591. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  599. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  615. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  616. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  617. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  618. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  619. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  620. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +291 -311
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +173 -141
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +26 -16
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -211
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  636. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  637. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  638. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +19 -33
  639. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
  640. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  641. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  642. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +22 -32
  643. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  644. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  645. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  646. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  647. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  648. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  649. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  650. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +24 -27
  651. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  652. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  653. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  654. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  655. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +17 -23
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  666. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  667. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  668. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  669. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  670. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  671. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  673. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  674. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  675. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  677. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  686. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  687. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  688. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  689. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  690. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  691. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  692. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  693. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  694. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  695. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  697. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  698. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +107 -164
  699. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  700. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  701. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  702. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  703. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  704. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  705. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  706. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  709. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  710. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  711. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  713. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  714. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  715. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  716. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +10 -18
  717. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  718. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +24 -33
  719. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  720. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +9 -8
  721. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  722. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +10 -13
  723. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  724. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +10 -14
  725. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  726. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  727. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  728. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  729. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  730. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  731. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  732. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  733. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  734. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  735. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  736. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  737. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  738. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +18 -22
  739. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  740. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +32 -38
  741. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  742. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +20 -26
  743. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  744. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  745. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  746. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +23 -27
  747. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +39 -45
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +25 -29
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  752. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  753. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  754. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  755. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  756. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  757. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  758. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  759. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  760. data/src/core/ext/xds/certificate_provider_registry.cc +3 -3
  761. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  762. data/src/core/ext/xds/certificate_provider_store.h +10 -1
  763. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -4
  764. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  765. data/src/core/ext/xds/upb_utils.h +67 -0
  766. data/src/core/ext/xds/xds_api.cc +214 -3608
  767. data/src/core/ext/xds/xds_api.h +62 -580
  768. data/src/core/ext/xds/xds_bootstrap.cc +241 -167
  769. data/src/core/ext/xds/xds_bootstrap.h +43 -15
  770. data/src/core/ext/xds/xds_certificate_provider.cc +5 -3
  771. data/src/core/ext/xds/xds_certificate_provider.h +10 -2
  772. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  773. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  774. data/src/core/ext/xds/xds_client.cc +872 -899
  775. data/src/core/ext/xds/xds_client.h +132 -159
  776. data/src/core/ext/xds/xds_client_stats.cc +31 -30
  777. data/src/core/ext/xds/xds_client_stats.h +12 -11
  778. data/src/core/ext/xds/xds_cluster.cc +453 -0
  779. data/src/core/ext/xds/xds_cluster.h +108 -0
  780. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  781. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  782. data/src/core/ext/xds/xds_common_types.cc +388 -0
  783. data/src/core/ext/xds/xds_common_types.h +95 -0
  784. data/src/core/ext/xds/xds_endpoint.cc +371 -0
  785. data/src/core/ext/xds/xds_endpoint.h +135 -0
  786. data/src/core/ext/xds/xds_http_fault_filter.cc +11 -10
  787. data/src/core/ext/xds/xds_http_fault_filter.h +6 -5
  788. data/src/core/ext/xds/xds_http_filters.cc +12 -5
  789. data/src/core/ext/xds/xds_http_filters.h +4 -4
  790. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  791. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  792. data/src/core/ext/xds/xds_listener.cc +1039 -0
  793. data/src/core/ext/xds/xds_listener.h +220 -0
  794. data/src/core/{lib/transport/authority_override.h → ext/xds/xds_resource_type.cc} +11 -15
  795. data/src/core/ext/xds/xds_resource_type.h +98 -0
  796. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  797. data/src/core/ext/xds/xds_route_config.cc +1122 -0
  798. data/src/core/ext/xds/xds_route_config.h +218 -0
  799. data/src/core/ext/xds/xds_routing.cc +250 -0
  800. data/src/core/ext/xds/xds_routing.h +101 -0
  801. data/src/core/ext/xds/xds_server_config_fetcher.cc +1057 -289
  802. data/src/core/lib/address_utils/parse_address.cc +26 -8
  803. data/src/core/lib/address_utils/parse_address.h +5 -0
  804. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  805. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  806. data/src/core/lib/avl/avl.h +452 -88
  807. data/src/core/lib/backoff/backoff.cc +9 -38
  808. data/src/core/lib/backoff/backoff.h +11 -11
  809. data/src/core/lib/channel/call_finalization.h +86 -0
  810. data/src/core/lib/channel/call_tracer.h +4 -1
  811. data/src/core/lib/channel/channel_args.cc +173 -16
  812. data/src/core/lib/channel/channel_args.h +214 -1
  813. data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
  814. data/src/core/lib/channel/channel_args_preconditioning.h +61 -0
  815. data/src/core/lib/channel/channel_stack.cc +15 -6
  816. data/src/core/lib/channel/channel_stack.h +39 -6
  817. data/src/core/lib/channel/channel_stack_builder.cc +24 -283
  818. data/src/core/lib/channel/channel_stack_builder.h +118 -157
  819. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  820. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  821. data/src/core/lib/channel/channel_trace.cc +8 -10
  822. data/src/core/lib/channel/channel_trace.h +2 -1
  823. data/src/core/lib/channel/channelz.cc +44 -39
  824. data/src/core/lib/channel/channelz.h +29 -29
  825. data/src/core/lib/channel/channelz_registry.cc +8 -7
  826. data/src/core/lib/channel/channelz_registry.h +1 -1
  827. data/src/core/lib/channel/connected_channel.cc +10 -6
  828. data/src/core/lib/channel/connected_channel.h +2 -2
  829. data/src/core/lib/channel/context.h +11 -0
  830. data/src/core/lib/channel/handshaker.cc +3 -2
  831. data/src/core/lib/channel/handshaker.h +2 -3
  832. data/src/core/lib/channel/handshaker_factory.h +10 -2
  833. data/src/core/lib/channel/handshaker_registry.cc +15 -70
  834. data/src/core/lib/channel/handshaker_registry.h +29 -12
  835. data/src/core/lib/channel/promise_based_filter.cc +1002 -0
  836. data/src/core/lib/channel/promise_based_filter.h +437 -0
  837. data/src/core/lib/channel/status_util.h +2 -2
  838. data/src/core/lib/compression/compression.cc +22 -114
  839. data/src/core/lib/compression/compression_internal.cc +139 -207
  840. data/src/core/lib/compression/compression_internal.h +64 -69
  841. data/src/core/lib/compression/message_compress.cc +13 -13
  842. data/src/core/lib/compression/message_compress.h +2 -2
  843. data/src/core/lib/config/core_configuration.cc +104 -0
  844. data/src/core/lib/config/core_configuration.h +196 -0
  845. data/src/core/lib/debug/stats.cc +1 -1
  846. data/src/core/lib/debug/stats.h +1 -0
  847. data/src/core/lib/debug/stats_data.cc +17 -20
  848. data/src/core/lib/debug/stats_data.h +19 -21
  849. data/src/core/lib/debug/trace.cc +1 -0
  850. data/src/core/lib/debug/trace.h +4 -3
  851. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -2
  852. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  853. data/src/core/lib/{iomgr/event_engine/iomgr.h → event_engine/default_event_engine_factory.cc} +11 -8
  854. data/src/core/lib/event_engine/event_engine.cc +21 -19
  855. data/src/core/lib/event_engine/event_engine_factory.h +36 -0
  856. data/src/core/lib/event_engine/memory_allocator.cc +66 -0
  857. data/src/core/lib/event_engine/resolved_address.cc +39 -0
  858. data/src/core/lib/event_engine/sockaddr.cc +3 -3
  859. data/src/core/lib/gpr/alloc.cc +4 -3
  860. data/src/core/lib/gpr/atm.cc +1 -1
  861. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  862. data/src/core/lib/gpr/env_linux.cc +1 -2
  863. data/src/core/lib/gpr/env_posix.cc +2 -3
  864. data/src/core/lib/gpr/log.cc +3 -3
  865. data/src/core/lib/gpr/log_android.cc +3 -2
  866. data/src/core/lib/gpr/log_linux.cc +7 -4
  867. data/src/core/lib/gpr/log_posix.cc +6 -3
  868. data/src/core/lib/gpr/string.cc +2 -2
  869. data/src/core/lib/gpr/string.h +2 -2
  870. data/src/core/lib/gpr/sync.cc +2 -2
  871. data/src/core/lib/gpr/sync_abseil.cc +7 -6
  872. data/src/core/lib/gpr/sync_posix.cc +4 -3
  873. data/src/core/lib/gpr/time.cc +5 -3
  874. data/src/core/lib/gpr/time_windows.cc +3 -2
  875. data/src/core/lib/gpr/tls.h +126 -40
  876. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  877. data/src/core/lib/gpr/useful.h +97 -32
  878. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  879. data/src/core/lib/gprpp/bitset.h +207 -0
  880. data/src/core/lib/gprpp/capture.h +76 -0
  881. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  882. data/src/core/lib/{transport/authority_override.cc → gprpp/construct_destruct.h} +16 -17
  883. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  884. data/src/core/lib/gprpp/debug_location.h +2 -0
  885. data/src/core/lib/gprpp/dual_ref_counted.h +25 -26
  886. data/src/core/lib/gprpp/fork.cc +14 -12
  887. data/src/core/lib/gprpp/fork.h +4 -4
  888. data/src/core/lib/gprpp/global_config.h +1 -2
  889. data/src/core/lib/gprpp/global_config_env.cc +14 -14
  890. data/src/core/lib/gprpp/global_config_env.h +2 -2
  891. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  892. data/src/core/lib/gprpp/manual_constructor.h +10 -8
  893. data/src/core/lib/gprpp/match.h +73 -0
  894. data/src/core/lib/gprpp/memory.h +9 -3
  895. data/src/core/lib/gprpp/mpscq.cc +7 -7
  896. data/src/core/lib/gprpp/mpscq.h +6 -5
  897. data/src/core/lib/gprpp/orphanable.h +4 -4
  898. data/src/core/lib/gprpp/overload.h +59 -0
  899. data/src/core/lib/gprpp/ref_counted.h +21 -19
  900. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  901. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  902. data/src/core/lib/gprpp/status_helper.cc +65 -37
  903. data/src/core/lib/gprpp/status_helper.h +14 -16
  904. data/src/core/lib/gprpp/sync.h +3 -1
  905. data/src/core/lib/gprpp/table.h +434 -0
  906. data/src/core/lib/gprpp/thd_posix.cc +5 -5
  907. data/src/core/lib/gprpp/thd_windows.cc +4 -11
  908. data/src/core/lib/gprpp/time.cc +198 -0
  909. data/src/core/lib/gprpp/time.h +292 -0
  910. data/src/core/lib/gprpp/time_util.cc +2 -2
  911. data/src/core/lib/gprpp/time_util.h +2 -2
  912. data/src/core/lib/http/format_request.cc +29 -25
  913. data/src/core/lib/http/format_request.h +8 -6
  914. data/src/core/lib/http/httpcli.cc +298 -208
  915. data/src/core/lib/http/httpcli.h +183 -85
  916. data/src/core/lib/http/httpcli_security_connector.cc +67 -81
  917. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  918. data/src/core/lib/http/parser.cc +82 -11
  919. data/src/core/lib/http/parser.h +16 -2
  920. data/src/core/lib/iomgr/buffer_list.cc +11 -10
  921. data/src/core/lib/iomgr/buffer_list.h +19 -20
  922. data/src/core/lib/iomgr/call_combiner.cc +45 -16
  923. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  924. data/src/core/lib/iomgr/closure.h +29 -9
  925. data/src/core/lib/iomgr/combiner.cc +34 -26
  926. data/src/core/lib/iomgr/combiner.h +1 -0
  927. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  928. data/src/core/lib/iomgr/endpoint.cc +0 -4
  929. data/src/core/lib/iomgr/endpoint.h +1 -4
  930. data/src/core/lib/iomgr/endpoint_cfstream.cc +15 -42
  931. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  932. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  933. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +1 -2
  934. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -9
  935. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  936. data/src/core/lib/iomgr/error.cc +123 -59
  937. data/src/core/lib/iomgr/error.h +73 -20
  938. data/src/core/lib/iomgr/error_cfstream.cc +7 -2
  939. data/src/core/lib/iomgr/error_internal.h +1 -0
  940. data/src/core/lib/iomgr/ev_apple.cc +6 -5
  941. data/src/core/lib/iomgr/ev_epoll1_linux.cc +25 -31
  942. data/src/core/lib/iomgr/ev_poll_posix.cc +49 -52
  943. data/src/core/lib/iomgr/ev_posix.cc +10 -12
  944. data/src/core/lib/iomgr/ev_posix.h +1 -1
  945. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  946. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  947. data/src/core/lib/iomgr/event_engine/endpoint.cc +7 -27
  948. data/src/core/lib/iomgr/event_engine/endpoint.h +1 -2
  949. data/src/core/lib/iomgr/event_engine/iomgr.cc +10 -30
  950. data/src/core/lib/iomgr/event_engine/pollset.cc +6 -6
  951. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  952. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  953. data/src/core/lib/iomgr/event_engine/resolver.cc +70 -47
  954. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  955. data/src/core/lib/iomgr/event_engine/tcp.cc +70 -37
  956. data/src/core/lib/iomgr/event_engine/timer.cc +13 -8
  957. data/src/core/lib/iomgr/exec_ctx.cc +28 -109
  958. data/src/core/lib/iomgr/exec_ctx.h +28 -52
  959. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  960. data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
  961. data/src/core/lib/iomgr/executor/threadpool.cc +2 -2
  962. data/src/core/lib/iomgr/executor/threadpool.h +2 -1
  963. data/src/core/lib/iomgr/executor.cc +30 -39
  964. data/src/core/lib/iomgr/executor.h +1 -1
  965. data/src/core/lib/iomgr/fork_posix.cc +2 -1
  966. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  967. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  968. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  969. data/src/core/lib/iomgr/iocp_windows.cc +10 -9
  970. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  971. data/src/core/lib/iomgr/iomgr.cc +3 -1
  972. data/src/core/lib/iomgr/iomgr.h +2 -2
  973. data/src/core/lib/iomgr/iomgr_internal.cc +6 -10
  974. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  975. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  976. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  977. data/src/core/lib/iomgr/iomgr_windows.cc +3 -4
  978. data/src/core/lib/iomgr/load_file.cc +2 -2
  979. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  980. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  981. data/src/core/lib/iomgr/polling_entity.h +6 -0
  982. data/src/core/lib/iomgr/pollset.cc +1 -1
  983. data/src/core/lib/iomgr/pollset.h +4 -4
  984. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  985. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  986. data/src/core/lib/iomgr/port.h +6 -16
  987. data/src/core/lib/iomgr/python_util.h +1 -0
  988. data/src/core/lib/iomgr/resolve_address.cc +7 -25
  989. data/src/core/lib/iomgr/resolve_address.h +47 -48
  990. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  991. data/src/core/lib/iomgr/resolve_address_posix.cc +90 -78
  992. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  993. data/src/core/lib/iomgr/resolve_address_windows.cc +99 -82
  994. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  995. data/src/core/lib/iomgr/resolved_address.h +39 -0
  996. data/src/core/lib/iomgr/sockaddr.h +1 -1
  997. data/src/core/lib/iomgr/{socket_utils_uv.cc → sockaddr_utils_posix.cc} +21 -8
  998. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  999. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  1000. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  1001. data/src/core/lib/iomgr/socket_mutator.h +2 -2
  1002. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -22
  1003. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  1004. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  1005. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  1006. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  1007. data/src/core/lib/iomgr/tcp_client.cc +1 -1
  1008. data/src/core/lib/iomgr/tcp_client.h +5 -2
  1009. data/src/core/lib/iomgr/tcp_client_cfstream.cc +8 -24
  1010. data/src/core/lib/iomgr/tcp_client_posix.cc +17 -27
  1011. data/src/core/lib/iomgr/tcp_client_posix.h +4 -2
  1012. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -10
  1013. data/src/core/lib/iomgr/tcp_posix.cc +143 -120
  1014. data/src/core/lib/iomgr/tcp_posix.h +9 -12
  1015. data/src/core/lib/iomgr/tcp_server.h +4 -3
  1016. data/src/core/lib/iomgr/tcp_server_posix.cc +40 -29
  1017. data/src/core/lib/iomgr/tcp_server_utils_posix.h +21 -17
  1018. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -2
  1019. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
  1020. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  1021. data/src/core/lib/iomgr/tcp_server_windows.cc +6 -10
  1022. data/src/core/lib/iomgr/tcp_windows.cc +22 -39
  1023. data/src/core/lib/iomgr/tcp_windows.h +1 -1
  1024. data/src/core/lib/iomgr/timer.cc +3 -2
  1025. data/src/core/lib/iomgr/timer.h +11 -7
  1026. data/src/core/lib/iomgr/timer_generic.cc +113 -124
  1027. data/src/core/lib/iomgr/timer_generic.h +1 -0
  1028. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1029. data/src/core/lib/iomgr/timer_manager.cc +15 -14
  1030. data/src/core/lib/iomgr/unix_sockets_posix.cc +25 -39
  1031. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -10
  1032. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1033. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -0
  1034. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -3
  1035. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -0
  1036. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  1037. data/src/core/lib/iomgr/work_serializer.h +17 -5
  1038. data/src/core/lib/json/json_reader.cc +92 -52
  1039. data/src/core/lib/json/json_util.cc +71 -3
  1040. data/src/core/lib/json/json_util.h +67 -117
  1041. data/src/core/lib/json/json_writer.cc +0 -3
  1042. data/src/core/lib/matchers/matchers.cc +1 -1
  1043. data/src/core/lib/matchers/matchers.h +0 -1
  1044. data/src/core/lib/profiling/basic_timers.cc +8 -6
  1045. data/src/core/lib/profiling/stap_timers.cc +2 -2
  1046. data/src/core/lib/promise/activity.cc +121 -0
  1047. data/src/core/lib/promise/activity.h +540 -0
  1048. data/src/core/lib/promise/arena_promise.h +188 -0
  1049. data/src/core/lib/promise/call_push_pull.h +144 -0
  1050. data/src/core/lib/promise/context.h +86 -0
  1051. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1052. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  1053. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1054. data/src/core/lib/promise/detail/status.h +50 -0
  1055. data/src/core/lib/promise/detail/switch.h +1455 -0
  1056. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1057. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1058. data/src/core/lib/promise/latch.h +104 -0
  1059. data/src/core/lib/promise/loop.h +134 -0
  1060. data/src/core/lib/promise/map.h +88 -0
  1061. data/src/core/lib/promise/poll.h +66 -0
  1062. data/src/core/lib/promise/promise.h +95 -0
  1063. data/src/core/lib/promise/race.h +84 -0
  1064. data/src/core/lib/promise/seq.h +89 -0
  1065. data/src/core/lib/promise/sleep.cc +74 -0
  1066. data/src/core/lib/promise/sleep.h +66 -0
  1067. data/src/core/lib/promise/try_seq.h +157 -0
  1068. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  1069. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  1070. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -29
  1071. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1072. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1073. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  1074. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  1075. data/src/core/lib/resource_quota/api.cc +83 -0
  1076. data/src/core/lib/resource_quota/api.h +40 -0
  1077. data/src/core/lib/{gprpp → resource_quota}/arena.cc +18 -14
  1078. data/src/core/lib/{gprpp → resource_quota}/arena.h +37 -16
  1079. data/src/core/lib/resource_quota/memory_quota.cc +478 -0
  1080. data/src/core/lib/resource_quota/memory_quota.h +457 -0
  1081. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1082. data/src/core/lib/resource_quota/resource_quota.h +66 -0
  1083. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  1084. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  1085. data/src/core/lib/resource_quota/trace.cc +19 -0
  1086. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
  1087. data/src/core/lib/security/authorization/authorization_policy_provider.h +12 -4
  1088. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  1089. data/src/core/lib/security/authorization/evaluate_args.cc +39 -36
  1090. data/src/core/lib/security/authorization/evaluate_args.h +3 -2
  1091. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1092. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1093. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +106 -0
  1094. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -0
  1095. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1096. data/src/core/lib/security/authorization/matchers.h +211 -0
  1097. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1098. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1099. data/src/core/lib/security/context/security_context.cc +15 -10
  1100. data/src/core/lib/security/context/security_context.h +9 -2
  1101. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  1102. data/src/core/lib/security/credentials/alts/alts_credentials.h +10 -0
  1103. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  1104. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  1105. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  1106. data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
  1107. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1108. data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
  1109. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1110. data/src/core/lib/security/credentials/composite/composite_credentials.cc +28 -86
  1111. data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -10
  1112. data/src/core/lib/security/credentials/credentials.cc +11 -10
  1113. data/src/core/lib/security/credentials/credentials.h +81 -82
  1114. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +61 -59
  1115. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  1116. data/src/core/lib/security/credentials/external/aws_request_signer.cc +3 -3
  1117. data/src/core/lib/security/credentials/external/external_account_credentials.cc +112 -68
  1118. data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -9
  1119. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +0 -1
  1120. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +35 -18
  1121. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -0
  1122. data/src/core/lib/security/credentials/fake/fake_credentials.cc +23 -27
  1123. data/src/core/lib/security/credentials/fake/fake_credentials.h +22 -21
  1124. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  1125. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +77 -20
  1126. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -3
  1127. data/src/core/lib/security/credentials/iam/iam_credentials.cc +23 -29
  1128. data/src/core/lib/security/credentials/iam/iam_credentials.h +15 -9
  1129. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +25 -26
  1130. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  1131. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -7
  1132. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  1133. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +56 -51
  1134. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +27 -15
  1135. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +59 -54
  1136. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
  1137. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  1138. data/src/core/lib/security/credentials/local/local_credentials.h +10 -0
  1139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +160 -181
  1140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +61 -33
  1141. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +98 -156
  1142. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +56 -27
  1143. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -18
  1144. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +14 -4
  1145. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +3 -2
  1146. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +10 -6
  1147. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -13
  1148. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +62 -12
  1149. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +209 -0
  1150. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +145 -0
  1151. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +33 -87
  1152. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +75 -151
  1153. data/src/core/lib/security/credentials/tls/tls_credentials.cc +30 -16
  1154. data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
  1155. data/src/core/lib/security/credentials/xds/xds_credentials.cc +51 -58
  1156. data/src/core/lib/security/credentials/xds/xds_credentials.h +37 -6
  1157. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +11 -17
  1158. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  1159. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -24
  1160. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
  1161. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +8 -18
  1162. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -16
  1163. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1164. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +4 -5
  1165. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -19
  1166. data/src/core/lib/security/security_connector/security_connector.cc +8 -15
  1167. data/src/core/lib/security/security_connector/security_connector.h +26 -22
  1168. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +14 -20
  1169. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
  1170. data/src/core/lib/security/security_connector/ssl_utils.cc +41 -36
  1171. data/src/core/lib/security/security_connector/ssl_utils.h +14 -18
  1172. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +366 -211
  1173. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +69 -48
  1174. data/src/core/lib/security/transport/auth_filters.h +39 -5
  1175. data/src/core/lib/security/transport/client_auth_filter.cc +98 -363
  1176. data/src/core/lib/security/transport/secure_endpoint.cc +202 -143
  1177. data/src/core/lib/security/transport/secure_endpoint.h +2 -1
  1178. data/src/core/lib/security/transport/security_handshaker.cc +95 -54
  1179. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  1180. data/src/core/lib/security/transport/server_auth_filter.cc +41 -37
  1181. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  1182. data/src/core/lib/security/util/json_util.cc +6 -8
  1183. data/src/core/lib/service_config/service_config.h +82 -0
  1184. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  1185. data/src/core/{ext/filters/client_channel/service_config.cc → lib/service_config/service_config_impl.cc} +20 -17
  1186. data/src/core/{ext/filters/client_channel/service_config.h → lib/service_config/service_config_impl.h} +16 -18
  1187. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +31 -27
  1188. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.h +39 -28
  1189. data/src/core/lib/slice/percent_encoding.cc +84 -97
  1190. data/src/core/lib/slice/percent_encoding.h +23 -28
  1191. data/src/core/lib/slice/slice.cc +80 -200
  1192. data/src/core/lib/slice/slice.h +384 -0
  1193. data/src/core/lib/{iomgr/is_epollexclusive_available.h → slice/slice_api.cc} +15 -12
  1194. data/src/core/lib/slice/slice_buffer.cc +10 -7
  1195. data/src/core/lib/slice/slice_internal.h +15 -277
  1196. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1197. data/src/core/lib/slice/slice_refcount.h +46 -0
  1198. data/src/core/lib/slice/slice_refcount_base.h +61 -0
  1199. data/src/core/lib/slice/slice_split.cc +100 -0
  1200. data/src/core/lib/slice/slice_split.h +40 -0
  1201. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  1202. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  1203. data/src/core/lib/surface/api_trace.cc +2 -1
  1204. data/src/core/lib/surface/api_trace.h +1 -0
  1205. data/src/core/lib/surface/builtins.cc +49 -0
  1206. data/src/core/lib/surface/builtins.h +26 -0
  1207. data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
  1208. data/src/core/lib/surface/call.cc +1142 -1247
  1209. data/src/core/lib/surface/call.h +8 -28
  1210. data/src/core/lib/surface/call_details.cc +2 -2
  1211. data/src/core/lib/surface/call_log_batch.cc +2 -2
  1212. data/src/core/lib/surface/channel.cc +72 -103
  1213. data/src/core/lib/surface/channel.h +15 -23
  1214. data/src/core/lib/surface/channel_init.cc +22 -76
  1215. data/src/core/lib/surface/channel_init.h +44 -40
  1216. data/src/core/lib/surface/channel_ping.cc +1 -2
  1217. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  1218. data/src/core/lib/surface/completion_queue.cc +70 -78
  1219. data/src/core/lib/surface/completion_queue_factory.cc +2 -1
  1220. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  1221. data/src/core/lib/surface/event_string.cc +1 -0
  1222. data/src/core/lib/surface/init.cc +81 -57
  1223. data/src/core/lib/surface/init.h +0 -3
  1224. data/src/core/lib/surface/lame_client.cc +47 -32
  1225. data/src/core/lib/surface/lame_client.h +1 -1
  1226. data/src/core/lib/surface/metadata_array.cc +2 -2
  1227. data/src/core/lib/surface/server.cc +71 -118
  1228. data/src/core/lib/surface/server.h +40 -37
  1229. data/src/core/lib/surface/validate_metadata.cc +49 -18
  1230. data/src/core/lib/surface/version.cc +2 -2
  1231. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1232. data/src/core/lib/transport/bdp_estimator.h +2 -2
  1233. data/src/core/lib/transport/byte_stream.cc +6 -0
  1234. data/src/core/lib/transport/byte_stream.h +1 -0
  1235. data/src/core/lib/transport/connectivity_state.cc +8 -5
  1236. data/src/core/lib/transport/connectivity_state.h +2 -2
  1237. data/src/core/lib/transport/error_utils.cc +48 -20
  1238. data/src/core/lib/transport/error_utils.h +3 -2
  1239. data/src/core/lib/transport/metadata_batch.h +1352 -171
  1240. data/src/core/lib/transport/parsed_metadata.cc +37 -0
  1241. data/src/core/lib/transport/parsed_metadata.h +401 -0
  1242. data/src/core/lib/transport/pid_controller.cc +4 -4
  1243. data/src/core/lib/transport/status_conversion.cc +2 -2
  1244. data/src/core/lib/transport/status_conversion.h +1 -1
  1245. data/src/core/lib/transport/timeout_encoding.cc +204 -67
  1246. data/src/core/lib/transport/timeout_encoding.h +40 -10
  1247. data/src/core/lib/transport/transport.cc +11 -32
  1248. data/src/core/lib/transport/transport.h +103 -4
  1249. data/src/core/lib/transport/transport_impl.h +14 -0
  1250. data/src/core/lib/transport/transport_op_string.cc +7 -29
  1251. data/src/core/lib/uri/uri_parser.cc +237 -63
  1252. data/src/core/lib/uri/uri_parser.h +39 -23
  1253. data/src/core/plugin_registry/grpc_plugin_registry.cc +69 -102
  1254. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1255. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  1256. data/src/core/tsi/alts/crypt/gsec.h +2 -3
  1257. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1258. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  1259. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -27
  1260. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  1261. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1262. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +33 -15
  1263. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1264. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1265. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1266. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1267. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1268. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1269. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  1270. data/src/core/tsi/fake_transport_security.cc +15 -7
  1271. data/src/core/tsi/local_transport_security.cc +42 -87
  1272. data/src/core/tsi/local_transport_security.h +1 -4
  1273. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1274. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1275. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  1276. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -53
  1277. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  1278. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1279. data/src/core/tsi/ssl_transport_security.cc +229 -62
  1280. data/src/core/tsi/ssl_transport_security.h +50 -9
  1281. data/src/core/tsi/transport_security.cc +15 -3
  1282. data/src/core/tsi/transport_security.h +16 -1
  1283. data/src/core/tsi/transport_security_grpc.h +1 -0
  1284. data/src/core/tsi/transport_security_interface.h +28 -0
  1285. data/src/ruby/ext/grpc/extconf.rb +21 -11
  1286. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1287. data/src/ruby/ext/grpc/rb_call.c +5 -5
  1288. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1289. data/src/ruby/ext/grpc/rb_channel.c +15 -10
  1290. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1291. data/src/ruby/ext/grpc/rb_channel_credentials.c +4 -4
  1292. data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -0
  1293. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1294. data/src/ruby/ext/grpc/rb_compression_options.c +5 -4
  1295. data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
  1296. data/src/ruby/ext/grpc/rb_grpc.c +5 -4
  1297. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1298. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +30 -34
  1299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +45 -51
  1300. data/src/ruby/ext/grpc/rb_server.c +13 -9
  1301. data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
  1302. data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
  1303. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +8 -5
  1304. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +3 -1
  1305. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +6 -5
  1306. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +3 -1
  1307. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1308. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1309. data/src/ruby/lib/grpc/version.rb +1 -1
  1310. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1311. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1312. data/src/ruby/pb/test/client.rb +769 -0
  1313. data/src/ruby/pb/test/server.rb +252 -0
  1314. data/src/ruby/pb/test/xds_client.rb +415 -0
  1315. data/src/ruby/spec/client_server_spec.rb +1 -1
  1316. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  1317. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  1318. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  1319. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1320. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1321. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  1322. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1323. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  1324. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  1325. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
  1326. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  1327. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  1328. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1329. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  1330. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  1331. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1332. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  1333. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  1334. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  1335. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1336. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  1337. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  1338. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1339. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  1340. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  1341. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  1342. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1343. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1344. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  1345. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1346. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  1347. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1348. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  1349. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  1350. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1351. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  1352. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  1353. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1354. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  1355. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  1356. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  1357. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1358. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1359. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  1360. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  1361. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1362. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1363. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1364. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1365. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1366. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1367. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1368. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1369. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1370. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1371. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1372. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1373. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1374. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1375. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1376. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1377. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1378. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1379. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1380. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1381. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1382. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1383. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1384. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1385. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1386. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1387. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1388. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1389. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1390. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1391. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1392. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1393. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1394. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1395. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1396. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1397. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1398. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1399. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1400. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1401. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1402. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1403. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1404. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1405. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1406. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1407. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1408. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1409. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1410. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1411. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  1412. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  1413. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  1414. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1415. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  1416. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1417. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1418. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  1419. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  1420. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1421. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  1422. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  1423. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1424. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1425. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1426. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1427. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1428. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1429. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1430. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1431. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  1432. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  1433. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1434. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1435. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1436. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1437. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1438. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1439. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1440. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1441. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1442. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1443. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1444. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1445. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  1446. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1447. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  1448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1449. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  1450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1451. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  1452. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1453. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  1454. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  1455. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1456. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1457. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1458. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  1459. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1460. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  1461. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1462. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1463. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  1464. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  1465. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1466. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1467. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1468. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1469. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1470. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1471. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1472. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1473. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  1474. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1475. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1476. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  1477. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1478. data/third_party/boringssl-with-bazel/err_data.c +685 -673
  1479. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +67 -54
  1480. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  1481. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1482. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1483. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1484. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +55 -37
  1485. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1486. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
  1487. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1488. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
  1489. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  1490. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -40
  1491. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1492. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1493. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1494. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1495. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1496. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1497. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_locl.h → internal.h} +86 -1
  1498. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +57 -281
  1499. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +291 -199
  1500. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +9 -9
  1501. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -14
  1502. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1503. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -1
  1504. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1505. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1506. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1507. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1508. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1509. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1510. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1511. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1512. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1513. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1514. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1515. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  1516. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1517. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  1518. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1519. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +6 -3
  1520. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1521. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1522. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +26 -9
  1524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  1526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  1529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  1532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  1534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  1535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +5 -9
  1537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +2 -2
  1538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +4 -6
  1539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  1540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  1541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  1543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  1544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  1545. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +36 -2
  1546. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1547. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1548. data/third_party/boringssl-with-bazel/src/crypto/internal.h +62 -2
  1549. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1550. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1551. data/third_party/boringssl-with-bazel/src/crypto/mem.c +32 -9
  1552. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +7 -3
  1553. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1554. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1555. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1556. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1557. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1558. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1559. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  1560. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  1561. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1562. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1563. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +2 -2
  1564. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +1 -1
  1565. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1566. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  1567. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1568. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1569. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1570. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1571. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1572. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
  1573. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1574. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1575. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1576. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +233 -4
  1577. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1578. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +15 -4
  1579. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
  1580. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  1581. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  1582. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +6 -23
  1583. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +2 -2
  1584. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1585. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  1586. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +25 -22
  1587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -54
  1588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  1589. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +1 -0
  1590. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  1591. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +1 -3
  1592. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  1593. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +9 -11
  1594. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1595. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
  1596. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +12 -11
  1597. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +232 -11
  1598. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  1599. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
  1600. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1601. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  1602. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1603. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  1604. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  1605. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +18 -8
  1606. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  1607. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +1 -0
  1608. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -7
  1609. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1610. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  1611. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +23 -4
  1612. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1613. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1614. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
  1615. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  1616. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +76 -31
  1617. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1504 -561
  1618. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -12
  1619. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -6
  1620. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1621. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  1622. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1623. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  1624. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -3
  1625. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1626. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1627. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +3 -0
  1628. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1629. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1630. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1631. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +35 -55
  1632. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1633. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +26 -1
  1634. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1635. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1636. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1637. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +5 -4
  1638. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  1639. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +24 -18
  1640. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1641. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1642. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +29 -28
  1643. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  1644. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +110 -26
  1645. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  1646. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +725 -189
  1647. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  1648. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -16
  1649. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +9 -16
  1650. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +310 -359
  1651. data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +110 -159
  1652. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +24 -13
  1653. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +145 -142
  1654. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +106 -99
  1655. data/third_party/boringssl-with-bazel/src/ssl/internal.h +90 -51
  1656. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +1 -2
  1657. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  1658. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +11 -5
  1659. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -51
  1660. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +121 -65
  1661. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  1662. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1663. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1664. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  1665. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +210 -212
  1666. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  1667. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +48 -34
  1668. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1669. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1670. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1671. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1672. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1673. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1674. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1675. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1676. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1677. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1678. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1679. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1680. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1681. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1682. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1683. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1684. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1685. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1686. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1687. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1688. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1689. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1690. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1691. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1692. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1693. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1694. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1695. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1696. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1697. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1698. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1699. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1700. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1701. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1702. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1703. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1704. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1705. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1706. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1707. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1708. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1709. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1710. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1711. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1712. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1713. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1714. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1715. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1716. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1717. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1718. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1719. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1720. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1721. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1722. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1723. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1724. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1725. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1726. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1727. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1728. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1729. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1730. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1731. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1732. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1733. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1734. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1735. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1736. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1737. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1738. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1739. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1740. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1741. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1742. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1743. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1744. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1745. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1746. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1747. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1748. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1749. data/third_party/re2/re2/compile.cc +91 -109
  1750. data/third_party/re2/re2/dfa.cc +27 -39
  1751. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1752. data/third_party/re2/re2/filtered_re2.h +10 -5
  1753. data/third_party/re2/re2/nfa.cc +1 -1
  1754. data/third_party/re2/re2/parse.cc +42 -23
  1755. data/third_party/re2/re2/perl_groups.cc +34 -34
  1756. data/third_party/re2/re2/prefilter.cc +3 -2
  1757. data/third_party/re2/re2/prog.cc +182 -4
  1758. data/third_party/re2/re2/prog.h +28 -9
  1759. data/third_party/re2/re2/re2.cc +87 -118
  1760. data/third_party/re2/re2/re2.h +156 -141
  1761. data/third_party/re2/re2/regexp.cc +12 -5
  1762. data/third_party/re2/re2/regexp.h +8 -2
  1763. data/third_party/re2/re2/set.cc +31 -9
  1764. data/third_party/re2/re2/set.h +9 -4
  1765. data/third_party/re2/re2/simplify.cc +11 -3
  1766. data/third_party/re2/re2/tostring.cc +1 -1
  1767. data/third_party/re2/re2/walker-inl.h +1 -1
  1768. data/third_party/re2/util/mutex.h +2 -2
  1769. data/third_party/re2/util/pcre.h +3 -3
  1770. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1771. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1772. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1773. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1774. data/third_party/upb/upb/decode.c +774 -351
  1775. data/third_party/upb/upb/decode.h +66 -12
  1776. data/third_party/upb/upb/decode_fast.c +596 -581
  1777. data/third_party/upb/upb/decode_fast.h +40 -13
  1778. data/third_party/upb/upb/decode_internal.h +211 -0
  1779. data/third_party/upb/upb/def.c +2151 -1068
  1780. data/third_party/upb/upb/def.h +352 -258
  1781. data/third_party/upb/upb/def.hpp +160 -161
  1782. data/third_party/upb/upb/encode.c +291 -165
  1783. data/third_party/upb/upb/encode.h +38 -13
  1784. data/third_party/upb/upb/json_encode.c +776 -0
  1785. data/third_party/upb/upb/json_encode.h +62 -0
  1786. data/third_party/upb/upb/msg.c +274 -102
  1787. data/third_party/upb/upb/msg.h +83 -582
  1788. data/third_party/upb/upb/msg_internal.h +831 -0
  1789. data/third_party/upb/upb/port_def.inc +93 -24
  1790. data/third_party/upb/upb/port_undef.inc +39 -1
  1791. data/third_party/upb/upb/reflection.c +312 -240
  1792. data/third_party/upb/upb/reflection.h +119 -67
  1793. data/third_party/upb/upb/reflection.hpp +37 -0
  1794. data/third_party/upb/upb/table.c +406 -197
  1795. data/third_party/upb/upb/table_internal.h +385 -0
  1796. data/third_party/upb/upb/text_encode.c +141 -90
  1797. data/third_party/upb/upb/text_encode.h +31 -5
  1798. data/third_party/upb/upb/upb.c +164 -66
  1799. data/third_party/upb/upb/upb.h +182 -146
  1800. data/third_party/upb/upb/upb.hpp +50 -23
  1801. data/third_party/upb/upb/upb_internal.h +68 -0
  1802. data/third_party/xxhash/xxhash.h +607 -352
  1803. data/third_party/zlib/crc32.c +966 -292
  1804. data/third_party/zlib/crc32.h +9441 -436
  1805. data/third_party/zlib/deflate.c +78 -30
  1806. data/third_party/zlib/deflate.h +12 -15
  1807. data/third_party/zlib/gzguts.h +3 -2
  1808. data/third_party/zlib/gzlib.c +5 -3
  1809. data/third_party/zlib/gzread.c +5 -7
  1810. data/third_party/zlib/gzwrite.c +25 -13
  1811. data/third_party/zlib/infback.c +2 -1
  1812. data/third_party/zlib/inffast.c +14 -14
  1813. data/third_party/zlib/inflate.c +39 -8
  1814. data/third_party/zlib/inflate.h +3 -2
  1815. data/third_party/zlib/inftrees.c +3 -3
  1816. data/third_party/zlib/trees.c +27 -48
  1817. data/third_party/zlib/zlib.h +123 -100
  1818. data/third_party/zlib/zutil.c +2 -2
  1819. data/third_party/zlib/zutil.h +12 -9
  1820. metadata +559 -260
  1821. data/include/grpc/event_engine/slice_allocator.h +0 -66
  1822. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1823. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -84
  1824. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  1825. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  1826. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
  1827. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1828. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  1829. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -441
  1830. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -562
  1831. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  1832. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1833. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1834. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1835. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1836. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -125
  1837. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -91
  1838. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -213
  1839. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -54
  1840. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -77
  1841. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -129
  1842. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1843. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -66
  1844. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  1845. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -243
  1846. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  1847. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1848. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1849. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1850. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -56
  1851. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1852. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -56
  1853. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1854. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -56
  1855. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1856. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -56
  1857. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1858. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -56
  1859. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1860. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -124
  1861. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1862. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -77
  1863. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1864. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1865. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1866. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1867. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1868. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1869. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1870. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1871. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1872. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1873. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1874. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1875. data/src/core/lib/avl/avl.cc +0 -306
  1876. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  1877. data/src/core/lib/compression/compression_args.cc +0 -135
  1878. data/src/core/lib/compression/compression_args.h +0 -56
  1879. data/src/core/lib/compression/stream_compression.cc +0 -80
  1880. data/src/core/lib/compression/stream_compression.h +0 -116
  1881. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  1882. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1883. data/src/core/lib/compression/stream_compression_identity.cc +0 -90
  1884. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1885. data/src/core/lib/gpr/tls_gcc.h +0 -52
  1886. data/src/core/lib/gpr/tls_msvc.h +0 -54
  1887. data/src/core/lib/gpr/tls_pthread.cc +0 -30
  1888. data/src/core/lib/gpr/tls_pthread.h +0 -56
  1889. data/src/core/lib/gpr/tls_stdcpp.h +0 -48
  1890. data/src/core/lib/gprpp/atomic.h +0 -104
  1891. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  1892. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1661
  1893. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1894. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1895. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1896. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  1897. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1898. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  1899. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1900. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  1901. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1902. data/src/core/lib/iomgr/pollset_uv.cc +0 -95
  1903. data/src/core/lib/iomgr/pollset_uv.h +0 -36
  1904. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1905. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  1906. data/src/core/lib/iomgr/resource_quota.cc +0 -1019
  1907. data/src/core/lib/iomgr/resource_quota.h +0 -177
  1908. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  1909. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1910. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -160
  1911. data/src/core/lib/iomgr/tcp_custom.cc +0 -389
  1912. data/src/core/lib/iomgr/tcp_custom.h +0 -85
  1913. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -484
  1914. data/src/core/lib/iomgr/tcp_uv.cc +0 -421
  1915. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  1916. data/src/core/lib/iomgr/timer_custom.h +0 -43
  1917. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  1918. data/src/core/lib/iomgr/udp_server.cc +0 -748
  1919. data/src/core/lib/iomgr/udp_server.h +0 -103
  1920. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  1921. data/src/core/lib/slice/slice_intern.cc +0 -373
  1922. data/src/core/lib/slice/slice_utils.h +0 -200
  1923. data/src/core/lib/surface/init_secure.cc +0 -81
  1924. data/src/core/lib/transport/metadata.cc +0 -693
  1925. data/src/core/lib/transport/metadata.h +0 -446
  1926. data/src/core/lib/transport/metadata_batch.cc +0 -430
  1927. data/src/core/lib/transport/static_metadata.cc +0 -1249
  1928. data/src/core/lib/transport/static_metadata.h +0 -604
  1929. data/src/core/lib/transport/status_metadata.cc +0 -62
  1930. data/src/core/lib/transport/status_metadata.h +0 -48
  1931. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1932. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  1933. data/third_party/cares/cares/ares_getopt.c +0 -122
  1934. data/third_party/cares/cares/ares_getopt.h +0 -53
  1935. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  1936. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  1937. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  1938. data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
  1939. data/third_party/upb/upb/decode.int.h +0 -163
  1940. data/third_party/upb/upb/table.int.h +0 -475
  1941. data/third_party/upb/upb/upb.int.h +0 -29
@@ -16,6 +16,8 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
+ #include "src/core/ext/xds/xds_client.h"
20
+
19
21
  #include <inttypes.h>
20
22
  #include <limits.h>
21
23
  #include <string.h>
@@ -31,17 +33,20 @@
31
33
  #include <grpc/support/time.h>
32
34
 
33
35
  #include "src/core/ext/filters/client_channel/client_channel.h"
34
- #include "src/core/ext/filters/client_channel/service_config.h"
35
36
  #include "src/core/ext/xds/xds_api.h"
36
37
  #include "src/core/ext/xds/xds_bootstrap.h"
37
38
  #include "src/core/ext/xds/xds_channel_args.h"
38
- #include "src/core/ext/xds/xds_client.h"
39
39
  #include "src/core/ext/xds/xds_client_stats.h"
40
+ #include "src/core/ext/xds/xds_cluster.h"
41
+ #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
42
+ #include "src/core/ext/xds/xds_endpoint.h"
40
43
  #include "src/core/ext/xds/xds_http_filters.h"
44
+ #include "src/core/ext/xds/xds_listener.h"
41
45
  #include "src/core/lib/address_utils/sockaddr_utils.h"
42
46
  #include "src/core/lib/backoff/backoff.h"
43
47
  #include "src/core/lib/channel/channel_args.h"
44
48
  #include "src/core/lib/channel/channel_stack.h"
49
+ #include "src/core/lib/config/core_configuration.h"
45
50
  #include "src/core/lib/gpr/env.h"
46
51
  #include "src/core/lib/gpr/string.h"
47
52
  #include "src/core/lib/gprpp/memory.h"
@@ -50,12 +55,13 @@
50
55
  #include "src/core/lib/gprpp/sync.h"
51
56
  #include "src/core/lib/iomgr/sockaddr.h"
52
57
  #include "src/core/lib/iomgr/timer.h"
58
+ #include "src/core/lib/security/credentials/channel_creds_registry.h"
53
59
  #include "src/core/lib/slice/slice_internal.h"
54
60
  #include "src/core/lib/slice/slice_string_helpers.h"
55
61
  #include "src/core/lib/surface/call.h"
56
62
  #include "src/core/lib/surface/channel.h"
57
- #include "src/core/lib/surface/channel_init.h"
58
- #include "src/core/lib/transport/static_metadata.h"
63
+ #include "src/core/lib/surface/lame_client.h"
64
+ #include "src/core/lib/uri/uri_parser.h"
59
65
 
60
66
  #define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
61
67
  #define GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER 1.6
@@ -71,6 +77,7 @@ TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
71
77
  namespace {
72
78
 
73
79
  Mutex* g_mu = nullptr;
80
+
74
81
  const grpc_channel_args* g_channel_args ABSL_GUARDED_BY(*g_mu) = nullptr;
75
82
  XdsClient* g_xds_client ABSL_GUARDED_BY(*g_mu) = nullptr;
76
83
  char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
@@ -87,7 +94,7 @@ template <typename T>
87
94
  class XdsClient::ChannelState::RetryableCall
88
95
  : public InternallyRefCounted<RetryableCall<T>> {
89
96
  public:
90
- explicit RetryableCall(RefCountedPtr<ChannelState> chand);
97
+ explicit RetryableCall(WeakRefCountedPtr<ChannelState> chand);
91
98
 
92
99
  void Orphan() override;
93
100
 
@@ -108,7 +115,7 @@ class XdsClient::ChannelState::RetryableCall
108
115
  // every time we start a new call. It's null during call retry backoff.
109
116
  OrphanablePtr<T> calld_;
110
117
  // The owning xds channel.
111
- RefCountedPtr<ChannelState> chand_;
118
+ WeakRefCountedPtr<ChannelState> chand_;
112
119
 
113
120
  // Retry state.
114
121
  BackOff backoff_;
@@ -134,34 +141,66 @@ class XdsClient::ChannelState::AdsCallState
134
141
  XdsClient* xds_client() const { return chand()->xds_client(); }
135
142
  bool seen_response() const { return seen_response_; }
136
143
 
137
- void SubscribeLocked(const std::string& type_url, const std::string& name)
144
+ void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name,
145
+ bool delay_send)
138
146
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
139
- void UnsubscribeLocked(const std::string& type_url, const std::string& name,
140
- bool delay_unsubscription)
147
+ void UnsubscribeLocked(const XdsResourceType* type,
148
+ const XdsResourceName& name, bool delay_unsubscription)
141
149
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
142
150
 
143
151
  bool HasSubscribedResources() const;
144
152
 
145
153
  private:
146
- class ResourceState : public InternallyRefCounted<ResourceState> {
154
+ class AdsResponseParser : public XdsApi::AdsResponseParserInterface {
147
155
  public:
148
- ResourceState(const std::string& type_url, const std::string& name,
149
- bool sent_initial_request)
150
- : type_url_(type_url),
151
- name_(name),
152
- sent_initial_request_(sent_initial_request) {
156
+ struct Result {
157
+ const XdsResourceType* type;
158
+ std::string type_url;
159
+ std::string version;
160
+ std::string nonce;
161
+ std::vector<std::string> errors;
162
+ std::map<std::string /*authority*/, std::set<XdsResourceKey>>
163
+ resources_seen;
164
+ bool have_valid_resources = false;
165
+ };
166
+
167
+ explicit AdsResponseParser(AdsCallState* ads_call_state)
168
+ : ads_call_state_(ads_call_state) {}
169
+
170
+ absl::Status ProcessAdsResponseFields(AdsResponseFields fields) override
171
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
172
+
173
+ void ParseResource(const XdsEncodingContext& context, size_t idx,
174
+ absl::string_view type_url,
175
+ absl::string_view serialized_resource) override
176
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
177
+
178
+ Result TakeResult() { return std::move(result_); }
179
+
180
+ private:
181
+ XdsClient* xds_client() const { return ads_call_state_->xds_client(); }
182
+
183
+ AdsCallState* ads_call_state_;
184
+ const Timestamp update_time_ = ExecCtx::Get()->Now();
185
+ Result result_;
186
+ };
187
+
188
+ class ResourceTimer : public InternallyRefCounted<ResourceTimer> {
189
+ public:
190
+ ResourceTimer(const XdsResourceType* type, const XdsResourceName& name)
191
+ : type_(type), name_(name) {
153
192
  GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
154
193
  grpc_schedule_on_exec_ctx);
155
194
  }
156
195
 
157
196
  void Orphan() override {
158
- Finish();
197
+ MaybeCancelTimer();
159
198
  Unref(DEBUG_LOCATION, "Orphan");
160
199
  }
161
200
 
162
- void Start(RefCountedPtr<AdsCallState> ads_calld) {
163
- if (sent_initial_request_) return;
164
- sent_initial_request_ = true;
201
+ void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld) {
202
+ if (timer_started_) return;
203
+ timer_started_ = true;
165
204
  ads_calld_ = std::move(ads_calld);
166
205
  Ref(DEBUG_LOCATION, "timer").release();
167
206
  timer_pending_ = true;
@@ -171,7 +210,7 @@ class XdsClient::ChannelState::AdsCallState
171
210
  &timer_callback_);
172
211
  }
173
212
 
174
- void Finish() {
213
+ void MaybeCancelTimer() {
175
214
  if (timer_pending_) {
176
215
  grpc_timer_cancel(&timer_);
177
216
  timer_pending_ = false;
@@ -180,11 +219,12 @@ class XdsClient::ChannelState::AdsCallState
180
219
 
181
220
  private:
182
221
  static void OnTimer(void* arg, grpc_error_handle error) {
183
- ResourceState* self = static_cast<ResourceState*>(arg);
222
+ ResourceTimer* self = static_cast<ResourceTimer*>(arg);
184
223
  {
185
224
  MutexLock lock(&self->ads_calld_->xds_client()->mu_);
186
225
  self->OnTimerLocked(GRPC_ERROR_REF(error));
187
226
  }
227
+ self->ads_calld_->xds_client()->work_serializer_.DrainQueue();
188
228
  self->ads_calld_.reset();
189
229
  self->Unref(DEBUG_LOCATION, "timer");
190
230
  }
@@ -193,55 +233,32 @@ class XdsClient::ChannelState::AdsCallState
193
233
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
194
234
  if (error == GRPC_ERROR_NONE && timer_pending_) {
195
235
  timer_pending_ = false;
196
- grpc_error_handle watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
197
- absl::StrFormat(
198
- "timeout obtaining resource {type=%s name=%s} from xds server",
199
- type_url_, name_)
200
- .c_str());
201
- watcher_error = grpc_error_set_int(
202
- watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
236
+ absl::Status watcher_error = absl::UnavailableError(absl::StrFormat(
237
+ "timeout obtaining resource {type=%s name=%s} from xds server",
238
+ type_->type_url(),
239
+ XdsClient::ConstructFullXdsResourceName(
240
+ name_.authority, type_->type_url(), name_.key)));
203
241
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
204
- gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
205
- grpc_error_std_string(watcher_error).c_str());
206
- }
207
- if (type_url_ == XdsApi::kLdsTypeUrl) {
208
- ListenerState& state = ads_calld_->xds_client()->listener_map_[name_];
209
- state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
210
- for (const auto& p : state.watchers) {
211
- p.first->OnError(GRPC_ERROR_REF(watcher_error));
212
- }
213
- } else if (type_url_ == XdsApi::kRdsTypeUrl) {
214
- RouteConfigState& state =
215
- ads_calld_->xds_client()->route_config_map_[name_];
216
- state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
217
- for (const auto& p : state.watchers) {
218
- p.first->OnError(GRPC_ERROR_REF(watcher_error));
219
- }
220
- } else if (type_url_ == XdsApi::kCdsTypeUrl) {
221
- ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
222
- state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
223
- for (const auto& p : state.watchers) {
224
- p.first->OnError(GRPC_ERROR_REF(watcher_error));
225
- }
226
- } else if (type_url_ == XdsApi::kEdsTypeUrl) {
227
- EndpointState& state = ads_calld_->xds_client()->endpoint_map_[name_];
228
- state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
229
- for (const auto& p : state.watchers) {
230
- p.first->OnError(GRPC_ERROR_REF(watcher_error));
231
- }
232
- } else {
233
- GPR_UNREACHABLE_CODE(return );
242
+ gpr_log(GPR_INFO, "[xds_client %p] xds server %s: %s",
243
+ ads_calld_->xds_client(),
244
+ ads_calld_->chand()->server_.server_uri.c_str(),
245
+ watcher_error.ToString().c_str());
234
246
  }
235
- GRPC_ERROR_UNREF(watcher_error);
247
+ auto& authority_state =
248
+ ads_calld_->xds_client()->authority_state_map_[name_.authority];
249
+ ResourceState& state = authority_state.resource_map[type_][name_.key];
250
+ state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
251
+ ads_calld_->xds_client()->NotifyWatchersOnErrorLocked(state.watchers,
252
+ watcher_error);
236
253
  }
237
254
  GRPC_ERROR_UNREF(error);
238
255
  }
239
256
 
240
- const std::string type_url_;
241
- const std::string name_;
257
+ const XdsResourceType* type_;
258
+ const XdsResourceName name_;
242
259
 
243
260
  RefCountedPtr<AdsCallState> ads_calld_;
244
- bool sent_initial_request_;
261
+ bool timer_started_ = false;
245
262
  bool timer_pending_ = false;
246
263
  grpc_timer timer_;
247
264
  grpc_closure timer_callback_;
@@ -255,30 +272,12 @@ class XdsClient::ChannelState::AdsCallState
255
272
  grpc_error_handle error = GRPC_ERROR_NONE;
256
273
 
257
274
  // Subscribed resources of this type.
258
- std::map<std::string /* name */, OrphanablePtr<ResourceState>>
275
+ std::map<std::string /*authority*/,
276
+ std::map<XdsResourceKey, OrphanablePtr<ResourceTimer>>>
259
277
  subscribed_resources;
260
278
  };
261
279
 
262
- void SendMessageLocked(const std::string& type_url)
263
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
264
-
265
- void AcceptLdsUpdateLocked(std::string version, grpc_millis update_time,
266
- XdsApi::LdsUpdateMap lds_update_map)
267
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
268
- void AcceptRdsUpdateLocked(std::string version, grpc_millis update_time,
269
- XdsApi::RdsUpdateMap rds_update_map)
270
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
271
- void AcceptCdsUpdateLocked(std::string version, grpc_millis update_time,
272
- XdsApi::CdsUpdateMap cds_update_map)
273
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
274
- void AcceptEdsUpdateLocked(std::string version, grpc_millis update_time,
275
- XdsApi::EdsUpdateMap eds_update_map)
276
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
277
-
278
- template <typename StateMap>
279
- void RejectAdsUpdateLocked(grpc_millis update_time,
280
- const XdsApi::AdsParseResult& result,
281
- StateMap* state_map)
280
+ void SendMessageLocked(const XdsResourceType* type)
282
281
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
283
282
 
284
283
  static void OnRequestSent(void* arg, grpc_error_handle error);
@@ -293,8 +292,9 @@ class XdsClient::ChannelState::AdsCallState
293
292
 
294
293
  bool IsCurrentCallOnChannel() const;
295
294
 
296
- std::set<absl::string_view> ResourceNamesForRequest(
297
- const std::string& type_url);
295
+ // Constructs a list of resource names of a given type for an ADS
296
+ // request. Also starts the timer for each resource if needed.
297
+ std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type);
298
298
 
299
299
  // The owning RetryableCall<>.
300
300
  RefCountedPtr<RetryableCall<AdsCallState>> parent_;
@@ -323,10 +323,10 @@ class XdsClient::ChannelState::AdsCallState
323
323
  grpc_closure on_status_received_;
324
324
 
325
325
  // Resource types for which requests need to be sent.
326
- std::set<std::string /*type_url*/> buffered_requests_;
326
+ std::set<const XdsResourceType*> buffered_requests_;
327
327
 
328
328
  // State for each resource type.
329
- std::map<std::string /*type_url*/, ResourceTypeState> state_map_;
329
+ std::map<const XdsResourceType*, ResourceTypeState> state_map_;
330
330
  };
331
331
 
332
332
  // Contains an LRS call to the xds server.
@@ -350,7 +350,7 @@ class XdsClient::ChannelState::LrsCallState
350
350
  // Reports client-side load stats according to a fixed interval.
351
351
  class Reporter : public InternallyRefCounted<Reporter> {
352
352
  public:
353
- Reporter(RefCountedPtr<LrsCallState> parent, grpc_millis report_interval)
353
+ Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
354
354
  : parent_(std::move(parent)), report_interval_(report_interval) {
355
355
  GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
356
356
  grpc_schedule_on_exec_ctx);
@@ -381,7 +381,7 @@ class XdsClient::ChannelState::LrsCallState
381
381
  RefCountedPtr<LrsCallState> parent_;
382
382
 
383
383
  // The load reporting state.
384
- const grpc_millis report_interval_;
384
+ const Duration report_interval_;
385
385
  bool last_report_counters_were_zero_ = false;
386
386
  bool next_report_timer_callback_pending_ = false;
387
387
  grpc_timer next_report_timer_;
@@ -428,7 +428,7 @@ class XdsClient::ChannelState::LrsCallState
428
428
  // Load reporting state.
429
429
  bool send_all_clusters_ = false;
430
430
  std::set<std::string> cluster_names_; // Asked for by the LRS server.
431
- grpc_millis load_reporting_interval_ = 0;
431
+ Duration load_reporting_interval_;
432
432
  OrphanablePtr<Reporter> reporter_;
433
433
  };
434
434
 
@@ -439,27 +439,32 @@ class XdsClient::ChannelState::LrsCallState
439
439
  class XdsClient::ChannelState::StateWatcher
440
440
  : public AsyncConnectivityStateWatcherInterface {
441
441
  public:
442
- explicit StateWatcher(RefCountedPtr<ChannelState> parent)
442
+ explicit StateWatcher(WeakRefCountedPtr<ChannelState> parent)
443
443
  : parent_(std::move(parent)) {}
444
444
 
445
445
  private:
446
446
  void OnConnectivityStateChange(grpc_connectivity_state new_state,
447
447
  const absl::Status& status) override {
448
- MutexLock lock(&parent_->xds_client_->mu_);
449
- if (!parent_->shutting_down_ &&
450
- new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
451
- // In TRANSIENT_FAILURE. Notify all watchers of error.
452
- gpr_log(GPR_INFO,
453
- "[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
454
- "status_message:(%s)",
455
- parent_->xds_client(), status.ToString().c_str());
456
- parent_->xds_client_->NotifyOnErrorLocked(
457
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
458
- "xds channel in TRANSIENT_FAILURE"));
448
+ {
449
+ MutexLock lock(&parent_->xds_client_->mu_);
450
+ if (!parent_->shutting_down_ &&
451
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
452
+ // In TRANSIENT_FAILURE. Notify all watchers of error.
453
+ gpr_log(GPR_INFO,
454
+ "[xds_client %p] xds channel for server %s in "
455
+ "state TRANSIENT_FAILURE: %s",
456
+ parent_->xds_client(), parent_->server_.server_uri.c_str(),
457
+ status.ToString().c_str());
458
+ parent_->xds_client_->NotifyOnErrorLocked(
459
+ absl::UnavailableError(absl::StrCat(
460
+ "xds channel in TRANSIENT_FAILURE, connectivity error: ",
461
+ status.ToString())));
462
+ }
459
463
  }
464
+ parent_->xds_client()->work_serializer_.DrainQueue();
460
465
  }
461
466
 
462
- RefCountedPtr<ChannelState> parent_;
467
+ WeakRefCountedPtr<ChannelState> parent_;
463
468
  };
464
469
 
465
470
  //
@@ -471,17 +476,17 @@ namespace {
471
476
  grpc_channel* CreateXdsChannel(grpc_channel_args* args,
472
477
  const XdsBootstrap::XdsServer& server) {
473
478
  RefCountedPtr<grpc_channel_credentials> channel_creds =
474
- XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
475
- server.channel_creds_config);
476
- return grpc_secure_channel_create(channel_creds.get(),
477
- server.server_uri.c_str(), args, nullptr);
479
+ CoreConfiguration::Get().channel_creds_registry().CreateChannelCreds(
480
+ server.channel_creds_type, server.channel_creds_config);
481
+ return grpc_channel_create(server.server_uri.c_str(), channel_creds.get(),
482
+ args);
478
483
  }
479
484
 
480
485
  } // namespace
481
486
 
482
487
  XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
483
488
  const XdsBootstrap::XdsServer& server)
484
- : InternallyRefCounted<ChannelState>(
489
+ : DualRefCounted<ChannelState>(
485
490
  GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
486
491
  ? "ChannelState"
487
492
  : nullptr),
@@ -498,19 +503,26 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
498
503
 
499
504
  XdsClient::ChannelState::~ChannelState() {
500
505
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
501
- gpr_log(GPR_INFO, "[xds_client %p] Destroying xds channel %p", xds_client(),
502
- this);
506
+ gpr_log(GPR_INFO, "[xds_client %p] destroying xds channel %p for server %s",
507
+ xds_client(), this, server_.server_uri.c_str());
503
508
  }
504
509
  grpc_channel_destroy(channel_);
505
510
  xds_client_.reset(DEBUG_LOCATION, "ChannelState");
506
511
  }
507
512
 
508
- void XdsClient::ChannelState::Orphan() {
513
+ // This method should only ever be called when holding the lock, but we can't
514
+ // use a ABSL_EXCLUSIVE_LOCKS_REQUIRED annotation, because Orphan() will be
515
+ // called from DualRefCounted::Unref, which cannot have a lock annotation for a
516
+ // lock in this subclass.
517
+ void XdsClient::ChannelState::Orphan() ABSL_NO_THREAD_SAFETY_ANALYSIS {
509
518
  shutting_down_ = true;
510
519
  CancelConnectivityWatchLocked();
520
+ // At this time, all strong refs are removed, remove from channel map to
521
+ // prevent subsequent subscription from trying to use this ChannelState as it
522
+ // is shutting down.
523
+ xds_client_->xds_server_channel_map_.erase(server_);
511
524
  ads_calld_.reset();
512
525
  lrs_calld_.reset();
513
- Unref(DEBUG_LOCATION, "ChannelState+orphaned");
514
526
  }
515
527
 
516
528
  XdsClient::ChannelState::AdsCallState* XdsClient::ChannelState::ads_calld()
@@ -529,33 +541,54 @@ bool XdsClient::ChannelState::HasActiveAdsCall() const {
529
541
 
530
542
  void XdsClient::ChannelState::MaybeStartLrsCall() {
531
543
  if (lrs_calld_ != nullptr) return;
532
- lrs_calld_.reset(
533
- new RetryableCall<LrsCallState>(Ref(DEBUG_LOCATION, "ChannelState+lrs")));
544
+ lrs_calld_.reset(new RetryableCall<LrsCallState>(
545
+ WeakRef(DEBUG_LOCATION, "ChannelState+lrs")));
534
546
  }
535
547
 
536
- void XdsClient::ChannelState::StopLrsCall() { lrs_calld_.reset(); }
548
+ void XdsClient::ChannelState::StopLrsCallLocked() {
549
+ xds_client_->xds_load_report_server_map_.erase(server_);
550
+ lrs_calld_.reset();
551
+ }
552
+
553
+ namespace {
554
+
555
+ bool IsLameChannel(grpc_channel* channel) {
556
+ grpc_channel_element* elem =
557
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
558
+ return elem->filter == &grpc_lame_filter;
559
+ }
560
+
561
+ } // namespace
537
562
 
538
563
  void XdsClient::ChannelState::StartConnectivityWatchLocked() {
564
+ if (IsLameChannel(channel_)) {
565
+ xds_client()->NotifyOnErrorLocked(
566
+ absl::UnavailableError("xds client has a lame channel"));
567
+ return;
568
+ }
539
569
  ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
540
570
  GPR_ASSERT(client_channel != nullptr);
541
- watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "ChannelState+watch"));
571
+ watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
542
572
  client_channel->AddConnectivityWatcher(
543
573
  GRPC_CHANNEL_IDLE,
544
574
  OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
545
575
  }
546
576
 
547
577
  void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
578
+ if (IsLameChannel(channel_)) {
579
+ return;
580
+ }
548
581
  ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
549
582
  GPR_ASSERT(client_channel != nullptr);
550
583
  client_channel->RemoveConnectivityWatcher(watcher_);
551
584
  }
552
585
 
553
- void XdsClient::ChannelState::SubscribeLocked(const std::string& type_url,
554
- const std::string& name) {
586
+ void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
587
+ const XdsResourceName& name) {
555
588
  if (ads_calld_ == nullptr) {
556
589
  // Start the ADS call if this is the first request.
557
590
  ads_calld_.reset(new RetryableCall<AdsCallState>(
558
- Ref(DEBUG_LOCATION, "ChannelState+ads")));
591
+ WeakRef(DEBUG_LOCATION, "ChannelState+ads")));
559
592
  // Note: AdsCallState's ctor will automatically subscribe to all
560
593
  // resources that the XdsClient already has watchers for, so we can
561
594
  // return here.
@@ -565,17 +598,19 @@ void XdsClient::ChannelState::SubscribeLocked(const std::string& type_url,
565
598
  // because when the call is restarted it will resend all necessary requests.
566
599
  if (ads_calld() == nullptr) return;
567
600
  // Subscribe to this resource if the ADS call is active.
568
- ads_calld()->SubscribeLocked(type_url, name);
601
+ ads_calld()->SubscribeLocked(type, name, /*delay_send=*/false);
569
602
  }
570
603
 
571
- void XdsClient::ChannelState::UnsubscribeLocked(const std::string& type_url,
572
- const std::string& name,
604
+ void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
605
+ const XdsResourceName& name,
573
606
  bool delay_unsubscription) {
574
607
  if (ads_calld_ != nullptr) {
575
608
  auto* calld = ads_calld_->calld();
576
609
  if (calld != nullptr) {
577
- calld->UnsubscribeLocked(type_url, name, delay_unsubscription);
578
- if (!calld->HasSubscribedResources()) ads_calld_.reset();
610
+ calld->UnsubscribeLocked(type, name, delay_unsubscription);
611
+ if (!calld->HasSubscribedResources()) {
612
+ ads_calld_.reset();
613
+ }
579
614
  }
580
615
  }
581
616
  }
@@ -586,15 +621,15 @@ void XdsClient::ChannelState::UnsubscribeLocked(const std::string& type_url,
586
621
 
587
622
  template <typename T>
588
623
  XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
589
- RefCountedPtr<ChannelState> chand)
624
+ WeakRefCountedPtr<ChannelState> chand)
590
625
  : chand_(std::move(chand)),
591
- backoff_(
592
- BackOff::Options()
593
- .set_initial_backoff(GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS *
594
- 1000)
595
- .set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
596
- .set_jitter(GRPC_XDS_RECONNECT_JITTER)
597
- .set_max_backoff(GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)) {
626
+ backoff_(BackOff::Options()
627
+ .set_initial_backoff(Duration::Seconds(
628
+ GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS))
629
+ .set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
630
+ .set_jitter(GRPC_XDS_RECONNECT_JITTER)
631
+ .set_max_backoff(Duration::Seconds(
632
+ GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS))) {
598
633
  // Closure Initialization
599
634
  GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
600
635
  grpc_schedule_on_exec_ctx);
@@ -611,17 +646,11 @@ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
611
646
 
612
647
  template <typename T>
613
648
  void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
614
- const bool seen_response = calld_->seen_response();
649
+ // If we saw a response on the current stream, reset backoff.
650
+ if (calld_->seen_response()) backoff_.Reset();
615
651
  calld_.reset();
616
- if (seen_response) {
617
- // If we lost connection to the xds server, reset backoff and restart the
618
- // call immediately.
619
- backoff_.Reset();
620
- StartNewCallLocked();
621
- } else {
622
- // If we failed to connect to the xds server, retry later.
623
- StartRetryTimerLocked();
624
- }
652
+ // Start retry timer.
653
+ StartRetryTimerLocked();
625
654
  }
626
655
 
627
656
  template <typename T>
@@ -630,10 +659,10 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
630
659
  GPR_ASSERT(chand_->channel_ != nullptr);
631
660
  GPR_ASSERT(calld_ == nullptr);
632
661
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
633
- gpr_log(GPR_INFO,
634
- "[xds_client %p] Start new call from retryable call (chand: %p, "
635
- "retryable call: %p)",
636
- chand()->xds_client(), chand(), this);
662
+ gpr_log(
663
+ GPR_INFO,
664
+ "[xds_client %p] xds server %s: start new call from retryable call %p",
665
+ chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
637
666
  }
638
667
  calld_ = MakeOrphanable<T>(
639
668
  this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
@@ -642,13 +671,15 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
642
671
  template <typename T>
643
672
  void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
644
673
  if (shutting_down_) return;
645
- const grpc_millis next_attempt_time = backoff_.NextAttemptTime();
674
+ const Timestamp next_attempt_time = backoff_.NextAttemptTime();
646
675
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
647
- grpc_millis timeout = GPR_MAX(next_attempt_time - ExecCtx::Get()->Now(), 0);
676
+ Duration timeout =
677
+ std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
648
678
  gpr_log(GPR_INFO,
649
- "[xds_client %p] Failed to connect to xds server (chand: %p) "
679
+ "[xds_client %p] xds server %s: call attempt failed; "
650
680
  "retry timer will fire in %" PRId64 "ms.",
651
- chand()->xds_client(), chand(), timeout);
681
+ chand()->xds_client(), chand()->server_.server_uri.c_str(),
682
+ timeout.millis());
652
683
  }
653
684
  this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
654
685
  grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
@@ -672,16 +703,179 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
672
703
  retry_timer_callback_pending_ = false;
673
704
  if (!shutting_down_ && error == GRPC_ERROR_NONE) {
674
705
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
675
- gpr_log(
676
- GPR_INFO,
677
- "[xds_client %p] Retry timer fires (chand: %p, retryable call: %p)",
678
- chand()->xds_client(), chand(), this);
706
+ gpr_log(GPR_INFO,
707
+ "[xds_client %p] xds server %s: retry timer fired (retryable "
708
+ "call: %p)",
709
+ chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
679
710
  }
680
711
  StartNewCallLocked();
681
712
  }
682
713
  GRPC_ERROR_UNREF(error);
683
714
  }
684
715
 
716
+ //
717
+ // XdsClient::ChannelState::AdsCallState::AdsResponseParser
718
+ //
719
+
720
+ absl::Status XdsClient::ChannelState::AdsCallState::AdsResponseParser::
721
+ ProcessAdsResponseFields(AdsResponseFields fields) {
722
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
723
+ gpr_log(
724
+ GPR_INFO,
725
+ "[xds_client %p] xds server %s: received ADS response: type_url=%s, "
726
+ "version=%s, nonce=%s, num_resources=%" PRIuPTR,
727
+ ads_call_state_->xds_client(),
728
+ ads_call_state_->chand()->server_.server_uri.c_str(),
729
+ fields.type_url.c_str(), fields.version.c_str(), fields.nonce.c_str(),
730
+ fields.num_resources);
731
+ }
732
+ result_.type =
733
+ ads_call_state_->xds_client()->GetResourceTypeLocked(fields.type_url);
734
+ if (result_.type == nullptr) {
735
+ return absl::InvalidArgumentError(
736
+ absl::StrCat("unknown resource type ", fields.type_url));
737
+ }
738
+ result_.type_url = std::move(fields.type_url);
739
+ result_.version = std::move(fields.version);
740
+ result_.nonce = std::move(fields.nonce);
741
+ return absl::OkStatus();
742
+ }
743
+
744
+ namespace {
745
+
746
+ // Build a resource metadata struct for ADS result accepting methods and CSDS.
747
+ XdsApi::ResourceMetadata CreateResourceMetadataAcked(
748
+ std::string serialized_proto, std::string version, Timestamp update_time) {
749
+ XdsApi::ResourceMetadata resource_metadata;
750
+ resource_metadata.serialized_proto = std::move(serialized_proto);
751
+ resource_metadata.update_time = update_time;
752
+ resource_metadata.version = std::move(version);
753
+ resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
754
+ return resource_metadata;
755
+ }
756
+
757
+ // Update resource_metadata for NACK.
758
+ void UpdateResourceMetadataNacked(const std::string& version,
759
+ const std::string& details,
760
+ Timestamp update_time,
761
+ XdsApi::ResourceMetadata* resource_metadata) {
762
+ resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
763
+ resource_metadata->failed_version = version;
764
+ resource_metadata->failed_details = details;
765
+ resource_metadata->failed_update_time = update_time;
766
+ }
767
+
768
+ } // namespace
769
+
770
+ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
771
+ const XdsEncodingContext& context, size_t idx, absl::string_view type_url,
772
+ absl::string_view serialized_resource) {
773
+ // Check the type_url of the resource.
774
+ bool is_v2 = false;
775
+ if (!result_.type->IsType(type_url, &is_v2)) {
776
+ result_.errors.emplace_back(
777
+ absl::StrCat("resource index ", idx, ": incorrect resource type ",
778
+ type_url, " (should be ", result_.type_url, ")"));
779
+ return;
780
+ }
781
+ // Parse the resource.
782
+ absl::StatusOr<XdsResourceType::DecodeResult> result =
783
+ result_.type->Decode(context, serialized_resource, is_v2);
784
+ if (!result.ok()) {
785
+ result_.errors.emplace_back(
786
+ absl::StrCat("resource index ", idx, ": ", result.status().ToString()));
787
+ return;
788
+ }
789
+ // Check the resource name.
790
+ auto resource_name =
791
+ xds_client()->ParseXdsResourceName(result->name, result_.type);
792
+ if (!resource_name.ok()) {
793
+ result_.errors.emplace_back(absl::StrCat(
794
+ "resource index ", idx, ": Cannot parse xDS resource name \"",
795
+ result->name, "\""));
796
+ return;
797
+ }
798
+ // Cancel resource-does-not-exist timer, if needed.
799
+ auto timer_it = ads_call_state_->state_map_.find(result_.type);
800
+ if (timer_it != ads_call_state_->state_map_.end()) {
801
+ auto it =
802
+ timer_it->second.subscribed_resources.find(resource_name->authority);
803
+ if (it != timer_it->second.subscribed_resources.end()) {
804
+ auto res_it = it->second.find(resource_name->key);
805
+ if (res_it != it->second.end()) {
806
+ res_it->second->MaybeCancelTimer();
807
+ }
808
+ }
809
+ }
810
+ // Lookup the authority in the cache.
811
+ auto authority_it =
812
+ xds_client()->authority_state_map_.find(resource_name->authority);
813
+ if (authority_it == xds_client()->authority_state_map_.end()) {
814
+ return; // Skip resource -- we don't have a subscription for it.
815
+ }
816
+ // Found authority, so look up type.
817
+ AuthorityState& authority_state = authority_it->second;
818
+ auto type_it = authority_state.resource_map.find(result_.type);
819
+ if (type_it == authority_state.resource_map.end()) {
820
+ return; // Skip resource -- we don't have a subscription for it.
821
+ }
822
+ auto& type_map = type_it->second;
823
+ // Found type, so look up resource key.
824
+ auto it = type_map.find(resource_name->key);
825
+ if (it == type_map.end()) {
826
+ return; // Skip resource -- we don't have a subscription for it.
827
+ }
828
+ ResourceState& resource_state = it->second;
829
+ // If needed, record that we've seen this resource.
830
+ if (result_.type->AllResourcesRequiredInSotW()) {
831
+ result_.resources_seen[resource_name->authority].insert(resource_name->key);
832
+ }
833
+ // Update resource state based on whether the resource is valid.
834
+ if (!result->resource.ok()) {
835
+ result_.errors.emplace_back(absl::StrCat(
836
+ "resource index ", idx, ": ", result->name,
837
+ ": validation error: ", result->resource.status().ToString()));
838
+ xds_client()->NotifyWatchersOnErrorLocked(
839
+ resource_state.watchers,
840
+ absl::UnavailableError(absl::StrCat(
841
+ "invalid resource: ", result->resource.status().ToString())));
842
+ UpdateResourceMetadataNacked(result_.version,
843
+ result->resource.status().ToString(),
844
+ update_time_, &resource_state.meta);
845
+ return;
846
+ }
847
+ // Resource is valid.
848
+ result_.have_valid_resources = true;
849
+ // If it didn't change, ignore it.
850
+ if (resource_state.resource != nullptr &&
851
+ result_.type->ResourcesEqual(resource_state.resource.get(),
852
+ result->resource->get())) {
853
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
854
+ gpr_log(GPR_INFO,
855
+ "[xds_client %p] %s resource %s identical to current, ignoring.",
856
+ xds_client(), result_.type_url.c_str(), result->name.c_str());
857
+ }
858
+ return;
859
+ }
860
+ // Update the resource state.
861
+ resource_state.resource = std::move(*result->resource);
862
+ resource_state.meta = CreateResourceMetadataAcked(
863
+ std::string(serialized_resource), result_.version, update_time_);
864
+ // Notify watchers.
865
+ auto& watchers_list = resource_state.watchers;
866
+ auto* value =
867
+ result_.type->CopyResource(resource_state.resource.get()).release();
868
+ xds_client()->work_serializer_.Schedule(
869
+ [watchers_list, value]()
870
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
871
+ for (const auto& p : watchers_list) {
872
+ p.first->OnGenericResourceChanged(value);
873
+ }
874
+ delete value;
875
+ },
876
+ DEBUG_LOCATION);
877
+ }
878
+
685
879
  //
686
880
  // XdsClient::ChannelState::AdsCallState
687
881
  //
@@ -698,14 +892,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
698
892
  // the polling entities from client_channel.
699
893
  GPR_ASSERT(xds_client() != nullptr);
700
894
  // Create a call with the specified method name.
701
- const auto& method =
895
+ const char* method =
702
896
  chand()->server_.ShouldUseV3()
703
- ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V3_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES
704
- : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES;
897
+ ? "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
898
+ "StreamAggregatedResources"
899
+ : "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
900
+ "StreamAggregatedResources";
705
901
  call_ = grpc_channel_create_pollset_set_call(
706
902
  chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
707
- xds_client()->interested_parties_, method, nullptr,
708
- GRPC_MILLIS_INF_FUTURE, nullptr);
903
+ xds_client()->interested_parties_,
904
+ StaticSlice::FromStaticString(method).c_slice(), nullptr,
905
+ Timestamp::InfFuture(), nullptr);
709
906
  GPR_ASSERT(call_ != nullptr);
710
907
  // Init data associated with the call.
711
908
  grpc_metadata_array_init(&initial_metadata_recv_);
@@ -713,9 +910,9 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
713
910
  // Start the call.
714
911
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
715
912
  gpr_log(GPR_INFO,
716
- "[xds_client %p] Starting ADS call (chand: %p, calld: %p, "
717
- "call: %p)",
718
- xds_client(), chand(), this, call_);
913
+ "[xds_client %p] xds server %s: starting ADS call "
914
+ "(calld: %p, call: %p)",
915
+ xds_client(), chand()->server_.server_uri.c_str(), this, call_);
719
916
  }
720
917
  // Create the ops.
721
918
  grpc_call_error call_error;
@@ -735,17 +932,20 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
735
932
  // Op: send request message.
736
933
  GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
737
934
  grpc_schedule_on_exec_ctx);
738
- for (const auto& p : xds_client()->listener_map_) {
739
- SubscribeLocked(XdsApi::kLdsTypeUrl, std::string(p.first));
740
- }
741
- for (const auto& p : xds_client()->route_config_map_) {
742
- SubscribeLocked(XdsApi::kRdsTypeUrl, std::string(p.first));
743
- }
744
- for (const auto& p : xds_client()->cluster_map_) {
745
- SubscribeLocked(XdsApi::kCdsTypeUrl, std::string(p.first));
935
+ for (const auto& a : xds_client()->authority_state_map_) {
936
+ const std::string& authority = a.first;
937
+ // Skip authorities that are not using this xDS channel.
938
+ if (a.second.channel_state != chand()) continue;
939
+ for (const auto& t : a.second.resource_map) {
940
+ const XdsResourceType* type = t.first;
941
+ for (const auto& r : t.second) {
942
+ const XdsResourceKey& resource_key = r.first;
943
+ SubscribeLocked(type, {authority, resource_key}, /*delay_send=*/true);
944
+ }
945
+ }
746
946
  }
747
- for (const auto& p : xds_client()->endpoint_map_) {
748
- SubscribeLocked(XdsApi::kEdsTypeUrl, std::string(p.first));
947
+ for (const auto& p : state_map_) {
948
+ SendMessageLocked(p.first);
749
949
  }
750
950
  // Op: recv initial metadata.
751
951
  op = ops;
@@ -809,34 +1009,30 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
809
1009
  }
810
1010
 
811
1011
  void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
812
- const std::string& type_url)
1012
+ const XdsResourceType* type)
813
1013
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
814
1014
  // Buffer message sending if an existing message is in flight.
815
1015
  if (send_message_payload_ != nullptr) {
816
- buffered_requests_.insert(type_url);
1016
+ buffered_requests_.insert(type);
817
1017
  return;
818
1018
  }
819
- auto& state = state_map_[type_url];
1019
+ auto& state = state_map_[type];
820
1020
  grpc_slice request_payload_slice;
821
- std::set<absl::string_view> resource_names =
822
- ResourceNamesForRequest(type_url);
823
1021
  request_payload_slice = xds_client()->api_.CreateAdsRequest(
824
- chand()->server_, type_url, resource_names,
825
- xds_client()->resource_version_map_[type_url], state.nonce,
826
- GRPC_ERROR_REF(state.error), !sent_initial_message_);
827
- if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
828
- type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
829
- state_map_.erase(type_url);
830
- }
1022
+ chand()->server_,
1023
+ chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
1024
+ chand()->resource_type_version_map_[type], state.nonce,
1025
+ ResourceNamesForRequest(type), GRPC_ERROR_REF(state.error),
1026
+ !sent_initial_message_);
831
1027
  sent_initial_message_ = true;
832
1028
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
833
1029
  gpr_log(GPR_INFO,
834
- "[xds_client %p] sending ADS request: type=%s version=%s nonce=%s "
835
- "error=%s resources=%s",
836
- xds_client(), type_url.c_str(),
837
- xds_client()->resource_version_map_[type_url].c_str(),
838
- state.nonce.c_str(), grpc_error_std_string(state.error).c_str(),
839
- absl::StrJoin(resource_names, " ").c_str());
1030
+ "[xds_client %p] xds server %s: sending ADS request: type=%s "
1031
+ "version=%s nonce=%s error=%s",
1032
+ xds_client(), chand()->server_.server_uri.c_str(),
1033
+ std::string(type->type_url()).c_str(),
1034
+ chand()->resource_type_version_map_[type].c_str(),
1035
+ state.nonce.c_str(), grpc_error_std_string(state.error).c_str());
840
1036
  }
841
1037
  GRPC_ERROR_UNREF(state.error);
842
1038
  state.error = GRPC_ERROR_NONE;
@@ -856,27 +1052,33 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
856
1052
  grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
857
1053
  if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
858
1054
  gpr_log(GPR_ERROR,
859
- "[xds_client %p] calld=%p call_error=%d sending ADS message",
860
- xds_client(), this, call_error);
1055
+ "[xds_client %p] xds server %s: error starting ADS send_message "
1056
+ "batch on calld=%p: call_error=%d",
1057
+ xds_client(), chand()->server_.server_uri.c_str(), this,
1058
+ call_error);
861
1059
  GPR_ASSERT(GRPC_CALL_OK == call_error);
862
1060
  }
863
1061
  }
864
1062
 
865
1063
  void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
866
- const std::string& type_url, const std::string& name) {
867
- auto& state = state_map_[type_url].subscribed_resources[name];
1064
+ const XdsResourceType* type, const XdsResourceName& name, bool delay_send) {
1065
+ auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
868
1066
  if (state == nullptr) {
869
- state = MakeOrphanable<ResourceState>(
870
- type_url, name, !xds_client()->resource_version_map_[type_url].empty());
871
- SendMessageLocked(type_url);
1067
+ state = MakeOrphanable<ResourceTimer>(type, name);
1068
+ if (!delay_send) SendMessageLocked(type);
872
1069
  }
873
1070
  }
874
1071
 
875
1072
  void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
876
- const std::string& type_url, const std::string& name,
1073
+ const XdsResourceType* type, const XdsResourceName& name,
877
1074
  bool delay_unsubscription) {
878
- state_map_[type_url].subscribed_resources.erase(name);
879
- if (!delay_unsubscription) SendMessageLocked(type_url);
1075
+ auto& type_state_map = state_map_[type];
1076
+ auto& authority_map = type_state_map.subscribed_resources[name.authority];
1077
+ authority_map.erase(name.key);
1078
+ if (authority_map.empty()) {
1079
+ type_state_map.subscribed_resources.erase(name.authority);
1080
+ }
1081
+ if (!delay_unsubscription) SendMessageLocked(type);
880
1082
  }
881
1083
 
882
1084
  bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
@@ -886,312 +1088,6 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
886
1088
  return false;
887
1089
  }
888
1090
 
889
- namespace {
890
-
891
- // Build a resource metadata struct for ADS result accepting methods and CSDS.
892
- XdsApi::ResourceMetadata CreateResourceMetadataAcked(
893
- std::string serialized_proto, std::string version,
894
- grpc_millis update_time) {
895
- XdsApi::ResourceMetadata resource_metadata;
896
- resource_metadata.serialized_proto = std::move(serialized_proto);
897
- resource_metadata.update_time = update_time;
898
- resource_metadata.version = std::move(version);
899
- resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
900
- return resource_metadata;
901
- }
902
-
903
- } // namespace
904
-
905
- void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
906
- std::string version, grpc_millis update_time,
907
- XdsApi::LdsUpdateMap lds_update_map) {
908
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
909
- gpr_log(GPR_INFO,
910
- "[xds_client %p] LDS update received containing %" PRIuPTR
911
- " resources",
912
- xds_client(), lds_update_map.size());
913
- }
914
- auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
915
- std::set<std::string> rds_resource_names_seen;
916
- for (auto& p : lds_update_map) {
917
- const std::string& listener_name = p.first;
918
- XdsApi::LdsUpdate& lds_update = p.second.resource;
919
- auto& state = lds_state.subscribed_resources[listener_name];
920
- if (state != nullptr) state->Finish();
921
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
922
- gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
923
- listener_name.c_str(), lds_update.ToString().c_str());
924
- }
925
- // Record the RDS resource names seen.
926
- if (!lds_update.http_connection_manager.route_config_name.empty()) {
927
- rds_resource_names_seen.insert(
928
- lds_update.http_connection_manager.route_config_name);
929
- }
930
- // Ignore identical update.
931
- ListenerState& listener_state = xds_client()->listener_map_[listener_name];
932
- if (listener_state.update.has_value() &&
933
- *listener_state.update == lds_update) {
934
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
935
- gpr_log(GPR_INFO,
936
- "[xds_client %p] LDS update for %s identical to current, "
937
- "ignoring.",
938
- xds_client(), listener_name.c_str());
939
- }
940
- continue;
941
- }
942
- // Update the listener state.
943
- listener_state.update = std::move(lds_update);
944
- listener_state.meta = CreateResourceMetadataAcked(
945
- std::move(p.second.serialized_proto), version, update_time);
946
- // Notify watchers.
947
- for (const auto& p : listener_state.watchers) {
948
- p.first->OnListenerChanged(*listener_state.update);
949
- }
950
- }
951
- // For any subscribed resource that is not present in the update,
952
- // remove it from the cache and notify watchers that it does not exist.
953
- for (const auto& p : lds_state.subscribed_resources) {
954
- const std::string& listener_name = p.first;
955
- if (lds_update_map.find(listener_name) == lds_update_map.end()) {
956
- ListenerState& listener_state =
957
- xds_client()->listener_map_[listener_name];
958
- // If the resource was newly requested but has not yet been received,
959
- // we don't want to generate an error for the watchers, because this LDS
960
- // response may be in reaction to an earlier request that did not yet
961
- // request the new resource, so its absence from the response does not
962
- // necessarily indicate that the resource does not exist.
963
- // For that case, we rely on the request timeout instead.
964
- if (!listener_state.update.has_value()) continue;
965
- listener_state.update.reset();
966
- for (const auto& p : listener_state.watchers) {
967
- p.first->OnResourceDoesNotExist();
968
- }
969
- }
970
- }
971
- // For any RDS resource that is no longer referred to by any LDS
972
- // resources, remove it from the cache and notify watchers that it
973
- // does not exist.
974
- auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
975
- for (const auto& p : rds_state.subscribed_resources) {
976
- const std::string& rds_resource_name = p.first;
977
- if (rds_resource_names_seen.find(rds_resource_name) ==
978
- rds_resource_names_seen.end()) {
979
- RouteConfigState& route_config_state =
980
- xds_client()->route_config_map_[rds_resource_name];
981
- route_config_state.update.reset();
982
- for (const auto& p : route_config_state.watchers) {
983
- p.first->OnResourceDoesNotExist();
984
- }
985
- }
986
- }
987
- }
988
-
989
- void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
990
- std::string version, grpc_millis update_time,
991
- XdsApi::RdsUpdateMap rds_update_map) {
992
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
993
- gpr_log(GPR_INFO,
994
- "[xds_client %p] RDS update received containing %" PRIuPTR
995
- " resources",
996
- xds_client(), rds_update_map.size());
997
- }
998
- auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
999
- for (auto& p : rds_update_map) {
1000
- const std::string& route_config_name = p.first;
1001
- XdsApi::RdsUpdate& rds_update = p.second.resource;
1002
- auto& state = rds_state.subscribed_resources[route_config_name];
1003
- if (state != nullptr) state->Finish();
1004
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1005
- gpr_log(GPR_INFO, "[xds_client %p] RDS resource:\n%s", xds_client(),
1006
- rds_update.ToString().c_str());
1007
- }
1008
- RouteConfigState& route_config_state =
1009
- xds_client()->route_config_map_[route_config_name];
1010
- // Ignore identical update.
1011
- if (route_config_state.update.has_value() &&
1012
- *route_config_state.update == rds_update) {
1013
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1014
- gpr_log(GPR_INFO,
1015
- "[xds_client %p] RDS resource identical to current, ignoring",
1016
- xds_client());
1017
- }
1018
- continue;
1019
- }
1020
- // Update the cache.
1021
- route_config_state.update = std::move(rds_update);
1022
- route_config_state.meta = CreateResourceMetadataAcked(
1023
- std::move(p.second.serialized_proto), version, update_time);
1024
- // Notify all watchers.
1025
- for (const auto& p : route_config_state.watchers) {
1026
- p.first->OnRouteConfigChanged(*route_config_state.update);
1027
- }
1028
- }
1029
- }
1030
-
1031
- void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
1032
- std::string version, grpc_millis update_time,
1033
- XdsApi::CdsUpdateMap cds_update_map) {
1034
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1035
- gpr_log(GPR_INFO,
1036
- "[xds_client %p] CDS update received containing %" PRIuPTR
1037
- " resources",
1038
- xds_client(), cds_update_map.size());
1039
- }
1040
- auto& cds_state = state_map_[XdsApi::kCdsTypeUrl];
1041
- std::set<std::string> eds_resource_names_seen;
1042
- for (auto& p : cds_update_map) {
1043
- const char* cluster_name = p.first.c_str();
1044
- XdsApi::CdsUpdate& cds_update = p.second.resource;
1045
- auto& state = cds_state.subscribed_resources[cluster_name];
1046
- if (state != nullptr) state->Finish();
1047
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1048
- gpr_log(GPR_INFO, "[xds_client %p] cluster=%s: %s", xds_client(),
1049
- cluster_name, cds_update.ToString().c_str());
1050
- }
1051
- // Record the EDS resource names seen.
1052
- eds_resource_names_seen.insert(cds_update.eds_service_name.empty()
1053
- ? cluster_name
1054
- : cds_update.eds_service_name);
1055
- // Ignore identical update.
1056
- ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
1057
- if (cluster_state.update.has_value() &&
1058
- *cluster_state.update == cds_update) {
1059
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1060
- gpr_log(GPR_INFO,
1061
- "[xds_client %p] CDS update identical to current, ignoring.",
1062
- xds_client());
1063
- }
1064
- continue;
1065
- }
1066
- // Update the cluster state.
1067
- cluster_state.update = std::move(cds_update);
1068
- cluster_state.meta = CreateResourceMetadataAcked(
1069
- std::move(p.second.serialized_proto), version, update_time);
1070
- // Notify all watchers.
1071
- for (const auto& p : cluster_state.watchers) {
1072
- p.first->OnClusterChanged(cluster_state.update.value());
1073
- }
1074
- }
1075
- // For any subscribed resource that is not present in the update,
1076
- // remove it from the cache and notify watchers that it does not exist.
1077
- for (const auto& p : cds_state.subscribed_resources) {
1078
- const std::string& cluster_name = p.first;
1079
- if (cds_update_map.find(cluster_name) == cds_update_map.end()) {
1080
- ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
1081
- // If the resource was newly requested but has not yet been received,
1082
- // we don't want to generate an error for the watchers, because this CDS
1083
- // response may be in reaction to an earlier request that did not yet
1084
- // request the new resource, so its absence from the response does not
1085
- // necessarily indicate that the resource does not exist.
1086
- // For that case, we rely on the request timeout instead.
1087
- if (!cluster_state.update.has_value()) continue;
1088
- cluster_state.update.reset();
1089
- for (const auto& p : cluster_state.watchers) {
1090
- p.first->OnResourceDoesNotExist();
1091
- }
1092
- }
1093
- }
1094
- // For any EDS resource that is no longer referred to by any CDS
1095
- // resources, remove it from the cache and notify watchers that it
1096
- // does not exist.
1097
- auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1098
- for (const auto& p : eds_state.subscribed_resources) {
1099
- const std::string& eds_resource_name = p.first;
1100
- if (eds_resource_names_seen.find(eds_resource_name) ==
1101
- eds_resource_names_seen.end()) {
1102
- EndpointState& endpoint_state =
1103
- xds_client()->endpoint_map_[eds_resource_name];
1104
- endpoint_state.update.reset();
1105
- for (const auto& p : endpoint_state.watchers) {
1106
- p.first->OnResourceDoesNotExist();
1107
- }
1108
- }
1109
- }
1110
- }
1111
-
1112
- void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
1113
- std::string version, grpc_millis update_time,
1114
- XdsApi::EdsUpdateMap eds_update_map) {
1115
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1116
- gpr_log(GPR_INFO,
1117
- "[xds_client %p] EDS update received containing %" PRIuPTR
1118
- " resources",
1119
- xds_client(), eds_update_map.size());
1120
- }
1121
- auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1122
- for (auto& p : eds_update_map) {
1123
- const char* eds_service_name = p.first.c_str();
1124
- XdsApi::EdsUpdate& eds_update = p.second.resource;
1125
- auto& state = eds_state.subscribed_resources[eds_service_name];
1126
- if (state != nullptr) state->Finish();
1127
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1128
- gpr_log(GPR_INFO, "[xds_client %p] EDS resource %s: %s", xds_client(),
1129
- eds_service_name, eds_update.ToString().c_str());
1130
- }
1131
- EndpointState& endpoint_state =
1132
- xds_client()->endpoint_map_[eds_service_name];
1133
- // Ignore identical update.
1134
- if (endpoint_state.update.has_value() &&
1135
- *endpoint_state.update == eds_update) {
1136
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1137
- gpr_log(GPR_INFO,
1138
- "[xds_client %p] EDS update identical to current, ignoring.",
1139
- xds_client());
1140
- }
1141
- continue;
1142
- }
1143
- // Update the cluster state.
1144
- endpoint_state.update = std::move(eds_update);
1145
- endpoint_state.meta = CreateResourceMetadataAcked(
1146
- std::move(p.second.serialized_proto), version, update_time);
1147
- // Notify all watchers.
1148
- for (const auto& p : endpoint_state.watchers) {
1149
- p.first->OnEndpointChanged(endpoint_state.update.value());
1150
- }
1151
- }
1152
- }
1153
-
1154
- namespace {
1155
-
1156
- // Update resource_metadata for NACK.
1157
- void UpdateResourceMetadataNacked(const std::string& version,
1158
- const std::string& details,
1159
- grpc_millis update_time,
1160
- XdsApi::ResourceMetadata* resource_metadata) {
1161
- resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
1162
- resource_metadata->failed_version = version;
1163
- resource_metadata->failed_details = details;
1164
- resource_metadata->failed_update_time = update_time;
1165
- }
1166
-
1167
- } // namespace
1168
-
1169
- template <typename StateMap>
1170
- void XdsClient::ChannelState::AdsCallState::RejectAdsUpdateLocked(
1171
- grpc_millis update_time, const XdsApi::AdsParseResult& result,
1172
- StateMap* state_map) {
1173
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1174
- gpr_log(GPR_INFO,
1175
- "[xds_client %p] %s update NACKed containing %" PRIuPTR
1176
- " resources",
1177
- xds_client(), result.type_url.c_str(),
1178
- result.resource_names_failed.size());
1179
- }
1180
- std::string details = grpc_error_std_string(result.parse_error);
1181
- for (auto& name : result.resource_names_failed) {
1182
- auto it = state_map->find(name);
1183
- if (it == state_map->end()) continue;
1184
- auto& state = it->second;
1185
- // Notify watchers of error.
1186
- for (const auto& p : state.watchers) {
1187
- p.first->OnError(GRPC_ERROR_REF(result.parse_error));
1188
- }
1189
- // Update resource metadata for CSDS.
1190
- UpdateResourceMetadataNacked(result.version, details, update_time,
1191
- &state.meta);
1192
- }
1193
- }
1194
-
1195
1091
  void XdsClient::ChannelState::AdsCallState::OnRequestSent(
1196
1092
  void* arg, grpc_error_handle error) {
1197
1093
  AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
@@ -1234,6 +1130,7 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
1234
1130
  MutexLock lock(&ads_calld->xds_client()->mu_);
1235
1131
  done = ads_calld->OnResponseReceivedLocked();
1236
1132
  }
1133
+ ads_calld->xds_client()->work_serializer_.DrainQueue();
1237
1134
  if (done) ads_calld->Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
1238
1135
  }
1239
1136
 
@@ -1250,71 +1147,75 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1250
1147
  grpc_byte_buffer_destroy(recv_message_payload_);
1251
1148
  recv_message_payload_ = nullptr;
1252
1149
  // Parse and validate the response.
1253
- XdsApi::AdsParseResult result = xds_client()->api_.ParseAdsResponse(
1254
- chand()->server_, response_slice,
1255
- ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
1256
- ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
1257
- ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
1258
- ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
1150
+ AdsResponseParser parser(this);
1151
+ absl::Status status = xds_client()->api_.ParseAdsResponse(
1152
+ chand()->server_, response_slice, &parser);
1259
1153
  grpc_slice_unref_internal(response_slice);
1260
- if (result.type_url.empty()) {
1154
+ if (!status.ok()) {
1261
1155
  // Ignore unparsable response.
1262
1156
  gpr_log(GPR_ERROR,
1263
- "[xds_client %p] Error parsing ADS response (%s) -- ignoring",
1264
- xds_client(), grpc_error_std_string(result.parse_error).c_str());
1265
- GRPC_ERROR_UNREF(result.parse_error);
1157
+ "[xds_client %p] xds server %s: error parsing ADS response (%s) "
1158
+ "-- ignoring",
1159
+ xds_client(), chand()->server_.server_uri.c_str(),
1160
+ status.ToString().c_str());
1266
1161
  } else {
1267
- grpc_millis update_time = grpc_core::ExecCtx::Get()->Now();
1162
+ seen_response_ = true;
1163
+ AdsResponseParser::Result result = parser.TakeResult();
1268
1164
  // Update nonce.
1269
- auto& state = state_map_[result.type_url];
1270
- state.nonce = std::move(result.nonce);
1271
- // NACK or ACK the response.
1272
- if (result.parse_error != GRPC_ERROR_NONE) {
1273
- // NACK unacceptable update.
1274
- gpr_log(GPR_ERROR,
1275
- "[xds_client %p] ADS response invalid for resource type %s "
1276
- "version %s, will NACK: nonce=%s error=%s",
1277
- xds_client(), result.type_url.c_str(), result.version.c_str(),
1278
- state.nonce.c_str(),
1279
- grpc_error_std_string(result.parse_error).c_str());
1280
- result.parse_error =
1281
- grpc_error_set_int(result.parse_error, GRPC_ERROR_INT_GRPC_STATUS,
1282
- GRPC_STATUS_UNAVAILABLE);
1165
+ auto& state = state_map_[result.type];
1166
+ state.nonce = result.nonce;
1167
+ // If we got an error, set state.error so that we'll NACK the update.
1168
+ if (!result.errors.empty()) {
1169
+ std::string error = absl::StrJoin(result.errors, "; ");
1170
+ gpr_log(
1171
+ GPR_ERROR,
1172
+ "[xds_client %p] xds server %s: ADS response invalid for resource "
1173
+ "type %s version %s, will NACK: nonce=%s error=%s",
1174
+ xds_client(), chand()->server_.server_uri.c_str(),
1175
+ result.type_url.c_str(), result.version.c_str(), state.nonce.c_str(),
1176
+ error.c_str());
1283
1177
  GRPC_ERROR_UNREF(state.error);
1284
- state.error = result.parse_error;
1285
- if (result.type_url == XdsApi::kLdsTypeUrl) {
1286
- RejectAdsUpdateLocked(update_time, result,
1287
- &xds_client()->listener_map_);
1288
- } else if (result.type_url == XdsApi::kRdsTypeUrl) {
1289
- RejectAdsUpdateLocked(update_time, result,
1290
- &xds_client()->route_config_map_);
1291
- } else if (result.type_url == XdsApi::kCdsTypeUrl) {
1292
- RejectAdsUpdateLocked(update_time, result, &xds_client()->cluster_map_);
1293
- } else if (result.type_url == XdsApi::kEdsTypeUrl) {
1294
- RejectAdsUpdateLocked(update_time, result,
1295
- &xds_client()->endpoint_map_);
1296
- }
1297
- SendMessageLocked(result.type_url);
1298
- } else {
1299
- seen_response_ = true;
1300
- // Accept the ADS response according to the type_url.
1301
- if (result.type_url == XdsApi::kLdsTypeUrl) {
1302
- AcceptLdsUpdateLocked(result.version, update_time,
1303
- std::move(result.lds_update_map));
1304
- } else if (result.type_url == XdsApi::kRdsTypeUrl) {
1305
- AcceptRdsUpdateLocked(result.version, update_time,
1306
- std::move(result.rds_update_map));
1307
- } else if (result.type_url == XdsApi::kCdsTypeUrl) {
1308
- AcceptCdsUpdateLocked(result.version, update_time,
1309
- std::move(result.cds_update_map));
1310
- } else if (result.type_url == XdsApi::kEdsTypeUrl) {
1311
- AcceptEdsUpdateLocked(result.version, update_time,
1312
- std::move(result.eds_update_map));
1178
+ state.error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(error),
1179
+ GRPC_ERROR_INT_GRPC_STATUS,
1180
+ GRPC_STATUS_UNAVAILABLE);
1181
+ }
1182
+ // Delete resources not seen in update if needed.
1183
+ if (result.type->AllResourcesRequiredInSotW()) {
1184
+ for (auto& a : xds_client()->authority_state_map_) {
1185
+ const std::string& authority = a.first;
1186
+ AuthorityState& authority_state = a.second;
1187
+ // Skip authorities that are not using this xDS channel.
1188
+ if (authority_state.channel_state != chand()) continue;
1189
+ auto seen_authority_it = result.resources_seen.find(authority);
1190
+ // Find this resource type.
1191
+ auto type_it = authority_state.resource_map.find(result.type);
1192
+ if (type_it == authority_state.resource_map.end()) continue;
1193
+ // Iterate over resource ids.
1194
+ for (auto& r : type_it->second) {
1195
+ const XdsResourceKey& resource_key = r.first;
1196
+ ResourceState& resource_state = r.second;
1197
+ if (seen_authority_it == result.resources_seen.end() ||
1198
+ seen_authority_it->second.find(resource_key) ==
1199
+ seen_authority_it->second.end()) {
1200
+ // If the resource was newly requested but has not yet been
1201
+ // received, we don't want to generate an error for the watchers,
1202
+ // because this ADS response may be in reaction to an earlier
1203
+ // request that did not yet request the new resource, so its absence
1204
+ // from the response does not necessarily indicate that the resource
1205
+ // does not exist. For that case, we rely on the request timeout
1206
+ // instead.
1207
+ if (resource_state.resource == nullptr) continue;
1208
+ resource_state.resource.reset();
1209
+ xds_client()->NotifyWatchersOnResourceDoesNotExist(
1210
+ resource_state.watchers);
1211
+ }
1212
+ }
1313
1213
  }
1314
- xds_client()->resource_version_map_[result.type_url] =
1214
+ }
1215
+ // If we had valid resources, update the version.
1216
+ if (result.have_valid_resources) {
1217
+ chand()->resource_type_version_map_[result.type] =
1315
1218
  std::move(result.version);
1316
- // ACK the update.
1317
- SendMessageLocked(result.type_url);
1318
1219
  // Start load reporting if needed.
1319
1220
  auto& lrs_call = chand()->lrs_calld_;
1320
1221
  if (lrs_call != nullptr) {
@@ -1322,6 +1223,8 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1322
1223
  if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
1323
1224
  }
1324
1225
  }
1226
+ // Send ACK or NACK.
1227
+ SendMessageLocked(result.type);
1325
1228
  }
1326
1229
  if (xds_client()->shutting_down_) return true;
1327
1230
  // Keep listening for updates.
@@ -1346,6 +1249,7 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
1346
1249
  MutexLock lock(&ads_calld->xds_client()->mu_);
1347
1250
  ads_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
1348
1251
  }
1252
+ ads_calld->xds_client()->work_serializer_.DrainQueue();
1349
1253
  ads_calld->Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
1350
1254
  }
1351
1255
 
@@ -1354,9 +1258,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
1354
1258
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1355
1259
  char* status_details = grpc_slice_to_c_string(status_details_);
1356
1260
  gpr_log(GPR_INFO,
1357
- "[xds_client %p] ADS call status received. Status = %d, details "
1358
- "= '%s', (chand: %p, ads_calld: %p, call: %p), error '%s'",
1359
- xds_client(), status_code_, status_details, chand(), this, call_,
1261
+ "[xds_client %p] xds server %s: ADS call status received "
1262
+ "(chand=%p, ads_calld=%p, call=%p): "
1263
+ "status=%d, details='%s', error='%s'",
1264
+ xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
1265
+ call_, status_code_, status_details,
1360
1266
  grpc_error_std_string(error).c_str());
1361
1267
  gpr_free(status_details);
1362
1268
  }
@@ -1365,8 +1271,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
1365
1271
  // Try to restart the call.
1366
1272
  parent_->OnCallFinishedLocked();
1367
1273
  // Send error to all watchers.
1368
- xds_client()->NotifyOnErrorLocked(
1369
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds call failed"));
1274
+ xds_client()->NotifyOnErrorLocked(absl::UnavailableError(absl::StrFormat(
1275
+ "xDS call failed: xDS server: %s, ADS call status code=%d, "
1276
+ "details='%s', error='%s'",
1277
+ chand()->server_.server_uri, status_code_,
1278
+ StringViewFromSlice(status_details_), grpc_error_std_string(error))));
1370
1279
  }
1371
1280
  GRPC_ERROR_UNREF(error);
1372
1281
  }
@@ -1378,16 +1287,21 @@ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
1378
1287
  return this == chand()->ads_calld_->calld();
1379
1288
  }
1380
1289
 
1381
- std::set<absl::string_view>
1290
+ std::vector<std::string>
1382
1291
  XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
1383
- const std::string& type_url) {
1384
- std::set<absl::string_view> resource_names;
1385
- auto it = state_map_.find(type_url);
1292
+ const XdsResourceType* type) {
1293
+ std::vector<std::string> resource_names;
1294
+ auto it = state_map_.find(type);
1386
1295
  if (it != state_map_.end()) {
1387
- for (auto& p : it->second.subscribed_resources) {
1388
- resource_names.insert(p.first);
1389
- OrphanablePtr<ResourceState>& state = p.second;
1390
- state->Start(Ref(DEBUG_LOCATION, "ResourceState"));
1296
+ for (auto& a : it->second.subscribed_resources) {
1297
+ const std::string& authority = a.first;
1298
+ for (auto& p : a.second) {
1299
+ const XdsResourceKey& resource_key = p.first;
1300
+ resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
1301
+ authority, type->type_url(), resource_key));
1302
+ OrphanablePtr<ResourceTimer>& resource_timer = p.second;
1303
+ resource_timer->MaybeStartTimer(Ref(DEBUG_LOCATION, "ResourceTimer"));
1304
+ }
1391
1305
  }
1392
1306
  }
1393
1307
  return resource_names;
@@ -1405,7 +1319,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
1405
1319
 
1406
1320
  void XdsClient::ChannelState::LrsCallState::Reporter::
1407
1321
  ScheduleNextReportLocked() {
1408
- const grpc_millis next_report_time = ExecCtx::Get()->Now() + report_interval_;
1322
+ const Timestamp next_report_time = ExecCtx::Get()->Now() + report_interval_;
1409
1323
  grpc_timer_init(&next_report_timer_, next_report_time,
1410
1324
  &on_next_report_timer_);
1411
1325
  next_report_timer_callback_pending_ = true;
@@ -1451,15 +1365,19 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
1451
1365
  bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1452
1366
  // Construct snapshot from all reported stats.
1453
1367
  XdsApi::ClusterLoadReportMap snapshot =
1454
- xds_client()->BuildLoadReportSnapshotLocked(parent_->send_all_clusters_,
1368
+ xds_client()->BuildLoadReportSnapshotLocked(parent_->chand()->server_,
1369
+ parent_->send_all_clusters_,
1455
1370
  parent_->cluster_names_);
1456
1371
  // Skip client load report if the counters were all zero in the last
1457
1372
  // report and they are still zero in this one.
1458
1373
  const bool old_val = last_report_counters_were_zero_;
1459
1374
  last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
1460
1375
  if (old_val && last_report_counters_were_zero_) {
1461
- if (xds_client()->load_report_map_.empty()) {
1462
- parent_->chand()->StopLrsCall();
1376
+ auto it = xds_client()->xds_load_report_server_map_.find(
1377
+ parent_->chand()->server_);
1378
+ if (it == xds_client()->xds_load_report_server_map_.end() ||
1379
+ it->second.load_report_map.empty()) {
1380
+ it->second.channel_state->StopLrsCallLocked();
1463
1381
  return true;
1464
1382
  }
1465
1383
  ScheduleNextReportLocked();
@@ -1480,8 +1398,10 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1480
1398
  parent_->call_, &op, 1, &on_report_done_);
1481
1399
  if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1482
1400
  gpr_log(GPR_ERROR,
1483
- "[xds_client %p] calld=%p call_error=%d sending client load report",
1484
- xds_client(), this, call_error);
1401
+ "[xds_client %p] xds server %s: error starting LRS send_message "
1402
+ "batch on calld=%p: call_error=%d",
1403
+ xds_client(), parent_->chand()->server_.server_uri.c_str(), this,
1404
+ call_error);
1485
1405
  GPR_ASSERT(GRPC_CALL_OK == call_error);
1486
1406
  }
1487
1407
  return false;
@@ -1503,8 +1423,11 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
1503
1423
  grpc_byte_buffer_destroy(parent_->send_message_payload_);
1504
1424
  parent_->send_message_payload_ = nullptr;
1505
1425
  // If there are no more registered stats to report, cancel the call.
1506
- if (xds_client()->load_report_map_.empty()) {
1507
- parent_->chand()->StopLrsCall();
1426
+ auto it =
1427
+ xds_client()->xds_load_report_server_map_.find(parent_->chand()->server_);
1428
+ if (it == xds_client()->xds_load_report_server_map_.end() ||
1429
+ it->second.load_report_map.empty()) {
1430
+ it->second.channel_state->StopLrsCallLocked();
1508
1431
  GRPC_ERROR_UNREF(error);
1509
1432
  return true;
1510
1433
  }
@@ -1536,14 +1459,15 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1536
1459
  // activity in xds_client()->interested_parties_, which is comprised of
1537
1460
  // the polling entities from client_channel.
1538
1461
  GPR_ASSERT(xds_client() != nullptr);
1539
- const auto& method =
1462
+ const char* method =
1540
1463
  chand()->server_.ShouldUseV3()
1541
- ? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V3_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS
1542
- : GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS;
1464
+ ? "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats"
1465
+ : "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats";
1543
1466
  call_ = grpc_channel_create_pollset_set_call(
1544
1467
  chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
1545
- xds_client()->interested_parties_, method, nullptr,
1546
- GRPC_MILLIS_INF_FUTURE, nullptr);
1468
+ xds_client()->interested_parties_,
1469
+ Slice::FromStaticString(method).c_slice(), nullptr,
1470
+ Timestamp::InfFuture(), nullptr);
1547
1471
  GPR_ASSERT(call_ != nullptr);
1548
1472
  // Init the request payload.
1549
1473
  grpc_slice request_payload_slice =
@@ -1556,10 +1480,10 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1556
1480
  grpc_metadata_array_init(&trailing_metadata_recv_);
1557
1481
  // Start the call.
1558
1482
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1559
- gpr_log(GPR_INFO,
1560
- "[xds_client %p] Starting LRS call (chand: %p, calld: %p, "
1561
- "call: %p)",
1562
- xds_client(), chand(), this, call_);
1483
+ gpr_log(
1484
+ GPR_INFO,
1485
+ "[xds_client %p] xds server %s: starting LRS call (calld=%p, call=%p)",
1486
+ xds_client(), chand()->server_.server_uri.c_str(), this, call_);
1563
1487
  }
1564
1488
  // Create the ops.
1565
1489
  grpc_call_error call_error;
@@ -1713,14 +1637,15 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
1713
1637
  // Parse the response.
1714
1638
  bool send_all_clusters = false;
1715
1639
  std::set<std::string> new_cluster_names;
1716
- grpc_millis new_load_reporting_interval;
1640
+ Duration new_load_reporting_interval;
1717
1641
  grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
1718
1642
  response_slice, &send_all_clusters, &new_cluster_names,
1719
1643
  &new_load_reporting_interval);
1720
1644
  if (parse_error != GRPC_ERROR_NONE) {
1721
1645
  gpr_log(GPR_ERROR,
1722
- "[xds_client %p] LRS response parsing failed. error=%s",
1723
- xds_client(), grpc_error_std_string(parse_error).c_str());
1646
+ "[xds_client %p] xds server %s: LRS response parsing failed: %s",
1647
+ xds_client(), chand()->server_.server_uri.c_str(),
1648
+ grpc_error_std_string(parse_error).c_str());
1724
1649
  GRPC_ERROR_UNREF(parse_error);
1725
1650
  return;
1726
1651
  }
@@ -1728,11 +1653,12 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
1728
1653
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1729
1654
  gpr_log(
1730
1655
  GPR_INFO,
1731
- "[xds_client %p] LRS response received, %" PRIuPTR
1656
+ "[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
1732
1657
  " cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
1733
1658
  "ms",
1734
- xds_client(), new_cluster_names.size(), send_all_clusters,
1735
- new_load_reporting_interval);
1659
+ xds_client(), chand()->server_.server_uri.c_str(),
1660
+ new_cluster_names.size(), send_all_clusters,
1661
+ new_load_reporting_interval.millis());
1736
1662
  size_t i = 0;
1737
1663
  for (const auto& name : new_cluster_names) {
1738
1664
  gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
@@ -1740,14 +1666,16 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
1740
1666
  }
1741
1667
  }
1742
1668
  if (new_load_reporting_interval <
1743
- GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS) {
1744
- new_load_reporting_interval =
1745
- GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS;
1669
+ Duration::Milliseconds(
1670
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
1671
+ new_load_reporting_interval = Duration::Milliseconds(
1672
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1746
1673
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1747
1674
  gpr_log(GPR_INFO,
1748
- "[xds_client %p] Increased load_report_interval to minimum "
1749
- "value %dms",
1750
- xds_client(), GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1675
+ "[xds_client %p] xds server %s: increased load_report_interval "
1676
+ "to minimum value %dms",
1677
+ xds_client(), chand()->server_.server_uri.c_str(),
1678
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1751
1679
  }
1752
1680
  }
1753
1681
  // Ignore identical update.
@@ -1755,10 +1683,11 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
1755
1683
  cluster_names_ == new_cluster_names &&
1756
1684
  load_reporting_interval_ == new_load_reporting_interval) {
1757
1685
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1758
- gpr_log(GPR_INFO,
1759
- "[xds_client %p] Incoming LRS response identical to current, "
1760
- "ignoring.",
1761
- xds_client());
1686
+ gpr_log(
1687
+ GPR_INFO,
1688
+ "[xds_client %p] xds server %s: incoming LRS response identical "
1689
+ "to current, ignoring.",
1690
+ xds_client(), chand()->server_.server_uri.c_str());
1762
1691
  }
1763
1692
  return;
1764
1693
  }
@@ -1804,15 +1733,16 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
1804
1733
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1805
1734
  char* status_details = grpc_slice_to_c_string(status_details_);
1806
1735
  gpr_log(GPR_INFO,
1807
- "[xds_client %p] LRS call status received. Status = %d, details "
1808
- "= '%s', (chand: %p, calld: %p, call: %p), error '%s'",
1809
- xds_client(), status_code_, status_details, chand(), this, call_,
1736
+ "[xds_client %p] xds server %s: LRS call status received "
1737
+ "(chand=%p, calld=%p, call=%p): "
1738
+ "status=%d, details='%s', error='%s'",
1739
+ xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
1740
+ call_, status_code_, status_details,
1810
1741
  grpc_error_std_string(error).c_str());
1811
1742
  gpr_free(status_details);
1812
1743
  }
1813
1744
  // Ignore status from a stale call.
1814
1745
  if (IsCurrentCallOnChannel()) {
1815
- GPR_ASSERT(!xds_client()->shutting_down_);
1816
1746
  // Try to restart the call.
1817
1747
  parent_->OnCallFinishedLocked();
1818
1748
  }
@@ -1832,19 +1762,17 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
1832
1762
 
1833
1763
  namespace {
1834
1764
 
1835
- grpc_millis GetRequestTimeout(const grpc_channel_args* args) {
1836
- return grpc_channel_args_find_integer(
1765
+ Duration GetRequestTimeout(const grpc_channel_args* args) {
1766
+ return Duration::Milliseconds(grpc_channel_args_find_integer(
1837
1767
  args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
1838
- {15000, 0, INT_MAX});
1768
+ {15000, 0, INT_MAX}));
1839
1769
  }
1840
1770
 
1841
1771
  grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
1842
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1772
+ absl::InlinedVector<grpc_arg, 1> args_to_add = {
1843
1773
  grpc_channel_arg_integer_create(
1844
1774
  const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
1845
1775
  5 * 60 * GPR_MS_PER_SEC),
1846
- grpc_channel_arg_integer_create(
1847
- const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1848
1776
  };
1849
1777
  return grpc_channel_args_copy_and_add(args, args_to_add.data(),
1850
1778
  args_to_add.size());
@@ -1860,17 +1788,18 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
1860
1788
  bootstrap_(std::move(bootstrap)),
1861
1789
  args_(ModifyChannelArgs(args)),
1862
1790
  request_timeout_(GetRequestTimeout(args)),
1791
+ xds_federation_enabled_(XdsFederationEnabled()),
1863
1792
  interested_parties_(grpc_pollset_set_create()),
1864
1793
  certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
1865
1794
  bootstrap_->certificate_providers())),
1866
1795
  api_(this, &grpc_xds_client_trace, bootstrap_->node(),
1867
- &bootstrap_->certificate_providers()) {
1796
+ &bootstrap_->certificate_providers(), &symtab_) {
1868
1797
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1869
1798
  gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
1870
1799
  }
1871
- // Create ChannelState object.
1872
- chand_ = MakeOrphanable<ChannelState>(
1873
- WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
1800
+ // Calling grpc_init to ensure gRPC does not shut down until the XdsClient is
1801
+ // destroyed.
1802
+ grpc_init();
1874
1803
  }
1875
1804
 
1876
1805
  XdsClient::~XdsClient() {
@@ -1879,26 +1808,9 @@ XdsClient::~XdsClient() {
1879
1808
  }
1880
1809
  grpc_channel_args_destroy(args_);
1881
1810
  grpc_pollset_set_destroy(interested_parties_);
1882
- }
1883
-
1884
- void XdsClient::AddChannelzLinkage(
1885
- channelz::ChannelNode* parent_channelz_node) {
1886
- MutexLock lock(&mu_);
1887
- channelz::ChannelNode* xds_channelz_node =
1888
- grpc_channel_get_channelz_node(chand_->channel());
1889
- if (xds_channelz_node != nullptr) {
1890
- parent_channelz_node->AddChildChannel(xds_channelz_node->uuid());
1891
- }
1892
- }
1893
-
1894
- void XdsClient::RemoveChannelzLinkage(
1895
- channelz::ChannelNode* parent_channelz_node) {
1896
- MutexLock lock(&mu_);
1897
- channelz::ChannelNode* xds_channelz_node =
1898
- grpc_channel_get_channelz_node(chand_->channel());
1899
- if (xds_channelz_node != nullptr) {
1900
- parent_channelz_node->RemoveChildChannel(xds_channelz_node->uuid());
1901
- }
1811
+ // Calling grpc_shutdown to ensure gRPC does not shut down until the XdsClient
1812
+ // is destroyed.
1813
+ grpc_shutdown();
1902
1814
  }
1903
1815
 
1904
1816
  void XdsClient::Orphan() {
@@ -1912,191 +1824,225 @@ void XdsClient::Orphan() {
1912
1824
  {
1913
1825
  MutexLock lock(&mu_);
1914
1826
  shutting_down_ = true;
1915
- // Orphan ChannelState object.
1916
- chand_.reset();
1917
- // We do not clear cluster_map_ and endpoint_map_ if the xds client was
1918
- // created by the XdsResolver because the maps contain refs for watchers
1919
- // which in turn hold refs to the loadbalancing policies. At this point, it
1920
- // is possible for ADS calls to be in progress. Unreffing the loadbalancing
1921
- // policies before those calls are done would lead to issues such as
1922
- // https://github.com/grpc/grpc/issues/20928.
1923
- if (!listener_map_.empty()) {
1924
- cluster_map_.clear();
1925
- endpoint_map_.clear();
1926
- }
1927
- }
1928
- }
1929
-
1930
- void XdsClient::WatchListenerData(
1931
- absl::string_view listener_name,
1932
- std::unique_ptr<ListenerWatcherInterface> watcher) {
1933
- std::string listener_name_str = std::string(listener_name);
1934
- MutexLock lock(&mu_);
1935
- ListenerState& listener_state = listener_map_[listener_name_str];
1936
- ListenerWatcherInterface* w = watcher.get();
1937
- listener_state.watchers[w] = std::move(watcher);
1938
- // If we've already received an LDS update, notify the new watcher
1939
- // immediately.
1940
- if (listener_state.update.has_value()) {
1941
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1942
- gpr_log(GPR_INFO, "[xds_client %p] returning cached listener data for %s",
1943
- this, listener_name_str.c_str());
1944
- }
1945
- w->OnListenerChanged(*listener_state.update);
1946
- }
1947
- chand_->SubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str);
1948
- }
1949
-
1950
- void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
1951
- ListenerWatcherInterface* watcher,
1952
- bool delay_unsubscription) {
1953
- MutexLock lock(&mu_);
1954
- if (shutting_down_) return;
1955
- std::string listener_name_str = std::string(listener_name);
1956
- ListenerState& listener_state = listener_map_[listener_name_str];
1957
- auto it = listener_state.watchers.find(watcher);
1958
- if (it != listener_state.watchers.end()) {
1959
- listener_state.watchers.erase(it);
1960
- if (listener_state.watchers.empty()) {
1961
- listener_map_.erase(listener_name_str);
1962
- chand_->UnsubscribeLocked(XdsApi::kLdsTypeUrl, listener_name_str,
1963
- delay_unsubscription);
1964
- }
1827
+ // Clear cache and any remaining watchers that may not have been cancelled.
1828
+ authority_state_map_.clear();
1829
+ invalid_watchers_.clear();
1830
+ }
1831
+ }
1832
+
1833
+ RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
1834
+ const XdsBootstrap::XdsServer& server) {
1835
+ auto it = xds_server_channel_map_.find(server);
1836
+ if (it != xds_server_channel_map_.end()) {
1837
+ return it->second->Ref(DEBUG_LOCATION, "Authority");
1838
+ }
1839
+ // Channel not found, so create a new one.
1840
+ auto channel_state = MakeRefCounted<ChannelState>(
1841
+ WeakRef(DEBUG_LOCATION, "ChannelState"), server);
1842
+ xds_server_channel_map_[server] = channel_state.get();
1843
+ return channel_state;
1844
+ }
1845
+
1846
+ void XdsClient::WatchResource(const XdsResourceType* type,
1847
+ absl::string_view name,
1848
+ RefCountedPtr<ResourceWatcherInterface> watcher) {
1849
+ ResourceWatcherInterface* w = watcher.get();
1850
+ // Lambda for handling failure cases.
1851
+ auto fail = [&](absl::Status status) mutable {
1852
+ {
1853
+ MutexLock lock(&mu_);
1854
+ MaybeRegisterResourceTypeLocked(type);
1855
+ invalid_watchers_[w] = watcher;
1856
+ }
1857
+ work_serializer_.Run(
1858
+ // TODO(yashykt): When we move to C++14, capture watcher using
1859
+ // std::move()
1860
+ [watcher, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1861
+ watcher->OnError(status);
1862
+ },
1863
+ DEBUG_LOCATION);
1864
+ };
1865
+ auto resource_name = ParseXdsResourceName(name, type);
1866
+ if (!resource_name.ok()) {
1867
+ fail(absl::UnavailableError(absl::StrFormat(
1868
+ "Unable to parse resource name for listener %s", name)));
1869
+ return;
1965
1870
  }
1966
- }
1967
-
1968
- void XdsClient::WatchRouteConfigData(
1969
- absl::string_view route_config_name,
1970
- std::unique_ptr<RouteConfigWatcherInterface> watcher) {
1971
- std::string route_config_name_str = std::string(route_config_name);
1972
- MutexLock lock(&mu_);
1973
- RouteConfigState& route_config_state =
1974
- route_config_map_[route_config_name_str];
1975
- RouteConfigWatcherInterface* w = watcher.get();
1976
- route_config_state.watchers[w] = std::move(watcher);
1977
- // If we've already received an RDS update, notify the new watcher
1978
- // immediately.
1979
- if (route_config_state.update.has_value()) {
1980
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1981
- gpr_log(GPR_INFO,
1982
- "[xds_client %p] returning cached route config data for %s", this,
1983
- route_config_name_str.c_str());
1871
+ // Find server to use.
1872
+ const XdsBootstrap::XdsServer* xds_server = nullptr;
1873
+ absl::string_view authority_name = resource_name->authority;
1874
+ if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
1875
+ auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
1876
+ if (authority == nullptr) {
1877
+ fail(absl::UnavailableError(
1878
+ absl::StrCat("authority \"", authority_name,
1879
+ "\" not present in bootstrap config")));
1880
+ return;
1984
1881
  }
1985
- w->OnRouteConfigChanged(*route_config_state.update);
1986
- }
1987
- chand_->SubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str);
1988
- }
1989
-
1990
- void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
1991
- RouteConfigWatcherInterface* watcher,
1992
- bool delay_unsubscription) {
1993
- MutexLock lock(&mu_);
1994
- if (shutting_down_) return;
1995
- std::string route_config_name_str = std::string(route_config_name);
1996
- RouteConfigState& route_config_state =
1997
- route_config_map_[route_config_name_str];
1998
- auto it = route_config_state.watchers.find(watcher);
1999
- if (it != route_config_state.watchers.end()) {
2000
- route_config_state.watchers.erase(it);
2001
- if (route_config_state.watchers.empty()) {
2002
- route_config_map_.erase(route_config_name_str);
2003
- chand_->UnsubscribeLocked(XdsApi::kRdsTypeUrl, route_config_name_str,
2004
- delay_unsubscription);
1882
+ if (!authority->xds_servers.empty()) {
1883
+ xds_server = &authority->xds_servers[0];
2005
1884
  }
2006
1885
  }
2007
- }
2008
-
2009
- void XdsClient::WatchClusterData(
2010
- absl::string_view cluster_name,
2011
- std::unique_ptr<ClusterWatcherInterface> watcher) {
2012
- std::string cluster_name_str = std::string(cluster_name);
1886
+ if (xds_server == nullptr) xds_server = &bootstrap_->server();
1887
+ {
1888
+ MutexLock lock(&mu_);
1889
+ MaybeRegisterResourceTypeLocked(type);
1890
+ AuthorityState& authority_state =
1891
+ authority_state_map_[resource_name->authority];
1892
+ ResourceState& resource_state =
1893
+ authority_state.resource_map[type][resource_name->key];
1894
+ resource_state.watchers[w] = watcher;
1895
+ // If we already have a cached value for the resource, notify the new
1896
+ // watcher immediately.
1897
+ if (resource_state.resource != nullptr) {
1898
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1899
+ gpr_log(GPR_INFO,
1900
+ "[xds_client %p] returning cached listener data for %s", this,
1901
+ std::string(name).c_str());
1902
+ }
1903
+ auto* value = type->CopyResource(resource_state.resource.get()).release();
1904
+ work_serializer_.Schedule(
1905
+ [watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1906
+ watcher->OnGenericResourceChanged(value);
1907
+ delete value;
1908
+ },
1909
+ DEBUG_LOCATION);
1910
+ }
1911
+ // If the authority doesn't yet have a channel, set it, creating it if
1912
+ // needed.
1913
+ if (authority_state.channel_state == nullptr) {
1914
+ authority_state.channel_state =
1915
+ GetOrCreateChannelStateLocked(*xds_server);
1916
+ }
1917
+ authority_state.channel_state->SubscribeLocked(type, *resource_name);
1918
+ }
1919
+ work_serializer_.DrainQueue();
1920
+ }
1921
+
1922
+ void XdsClient::CancelResourceWatch(const XdsResourceType* type,
1923
+ absl::string_view name,
1924
+ ResourceWatcherInterface* watcher,
1925
+ bool delay_unsubscription) {
1926
+ auto resource_name = ParseXdsResourceName(name, type);
2013
1927
  MutexLock lock(&mu_);
2014
- ClusterState& cluster_state = cluster_map_[cluster_name_str];
2015
- ClusterWatcherInterface* w = watcher.get();
2016
- cluster_state.watchers[w] = std::move(watcher);
2017
- // If we've already received a CDS update, notify the new watcher
2018
- // immediately.
2019
- if (cluster_state.update.has_value()) {
2020
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2021
- gpr_log(GPR_INFO, "[xds_client %p] returning cached cluster data for %s",
2022
- this, cluster_name_str.c_str());
2023
- }
2024
- w->OnClusterChanged(cluster_state.update.value());
1928
+ if (!resource_name.ok()) {
1929
+ invalid_watchers_.erase(watcher);
1930
+ return;
2025
1931
  }
2026
- chand_->SubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str);
2027
- }
2028
-
2029
- void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
2030
- ClusterWatcherInterface* watcher,
2031
- bool delay_unsubscription) {
2032
- MutexLock lock(&mu_);
2033
1932
  if (shutting_down_) return;
2034
- std::string cluster_name_str = std::string(cluster_name);
2035
- ClusterState& cluster_state = cluster_map_[cluster_name_str];
2036
- auto it = cluster_state.watchers.find(watcher);
2037
- if (it != cluster_state.watchers.end()) {
2038
- cluster_state.watchers.erase(it);
2039
- if (cluster_state.watchers.empty()) {
2040
- cluster_map_.erase(cluster_name_str);
2041
- chand_->UnsubscribeLocked(XdsApi::kCdsTypeUrl, cluster_name_str,
2042
- delay_unsubscription);
2043
- }
2044
- }
2045
- }
2046
-
2047
- void XdsClient::WatchEndpointData(
2048
- absl::string_view eds_service_name,
2049
- std::unique_ptr<EndpointWatcherInterface> watcher) {
2050
- std::string eds_service_name_str = std::string(eds_service_name);
2051
- MutexLock lock(&mu_);
2052
- EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
2053
- EndpointWatcherInterface* w = watcher.get();
2054
- endpoint_state.watchers[w] = std::move(watcher);
2055
- // If we've already received an EDS update, notify the new watcher
2056
- // immediately.
2057
- if (endpoint_state.update.has_value()) {
2058
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2059
- gpr_log(GPR_INFO, "[xds_client %p] returning cached endpoint data for %s",
2060
- this, eds_service_name_str.c_str());
1933
+ // Find authority.
1934
+ if (!resource_name.ok()) return;
1935
+ auto authority_it = authority_state_map_.find(resource_name->authority);
1936
+ if (authority_it == authority_state_map_.end()) return;
1937
+ AuthorityState& authority_state = authority_it->second;
1938
+ // Find type map.
1939
+ auto type_it = authority_state.resource_map.find(type);
1940
+ if (type_it == authority_state.resource_map.end()) return;
1941
+ auto& type_map = type_it->second;
1942
+ // Find resource key.
1943
+ auto resource_it = type_map.find(resource_name->key);
1944
+ if (resource_it == type_map.end()) return;
1945
+ ResourceState& resource_state = resource_it->second;
1946
+ // Remove watcher.
1947
+ resource_state.watchers.erase(watcher);
1948
+ // Clean up empty map entries, if any.
1949
+ if (resource_state.watchers.empty()) {
1950
+ authority_state.channel_state->UnsubscribeLocked(type, *resource_name,
1951
+ delay_unsubscription);
1952
+ type_map.erase(resource_it);
1953
+ if (type_map.empty()) {
1954
+ authority_state.resource_map.erase(type_it);
1955
+ if (authority_state.resource_map.empty()) {
1956
+ authority_state.channel_state.reset();
1957
+ }
2061
1958
  }
2062
- w->OnEndpointChanged(endpoint_state.update.value());
2063
1959
  }
2064
- chand_->SubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str);
2065
1960
  }
2066
1961
 
2067
- void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
2068
- EndpointWatcherInterface* watcher,
2069
- bool delay_unsubscription) {
2070
- MutexLock lock(&mu_);
2071
- if (shutting_down_) return;
2072
- std::string eds_service_name_str = std::string(eds_service_name);
2073
- EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
2074
- auto it = endpoint_state.watchers.find(watcher);
2075
- if (it != endpoint_state.watchers.end()) {
2076
- endpoint_state.watchers.erase(it);
2077
- if (endpoint_state.watchers.empty()) {
2078
- endpoint_map_.erase(eds_service_name_str);
2079
- chand_->UnsubscribeLocked(XdsApi::kEdsTypeUrl, eds_service_name_str,
2080
- delay_unsubscription);
2081
- }
1962
+ void XdsClient::MaybeRegisterResourceTypeLocked(
1963
+ const XdsResourceType* resource_type) {
1964
+ auto it = resource_types_.find(resource_type->type_url());
1965
+ if (it != resource_types_.end()) {
1966
+ GPR_ASSERT(it->second == resource_type);
1967
+ return;
2082
1968
  }
1969
+ resource_types_.emplace(resource_type->type_url(), resource_type);
1970
+ v2_resource_types_.emplace(resource_type->v2_type_url(), resource_type);
1971
+ resource_type->InitUpbSymtab(symtab_.ptr());
1972
+ }
1973
+
1974
+ const XdsResourceType* XdsClient::GetResourceTypeLocked(
1975
+ absl::string_view resource_type) {
1976
+ auto it = resource_types_.find(resource_type);
1977
+ if (it != resource_types_.end()) return it->second;
1978
+ auto it2 = v2_resource_types_.find(resource_type);
1979
+ if (it2 != v2_resource_types_.end()) return it2->second;
1980
+ return nullptr;
1981
+ }
1982
+
1983
+ absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
1984
+ absl::string_view name, const XdsResourceType* type) {
1985
+ // Old-style names use the empty string for authority.
1986
+ // authority is prefixed with "old:" to indicate that it's an old-style name.
1987
+ if (!xds_federation_enabled_ || !absl::StartsWith(name, "xdstp:")) {
1988
+ return XdsResourceName{"old:", {std::string(name), {}}};
1989
+ }
1990
+ // New style name. Parse URI.
1991
+ auto uri = URI::Parse(name);
1992
+ if (!uri.ok()) return uri.status();
1993
+ // Split the resource type off of the path to get the id.
1994
+ std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
1995
+ absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
1996
+ if (!type->IsType(path_parts.first, nullptr)) {
1997
+ return absl::InvalidArgumentError(
1998
+ "xdstp URI path must indicate valid xDS resource type");
1999
+ }
2000
+ // Canonicalize order of query params.
2001
+ std::vector<URI::QueryParam> query_params;
2002
+ for (const auto& p : uri->query_parameter_map()) {
2003
+ query_params.emplace_back(
2004
+ URI::QueryParam{std::string(p.first), std::string(p.second)});
2005
+ }
2006
+ return XdsResourceName{
2007
+ absl::StrCat("xdstp:", uri->authority()),
2008
+ {std::string(path_parts.second), std::move(query_params)}};
2009
+ }
2010
+
2011
+ std::string XdsClient::ConstructFullXdsResourceName(
2012
+ absl::string_view authority, absl::string_view resource_type,
2013
+ const XdsResourceKey& key) {
2014
+ if (absl::ConsumePrefix(&authority, "xdstp:")) {
2015
+ auto uri = URI::Create("xdstp", std::string(authority),
2016
+ absl::StrCat("/", resource_type, "/", key.id),
2017
+ key.query_params, /*fragment=*/"");
2018
+ GPR_ASSERT(uri.ok());
2019
+ return uri->ToString();
2020
+ }
2021
+ // Old-style name.
2022
+ return key.id;
2083
2023
  }
2084
2024
 
2085
2025
  RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
2086
- absl::string_view lrs_server, absl::string_view cluster_name,
2026
+ const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
2087
2027
  absl::string_view eds_service_name) {
2088
- // TODO(roth): When we add support for direct federation, use the
2089
- // server name specified in lrs_server.
2028
+ if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
2090
2029
  auto key =
2091
2030
  std::make_pair(std::string(cluster_name), std::string(eds_service_name));
2092
2031
  MutexLock lock(&mu_);
2093
- // We jump through some hoops here to make sure that the absl::string_views
2094
- // stored in the XdsClusterDropStats object point to the strings
2032
+ // We jump through some hoops here to make sure that the const
2033
+ // XdsBootstrap::XdsServer& and absl::string_views
2034
+ // stored in the XdsClusterDropStats object point to the
2035
+ // XdsBootstrap::XdsServer and strings
2095
2036
  // in the load_report_map_ key, so that they have the same lifetime.
2096
- auto it = load_report_map_
2097
- .emplace(std::make_pair(std::move(key), LoadReportState()))
2098
- .first;
2099
- LoadReportState& load_report_state = it->second;
2037
+ auto server_it =
2038
+ xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
2039
+ if (server_it->second.channel_state == nullptr) {
2040
+ server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
2041
+ }
2042
+ auto load_report_it = server_it->second.load_report_map
2043
+ .emplace(std::move(key), LoadReportState())
2044
+ .first;
2045
+ LoadReportState& load_report_state = load_report_it->second;
2100
2046
  RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
2101
2047
  if (load_report_state.drop_stats != nullptr) {
2102
2048
  cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
@@ -2107,26 +2053,26 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
2107
2053
  load_report_state.drop_stats->GetSnapshotAndReset();
2108
2054
  }
2109
2055
  cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
2110
- Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
2111
- it->first.first /*cluster_name*/,
2112
- it->first.second /*eds_service_name*/);
2056
+ Ref(DEBUG_LOCATION, "DropStats"), server_it->first,
2057
+ load_report_it->first.first /*cluster_name*/,
2058
+ load_report_it->first.second /*eds_service_name*/);
2113
2059
  load_report_state.drop_stats = cluster_drop_stats.get();
2114
2060
  }
2115
- chand_->MaybeStartLrsCall();
2061
+ server_it->second.channel_state->MaybeStartLrsCall();
2116
2062
  return cluster_drop_stats;
2117
2063
  }
2118
2064
 
2119
2065
  void XdsClient::RemoveClusterDropStats(
2120
- absl::string_view /*lrs_server*/, absl::string_view cluster_name,
2066
+ const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
2121
2067
  absl::string_view eds_service_name,
2122
2068
  XdsClusterDropStats* cluster_drop_stats) {
2123
2069
  MutexLock lock(&mu_);
2124
- // TODO(roth): When we add support for direct federation, use the
2125
- // server name specified in lrs_server.
2126
- auto it = load_report_map_.find(
2070
+ auto server_it = xds_load_report_server_map_.find(xds_server);
2071
+ if (server_it == xds_load_report_server_map_.end()) return;
2072
+ auto load_report_it = server_it->second.load_report_map.find(
2127
2073
  std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2128
- if (it == load_report_map_.end()) return;
2129
- LoadReportState& load_report_state = it->second;
2074
+ if (load_report_it == server_it->second.load_report_map.end()) return;
2075
+ LoadReportState& load_report_state = load_report_it->second;
2130
2076
  if (load_report_state.drop_stats == cluster_drop_stats) {
2131
2077
  // Record final snapshot in deleted_drop_stats, which will be
2132
2078
  // added to the next load report.
@@ -2137,21 +2083,27 @@ void XdsClient::RemoveClusterDropStats(
2137
2083
  }
2138
2084
 
2139
2085
  RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
2140
- absl::string_view lrs_server, absl::string_view cluster_name,
2086
+ const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
2141
2087
  absl::string_view eds_service_name,
2142
2088
  RefCountedPtr<XdsLocalityName> locality) {
2143
- // TODO(roth): When we add support for direct federation, use the
2144
- // server name specified in lrs_server.
2089
+ if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
2145
2090
  auto key =
2146
2091
  std::make_pair(std::string(cluster_name), std::string(eds_service_name));
2147
2092
  MutexLock lock(&mu_);
2148
- // We jump through some hoops here to make sure that the absl::string_views
2149
- // stored in the XdsClusterLocalityStats object point to the strings
2093
+ // We jump through some hoops here to make sure that the const
2094
+ // XdsBootstrap::XdsServer& and absl::string_views
2095
+ // stored in the XdsClusterDropStats object point to the
2096
+ // XdsBootstrap::XdsServer and strings
2150
2097
  // in the load_report_map_ key, so that they have the same lifetime.
2151
- auto it = load_report_map_
2152
- .emplace(std::make_pair(std::move(key), LoadReportState()))
2153
- .first;
2154
- LoadReportState& load_report_state = it->second;
2098
+ auto server_it =
2099
+ xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
2100
+ if (server_it->second.channel_state == nullptr) {
2101
+ server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
2102
+ }
2103
+ auto load_report_it = server_it->second.load_report_map
2104
+ .emplace(std::move(key), LoadReportState())
2105
+ .first;
2106
+ LoadReportState& load_report_state = load_report_it->second;
2155
2107
  LoadReportState::LocalityState& locality_state =
2156
2108
  load_report_state.locality_stats[locality];
2157
2109
  RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
@@ -2164,27 +2116,27 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
2164
2116
  locality_state.locality_stats->GetSnapshotAndReset();
2165
2117
  }
2166
2118
  cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
2167
- Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
2168
- it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
2169
- std::move(locality));
2119
+ Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
2120
+ load_report_it->first.first /*cluster_name*/,
2121
+ load_report_it->first.second /*eds_service_name*/, std::move(locality));
2170
2122
  locality_state.locality_stats = cluster_locality_stats.get();
2171
2123
  }
2172
- chand_->MaybeStartLrsCall();
2124
+ server_it->second.channel_state->MaybeStartLrsCall();
2173
2125
  return cluster_locality_stats;
2174
2126
  }
2175
2127
 
2176
2128
  void XdsClient::RemoveClusterLocalityStats(
2177
- absl::string_view /*lrs_server*/, absl::string_view cluster_name,
2129
+ const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
2178
2130
  absl::string_view eds_service_name,
2179
2131
  const RefCountedPtr<XdsLocalityName>& locality,
2180
2132
  XdsClusterLocalityStats* cluster_locality_stats) {
2181
2133
  MutexLock lock(&mu_);
2182
- // TODO(roth): When we add support for direct federation, use the
2183
- // server name specified in lrs_server.
2184
- auto it = load_report_map_.find(
2134
+ auto server_it = xds_load_report_server_map_.find(xds_server);
2135
+ if (server_it == xds_load_report_server_map_.end()) return;
2136
+ auto load_report_it = server_it->second.load_report_map.find(
2185
2137
  std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
2186
- if (it == load_report_map_.end()) return;
2187
- LoadReportState& load_report_state = it->second;
2138
+ if (load_report_it == server_it->second.load_report_map.end()) return;
2139
+ LoadReportState& load_report_state = load_report_it->second;
2188
2140
  auto locality_it = load_report_state.locality_stats.find(locality);
2189
2141
  if (locality_it == load_report_state.locality_stats.end()) return;
2190
2142
  LoadReportState::LocalityState& locality_state = locality_it->second;
@@ -2199,47 +2151,82 @@ void XdsClient::RemoveClusterLocalityStats(
2199
2151
 
2200
2152
  void XdsClient::ResetBackoff() {
2201
2153
  MutexLock lock(&mu_);
2202
- if (chand_ != nullptr) {
2203
- grpc_channel_reset_connect_backoff(chand_->channel());
2154
+ for (auto& p : xds_server_channel_map_) {
2155
+ grpc_channel_reset_connect_backoff(p.second->channel());
2204
2156
  }
2205
2157
  }
2206
2158
 
2207
- void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
2208
- for (const auto& p : listener_map_) {
2209
- const ListenerState& listener_state = p.second;
2210
- for (const auto& p : listener_state.watchers) {
2211
- p.first->OnError(GRPC_ERROR_REF(error));
2212
- }
2159
+ void XdsClient::NotifyOnErrorLocked(absl::Status status) {
2160
+ const auto* node = bootstrap_->node();
2161
+ if (node != nullptr) {
2162
+ status = absl::Status(
2163
+ status.code(), absl::StrCat(status.message(),
2164
+ " (node ID:", bootstrap_->node()->id, ")"));
2213
2165
  }
2214
- for (const auto& p : route_config_map_) {
2215
- const RouteConfigState& route_config_state = p.second;
2216
- for (const auto& p : route_config_state.watchers) {
2217
- p.first->OnError(GRPC_ERROR_REF(error));
2218
- }
2219
- }
2220
- for (const auto& p : cluster_map_) {
2221
- const ClusterState& cluster_state = p.second;
2222
- for (const auto& p : cluster_state.watchers) {
2223
- p.first->OnError(GRPC_ERROR_REF(error));
2224
- }
2225
- }
2226
- for (const auto& p : endpoint_map_) {
2227
- const EndpointState& endpoint_state = p.second;
2228
- for (const auto& p : endpoint_state.watchers) {
2229
- p.first->OnError(GRPC_ERROR_REF(error));
2166
+ std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
2167
+ for (const auto& a : authority_state_map_) { // authority
2168
+ for (const auto& t : a.second.resource_map) { // type
2169
+ for (const auto& r : t.second) { // resource id
2170
+ for (const auto& w : r.second.watchers) { // watchers
2171
+ watchers.insert(w.second);
2172
+ }
2173
+ }
2230
2174
  }
2231
2175
  }
2232
- GRPC_ERROR_UNREF(error);
2176
+ work_serializer_.Schedule(
2177
+ // TODO(yashykt): When we move to C++14, capture watchers using
2178
+ // std::move()
2179
+ [watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
2180
+ for (const auto& watcher : watchers) {
2181
+ watcher->OnError(status);
2182
+ }
2183
+ },
2184
+ DEBUG_LOCATION);
2185
+ }
2186
+
2187
+ void XdsClient::NotifyWatchersOnErrorLocked(
2188
+ const std::map<ResourceWatcherInterface*,
2189
+ RefCountedPtr<ResourceWatcherInterface>>& watchers,
2190
+ absl::Status status) {
2191
+ const auto* node = bootstrap_->node();
2192
+ if (node != nullptr) {
2193
+ status = absl::Status(
2194
+ status.code(), absl::StrCat(status.message(),
2195
+ " (node ID:", bootstrap_->node()->id, ")"));
2196
+ }
2197
+ work_serializer_.Schedule(
2198
+ [watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
2199
+ for (const auto& p : watchers) {
2200
+ p.first->OnError(status);
2201
+ }
2202
+ },
2203
+ DEBUG_LOCATION);
2204
+ }
2205
+
2206
+ void XdsClient::NotifyWatchersOnResourceDoesNotExist(
2207
+ const std::map<ResourceWatcherInterface*,
2208
+ RefCountedPtr<ResourceWatcherInterface>>& watchers) {
2209
+ work_serializer_.Schedule(
2210
+ [watchers]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
2211
+ for (const auto& p : watchers) {
2212
+ p.first->OnResourceDoesNotExist();
2213
+ }
2214
+ },
2215
+ DEBUG_LOCATION);
2233
2216
  }
2234
2217
 
2235
2218
  XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2236
- bool send_all_clusters, const std::set<std::string>& clusters) {
2219
+ const XdsBootstrap::XdsServer& xds_server, bool send_all_clusters,
2220
+ const std::set<std::string>& clusters) {
2237
2221
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2238
2222
  gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
2239
2223
  }
2240
2224
  XdsApi::ClusterLoadReportMap snapshot_map;
2241
- for (auto load_report_it = load_report_map_.begin();
2242
- load_report_it != load_report_map_.end();) {
2225
+ auto server_it = xds_load_report_server_map_.find(xds_server);
2226
+ if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
2227
+ auto& load_report_map = server_it->second.load_report_map;
2228
+ for (auto load_report_it = load_report_map.begin();
2229
+ load_report_it != load_report_map.end();) {
2243
2230
  // Cluster key is cluster and EDS service name.
2244
2231
  const auto& cluster_key = load_report_it->first;
2245
2232
  LoadReportState& load_report = load_report_it->second;
@@ -2294,7 +2281,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2294
2281
  }
2295
2282
  }
2296
2283
  // Compute load report interval.
2297
- const grpc_millis now = ExecCtx::Get()->Now();
2284
+ const Timestamp now = ExecCtx::Get()->Now();
2298
2285
  snapshot.load_report_interval = now - load_report.last_report_time;
2299
2286
  load_report.last_report_time = now;
2300
2287
  // Record snapshot.
@@ -2305,7 +2292,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2305
2292
  // deleted stats objects, remove the entry.
2306
2293
  if (load_report.locality_stats.empty() &&
2307
2294
  load_report.drop_stats == nullptr) {
2308
- load_report_it = load_report_map_.erase(load_report_it);
2295
+ load_report_it = load_report_map.erase(load_report_it);
2309
2296
  } else {
2310
2297
  ++load_report_it;
2311
2298
  }
@@ -2316,34 +2303,19 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2316
2303
  std::string XdsClient::DumpClientConfigBinary() {
2317
2304
  MutexLock lock(&mu_);
2318
2305
  XdsApi::ResourceTypeMetadataMap resource_type_metadata_map;
2319
- // Update per-xds-type version if available, this version corresponding to the
2320
- // last successful ADS update version.
2321
- for (auto& p : resource_version_map_) {
2322
- resource_type_metadata_map[p.first].version = p.second;
2323
- }
2324
- // Collect resource metadata from listeners
2325
- auto& lds_map =
2326
- resource_type_metadata_map[XdsApi::kLdsTypeUrl].resource_metadata_map;
2327
- for (auto& p : listener_map_) {
2328
- lds_map[p.first] = &p.second.meta;
2329
- }
2330
- // Collect resource metadata from route configs
2331
- auto& rds_map =
2332
- resource_type_metadata_map[XdsApi::kRdsTypeUrl].resource_metadata_map;
2333
- for (auto& p : route_config_map_) {
2334
- rds_map[p.first] = &p.second.meta;
2335
- }
2336
- // Collect resource metadata from clusters
2337
- auto& cds_map =
2338
- resource_type_metadata_map[XdsApi::kCdsTypeUrl].resource_metadata_map;
2339
- for (auto& p : cluster_map_) {
2340
- cds_map[p.first] = &p.second.meta;
2341
- }
2342
- // Collect resource metadata from endpoints
2343
- auto& eds_map =
2344
- resource_type_metadata_map[XdsApi::kEdsTypeUrl].resource_metadata_map;
2345
- for (auto& p : endpoint_map_) {
2346
- eds_map[p.first] = &p.second.meta;
2306
+ for (const auto& a : authority_state_map_) { // authority
2307
+ const std::string& authority = a.first;
2308
+ for (const auto& t : a.second.resource_map) { // type
2309
+ const XdsResourceType* type = t.first;
2310
+ auto& resource_metadata_map =
2311
+ resource_type_metadata_map[type->type_url()];
2312
+ for (const auto& r : t.second) { // resource id
2313
+ const XdsResourceKey& resource_key = r.first;
2314
+ const ResourceState& resource_state = r.second;
2315
+ resource_metadata_map[ConstructFullXdsResourceName(
2316
+ authority, type->type_url(), resource_key)] = &resource_state.meta;
2317
+ }
2318
+ }
2347
2319
  }
2348
2320
  // Assemble config dump messages
2349
2321
  return api_.AssembleClientConfig(resource_type_metadata_map);
@@ -2356,6 +2328,7 @@ std::string XdsClient::DumpClientConfigBinary() {
2356
2328
  void XdsClientGlobalInit() {
2357
2329
  g_mu = new Mutex;
2358
2330
  XdsHttpFilterRegistry::Init();
2331
+ XdsClusterSpecifierPluginRegistry::Init();
2359
2332
  }
2360
2333
 
2361
2334
  // TODO(roth): Find a better way to clear the fallback config that does
@@ -2366,6 +2339,7 @@ void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
2366
2339
  delete g_mu;
2367
2340
  g_mu = nullptr;
2368
2341
  XdsHttpFilterRegistry::Shutdown();
2342
+ XdsClusterSpecifierPluginRegistry::Shutdown();
2369
2343
  }
2370
2344
 
2371
2345
  namespace {
@@ -2373,7 +2347,7 @@ namespace {
2373
2347
  std::string GetBootstrapContents(const char* fallback_config,
2374
2348
  grpc_error_handle* error) {
2375
2349
  // First, try GRPC_XDS_BOOTSTRAP env var.
2376
- grpc_core::UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
2350
+ UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
2377
2351
  if (path != nullptr) {
2378
2352
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2379
2353
  gpr_log(GPR_INFO,
@@ -2390,8 +2364,7 @@ std::string GetBootstrapContents(const char* fallback_config,
2390
2364
  return contents_str;
2391
2365
  }
2392
2366
  // Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
2393
- grpc_core::UniquePtr<char> env_config(
2394
- gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
2367
+ UniquePtr<char> env_config(gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
2395
2368
  if (env_config != nullptr) {
2396
2369
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2397
2370
  gpr_log(GPR_INFO,
@@ -2501,7 +2474,7 @@ void XdsClientArgDestroy(void* p) {
2501
2474
  xds_client->Unref(DEBUG_LOCATION, "channel arg");
2502
2475
  }
2503
2476
 
2504
- int XdsClientArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
2477
+ int XdsClientArgCmp(void* p, void* q) { return QsortCompare(p, q); }
2505
2478
 
2506
2479
  const grpc_arg_pointer_vtable kXdsClientArgVtable = {
2507
2480
  XdsClientArgCopy, XdsClientArgDestroy, XdsClientArgCmp};