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