grpc 1.35.0 → 1.47.0

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

Potentially problematic release.


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

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