grpc 1.48.0 → 1.56.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 (2600) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +501 -260
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +99 -36
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -1
  11. data/include/grpc/event_engine/slice.h +24 -4
  12. data/include/grpc/event_engine/slice_buffer.h +44 -3
  13. data/include/grpc/fork.h +25 -1
  14. data/include/grpc/grpc.h +3 -13
  15. data/include/grpc/grpc_audit_logging.h +96 -0
  16. data/include/grpc/grpc_posix.h +1 -1
  17. data/include/grpc/grpc_security.h +4 -0
  18. data/include/grpc/impl/codegen/atm.h +3 -71
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  21. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  22. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  24. data/include/grpc/impl/codegen/compression_types.h +3 -82
  25. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  26. data/include/grpc/impl/codegen/fork.h +4 -25
  27. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  28. data/include/grpc/impl/codegen/grpc_types.h +3 -790
  29. data/include/grpc/impl/codegen/log.h +3 -86
  30. data/include/grpc/impl/codegen/port_platform.h +3 -766
  31. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  32. data/include/grpc/impl/codegen/slice.h +3 -106
  33. data/include/grpc/impl/codegen/status.h +4 -131
  34. data/include/grpc/impl/codegen/sync.h +3 -42
  35. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  36. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  38. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  39. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  40. data/include/grpc/impl/compression_types.h +109 -0
  41. data/include/grpc/impl/connectivity_state.h +47 -0
  42. data/include/grpc/impl/grpc_types.h +838 -0
  43. data/include/grpc/impl/propagation_bits.h +54 -0
  44. data/include/grpc/impl/slice_type.h +112 -0
  45. data/include/grpc/load_reporting.h +1 -1
  46. data/include/grpc/module.modulemap +7 -1
  47. data/include/grpc/slice.h +1 -1
  48. data/include/grpc/status.h +131 -1
  49. data/include/grpc/support/atm.h +70 -1
  50. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  51. data/include/grpc/support/atm_gcc_sync.h +58 -1
  52. data/include/grpc/support/atm_windows.h +105 -1
  53. data/include/grpc/support/json.h +218 -0
  54. data/include/grpc/support/log.h +87 -1
  55. data/include/grpc/support/log_windows.h +1 -1
  56. data/include/grpc/support/port_platform.h +767 -1
  57. data/include/grpc/support/string_util.h +1 -1
  58. data/include/grpc/support/sync.h +35 -2
  59. data/include/grpc/support/sync_abseil.h +11 -1
  60. data/include/grpc/support/sync_custom.h +13 -1
  61. data/include/grpc/support/sync_generic.h +24 -1
  62. data/include/grpc/support/sync_posix.h +27 -1
  63. data/include/grpc/support/sync_windows.h +15 -1
  64. data/include/grpc/support/time.h +31 -6
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +164 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  67. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  68. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +34 -28
  70. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +7 -6
  71. data/src/core/ext/filters/channel_idle/idle_filter_state.h +4 -4
  72. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -1
  73. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  74. data/src/core/ext/filters/client_channel/backup_poller.cc +30 -41
  75. data/src/core/ext/filters/client_channel/backup_poller.h +24 -27
  76. data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
  77. data/src/core/ext/filters/client_channel/client_channel.cc +1135 -1201
  78. data/src/core/ext/filters/client_channel/client_channel.h +170 -195
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +36 -37
  80. data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
  81. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -46
  82. data/src/core/ext/filters/client_channel/client_channel_factory.h +5 -13
  83. data/src/core/ext/filters/client_channel/client_channel_internal.h +77 -0
  84. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -34
  85. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  86. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -26
  87. data/src/core/ext/filters/client_channel/config_selector.h +34 -56
  88. data/src/core/ext/filters/client_channel/connector.h +13 -10
  89. data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
  90. data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
  92. data/src/core/ext/filters/client_channel/http_proxy.cc +125 -112
  93. data/src/core/ext/filters/client_channel/http_proxy.h +36 -32
  94. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  95. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  96. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +29 -21
  97. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +27 -18
  98. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +14 -14
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -132
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +40 -24
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +325 -360
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -4
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -19
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -24
  109. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  112. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +30 -104
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +5 -5
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +436 -311
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +69 -8
  117. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +61 -56
  118. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +261 -401
  119. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +288 -310
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +32 -10
  121. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +561 -626
  122. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +60 -53
  123. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +94 -57
  124. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +198 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1002 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +176 -186
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +166 -176
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +159 -262
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +183 -215
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +391 -444
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +814 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +363 -0
  138. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
  139. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +13 -18
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +456 -286
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +92 -87
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +303 -232
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +69 -57
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
  151. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +549 -0
  152. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
  153. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
  154. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
  155. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -46
  156. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
  157. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -20
  158. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +15 -4
  159. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +127 -246
  160. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +122 -67
  161. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +25 -18
  162. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +8 -19
  163. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +431 -341
  164. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +19 -4
  165. data/src/core/ext/filters/client_channel/retry_filter.cc +220 -295
  166. data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
  167. data/src/core/ext/filters/client_channel/retry_service_config.cc +195 -225
  168. data/src/core/ext/filters/client_channel/retry_service_config.h +22 -28
  169. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  170. data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
  171. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -53
  172. data/src/core/ext/filters/client_channel/subchannel.cc +211 -450
  173. data/src/core/ext/filters/client_channel/subchannel.h +42 -96
  174. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +4 -4
  175. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  176. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +37 -46
  177. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +38 -42
  178. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +11 -8
  179. data/src/core/ext/filters/deadline/deadline_filter.cc +78 -69
  180. data/src/core/ext/filters/deadline/deadline_filter.h +8 -13
  181. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +26 -20
  182. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +12 -8
  183. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  184. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -13
  185. data/src/core/ext/filters/http/client/http_client_filter.cc +48 -46
  186. data/src/core/ext/filters/http/client/http_client_filter.h +21 -21
  187. data/src/core/ext/filters/http/client_authority_filter.cc +20 -21
  188. data/src/core/ext/filters/http/client_authority_filter.h +22 -22
  189. data/src/core/ext/filters/http/http_filters_plugin.cc +30 -57
  190. data/src/core/ext/filters/http/message_compress/compression_filter.cc +323 -0
  191. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  192. data/src/core/ext/filters/http/server/http_server_filter.cc +55 -55
  193. data/src/core/ext/filters/http/server/http_server_filter.h +22 -22
  194. data/src/core/ext/filters/message_size/message_size_filter.cc +183 -290
  195. data/src/core/ext/filters/message_size/message_size_filter.h +72 -23
  196. data/src/core/ext/filters/rbac/rbac_filter.cc +16 -15
  197. data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
  198. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +831 -536
  199. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +7 -8
  200. data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -11
  201. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +15 -21
  202. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
  203. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +220 -0
  204. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +81 -0
  205. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  206. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  207. data/src/core/ext/gcp/metadata_query.cc +137 -0
  208. data/src/core/ext/gcp/metadata_query.h +87 -0
  209. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  210. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  211. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +108 -130
  212. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
  213. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +221 -242
  214. data/src/core/ext/transport/chttp2/server/chttp2_server.h +25 -27
  215. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  216. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
  217. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +42 -38
  218. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
  219. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +808 -730
  220. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +45 -24
  221. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
  222. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  223. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  224. data/src/core/ext/transport/chttp2/transport/flow_control.cc +180 -60
  225. data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -45
  226. data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
  227. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -32
  228. data/src/core/ext/transport/chttp2/transport/frame_data.h +27 -27
  229. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
  230. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
  231. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +28 -33
  232. data/src/core/ext/transport/chttp2/transport/frame_ping.h +21 -24
  233. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
  234. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
  235. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +39 -37
  236. data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
  237. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +24 -21
  238. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
  239. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  240. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +212 -365
  241. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +328 -160
  242. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -2
  243. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +13 -5
  244. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +500 -754
  245. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -26
  246. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +42 -47
  247. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +41 -28
  248. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  249. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
  250. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  251. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  252. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  253. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  254. data/src/core/ext/transport/chttp2/transport/internal.h +224 -193
  255. data/src/core/ext/transport/chttp2/transport/parsing.cc +307 -109
  256. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  257. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  258. data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
  259. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  260. data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
  261. data/src/core/ext/transport/chttp2/transport/writing.cc +94 -84
  262. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  263. data/src/core/ext/transport/inproc/inproc_transport.cc +184 -232
  264. data/src/core/ext/transport/inproc/inproc_transport.h +21 -21
  265. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
  266. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +435 -182
  267. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -59
  268. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +502 -220
  269. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +93 -377
  270. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +468 -1881
  271. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +535 -0
  272. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +2796 -0
  273. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
  274. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +152 -47
  275. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -19
  276. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +176 -49
  277. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
  278. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +82 -38
  279. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
  280. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +52 -26
  281. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
  282. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +52 -26
  283. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
  284. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +574 -244
  285. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
  286. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +49 -30
  287. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
  288. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
  289. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
  290. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +49 -30
  291. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
  292. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +795 -406
  293. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -256
  294. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1954 -858
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
  296. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +298 -148
  297. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +537 -348
  298. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2136 -1171
  299. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
  300. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +49 -30
  301. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
  302. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +351 -232
  303. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
  304. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +948 -480
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +154 -72
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +631 -213
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +54 -36
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -219
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1263 -598
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +694 -292
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +41 -26
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +49 -30
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +152 -47
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +841 -440
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +222 -128
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1152 -485
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +64 -37
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -207
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1156 -620
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +44 -11
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +179 -18
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
  330. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +127 -57
  331. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +48 -16
  332. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +193 -44
  333. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
  334. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +147 -65
  335. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
  336. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +55 -37
  337. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
  338. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +277 -127
  339. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +147 -84
  340. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +479 -227
  341. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
  342. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +579 -227
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -26
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +198 -94
  346. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +1072 -358
  347. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
  348. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +893 -375
  349. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +49 -23
  350. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +186 -89
  351. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +40 -16
  352. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +95 -45
  353. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
  354. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +75 -45
  355. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
  356. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +521 -249
  357. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
  358. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +542 -246
  359. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +263 -121
  360. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1083 -374
  361. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +83 -48
  362. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +656 -232
  363. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1317 -722
  364. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5948 -2306
  365. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
  366. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +177 -85
  367. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +223 -117
  368. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +847 -369
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -10
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +57 -22
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +49 -30
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +78 -49
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +114 -43
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +263 -100
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +55 -0
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +122 -0
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +39 -26
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
  384. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +116 -70
  385. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +8 -4
  386. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -15
  387. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
  388. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +118 -75
  389. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -16
  390. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +104 -46
  391. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
  392. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +77 -23
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +170 -108
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +369 -167
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +47 -21
  398. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -58
  399. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -18
  400. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +257 -67
  401. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +75 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +201 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +476 -283
  404. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2259 -1015
  405. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +53 -0
  406. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +107 -0
  407. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +69 -0
  408. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +246 -0
  409. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +138 -0
  410. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +499 -0
  411. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +36 -17
  412. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +148 -55
  413. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
  414. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +39 -26
  415. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
  416. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
  417. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -94
  418. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +948 -349
  419. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
  420. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +162 -101
  421. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -109
  422. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +855 -408
  423. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
  424. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +118 -54
  425. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
  426. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +22 -14
  427. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +325 -85
  428. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1705 -299
  429. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
  430. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +197 -76
  431. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +131 -84
  432. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +531 -239
  433. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
  434. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +59 -34
  435. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
  436. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +141 -69
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +56 -0
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +130 -0
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +60 -26
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +146 -51
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +141 -63
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +95 -40
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +54 -32
  447. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
  448. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +41 -26
  449. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
  450. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +113 -70
  451. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +46 -0
  452. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +117 -0
  453. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
  454. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +170 -76
  455. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
  456. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +123 -57
  457. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
  458. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +151 -91
  459. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
  460. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +228 -121
  461. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
  462. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +228 -131
  463. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
  464. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +86 -53
  465. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
  466. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
  467. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
  468. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +32 -18
  469. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
  470. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +63 -34
  471. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
  472. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +103 -53
  473. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +78 -0
  474. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +237 -0
  475. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
  476. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +16 -9
  477. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
  478. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +52 -26
  479. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
  480. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +65 -41
  481. data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
  482. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
  483. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
  484. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +979 -451
  485. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
  486. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +995 -484
  487. data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
  488. data/src/core/ext/upb-generated/google/api/http.upb.h +297 -121
  489. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
  490. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -37
  491. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
  492. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +42 -22
  493. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1037 -442
  494. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3972 -1411
  495. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
  496. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +42 -22
  497. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
  498. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +22 -14
  499. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
  500. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +220 -103
  501. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
  502. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +42 -22
  503. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
  504. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +193 -107
  505. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
  506. data/src/core/ext/upb-generated/google/rpc/status.upb.h +99 -37
  507. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
  508. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +170 -92
  509. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
  510. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +122 -60
  511. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
  512. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +960 -416
  513. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
  514. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +84 -51
  515. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
  516. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +53 -30
  517. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
  518. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +442 -218
  519. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
  520. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +161 -61
  521. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
  522. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +884 -299
  523. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
  524. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +167 -104
  525. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
  526. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -34
  527. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
  528. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
  529. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
  530. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +59 -34
  531. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
  532. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +49 -30
  533. data/src/core/ext/upb-generated/validate/validate.upb.c +846 -456
  534. data/src/core/ext/upb-generated/validate/validate.upb.h +4439 -1908
  535. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
  536. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +167 -104
  537. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
  538. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +59 -34
  539. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
  540. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
  541. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
  542. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +153 -91
  543. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
  544. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +49 -30
  545. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
  546. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +32 -18
  547. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +56 -0
  548. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +122 -0
  549. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
  550. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +104 -63
  551. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
  552. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +56 -29
  553. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
  554. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +49 -30
  555. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
  556. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +66 -42
  557. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
  558. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +177 -79
  559. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
  560. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +69 -38
  561. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +86 -30
  562. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +227 -54
  563. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -13
  564. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +93 -34
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +53 -0
  566. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +107 -0
  567. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +75 -0
  568. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +270 -0
  569. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +39 -0
  570. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +78 -0
  571. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +78 -0
  572. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +289 -0
  573. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
  574. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +539 -295
  575. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +160 -0
  576. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +740 -0
  577. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
  578. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +61 -37
  579. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
  580. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +170 -76
  581. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +82 -0
  582. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +240 -0
  583. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +85 -0
  584. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +246 -0
  585. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -13
  586. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +49 -30
  587. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
  588. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
  589. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +55 -54
  590. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
  591. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +68 -275
  592. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -90
  593. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  594. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +126 -0
  595. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
  596. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
  597. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +15 -12
  598. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
  599. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
  600. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
  601. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
  602. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
  603. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
  604. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
  605. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
  606. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
  607. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
  608. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
  609. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
  610. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
  611. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
  612. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
  613. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +108 -108
  614. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
  615. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +251 -236
  616. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
  617. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
  618. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
  619. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +233 -223
  620. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -10
  621. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
  622. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
  623. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
  624. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
  625. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
  626. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
  627. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +96 -76
  628. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +11 -5
  629. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
  630. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
  631. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +188 -184
  632. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
  633. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
  634. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
  635. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
  637. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
  638. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
  639. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
  640. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
  641. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
  642. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
  643. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +82 -76
  644. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
  645. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
  646. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
  647. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +194 -187
  648. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
  649. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +32 -16
  650. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +11 -5
  651. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
  652. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
  653. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +8 -4
  654. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +11 -5
  655. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +17 -17
  656. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
  657. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
  658. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
  659. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
  660. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
  661. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +72 -67
  662. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
  663. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
  664. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
  665. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
  666. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
  667. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +161 -131
  668. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +26 -5
  669. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
  670. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
  671. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +55 -42
  672. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
  673. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -32
  674. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
  675. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
  676. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
  677. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
  678. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
  679. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
  680. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
  681. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +162 -129
  682. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +21 -5
  683. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +83 -75
  684. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +8 -7
  685. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +744 -668
  686. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +26 -5
  687. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
  688. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
  689. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +151 -140
  690. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +11 -5
  691. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +17 -15
  692. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
  693. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
  694. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
  695. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
  696. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
  697. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
  698. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
  699. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
  700. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
  701. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +45 -0
  702. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +36 -0
  703. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
  704. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
  705. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
  706. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
  707. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +17 -13
  708. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
  709. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
  710. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
  711. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +21 -19
  712. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
  713. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
  714. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
  715. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
  716. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
  717. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
  718. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
  719. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +47 -26
  720. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
  721. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +54 -43
  722. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
  723. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  724. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +41 -0
  725. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +497 -468
  726. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
  727. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  728. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +36 -0
  729. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
  730. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
  731. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -133
  732. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
  733. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
  734. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
  735. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +151 -147
  736. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
  737. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
  738. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
  739. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +6 -6
  740. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
  741. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +157 -85
  742. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +41 -5
  743. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +6 -6
  744. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
  745. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -114
  746. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
  747. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
  748. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
  749. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
  750. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
  751. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  752. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +36 -0
  753. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +13 -10
  754. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +11 -5
  755. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
  756. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
  757. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
  758. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
  759. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
  760. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
  761. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
  762. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
  763. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +30 -29
  764. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
  765. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  766. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +41 -0
  767. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
  768. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
  769. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
  770. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
  771. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
  772. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
  773. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
  774. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
  775. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
  776. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
  777. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
  778. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
  779. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
  780. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
  781. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
  782. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
  783. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
  784. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
  785. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
  786. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
  787. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  788. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +41 -0
  789. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +11 -10
  790. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
  791. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
  792. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
  793. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
  794. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
  795. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
  796. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
  797. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
  798. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
  799. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
  800. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
  801. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
  802. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
  803. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
  804. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
  805. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
  806. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
  807. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +328 -270
  808. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
  809. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
  810. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
  811. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
  812. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
  813. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
  814. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
  815. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
  816. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
  817. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
  818. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
  819. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
  820. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
  821. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
  822. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
  823. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
  824. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
  825. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
  826. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
  827. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
  828. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
  829. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
  830. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
  831. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
  832. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
  833. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
  834. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
  835. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
  836. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
  837. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
  838. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
  839. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
  840. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
  841. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
  842. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
  843. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
  844. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
  845. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
  846. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
  847. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
  848. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
  849. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  850. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +36 -0
  851. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
  852. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
  853. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
  854. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
  855. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
  856. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
  857. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
  858. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
  859. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
  860. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
  861. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
  862. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
  863. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  864. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +36 -0
  865. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  866. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +41 -0
  867. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  868. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +36 -0
  869. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  870. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +41 -0
  871. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +10 -10
  872. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
  873. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  874. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +61 -0
  875. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
  876. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
  877. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
  878. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
  879. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  880. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +41 -0
  881. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  882. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +46 -0
  883. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +5 -8
  884. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
  885. data/src/core/ext/xds/certificate_provider_store.cc +58 -3
  886. data/src/core/ext/xds/certificate_provider_store.h +12 -4
  887. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +36 -50
  888. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +18 -13
  889. data/src/core/ext/xds/upb_utils.h +4 -25
  890. data/src/core/ext/xds/xds_api.cc +117 -198
  891. data/src/core/ext/xds/xds_api.h +32 -36
  892. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  893. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  894. data/src/core/ext/xds/xds_bootstrap.cc +7 -552
  895. data/src/core/ext/xds/xds_bootstrap.h +41 -94
  896. data/src/core/ext/xds/xds_bootstrap_grpc.cc +374 -0
  897. data/src/core/ext/xds/xds_bootstrap_grpc.h +189 -0
  898. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  899. data/src/core/ext/xds/xds_certificate_provider.h +13 -4
  900. data/src/core/ext/xds/xds_channel_args.h +3 -3
  901. data/src/core/ext/xds/xds_channel_stack_modifier.cc +7 -7
  902. data/src/core/ext/xds/xds_channel_stack_modifier.h +12 -4
  903. data/src/core/ext/xds/xds_client.cc +830 -1348
  904. data/src/core/ext/xds/xds_client.h +46 -64
  905. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  906. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  907. data/src/core/ext/xds/xds_client_stats.cc +50 -36
  908. data/src/core/ext/xds/xds_client_stats.h +46 -41
  909. data/src/core/ext/xds/xds_cluster.cc +396 -246
  910. data/src/core/ext/xds/xds_cluster.h +60 -43
  911. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +62 -77
  912. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +50 -25
  913. data/src/core/ext/xds/xds_common_types.cc +234 -130
  914. data/src/core/ext/xds/xds_common_types.h +24 -19
  915. data/src/core/ext/xds/xds_endpoint.cc +263 -164
  916. data/src/core/ext/xds/xds_endpoint.h +19 -15
  917. data/src/core/ext/xds/xds_health_status.cc +80 -0
  918. data/src/core/ext/xds/xds_health_status.h +109 -0
  919. data/src/core/ext/xds/xds_http_fault_filter.cc +72 -62
  920. data/src/core/ext/xds/xds_http_fault_filter.h +21 -28
  921. data/src/core/ext/xds/xds_http_filters.cc +65 -73
  922. data/src/core/ext/xds/xds_http_filters.h +78 -27
  923. data/src/core/ext/xds/xds_http_rbac_filter.cc +307 -295
  924. data/src/core/ext/xds/xds_http_rbac_filter.h +21 -23
  925. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +222 -0
  926. data/src/core/ext/xds/xds_http_stateful_session_filter.h +59 -0
  927. data/src/core/ext/xds/xds_lb_policy_registry.cc +215 -171
  928. data/src/core/ext/xds/xds_lb_policy_registry.h +15 -16
  929. data/src/core/ext/xds/xds_listener.cc +549 -478
  930. data/src/core/ext/xds/xds_listener.h +51 -54
  931. data/src/core/ext/xds/xds_resource_type.h +28 -22
  932. data/src/core/ext/xds/xds_resource_type_impl.h +13 -16
  933. data/src/core/ext/xds/xds_route_config.cc +610 -576
  934. data/src/core/ext/xds/xds_route_config.h +69 -44
  935. data/src/core/ext/xds/xds_routing.cc +7 -9
  936. data/src/core/ext/xds/xds_routing.h +12 -12
  937. data/src/core/ext/xds/xds_server_config_fetcher.cc +184 -184
  938. data/src/core/ext/xds/xds_transport.h +86 -0
  939. data/src/core/ext/xds/xds_transport_grpc.cc +358 -0
  940. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  941. data/src/core/lib/address_utils/parse_address.cc +49 -46
  942. data/src/core/lib/address_utils/parse_address.h +43 -40
  943. data/src/core/lib/address_utils/sockaddr_utils.cc +30 -28
  944. data/src/core/lib/address_utils/sockaddr_utils.h +36 -36
  945. data/src/core/lib/avl/avl.h +59 -32
  946. data/src/core/lib/backoff/backoff.cc +19 -21
  947. data/src/core/lib/backoff/backoff.h +20 -20
  948. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  949. data/src/core/lib/backoff/random_early_detection.h +59 -0
  950. data/src/core/lib/channel/call_finalization.h +5 -7
  951. data/src/core/lib/channel/call_tracer.cc +51 -0
  952. data/src/core/lib/channel/call_tracer.h +106 -34
  953. data/src/core/lib/channel/channel_args.cc +188 -61
  954. data/src/core/lib/channel/channel_args.h +318 -112
  955. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  956. data/src/core/lib/channel/channel_fwd.h +3 -3
  957. data/src/core/lib/channel/channel_stack.cc +60 -58
  958. data/src/core/lib/channel/channel_stack.h +148 -135
  959. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  960. data/src/core/lib/channel/channel_stack_builder.h +17 -9
  961. data/src/core/lib/channel/channel_stack_builder_impl.cc +55 -26
  962. data/src/core/lib/channel/channel_stack_builder_impl.h +5 -3
  963. data/src/core/lib/channel/channel_trace.cc +40 -38
  964. data/src/core/lib/channel/channel_trace.h +22 -22
  965. data/src/core/lib/channel/channelz.cc +190 -173
  966. data/src/core/lib/channel/channelz.h +80 -64
  967. data/src/core/lib/channel/channelz_registry.cc +41 -37
  968. data/src/core/lib/channel/channelz_registry.h +21 -21
  969. data/src/core/lib/channel/connected_channel.cc +764 -67
  970. data/src/core/lib/channel/connected_channel.h +20 -24
  971. data/src/core/lib/channel/context.h +33 -22
  972. data/src/core/lib/channel/promise_based_filter.cc +1607 -295
  973. data/src/core/lib/channel/promise_based_filter.h +485 -104
  974. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  975. data/src/core/lib/channel/status_util.cc +62 -17
  976. data/src/core/lib/channel/status_util.h +39 -22
  977. data/src/core/lib/compression/compression.cc +19 -19
  978. data/src/core/lib/compression/compression_internal.cc +38 -48
  979. data/src/core/lib/compression/compression_internal.h +25 -25
  980. data/src/core/lib/compression/message_compress.cc +26 -26
  981. data/src/core/lib/compression/message_compress.h +27 -27
  982. data/src/core/lib/config/config_vars.cc +153 -0
  983. data/src/core/lib/config/config_vars.h +127 -0
  984. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  985. data/src/core/lib/config/core_configuration.cc +5 -1
  986. data/src/core/lib/config/core_configuration.h +84 -38
  987. data/src/core/lib/config/load_config.cc +79 -0
  988. data/src/core/lib/config/load_config.h +55 -0
  989. data/src/core/lib/debug/event_log.cc +88 -0
  990. data/src/core/lib/debug/event_log.h +81 -0
  991. data/src/core/lib/debug/histogram_view.cc +69 -0
  992. data/src/core/lib/debug/histogram_view.h +37 -0
  993. data/src/core/lib/debug/stats.cc +47 -151
  994. data/src/core/lib/debug/stats.h +49 -57
  995. data/src/core/lib/debug/stats_data.cc +302 -646
  996. data/src/core/lib/debug/stats_data.h +295 -543
  997. data/src/core/lib/debug/trace.cc +56 -81
  998. data/src/core/lib/debug/trace.h +37 -54
  999. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  1000. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  1001. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  1002. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  1003. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  1004. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +15 -18
  1005. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -10
  1006. data/src/core/lib/event_engine/common_closures.h +71 -0
  1007. data/src/core/lib/event_engine/default_event_engine.cc +111 -0
  1008. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  1009. data/src/core/lib/event_engine/default_event_engine_factory.cc +32 -5
  1010. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +4 -12
  1011. data/src/core/lib/event_engine/event_engine.cc +29 -36
  1012. data/src/core/lib/event_engine/forkable.cc +106 -0
  1013. data/src/core/lib/event_engine/forkable.h +61 -0
  1014. data/src/core/lib/event_engine/handle_containers.h +12 -20
  1015. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  1016. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  1017. data/src/core/lib/event_engine/poller.h +62 -0
  1018. data/src/core/lib/event_engine/posix.h +162 -0
  1019. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  1020. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  1021. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +895 -0
  1022. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  1023. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  1024. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +68 -0
  1025. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  1026. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  1027. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  1028. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +254 -0
  1029. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  1030. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1338 -0
  1031. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +726 -0
  1032. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +637 -0
  1033. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  1034. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  1035. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +292 -0
  1036. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +278 -0
  1037. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  1038. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  1039. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +867 -0
  1040. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  1041. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +51 -52
  1042. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  1043. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +29 -29
  1044. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  1045. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  1046. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  1047. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  1048. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  1049. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  1050. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  1051. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  1052. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  1053. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  1054. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  1055. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  1056. data/src/core/lib/event_engine/resolved_address.cc +21 -1
  1057. data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
  1058. data/src/core/lib/event_engine/shim.cc +64 -0
  1059. data/src/core/lib/event_engine/shim.h +33 -0
  1060. data/src/core/lib/event_engine/slice.cc +8 -7
  1061. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  1062. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  1063. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  1064. data/src/core/lib/event_engine/thread_local.cc +29 -0
  1065. data/src/core/lib/event_engine/thread_local.h +32 -0
  1066. data/src/core/lib/event_engine/thread_pool/original_thread_pool.cc +256 -0
  1067. data/src/core/lib/event_engine/thread_pool/original_thread_pool.h +137 -0
  1068. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  1069. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +40 -0
  1070. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  1071. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  1072. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  1073. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → thready_event_engine/thready_event_engine.h} +51 -65
  1074. data/src/core/lib/event_engine/time_util.cc +30 -0
  1075. data/src/core/lib/event_engine/time_util.h +32 -0
  1076. data/src/core/lib/event_engine/trace.cc +7 -0
  1077. data/src/core/lib/event_engine/trace.h +22 -3
  1078. data/src/core/lib/event_engine/utils.cc +44 -0
  1079. data/src/core/lib/event_engine/utils.h +44 -0
  1080. data/src/core/lib/event_engine/windows/iocp.cc +141 -0
  1081. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  1082. data/src/core/lib/event_engine/windows/win_socket.cc +218 -0
  1083. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  1084. data/src/core/lib/event_engine/windows/windows_endpoint.cc +379 -0
  1085. data/src/core/lib/event_engine/windows/windows_endpoint.h +120 -0
  1086. data/src/core/lib/event_engine/windows/windows_engine.cc +411 -0
  1087. data/src/core/lib/event_engine/windows/windows_engine.h +164 -0
  1088. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  1089. data/src/core/lib/event_engine/windows/windows_listener.h +156 -0
  1090. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  1091. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  1092. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  1093. data/src/core/lib/experiments/config.cc +185 -0
  1094. data/src/core/lib/experiments/config.h +69 -0
  1095. data/src/core/lib/experiments/experiments.cc +138 -0
  1096. data/src/core/lib/experiments/experiments.h +134 -0
  1097. data/src/core/lib/gpr/alloc.cc +19 -25
  1098. data/src/core/lib/gpr/alloc.h +20 -20
  1099. data/src/core/lib/gpr/{log_android.cc → android/log.cc} +22 -20
  1100. data/src/core/lib/gpr/atm.cc +17 -17
  1101. data/src/core/lib/gpr/iphone/cpu.cc +44 -0
  1102. data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +28 -23
  1103. data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +24 -24
  1104. data/src/core/lib/gpr/log.cc +42 -47
  1105. data/src/core/lib/gpr/log_internal.h +55 -0
  1106. data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +21 -20
  1107. data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +23 -22
  1108. data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +20 -19
  1109. data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +24 -24
  1110. data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +22 -34
  1111. data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +40 -36
  1112. data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +22 -20
  1113. data/src/core/lib/gpr/spinlock.h +20 -20
  1114. data/src/core/lib/gpr/string.cc +25 -24
  1115. data/src/core/lib/gpr/string.h +61 -61
  1116. data/src/core/lib/gpr/sync.cc +25 -25
  1117. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  1118. data/src/core/lib/gpr/time.cc +34 -30
  1119. data/src/core/lib/gpr/time_precise.cc +22 -22
  1120. data/src/core/lib/gpr/time_precise.h +21 -22
  1121. data/src/core/lib/gpr/tmpfile.h +24 -24
  1122. data/src/core/lib/gpr/useful.h +83 -30
  1123. data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc → lib/gpr/windows/cpu.cc} +16 -11
  1124. data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +25 -25
  1125. data/src/core/lib/gpr/windows/string.cc +69 -0
  1126. data/src/core/lib/gpr/windows/string_util.cc +55 -0
  1127. data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +29 -27
  1128. data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +25 -22
  1129. data/src/core/lib/gpr/windows/tmpfile.cc +68 -0
  1130. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  1131. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  1132. data/src/core/lib/gprpp/bitset.h +30 -16
  1133. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  1134. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  1135. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  1136. data/src/core/lib/gprpp/crash.cc +43 -0
  1137. data/src/core/lib/gprpp/crash.h +37 -0
  1138. data/src/core/lib/gprpp/debug_location.h +60 -31
  1139. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  1140. data/src/core/lib/gprpp/env.h +53 -0
  1141. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  1142. data/src/core/lib/gprpp/examine_stack.h +21 -21
  1143. data/src/core/lib/gprpp/fork.cc +63 -61
  1144. data/src/core/lib/gprpp/fork.h +29 -35
  1145. data/src/core/lib/gprpp/host_port.cc +28 -26
  1146. data/src/core/lib/gprpp/host_port.h +32 -31
  1147. data/src/core/lib/gprpp/linux/env.cc +80 -0
  1148. data/src/core/lib/gprpp/load_file.cc +75 -0
  1149. data/src/core/lib/gprpp/load_file.h +33 -0
  1150. data/src/core/lib/gprpp/manual_constructor.h +21 -21
  1151. data/src/core/lib/gprpp/match.h +3 -3
  1152. data/src/core/lib/gprpp/memory.h +21 -21
  1153. data/src/core/lib/gprpp/mpscq.cc +17 -17
  1154. data/src/core/lib/gprpp/mpscq.h +21 -21
  1155. data/src/core/lib/gprpp/no_destruct.h +95 -0
  1156. data/src/core/lib/gprpp/notification.h +67 -0
  1157. data/src/core/lib/gprpp/orphanable.h +25 -24
  1158. data/src/core/lib/gprpp/overload.h +3 -3
  1159. data/src/core/lib/gprpp/packed_table.h +40 -0
  1160. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  1161. data/src/core/lib/gprpp/per_cpu.h +75 -0
  1162. data/src/core/lib/gprpp/posix/env.cc +47 -0
  1163. data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +5 -4
  1164. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +75 -64
  1165. data/src/core/lib/gprpp/ref_counted.h +54 -55
  1166. data/src/core/lib/gprpp/ref_counted_ptr.h +41 -54
  1167. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  1168. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  1169. data/src/core/lib/gprpp/stat.h +3 -3
  1170. data/src/core/lib/gprpp/status_helper.cc +6 -4
  1171. data/src/core/lib/gprpp/status_helper.h +9 -5
  1172. data/src/core/lib/gprpp/strerror.cc +43 -0
  1173. data/src/core/lib/gprpp/strerror.h +29 -0
  1174. data/src/core/lib/gprpp/sync.h +23 -23
  1175. data/src/core/lib/gprpp/table.h +12 -4
  1176. data/src/core/lib/gprpp/tchar.cc +49 -0
  1177. data/src/core/lib/gprpp/tchar.h +33 -0
  1178. data/src/core/lib/gprpp/thd.h +39 -23
  1179. data/src/core/lib/gprpp/time.cc +37 -8
  1180. data/src/core/lib/gprpp/time.h +69 -4
  1181. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +23 -25
  1182. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  1183. data/src/core/lib/gprpp/time_util.h +4 -4
  1184. data/src/core/lib/gprpp/unique_type_name.h +21 -21
  1185. data/src/core/lib/gprpp/validation_errors.cc +66 -0
  1186. data/src/core/lib/gprpp/validation_errors.h +134 -0
  1187. data/src/core/lib/gprpp/windows/env.cc +56 -0
  1188. data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +4 -2
  1189. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +28 -28
  1190. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  1191. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  1192. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  1193. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  1194. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  1195. data/src/core/lib/http/format_request.cc +19 -18
  1196. data/src/core/lib/http/format_request.h +20 -20
  1197. data/src/core/lib/http/httpcli.cc +69 -84
  1198. data/src/core/lib/http/httpcli.h +29 -29
  1199. data/src/core/lib/http/httpcli_security_connector.cc +33 -36
  1200. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
  1201. data/src/core/lib/http/parser.cc +76 -87
  1202. data/src/core/lib/http/parser.h +35 -35
  1203. data/src/core/lib/iomgr/block_annotate.h +23 -23
  1204. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  1205. data/src/core/lib/iomgr/buffer_list.h +122 -101
  1206. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  1207. data/src/core/lib/iomgr/call_combiner.h +26 -27
  1208. data/src/core/lib/iomgr/cfstream_handle.cc +34 -37
  1209. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  1210. data/src/core/lib/iomgr/closure.cc +27 -0
  1211. data/src/core/lib/iomgr/closure.h +95 -58
  1212. data/src/core/lib/iomgr/combiner.cc +20 -39
  1213. data/src/core/lib/iomgr/combiner.h +20 -20
  1214. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  1215. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  1216. data/src/core/lib/iomgr/endpoint.cc +17 -17
  1217. data/src/core/lib/iomgr/endpoint.h +49 -49
  1218. data/src/core/lib/iomgr/endpoint_cfstream.cc +58 -53
  1219. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  1220. data/src/core/lib/iomgr/endpoint_pair.h +22 -22
  1221. data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -30
  1222. data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
  1223. data/src/core/lib/iomgr/error.cc +49 -834
  1224. data/src/core/lib/iomgr/error.h +45 -321
  1225. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  1226. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  1227. data/src/core/lib/iomgr/ev_apple.cc +33 -33
  1228. data/src/core/lib/iomgr/ev_apple.h +21 -21
  1229. data/src/core/lib/iomgr/ev_epoll1_linux.cc +219 -236
  1230. data/src/core/lib/iomgr/ev_epoll1_linux.h +20 -20
  1231. data/src/core/lib/iomgr/ev_poll_posix.cc +231 -231
  1232. data/src/core/lib/iomgr/ev_poll_posix.h +20 -20
  1233. data/src/core/lib/iomgr/ev_posix.cc +47 -79
  1234. data/src/core/lib/iomgr/ev_posix.h +88 -87
  1235. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  1236. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  1237. data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
  1238. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +471 -0
  1239. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  1240. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  1241. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  1242. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  1243. data/src/core/lib/iomgr/exec_ctx.h +151 -175
  1244. data/src/core/lib/iomgr/executor.cc +21 -31
  1245. data/src/core/lib/iomgr/executor.h +27 -30
  1246. data/src/core/lib/iomgr/fork_posix.cc +29 -26
  1247. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1248. data/src/core/lib/iomgr/gethostname.h +20 -20
  1249. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1250. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1251. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1252. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  1253. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  1254. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  1255. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  1256. data/src/core/lib/iomgr/internal_errqueue.h +83 -83
  1257. data/src/core/lib/iomgr/iocp_windows.cc +47 -26
  1258. data/src/core/lib/iomgr/iocp_windows.h +32 -21
  1259. data/src/core/lib/iomgr/iomgr.cc +29 -34
  1260. data/src/core/lib/iomgr/iomgr.h +35 -35
  1261. data/src/core/lib/iomgr/iomgr_fwd.h +4 -3
  1262. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  1263. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  1264. data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
  1265. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -20
  1266. data/src/core/lib/iomgr/iomgr_windows.cc +32 -24
  1267. data/src/core/lib/iomgr/load_file.cc +24 -27
  1268. data/src/core/lib/iomgr/load_file.h +22 -22
  1269. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1270. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1271. data/src/core/lib/iomgr/nameser.h +86 -86
  1272. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1273. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1274. data/src/core/lib/iomgr/pollset.cc +17 -17
  1275. data/src/core/lib/iomgr/pollset.h +55 -55
  1276. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1277. data/src/core/lib/iomgr/pollset_set.h +25 -26
  1278. data/src/core/lib/iomgr/pollset_set_windows.cc +27 -27
  1279. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1280. data/src/core/lib/iomgr/pollset_windows.cc +33 -32
  1281. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1282. data/src/core/lib/iomgr/port.h +34 -31
  1283. data/src/core/lib/iomgr/python_util.h +24 -24
  1284. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  1285. data/src/core/lib/iomgr/resolve_address.h +54 -31
  1286. data/src/core/lib/iomgr/resolve_address_impl.h +5 -4
  1287. data/src/core/lib/iomgr/resolve_address_posix.cc +74 -49
  1288. data/src/core/lib/iomgr/resolve_address_posix.h +23 -10
  1289. data/src/core/lib/iomgr/resolve_address_windows.cc +59 -26
  1290. data/src/core/lib/iomgr/resolve_address_windows.h +23 -10
  1291. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1292. data/src/core/lib/iomgr/sockaddr.h +23 -23
  1293. data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
  1294. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1295. data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
  1296. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1297. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1298. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1299. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1300. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1301. data/src/core/lib/iomgr/socket_utils_common_posix.cc +99 -104
  1302. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1303. data/src/core/lib/iomgr/socket_utils_posix.cc +106 -19
  1304. data/src/core/lib/iomgr/socket_utils_posix.h +179 -84
  1305. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1306. data/src/core/lib/iomgr/socket_windows.cc +97 -42
  1307. data/src/core/lib/iomgr/socket_windows.h +68 -63
  1308. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1309. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1310. data/src/core/lib/iomgr/tcp_client.cc +23 -24
  1311. data/src/core/lib/iomgr/tcp_client.h +39 -39
  1312. data/src/core/lib/iomgr/tcp_client_cfstream.cc +43 -35
  1313. data/src/core/lib/iomgr/tcp_client_posix.cc +117 -100
  1314. data/src/core/lib/iomgr/tcp_client_posix.h +54 -51
  1315. data/src/core/lib/iomgr/tcp_client_windows.cc +57 -48
  1316. data/src/core/lib/iomgr/tcp_posix.cc +448 -350
  1317. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1318. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1319. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1320. data/src/core/lib/iomgr/tcp_server_posix.cc +390 -126
  1321. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1322. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +93 -58
  1323. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  1324. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1325. data/src/core/lib/iomgr/tcp_server_windows.cc +280 -123
  1326. data/src/core/lib/iomgr/tcp_windows.cc +121 -102
  1327. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1328. data/src/core/lib/iomgr/timer.cc +17 -17
  1329. data/src/core/lib/iomgr/timer.h +68 -68
  1330. data/src/core/lib/iomgr/timer_generic.cc +142 -150
  1331. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1332. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1333. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1334. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1335. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1336. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1337. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1338. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1339. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1340. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1341. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1342. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1343. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  1344. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -52
  1345. data/src/core/lib/json/json.h +21 -240
  1346. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -11
  1347. data/src/core/lib/json/json_channel_args.h +42 -0
  1348. data/src/core/lib/json/json_object_loader.cc +216 -0
  1349. data/src/core/lib/json/json_object_loader.h +646 -0
  1350. data/src/core/lib/json/json_reader.cc +181 -129
  1351. data/src/core/lib/json/json_reader.h +34 -0
  1352. data/src/core/lib/json/json_util.cc +23 -55
  1353. data/src/core/lib/json/json_util.h +12 -11
  1354. data/src/core/lib/json/json_writer.cc +80 -81
  1355. data/src/core/{ext/xds/xds_resource_type.cc → lib/json/json_writer.h} +11 -11
  1356. data/src/core/lib/load_balancing/lb_policy.cc +98 -0
  1357. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +49 -36
  1358. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1359. data/src/core/lib/load_balancing/lb_policy_registry.cc +143 -0
  1360. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1361. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +9 -14
  1362. data/src/core/lib/matchers/matchers.cc +10 -9
  1363. data/src/core/lib/matchers/matchers.h +5 -4
  1364. data/src/core/lib/promise/activity.cc +43 -6
  1365. data/src/core/lib/promise/activity.h +159 -48
  1366. data/src/core/lib/promise/arena_promise.h +105 -72
  1367. data/src/core/lib/promise/cancel_callback.h +77 -0
  1368. data/src/core/lib/promise/context.h +17 -10
  1369. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1370. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1371. data/src/core/lib/promise/detail/promise_factory.h +66 -14
  1372. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1373. data/src/core/lib/promise/detail/status.h +31 -3
  1374. data/src/core/lib/promise/detail/switch.h +21 -21
  1375. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1376. data/src/core/lib/promise/for_each.h +176 -0
  1377. data/src/core/lib/promise/if.h +204 -0
  1378. data/src/core/lib/promise/interceptor_list.h +329 -0
  1379. data/src/core/lib/promise/latch.h +197 -23
  1380. data/src/core/lib/promise/loop.h +22 -16
  1381. data/src/core/lib/promise/map.h +11 -6
  1382. data/src/core/lib/promise/party.cc +304 -0
  1383. data/src/core/lib/promise/party.h +508 -0
  1384. data/src/core/lib/promise/pipe.h +762 -0
  1385. data/src/core/lib/promise/poll.h +177 -11
  1386. data/src/core/lib/promise/prioritized_race.h +95 -0
  1387. data/src/core/lib/promise/promise.h +6 -7
  1388. data/src/core/lib/promise/race.h +6 -9
  1389. data/src/core/lib/promise/seq.h +32 -12
  1390. data/src/core/lib/promise/sleep.cc +53 -43
  1391. data/src/core/lib/promise/sleep.h +34 -26
  1392. data/src/core/lib/promise/trace.cc +20 -0
  1393. data/src/core/lib/promise/trace.h +24 -0
  1394. data/src/core/lib/promise/try_join.h +82 -0
  1395. data/src/core/lib/promise/try_seq.h +39 -21
  1396. data/src/core/lib/resolver/resolver.cc +17 -64
  1397. data/src/core/lib/resolver/resolver.h +18 -18
  1398. data/src/core/lib/resolver/resolver_factory.h +6 -7
  1399. data/src/core/lib/resolver/resolver_registry.cc +16 -1
  1400. data/src/core/lib/resolver/resolver_registry.h +5 -6
  1401. data/src/core/lib/resolver/server_address.cc +29 -39
  1402. data/src/core/lib/resolver/server_address.h +25 -37
  1403. data/src/core/lib/resource_quota/api.cc +10 -2
  1404. data/src/core/lib/resource_quota/api.h +10 -4
  1405. data/src/core/lib/resource_quota/arena.cc +101 -21
  1406. data/src/core/lib/resource_quota/arena.h +310 -23
  1407. data/src/core/lib/resource_quota/memory_quota.cc +280 -59
  1408. data/src/core/lib/resource_quota/memory_quota.h +165 -36
  1409. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1410. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1411. data/src/core/lib/resource_quota/resource_quota.h +4 -4
  1412. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  1413. data/src/core/lib/resource_quota/trace.h +3 -3
  1414. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  1415. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  1416. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1417. data/src/core/lib/security/authorization/authorization_policy_provider.h +4 -4
  1418. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  1419. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  1420. data/src/core/lib/security/authorization/evaluate_args.h +3 -3
  1421. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -4
  1422. data/src/core/lib/security/authorization/grpc_authorization_engine.h +21 -4
  1423. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -4
  1424. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -4
  1425. data/src/core/lib/security/authorization/matchers.cc +38 -32
  1426. data/src/core/lib/security/authorization/matchers.h +3 -3
  1427. data/src/core/lib/security/authorization/rbac_policy.cc +39 -8
  1428. data/src/core/lib/security/authorization/rbac_policy.h +22 -5
  1429. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  1430. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  1431. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +11 -7
  1432. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +50 -0
  1433. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +76 -0
  1434. data/src/core/lib/security/context/security_context.cc +22 -23
  1435. data/src/core/lib/security/context/security_context.h +43 -33
  1436. data/src/core/lib/security/credentials/alts/alts_credentials.cc +19 -20
  1437. data/src/core/lib/security/credentials/alts/alts_credentials.h +56 -57
  1438. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1439. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1440. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1441. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1442. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1443. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  1444. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1445. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1446. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  1447. data/src/core/lib/security/credentials/call_creds_util.h +3 -3
  1448. data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
  1449. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +4 -4
  1450. data/src/core/lib/security/credentials/composite/composite_credentials.cc +25 -29
  1451. data/src/core/lib/security/credentials/composite/composite_credentials.h +25 -28
  1452. data/src/core/lib/security/credentials/credentials.cc +19 -18
  1453. data/src/core/lib/security/credentials/credentials.h +53 -48
  1454. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +131 -120
  1455. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -3
  1456. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -3
  1457. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1458. data/src/core/lib/security/credentials/external/external_account_credentials.cc +121 -121
  1459. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  1460. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +40 -43
  1461. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
  1462. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +51 -54
  1463. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
  1464. data/src/core/lib/security/credentials/fake/fake_credentials.cc +23 -31
  1465. data/src/core/lib/security/credentials/fake/fake_credentials.h +37 -42
  1466. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +22 -25
  1467. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +105 -156
  1468. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +22 -25
  1469. data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -18
  1470. data/src/core/lib/security/credentials/iam/iam_credentials.h +20 -20
  1471. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  1472. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +6 -7
  1473. data/src/core/lib/security/credentials/jwt/json_token.cc +54 -43
  1474. data/src/core/lib/security/credentials/jwt/json_token.h +35 -35
  1475. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +27 -26
  1476. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +22 -22
  1477. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +125 -124
  1478. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +47 -47
  1479. data/src/core/lib/security/credentials/local/local_credentials.cc +20 -21
  1480. data/src/core/lib/security/credentials/local/local_credentials.h +26 -27
  1481. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +89 -91
  1482. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -23
  1483. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -24
  1484. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -25
  1485. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -40
  1486. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +23 -24
  1487. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
  1488. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +7 -14
  1489. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +48 -47
  1490. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -5
  1491. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  1492. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
  1493. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  1494. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1495. data/src/core/lib/security/credentials/tls/tls_credentials.cc +30 -43
  1496. data/src/core/lib/security/credentials/tls/tls_credentials.h +24 -25
  1497. data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
  1498. data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
  1499. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -31
  1500. data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -6
  1501. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +43 -61
  1502. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +43 -44
  1503. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -78
  1504. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +24 -25
  1505. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +7 -7
  1506. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -15
  1507. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1508. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  1509. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +24 -31
  1510. data/src/core/lib/security/security_connector/load_system_roots_supported.h +22 -23
  1511. data/src/core/lib/security/security_connector/local/local_security_connector.cc +43 -45
  1512. data/src/core/lib/security/security_connector/local/local_security_connector.h +44 -45
  1513. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  1514. data/src/core/lib/security/security_connector/security_connector.h +40 -39
  1515. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +40 -43
  1516. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +40 -41
  1517. data/src/core/lib/security/security_connector/ssl_utils.cc +48 -64
  1518. data/src/core/lib/security/security_connector/ssl_utils.h +35 -35
  1519. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +59 -53
  1520. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +26 -26
  1521. data/src/core/lib/security/transport/auth_filters.h +46 -24
  1522. data/src/core/lib/security/transport/client_auth_filter.cc +36 -26
  1523. data/src/core/lib/security/transport/secure_endpoint.cc +58 -62
  1524. data/src/core/lib/security/transport/secure_endpoint.h +25 -25
  1525. data/src/core/lib/security/transport/security_handshaker.cc +111 -114
  1526. data/src/core/lib/security/transport/security_handshaker.h +24 -23
  1527. data/src/core/lib/security/transport/server_auth_filter.cc +160 -274
  1528. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1529. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1530. data/src/core/lib/security/util/json_util.cc +27 -27
  1531. data/src/core/lib/security/util/json_util.h +20 -20
  1532. data/src/core/lib/service_config/service_config.h +15 -4
  1533. data/src/core/lib/service_config/service_config_call_data.h +54 -19
  1534. data/src/core/lib/service_config/service_config_impl.cc +113 -152
  1535. data/src/core/lib/service_config/service_config_impl.h +19 -24
  1536. data/src/core/lib/service_config/service_config_parser.cc +10 -28
  1537. data/src/core/lib/service_config/service_config_parser.h +13 -21
  1538. data/src/core/lib/slice/b64.cc +26 -26
  1539. data/src/core/lib/slice/b64.h +32 -32
  1540. data/src/core/lib/slice/percent_encoding.cc +21 -30
  1541. data/src/core/lib/slice/percent_encoding.h +28 -28
  1542. data/src/core/lib/slice/slice.cc +58 -46
  1543. data/src/core/lib/slice/slice.h +59 -18
  1544. data/src/core/lib/slice/slice_buffer.cc +63 -59
  1545. data/src/core/lib/slice/slice_buffer.h +35 -4
  1546. data/src/core/lib/slice/slice_internal.h +34 -42
  1547. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1548. data/src/core/lib/slice/slice_refcount.h +53 -18
  1549. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  1550. data/src/core/lib/slice/slice_string_helpers.h +21 -21
  1551. data/src/core/lib/surface/api_trace.cc +17 -17
  1552. data/src/core/lib/surface/api_trace.h +25 -25
  1553. data/src/core/lib/surface/builtins.cc +2 -0
  1554. data/src/core/lib/surface/builtins.h +3 -3
  1555. data/src/core/lib/surface/byte_buffer.cc +22 -23
  1556. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  1557. data/src/core/lib/surface/call.cc +2305 -547
  1558. data/src/core/lib/surface/call.h +123 -42
  1559. data/src/core/lib/surface/call_details.cc +20 -21
  1560. data/src/core/lib/surface/call_log_batch.cc +19 -18
  1561. data/src/core/lib/surface/call_test_only.h +33 -33
  1562. data/src/core/lib/surface/call_trace.cc +123 -0
  1563. data/src/core/lib/surface/call_trace.h +30 -0
  1564. data/src/core/lib/surface/channel.cc +65 -69
  1565. data/src/core/lib/surface/channel.h +43 -35
  1566. data/src/core/lib/surface/channel_init.cc +17 -17
  1567. data/src/core/lib/surface/channel_init.h +20 -20
  1568. data/src/core/lib/surface/channel_ping.cc +19 -19
  1569. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  1570. data/src/core/lib/surface/channel_stack_type.h +22 -20
  1571. data/src/core/lib/surface/completion_queue.cc +195 -221
  1572. data/src/core/lib/surface/completion_queue.h +37 -40
  1573. data/src/core/lib/surface/completion_queue_factory.cc +33 -28
  1574. data/src/core/lib/surface/completion_queue_factory.h +22 -22
  1575. data/src/core/lib/surface/event_string.cc +18 -17
  1576. data/src/core/lib/surface/event_string.h +22 -22
  1577. data/src/core/lib/surface/init.cc +44 -72
  1578. data/src/core/lib/surface/init.h +20 -20
  1579. data/src/core/lib/surface/init_internally.cc +25 -0
  1580. data/src/core/lib/surface/init_internally.h +37 -0
  1581. data/src/core/lib/surface/lame_client.cc +33 -29
  1582. data/src/core/lib/surface/lame_client.h +22 -22
  1583. data/src/core/lib/surface/metadata_array.cc +17 -18
  1584. data/src/core/lib/surface/server.cc +371 -130
  1585. data/src/core/lib/surface/server.h +20 -21
  1586. data/src/core/lib/surface/validate_metadata.cc +64 -74
  1587. data/src/core/lib/surface/validate_metadata.h +30 -21
  1588. data/src/core/lib/surface/version.cc +21 -21
  1589. data/src/core/lib/transport/batch_builder.cc +182 -0
  1590. data/src/core/lib/transport/batch_builder.h +480 -0
  1591. data/src/core/lib/transport/bdp_estimator.cc +25 -27
  1592. data/src/core/lib/transport/bdp_estimator.h +31 -28
  1593. data/src/core/lib/transport/connectivity_state.cc +19 -20
  1594. data/src/core/lib/transport/connectivity_state.h +23 -23
  1595. data/src/core/lib/transport/custom_metadata.h +30 -0
  1596. data/src/core/lib/transport/error_utils.cc +51 -81
  1597. data/src/core/lib/transport/error_utils.h +24 -24
  1598. data/src/core/lib/transport/handshaker.cc +66 -54
  1599. data/src/core/lib/transport/handshaker.h +51 -47
  1600. data/src/core/lib/transport/handshaker_factory.h +49 -24
  1601. data/src/core/lib/transport/handshaker_registry.cc +27 -20
  1602. data/src/core/lib/transport/handshaker_registry.h +25 -28
  1603. data/src/core/lib/transport/http2_errors.h +22 -22
  1604. data/src/core/lib/transport/http_connect_handshaker.cc +56 -57
  1605. data/src/core/lib/transport/http_connect_handshaker.h +21 -21
  1606. data/src/core/lib/transport/metadata_batch.cc +31 -10
  1607. data/src/core/lib/transport/metadata_batch.h +252 -65
  1608. data/src/core/lib/transport/metadata_compression_traits.h +67 -0
  1609. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  1610. data/src/core/lib/transport/parsed_metadata.h +23 -11
  1611. data/src/core/lib/transport/pid_controller.cc +20 -20
  1612. data/src/core/lib/transport/pid_controller.h +27 -27
  1613. data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
  1614. data/src/core/lib/transport/status_conversion.cc +23 -25
  1615. data/src/core/lib/transport/status_conversion.h +22 -22
  1616. data/src/core/lib/transport/tcp_connect_handshaker.cc +34 -42
  1617. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  1618. data/src/core/lib/transport/timeout_encoding.cc +28 -23
  1619. data/src/core/lib/transport/timeout_encoding.h +20 -20
  1620. data/src/core/lib/transport/transport.cc +113 -43
  1621. data/src/core/lib/transport/transport.h +275 -218
  1622. data/src/core/lib/transport/transport_fwd.h +3 -3
  1623. data/src/core/lib/transport/transport_impl.h +53 -47
  1624. data/src/core/lib/transport/transport_op_string.cc +75 -63
  1625. data/src/core/lib/uri/uri_parser.cc +1 -1
  1626. data/src/core/lib/uri/uri_parser.h +3 -3
  1627. data/src/core/plugin_registry/grpc_plugin_registry.cc +55 -79
  1628. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +22 -39
  1629. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1630. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1631. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1632. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1633. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1634. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1635. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1636. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +73 -71
  1637. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1638. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1639. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1640. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1641. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1642. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1643. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1644. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +137 -100
  1645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +109 -104
  1646. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1647. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +52 -44
  1649. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1650. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1651. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1652. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1653. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1654. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1655. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1656. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1657. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1658. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1659. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1660. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1661. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1662. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1663. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1664. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
  1665. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1666. data/src/core/tsi/fake_transport_security.cc +133 -109
  1667. data/src/core/tsi/fake_transport_security.h +33 -33
  1668. data/src/core/tsi/local_transport_security.cc +43 -38
  1669. data/src/core/tsi/local_transport_security.h +33 -33
  1670. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1671. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1672. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1673. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  1674. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1675. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1676. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  1677. data/src/core/tsi/ssl_transport_security.cc +302 -371
  1678. data/src/core/tsi/ssl_transport_security.h +206 -203
  1679. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1680. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1681. data/src/core/tsi/ssl_types.h +27 -27
  1682. data/src/core/tsi/transport_security.cc +44 -32
  1683. data/src/core/tsi/transport_security.h +49 -48
  1684. data/src/core/tsi/transport_security_grpc.cc +20 -20
  1685. data/src/core/tsi/transport_security_grpc.h +41 -41
  1686. data/src/core/tsi/transport_security_interface.h +344 -332
  1687. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1688. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1689. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  1690. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  1691. data/src/ruby/ext/grpc/extconf.rb +57 -11
  1692. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1693. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1694. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1695. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1696. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1697. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1698. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
  1699. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1700. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1701. data/src/ruby/lib/grpc/version.rb +1 -1
  1702. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1703. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1704. data/src/ruby/spec/channel_spec.rb +5 -43
  1705. data/src/ruby/spec/client_server_spec.rb +20 -8
  1706. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1707. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1708. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1709. data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
  1710. data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
  1711. data/third_party/abseil-cpp/absl/base/config.h +45 -4
  1712. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
  1713. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1714. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
  1715. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1716. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1717. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1718. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
  1719. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
  1720. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
  1721. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
  1722. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1723. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
  1724. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
  1725. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1726. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1727. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
  1728. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1729. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1730. data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
  1731. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1732. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1733. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1734. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1735. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
  1736. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
  1737. data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
  1738. data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
  1739. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1740. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
  1741. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1742. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
  1743. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
  1744. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
  1745. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
  1746. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
  1747. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1748. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1749. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1750. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1751. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1752. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1753. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1754. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1755. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1756. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1757. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1758. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1759. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1760. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1761. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1762. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1763. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1764. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1765. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1766. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
  1767. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1768. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1769. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
  1770. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
  1771. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1772. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
  1773. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1774. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
  1775. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
  1776. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1777. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
  1778. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1779. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  1780. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  1781. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  1782. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  1783. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  1784. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  1785. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
  1786. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  1787. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  1788. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  1789. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  1790. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  1791. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  1792. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  1793. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  1794. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  1795. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  1796. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  1797. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  1798. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  1799. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  1800. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  1801. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  1802. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  1803. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1804. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1805. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1806. data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
  1807. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1808. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1809. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1810. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
  1811. data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
  1812. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
  1813. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  1814. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
  1815. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
  1816. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1817. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1818. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1819. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
  1820. data/third_party/abseil-cpp/absl/status/status.cc +19 -12
  1821. data/third_party/abseil-cpp/absl/status/status.h +2 -2
  1822. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1823. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1824. data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
  1825. data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
  1826. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
  1827. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1828. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1829. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1830. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1831. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1832. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +330 -70
  1833. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
  1834. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
  1835. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
  1836. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
  1837. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
  1838. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1839. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1840. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
  1841. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1842. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
  1843. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1844. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1845. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
  1846. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1847. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1848. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1849. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1850. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1851. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1852. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
  1853. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1854. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
  1855. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
  1856. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1857. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
  1858. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
  1859. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1860. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1861. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
  1862. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1863. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1864. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1865. data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
  1866. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1867. data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
  1868. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1869. data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
  1870. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
  1871. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1872. data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
  1873. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1874. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1875. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1876. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
  1877. data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
  1878. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1879. data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
  1880. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1881. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1882. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1883. data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
  1884. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1885. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1886. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1887. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1888. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1889. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1890. data/third_party/abseil-cpp/absl/time/time.h +253 -158
  1891. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1892. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1893. data/third_party/abseil-cpp/absl/types/span.h +29 -7
  1894. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  1895. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  1896. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  1897. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  1898. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  1899. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  1900. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  1901. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  1902. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +177 -196
  1903. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  1904. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  1905. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  1906. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  1907. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  1908. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  1909. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  1910. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  1911. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  1912. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  1913. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  1914. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  1915. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +135 -90
  1916. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  1917. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +797 -793
  1918. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +529 -526
  1919. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  1920. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  1921. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  1922. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  1923. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  1924. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +17 -11
  1925. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +37 -51
  1926. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  1927. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +13 -9
  1928. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +22 -19
  1929. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +5 -5
  1930. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  1931. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  1932. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  1933. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +40 -27
  1934. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  1935. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  1936. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  1937. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  1938. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  1939. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  1940. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  1941. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  1942. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  1943. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  1944. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  1945. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  1946. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  1947. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  1948. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  1949. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  1950. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +34 -37
  1951. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +22 -11
  1952. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  1953. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  1954. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  1955. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  1956. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  1957. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  1958. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  1959. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  1960. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  1961. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  1962. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  1963. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  1964. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  1965. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  1966. data/third_party/boringssl-with-bazel/src/crypto/{cpu-ppc64le.c → cpu_arm_openbsd.c} +10 -17
  1967. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  1968. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  1969. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +22 -31
  1970. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  1971. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  1972. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  1973. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  1974. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  1975. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  1976. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  1977. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  1978. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +43 -16
  1979. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  1980. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  1981. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  1982. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +229 -102
  1983. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +31 -7
  1984. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  1985. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  1986. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  1987. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  1988. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  1989. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  1990. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  1991. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  1992. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  1993. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  1994. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  1995. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  1996. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  1997. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +6 -6
  1998. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  1999. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  2000. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  2001. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  2002. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  2003. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  2004. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  2005. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  2006. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  2007. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  2008. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  2009. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  2010. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +36 -27
  2011. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  2012. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  2013. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  2014. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  2015. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  2016. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  2017. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  2018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  2019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  2020. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  2021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  2022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  2023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  2024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  2025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  2026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  2027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  2028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  2029. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  2030. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  2031. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  2032. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  2033. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  2034. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  2035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  2036. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  2037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  2038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +24 -6
  2039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  2040. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  2041. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  2042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +49 -49
  2043. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +92 -18
  2044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +12 -12
  2045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +108 -86
  2046. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +55 -25
  2047. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +55 -71
  2048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  2049. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +72 -65
  2050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  2051. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +62 -51
  2052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  2053. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  2054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +12 -17
  2055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +25 -26
  2056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -14
  2057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +9 -1
  2058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +44 -16
  2059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  2060. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  2061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  2062. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -23
  2063. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  2064. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +3 -8
  2065. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +170 -160
  2066. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  2067. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +69 -61
  2068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -12
  2069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  2070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  2071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  2072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  2073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  2074. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  2075. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  2076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +22 -68
  2077. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  2078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +43 -16
  2079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +42 -314
  2080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +244 -139
  2081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +144 -205
  2082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  2083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +593 -421
  2084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  2085. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  2086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  2087. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  2088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  2089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  2090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  2091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +52 -6
  2092. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +192 -18
  2093. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  2094. data/third_party/boringssl-with-bazel/src/crypto/internal.h +391 -18
  2095. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +91 -0
  2096. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +204 -0
  2097. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +833 -0
  2098. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  2099. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  2100. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  2101. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +9 -4
  2102. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  2103. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  2104. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +633 -613
  2105. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  2106. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  2107. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  2108. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  2109. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  2110. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  2111. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  2112. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  2113. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  2114. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  2115. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  2116. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  2117. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  2118. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  2119. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  2120. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +6 -17
  2121. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  2122. data/third_party/boringssl-with-bazel/src/crypto/{asn1/a_print.c → rsa_extra/internal.h} +15 -21
  2123. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  2124. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  2125. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  2126. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  2127. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  2128. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +128 -34
  2129. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +418 -133
  2130. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +116 -284
  2131. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +701 -87
  2132. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  2133. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +63 -55
  2134. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  2135. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  2136. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  2137. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +285 -331
  2138. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  2139. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  2140. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +68 -50
  2141. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +132 -151
  2142. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +790 -0
  2143. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  2144. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  2145. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  2146. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +220 -254
  2147. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  2148. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  2149. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +136 -270
  2150. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  2151. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  2152. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  2153. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  2154. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +528 -616
  2155. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  2156. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +164 -181
  2157. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  2158. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +186 -203
  2159. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  2160. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  2161. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1864 -2050
  2162. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +380 -480
  2163. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  2164. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +266 -265
  2165. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  2166. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  2167. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  2168. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  2169. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  2170. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +329 -416
  2171. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  2172. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  2173. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  2174. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  2175. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  2176. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  2177. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  2178. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  2179. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  2180. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  2181. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  2182. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  2183. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +79 -171
  2184. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  2185. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  2186. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  2187. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  2188. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  2189. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +294 -344
  2190. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +342 -365
  2191. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  2192. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  2193. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  2194. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  2195. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  2196. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +120 -125
  2197. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  2198. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +228 -265
  2199. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  2200. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  2201. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  2202. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  2203. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +130 -135
  2204. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +652 -691
  2205. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +90 -75
  2206. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1063 -1145
  2207. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -11
  2208. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  2209. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +217 -191
  2210. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  2211. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +50 -14
  2212. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +29 -14
  2213. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  2214. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  2215. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  2216. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  2217. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  2218. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  2219. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  2220. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  2221. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  2222. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  2223. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  2224. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  2225. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  2226. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  2227. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  2228. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -33
  2229. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  2230. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  2231. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +69 -16
  2232. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  2233. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
  2234. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  2235. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +7 -3
  2236. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
  2237. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  2238. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -18
  2239. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  2240. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  2241. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +98 -5
  2242. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  2243. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -21
  2244. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +285 -92
  2245. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  2246. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +381 -287
  2247. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +9 -6
  2248. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  2249. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +22 -7
  2250. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +57 -23
  2251. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  2252. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2075 -1407
  2253. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +242 -214
  2254. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  2255. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  2256. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  2257. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  2258. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  2259. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +45 -26
  2260. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -35
  2261. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  2262. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  2263. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +53 -34
  2264. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  2265. data/third_party/boringssl-with-bazel/src/ssl/internal.h +200 -121
  2266. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -12
  2267. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  2268. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  2269. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  2270. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +47 -69
  2271. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  2272. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  2273. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +217 -226
  2274. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +78 -101
  2275. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +106 -142
  2276. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +244 -35
  2277. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +167 -64
  2278. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +41 -32
  2279. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  2280. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  2281. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  2282. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +7 -44
  2283. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  2284. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -23
  2285. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +25 -34
  2286. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  2287. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  2288. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  2289. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  2290. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  2291. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  2292. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  2293. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  2294. data/third_party/cares/cares/include/ares.h +23 -1
  2295. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  2296. data/third_party/cares/cares/include/ares_rules.h +2 -2
  2297. data/third_party/cares/cares/include/ares_version.h +3 -3
  2298. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  2299. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  2300. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  2301. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  2302. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  2303. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  2304. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  2305. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  2306. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  2307. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  2308. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  2309. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  2310. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  2311. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  2312. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  2313. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  2314. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  2315. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  2316. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  2317. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  2318. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  2319. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  2320. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  2321. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  2322. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  2323. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  2324. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  2325. data/third_party/re2/re2/bitstate.cc +3 -3
  2326. data/third_party/re2/re2/dfa.cc +13 -13
  2327. data/third_party/re2/re2/nfa.cc +4 -4
  2328. data/third_party/re2/re2/onepass.cc +2 -2
  2329. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  2330. data/third_party/re2/re2/prefilter_tree.h +3 -2
  2331. data/third_party/re2/re2/prog.cc +11 -2
  2332. data/third_party/re2/re2/prog.h +17 -5
  2333. data/third_party/re2/re2/re2.cc +6 -11
  2334. data/third_party/re2/re2/re2.h +1 -1
  2335. data/third_party/re2/re2/regexp.cc +1 -2
  2336. data/third_party/re2/re2/stringpiece.h +10 -7
  2337. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  2338. data/third_party/re2/re2/unicode_groups.cc +319 -151
  2339. data/third_party/re2/re2/walker-inl.h +3 -2
  2340. data/third_party/re2/util/mutex.h +4 -4
  2341. data/third_party/upb/upb/alloc.h +36 -0
  2342. data/third_party/upb/upb/arena.h +36 -0
  2343. data/third_party/upb/upb/array.h +36 -0
  2344. data/third_party/upb/upb/base/descriptor_constants.h +104 -0
  2345. data/third_party/upb/upb/base/log2.h +57 -0
  2346. data/third_party/upb/upb/base/status.c +81 -0
  2347. data/third_party/upb/upb/base/status.h +66 -0
  2348. data/third_party/upb/upb/base/string_view.h +75 -0
  2349. data/third_party/upb/upb/collections/array.c +145 -0
  2350. data/third_party/upb/upb/collections/array.h +85 -0
  2351. data/third_party/upb/upb/collections/array_internal.h +135 -0
  2352. data/third_party/upb/upb/collections/map.c +135 -0
  2353. data/third_party/upb/upb/collections/map.h +135 -0
  2354. data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
  2355. data/third_party/upb/upb/collections/map_internal.h +170 -0
  2356. data/third_party/upb/upb/collections/map_sorter.c +166 -0
  2357. data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
  2358. data/third_party/upb/upb/collections/message_value.h +65 -0
  2359. data/third_party/upb/upb/decode.h +3 -61
  2360. data/third_party/upb/upb/def.h +4 -377
  2361. data/third_party/upb/upb/def.hpp +3 -408
  2362. data/third_party/upb/upb/encode.h +3 -38
  2363. data/third_party/upb/upb/extension_registry.h +35 -0
  2364. data/third_party/upb/upb/{table.c → hash/common.c} +51 -109
  2365. data/third_party/upb/upb/hash/common.h +199 -0
  2366. data/third_party/upb/upb/hash/int_table.h +102 -0
  2367. data/third_party/upb/upb/hash/str_table.h +161 -0
  2368. data/third_party/upb/upb/json/decode.c +1477 -0
  2369. data/third_party/upb/upb/json/decode.h +52 -0
  2370. data/third_party/upb/upb/{json_encode.c → json/encode.c} +74 -46
  2371. data/third_party/upb/upb/json/encode.h +70 -0
  2372. data/third_party/upb/upb/json_decode.h +36 -0
  2373. data/third_party/upb/upb/json_encode.h +4 -30
  2374. data/third_party/upb/upb/lex/atoi.c +68 -0
  2375. data/third_party/upb/upb/lex/atoi.h +53 -0
  2376. data/third_party/upb/upb/lex/round_trip.c +67 -0
  2377. data/third_party/upb/upb/{upb_internal.h → lex/round_trip.h} +17 -30
  2378. data/third_party/upb/upb/lex/strtod.c +97 -0
  2379. data/third_party/upb/upb/lex/strtod.h +46 -0
  2380. data/third_party/upb/upb/lex/unicode.c +57 -0
  2381. data/third_party/upb/upb/lex/unicode.h +77 -0
  2382. data/third_party/upb/upb/map.h +36 -0
  2383. data/third_party/upb/upb/mem/alloc.c +47 -0
  2384. data/third_party/upb/upb/mem/alloc.h +98 -0
  2385. data/third_party/upb/upb/mem/arena.c +367 -0
  2386. data/third_party/upb/upb/mem/arena.h +160 -0
  2387. data/third_party/upb/upb/mem/arena_internal.h +114 -0
  2388. data/third_party/upb/upb/message/accessors.c +68 -0
  2389. data/third_party/upb/upb/message/accessors.h +379 -0
  2390. data/third_party/upb/upb/message/accessors_internal.h +325 -0
  2391. data/third_party/upb/upb/message/extension_internal.h +83 -0
  2392. data/third_party/upb/upb/message/internal.h +135 -0
  2393. data/third_party/upb/upb/message/message.c +180 -0
  2394. data/third_party/upb/upb/message/message.h +69 -0
  2395. data/third_party/upb/upb/mini_table/common.c +128 -0
  2396. data/third_party/upb/upb/mini_table/common.h +170 -0
  2397. data/third_party/upb/upb/mini_table/common_internal.h +111 -0
  2398. data/third_party/upb/upb/mini_table/decode.c +1127 -0
  2399. data/third_party/upb/upb/mini_table/decode.h +179 -0
  2400. data/third_party/upb/upb/mini_table/encode.c +300 -0
  2401. data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
  2402. data/third_party/upb/upb/mini_table/encode_internal.hpp +136 -0
  2403. data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
  2404. data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
  2405. data/third_party/upb/upb/mini_table/extension_registry.c +96 -0
  2406. data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
  2407. data/third_party/upb/upb/mini_table/field_internal.h +192 -0
  2408. data/third_party/upb/upb/mini_table/file_internal.h +47 -0
  2409. data/third_party/upb/upb/mini_table/message_internal.h +136 -0
  2410. data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
  2411. data/third_party/upb/upb/mini_table/types.h +40 -0
  2412. data/third_party/upb/upb/mini_table.h +36 -0
  2413. data/third_party/upb/upb/msg.h +3 -81
  2414. data/third_party/upb/upb/port/atomic.h +101 -0
  2415. data/third_party/upb/upb/{port_def.inc → port/def.inc} +96 -28
  2416. data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +14 -3
  2417. data/third_party/upb/upb/port/vsnprintf_compat.h +50 -0
  2418. data/third_party/upb/upb/reflection/common.h +67 -0
  2419. data/third_party/upb/upb/reflection/def.h +42 -0
  2420. data/third_party/upb/upb/reflection/def.hpp +610 -0
  2421. data/third_party/upb/upb/reflection/def_builder.c +357 -0
  2422. data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
  2423. data/third_party/upb/upb/reflection/def_pool.c +462 -0
  2424. data/third_party/upb/upb/reflection/def_pool.h +108 -0
  2425. data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
  2426. data/third_party/upb/upb/reflection/def_type.c +50 -0
  2427. data/third_party/upb/upb/reflection/def_type.h +81 -0
  2428. data/third_party/upb/upb/reflection/desc_state.c +53 -0
  2429. data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
  2430. data/third_party/upb/upb/reflection/enum_def.c +310 -0
  2431. data/third_party/upb/upb/reflection/enum_def.h +80 -0
  2432. data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
  2433. data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
  2434. data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
  2435. data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
  2436. data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
  2437. data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
  2438. data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
  2439. data/third_party/upb/upb/reflection/extension_range.c +93 -0
  2440. data/third_party/upb/upb/reflection/extension_range.h +55 -0
  2441. data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
  2442. data/third_party/upb/upb/reflection/field_def.c +930 -0
  2443. data/third_party/upb/upb/reflection/field_def.h +91 -0
  2444. data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
  2445. data/third_party/upb/upb/reflection/file_def.c +370 -0
  2446. data/third_party/upb/upb/reflection/file_def.h +77 -0
  2447. data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
  2448. data/third_party/upb/upb/reflection/message.c +233 -0
  2449. data/third_party/upb/upb/reflection/message.h +102 -0
  2450. data/third_party/upb/upb/reflection/message.hpp +37 -0
  2451. data/third_party/upb/upb/reflection/message_def.c +718 -0
  2452. data/third_party/upb/upb/reflection/message_def.h +174 -0
  2453. data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
  2454. data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
  2455. data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
  2456. data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
  2457. data/third_party/upb/upb/reflection/method_def.c +124 -0
  2458. data/third_party/upb/upb/reflection/method_def.h +59 -0
  2459. data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
  2460. data/third_party/upb/upb/reflection/oneof_def.c +226 -0
  2461. data/third_party/upb/upb/reflection/oneof_def.h +66 -0
  2462. data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
  2463. data/third_party/upb/upb/reflection/service_def.c +128 -0
  2464. data/third_party/upb/upb/reflection/service_def.h +60 -0
  2465. data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
  2466. data/third_party/upb/upb/reflection.h +4 -188
  2467. data/third_party/upb/upb/reflection.hpp +3 -7
  2468. data/third_party/upb/upb/status.h +36 -0
  2469. data/third_party/upb/upb/string_view.h +36 -0
  2470. data/third_party/upb/upb/{text_encode.c → text/encode.c} +75 -70
  2471. data/third_party/upb/upb/text/encode.h +69 -0
  2472. data/third_party/upb/upb/text_encode.h +4 -32
  2473. data/third_party/upb/upb/upb.h +6 -340
  2474. data/third_party/upb/upb/upb.hpp +10 -18
  2475. data/third_party/upb/upb/wire/common.h +44 -0
  2476. data/third_party/upb/upb/wire/common_internal.h +50 -0
  2477. data/third_party/upb/upb/wire/decode.c +1343 -0
  2478. data/third_party/upb/upb/wire/decode.h +108 -0
  2479. data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
  2480. data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
  2481. data/third_party/upb/upb/{decode_internal.h → wire/decode_internal.h} +44 -92
  2482. data/third_party/upb/upb/{encode.c → wire/encode.c} +130 -102
  2483. data/third_party/upb/upb/wire/encode.h +92 -0
  2484. data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
  2485. data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
  2486. data/third_party/upb/upb/wire/reader.c +67 -0
  2487. data/third_party/upb/upb/wire/reader.h +227 -0
  2488. data/third_party/upb/upb/wire/swap_internal.h +63 -0
  2489. data/third_party/upb/upb/wire/types.h +41 -0
  2490. data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
  2491. data/third_party/utf8_range/utf8_range.h +21 -0
  2492. data/third_party/zlib/compress.c +3 -3
  2493. data/third_party/zlib/crc32.c +21 -12
  2494. data/third_party/zlib/deflate.c +112 -106
  2495. data/third_party/zlib/deflate.h +2 -2
  2496. data/third_party/zlib/gzlib.c +1 -1
  2497. data/third_party/zlib/gzread.c +3 -5
  2498. data/third_party/zlib/gzwrite.c +1 -1
  2499. data/third_party/zlib/infback.c +10 -7
  2500. data/third_party/zlib/inflate.c +5 -2
  2501. data/third_party/zlib/inftrees.c +2 -2
  2502. data/third_party/zlib/inftrees.h +1 -1
  2503. data/third_party/zlib/trees.c +61 -62
  2504. data/third_party/zlib/uncompr.c +2 -2
  2505. data/third_party/zlib/zconf.h +16 -3
  2506. data/third_party/zlib/zlib.h +10 -10
  2507. data/third_party/zlib/zutil.c +9 -7
  2508. data/third_party/zlib/zutil.h +1 -0
  2509. metadata +597 -174
  2510. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  2511. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -176
  2512. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  2513. data/src/core/ext/filters/client_channel/lb_policy.cc +0 -134
  2514. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  2515. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
  2516. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  2517. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  2518. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
  2519. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  2520. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -30
  2521. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -180
  2522. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -182
  2523. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -334
  2524. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  2525. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -324
  2526. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
  2527. data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
  2528. data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
  2529. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  2530. data/src/core/ext/xds/certificate_provider_registry.h +0 -59
  2531. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +0 -159
  2532. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
  2533. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
  2534. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +0 -81
  2535. data/src/core/lib/event_engine/iomgr_engine/timer.h +0 -193
  2536. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +0 -56
  2537. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +0 -254
  2538. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +0 -111
  2539. data/src/core/lib/event_engine/promise.h +0 -69
  2540. data/src/core/lib/gpr/cpu_iphone.cc +0 -44
  2541. data/src/core/lib/gpr/cpu_windows.cc +0 -33
  2542. data/src/core/lib/gpr/env.h +0 -40
  2543. data/src/core/lib/gpr/env_linux.cc +0 -75
  2544. data/src/core/lib/gpr/env_posix.cc +0 -46
  2545. data/src/core/lib/gpr/env_windows.cc +0 -74
  2546. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  2547. data/src/core/lib/gpr/murmur_hash.h +0 -29
  2548. data/src/core/lib/gpr/string_util_windows.cc +0 -82
  2549. data/src/core/lib/gpr/string_windows.cc +0 -69
  2550. data/src/core/lib/gpr/string_windows.h +0 -32
  2551. data/src/core/lib/gpr/tls.h +0 -156
  2552. data/src/core/lib/gpr/tmpfile_windows.cc +0 -69
  2553. data/src/core/lib/gprpp/global_config.h +0 -93
  2554. data/src/core/lib/gprpp/global_config_custom.h +0 -29
  2555. data/src/core/lib/gprpp/global_config_env.cc +0 -138
  2556. data/src/core/lib/gprpp/global_config_env.h +0 -133
  2557. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  2558. data/src/core/lib/iomgr/error_internal.h +0 -66
  2559. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  2560. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  2561. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  2562. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  2563. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  2564. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  2565. data/src/core/lib/profiling/basic_timers.cc +0 -295
  2566. data/src/core/lib/profiling/stap_timers.cc +0 -50
  2567. data/src/core/lib/profiling/timers.h +0 -94
  2568. data/src/core/lib/promise/call_push_pull.h +0 -148
  2569. data/src/core/lib/promise/intra_activity_waiter.h +0 -49
  2570. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  2571. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -30
  2572. data/src/core/lib/slice/slice_api.cc +0 -39
  2573. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  2574. data/src/core/lib/slice/slice_refcount_base.h +0 -60
  2575. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  2576. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  2577. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  2578. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  2579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  2580. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  2581. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  2582. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  2583. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  2584. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  2585. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  2586. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  2587. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  2588. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
  2589. data/third_party/upb/third_party/utf8_range/utf8_range.h +0 -9
  2590. data/third_party/upb/upb/decode.c +0 -1125
  2591. data/third_party/upb/upb/def.c +0 -3261
  2592. data/third_party/upb/upb/msg.c +0 -428
  2593. data/third_party/upb/upb/msg_internal.h +0 -831
  2594. data/third_party/upb/upb/reflection.c +0 -480
  2595. data/third_party/upb/upb/table_internal.h +0 -385
  2596. data/third_party/upb/upb/upb.c +0 -362
  2597. /data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  2598. /data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  2599. /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
  2600. /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -19,65 +19,32 @@
19
19
  #include "src/core/ext/xds/xds_client.h"
20
20
 
21
21
  #include <inttypes.h>
22
- #include <limits.h>
23
22
  #include <string.h>
24
23
 
25
24
  #include <algorithm>
25
+ #include <type_traits>
26
26
 
27
- #include "absl/container/inlined_vector.h"
28
27
  #include "absl/strings/match.h"
29
28
  #include "absl/strings/str_cat.h"
30
- #include "absl/strings/str_format.h"
31
29
  #include "absl/strings/str_join.h"
32
30
  #include "absl/strings/str_split.h"
33
31
  #include "absl/strings/string_view.h"
34
32
  #include "absl/strings/strip.h"
33
+ #include "absl/types/optional.h"
34
+ #include "upb/mem/arena.h"
35
35
 
36
- #include <grpc/byte_buffer.h>
37
- #include <grpc/byte_buffer_reader.h>
38
- #include <grpc/grpc.h>
39
- #include <grpc/impl/codegen/connectivity_state.h>
40
- #include <grpc/impl/codegen/propagation_bits.h>
41
- #include <grpc/slice.h>
42
- #include <grpc/status.h>
43
- #include <grpc/support/alloc.h>
36
+ #include <grpc/event_engine/event_engine.h>
44
37
  #include <grpc/support/log.h>
45
- #include <grpc/support/string_util.h>
46
- #include <grpc/support/time.h>
47
38
 
48
- #include "src/core/ext/filters/client_channel/client_channel.h"
49
- #include "src/core/ext/xds/upb_utils.h"
50
39
  #include "src/core/ext/xds/xds_api.h"
51
40
  #include "src/core/ext/xds/xds_bootstrap.h"
52
- #include "src/core/ext/xds/xds_channel_args.h"
53
41
  #include "src/core/ext/xds/xds_client_stats.h"
54
- #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
55
- #include "src/core/ext/xds/xds_http_filters.h"
56
42
  #include "src/core/lib/backoff/backoff.h"
57
- #include "src/core/lib/channel/channel_args.h"
58
- #include "src/core/lib/channel/channel_fwd.h"
59
- #include "src/core/lib/channel/channel_stack.h"
60
- #include "src/core/lib/config/core_configuration.h"
61
- #include "src/core/lib/gpr/env.h"
62
- #include "src/core/lib/gpr/useful.h"
63
43
  #include "src/core/lib/gprpp/debug_location.h"
64
- #include "src/core/lib/gprpp/memory.h"
65
44
  #include "src/core/lib/gprpp/orphanable.h"
66
45
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
67
46
  #include "src/core/lib/gprpp/sync.h"
68
- #include "src/core/lib/iomgr/closure.h"
69
- #include "src/core/lib/iomgr/load_file.h"
70
- #include "src/core/lib/iomgr/pollset_set.h"
71
- #include "src/core/lib/iomgr/timer.h"
72
- #include "src/core/lib/security/credentials/channel_creds_registry.h"
73
- #include "src/core/lib/security/credentials/credentials.h"
74
- #include "src/core/lib/slice/slice.h"
75
- #include "src/core/lib/slice/slice_internal.h"
76
- #include "src/core/lib/slice/slice_refcount.h"
77
- #include "src/core/lib/surface/call.h"
78
- #include "src/core/lib/surface/channel.h"
79
- #include "src/core/lib/surface/lame_client.h"
80
- #include "src/core/lib/transport/connectivity_state.h"
47
+ #include "src/core/lib/iomgr/exec_ctx.h"
81
48
  #include "src/core/lib/uri/uri_parser.h"
82
49
 
83
50
  #define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
@@ -88,19 +55,11 @@
88
55
 
89
56
  namespace grpc_core {
90
57
 
58
+ using ::grpc_event_engine::experimental::EventEngine;
59
+
91
60
  TraceFlag grpc_xds_client_trace(false, "xds_client");
92
61
  TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
93
62
 
94
- namespace {
95
-
96
- Mutex* g_mu = nullptr;
97
-
98
- const grpc_channel_args* g_channel_args ABSL_GUARDED_BY(*g_mu) = nullptr;
99
- XdsClient* g_xds_client ABSL_GUARDED_BY(*g_mu) = nullptr;
100
- char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
101
-
102
- } // namespace
103
-
104
63
  //
105
64
  // Internal class declarations
106
65
  //
@@ -113,9 +72,12 @@ class XdsClient::ChannelState::RetryableCall
113
72
  public:
114
73
  explicit RetryableCall(WeakRefCountedPtr<ChannelState> chand);
115
74
 
116
- void Orphan() override;
75
+ // Disable thread-safety analysis because this method is called via
76
+ // OrphanablePtr<>, but there's no way to pass the lock annotation
77
+ // through there.
78
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
117
79
 
118
- void OnCallFinishedLocked();
80
+ void OnCallFinishedLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
119
81
 
120
82
  T* calld() const { return calld_.get(); }
121
83
  ChannelState* chand() const { return chand_.get(); }
@@ -124,9 +86,9 @@ class XdsClient::ChannelState::RetryableCall
124
86
 
125
87
  private:
126
88
  void StartNewCallLocked();
127
- void StartRetryTimerLocked();
128
- static void OnRetryTimer(void* arg, grpc_error_handle error);
129
- void OnRetryTimerLocked(grpc_error_handle error);
89
+ void StartRetryTimerLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
90
+
91
+ void OnRetryTimer();
130
92
 
131
93
  // The wrapped xds call that talks to the xds server. It's instantiated
132
94
  // every time we start a new call. It's null during call retry backoff.
@@ -136,9 +98,8 @@ class XdsClient::ChannelState::RetryableCall
136
98
 
137
99
  // Retry state.
138
100
  BackOff backoff_;
139
- grpc_timer retry_timer_;
140
- grpc_closure on_retry_timer_;
141
- bool retry_timer_callback_pending_ = false;
101
+ absl::optional<EventEngine::TaskHandle> timer_handle_
102
+ ABSL_GUARDED_BY(&XdsClient::mu_);
142
103
 
143
104
  bool shutting_down_ = false;
144
105
  };
@@ -149,7 +110,6 @@ class XdsClient::ChannelState::AdsCallState
149
110
  public:
150
111
  // The ctor and dtor should not be used directly.
151
112
  explicit AdsCallState(RefCountedPtr<RetryableCall<AdsCallState>> parent);
152
- ~AdsCallState() override;
153
113
 
154
114
  void Orphan() override;
155
115
 
@@ -187,38 +147,76 @@ class XdsClient::ChannelState::AdsCallState
187
147
  absl::Status ProcessAdsResponseFields(AdsResponseFields fields) override
188
148
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
189
149
 
190
- void ParseResource(const XdsEncodingContext& context, size_t idx,
191
- absl::string_view type_url,
150
+ void ParseResource(upb_Arena* arena, size_t idx, absl::string_view type_url,
151
+ absl::string_view resource_name,
192
152
  absl::string_view serialized_resource) override
193
153
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
194
154
 
155
+ void ResourceWrapperParsingFailed(size_t idx,
156
+ absl::string_view message) override;
157
+
195
158
  Result TakeResult() { return std::move(result_); }
196
159
 
197
160
  private:
198
161
  XdsClient* xds_client() const { return ads_call_state_->xds_client(); }
199
162
 
200
163
  AdsCallState* ads_call_state_;
201
- const Timestamp update_time_ = ExecCtx::Get()->Now();
164
+ const Timestamp update_time_ = Timestamp::Now();
202
165
  Result result_;
203
166
  };
204
167
 
205
168
  class ResourceTimer : public InternallyRefCounted<ResourceTimer> {
206
169
  public:
207
170
  ResourceTimer(const XdsResourceType* type, const XdsResourceName& name)
208
- : type_(type), name_(name) {
209
- GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
210
- grpc_schedule_on_exec_ctx);
211
- }
171
+ : type_(type), name_(name) {}
212
172
 
213
- void Orphan() override {
173
+ // Disable thread-safety analysis because this method is called via
174
+ // OrphanablePtr<>, but there's no way to pass the lock annotation
175
+ // through there.
176
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS {
214
177
  MaybeCancelTimer();
215
178
  Unref(DEBUG_LOCATION, "Orphan");
216
179
  }
217
180
 
181
+ void MarkSubscriptionSendStarted()
182
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
183
+ subscription_sent_ = true;
184
+ }
185
+
186
+ void MaybeMarkSubscriptionSendComplete(
187
+ RefCountedPtr<AdsCallState> ads_calld)
188
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
189
+ if (subscription_sent_) MaybeStartTimer(std::move(ads_calld));
190
+ }
191
+
192
+ void MarkSeen() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
193
+ resource_seen_ = true;
194
+ MaybeCancelTimer();
195
+ }
196
+
197
+ void MaybeCancelTimer() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
198
+ if (timer_handle_.has_value() &&
199
+ ads_calld_->xds_client()->engine()->Cancel(*timer_handle_)) {
200
+ timer_handle_.reset();
201
+ }
202
+ }
203
+
204
+ private:
218
205
  void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld)
219
206
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
220
- if (!timer_start_needed_) return;
221
- timer_start_needed_ = false;
207
+ // Don't start timer if we've already either seen the resource or
208
+ // marked it as non-existing.
209
+ // Note: There are edge cases where we can have seen the resource
210
+ // before we have sent the initial subscription request, such as
211
+ // when we unsubscribe and then resubscribe to a given resource
212
+ // and then get a response containing that resource, all while a
213
+ // send_message op is in flight.
214
+ if (resource_seen_) return;
215
+ // Don't start timer if we haven't yet sent the initial subscription
216
+ // request for the resource.
217
+ if (!subscription_sent_) return;
218
+ // Don't start timer if it's already running.
219
+ if (timer_handle_.has_value()) return;
222
220
  // Check if we already have a cached version of this resource
223
221
  // (i.e., if this is the initial request for the resource after an
224
222
  // ADS stream restart). If so, we don't start the timer, because
@@ -230,60 +228,31 @@ class XdsClient::ChannelState::AdsCallState
230
228
  if (state.resource != nullptr) return;
231
229
  // Start timer.
232
230
  ads_calld_ = std::move(ads_calld);
233
- Ref(DEBUG_LOCATION, "timer").release();
234
- timer_pending_ = true;
235
- grpc_timer_init(
236
- &timer_,
237
- ExecCtx::Get()->Now() + ads_calld_->xds_client()->request_timeout_,
238
- &timer_callback_);
231
+ timer_handle_ = ads_calld_->xds_client()->engine()->RunAfter(
232
+ ads_calld_->xds_client()->request_timeout_,
233
+ [self = Ref(DEBUG_LOCATION, "timer")]() {
234
+ ApplicationCallbackExecCtx callback_exec_ctx;
235
+ ExecCtx exec_ctx;
236
+ self->OnTimer();
237
+ });
239
238
  }
240
239
 
241
- void MaybeCancelTimer() {
242
- // If the timer hasn't been started yet, make sure we don't start
243
- // it later. This can happen if the last watch for an LDS or CDS
244
- // resource is cancelled and then restarted, both while an ADS
245
- // request for a different resource type is being sent (causing
246
- // the unsubscription and then resubscription requests to be
247
- // queued), and then we get a response for the LDS or CDS resource.
248
- // In that case, we would call MaybeCancelTimer() when we receive the
249
- // response and then MaybeStartTimer() when we finally send the new
250
- // LDS or CDS request, thus causing the timer to fire when it shouldn't.
251
- // For details, see https://github.com/grpc/grpc/issues/29583.
252
- // TODO(roth): Find a way to write a test for this case.
253
- timer_start_needed_ = false;
254
- if (timer_pending_) {
255
- grpc_timer_cancel(&timer_);
256
- timer_pending_ = false;
240
+ void OnTimer() {
241
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
242
+ gpr_log(GPR_INFO,
243
+ "[xds_client %p] xds server %s: timeout obtaining resource "
244
+ "{type=%s name=%s} from xds server",
245
+ ads_calld_->xds_client(),
246
+ ads_calld_->chand()->server_.server_uri().c_str(),
247
+ std::string(type_->type_url()).c_str(),
248
+ XdsClient::ConstructFullXdsResourceName(
249
+ name_.authority, type_->type_url(), name_.key)
250
+ .c_str());
257
251
  }
258
- }
259
-
260
- private:
261
- static void OnTimer(void* arg, grpc_error_handle error) {
262
- ResourceTimer* self = static_cast<ResourceTimer*>(arg);
263
252
  {
264
- MutexLock lock(&self->ads_calld_->xds_client()->mu_);
265
- self->OnTimerLocked(GRPC_ERROR_REF(error));
266
- }
267
- self->ads_calld_->xds_client()->work_serializer_.DrainQueue();
268
- self->ads_calld_.reset();
269
- self->Unref(DEBUG_LOCATION, "timer");
270
- }
271
-
272
- void OnTimerLocked(grpc_error_handle error)
273
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
274
- if (GRPC_ERROR_IS_NONE(error) && timer_pending_) {
275
- timer_pending_ = false;
276
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
277
- gpr_log(GPR_INFO,
278
- "[xds_client %p] xds server %s: timeout obtaining resource "
279
- "{type=%s name=%s} from xds server",
280
- ads_calld_->xds_client(),
281
- ads_calld_->chand()->server_.server_uri.c_str(),
282
- std::string(type_->type_url()).c_str(),
283
- XdsClient::ConstructFullXdsResourceName(
284
- name_.authority, type_->type_url(), name_.key)
285
- .c_str());
286
- }
253
+ MutexLock lock(&ads_calld_->xds_client()->mu_);
254
+ timer_handle_.reset();
255
+ resource_seen_ = true;
287
256
  auto& authority_state =
288
257
  ads_calld_->xds_client()->authority_state_map_[name_.authority];
289
258
  ResourceState& state = authority_state.resource_map[type_][name_.key];
@@ -291,25 +260,47 @@ class XdsClient::ChannelState::AdsCallState
291
260
  ads_calld_->xds_client()->NotifyWatchersOnResourceDoesNotExist(
292
261
  state.watchers);
293
262
  }
294
- GRPC_ERROR_UNREF(error);
263
+ ads_calld_->xds_client()->work_serializer_.DrainQueue();
264
+ ads_calld_.reset();
295
265
  }
296
266
 
297
267
  const XdsResourceType* type_;
298
268
  const XdsResourceName name_;
299
269
 
300
270
  RefCountedPtr<AdsCallState> ads_calld_;
301
- bool timer_start_needed_ = true;
302
- bool timer_pending_ = false;
303
- grpc_timer timer_;
304
- grpc_closure timer_callback_;
271
+ // True if we have sent the initial subscription request for this
272
+ // resource on this ADS stream.
273
+ bool subscription_sent_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
274
+ // True if we have either (a) seen the resource in a response on this
275
+ // stream or (b) declared the resource to not exist due to the timer
276
+ // firing.
277
+ bool resource_seen_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
278
+ absl::optional<EventEngine::TaskHandle> timer_handle_
279
+ ABSL_GUARDED_BY(&XdsClient::mu_);
305
280
  };
306
281
 
307
- struct ResourceTypeState {
308
- ~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
282
+ class StreamEventHandler
283
+ : public XdsTransportFactory::XdsTransport::StreamingCall::EventHandler {
284
+ public:
285
+ explicit StreamEventHandler(RefCountedPtr<AdsCallState> ads_calld)
286
+ : ads_calld_(std::move(ads_calld)) {}
287
+
288
+ void OnRequestSent(bool ok) override { ads_calld_->OnRequestSent(ok); }
289
+ void OnRecvMessage(absl::string_view payload) override {
290
+ ads_calld_->OnRecvMessage(payload);
291
+ }
292
+ void OnStatusReceived(absl::Status status) override {
293
+ ads_calld_->OnStatusReceived(std::move(status));
294
+ }
309
295
 
310
- // Nonce and error for this resource type.
296
+ private:
297
+ RefCountedPtr<AdsCallState> ads_calld_;
298
+ };
299
+
300
+ struct ResourceTypeState {
301
+ // Nonce and status for this resource type.
311
302
  std::string nonce;
312
- grpc_error_handle error = GRPC_ERROR_NONE;
303
+ absl::Status status;
313
304
 
314
305
  // Subscribed resources of this type.
315
306
  std::map<std::string /*authority*/,
@@ -320,15 +311,9 @@ class XdsClient::ChannelState::AdsCallState
320
311
  void SendMessageLocked(const XdsResourceType* type)
321
312
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
322
313
 
323
- static void OnRequestSent(void* arg, grpc_error_handle error);
324
- void OnRequestSentLocked(grpc_error_handle error)
325
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
326
- static void OnResponseReceived(void* arg, grpc_error_handle error);
327
- bool OnResponseReceivedLocked()
328
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
329
- static void OnStatusReceived(void* arg, grpc_error_handle error);
330
- void OnStatusReceivedLocked(grpc_error_handle error)
331
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
314
+ void OnRequestSent(bool ok);
315
+ void OnRecvMessage(absl::string_view payload);
316
+ void OnStatusReceived(absl::Status status);
332
317
 
333
318
  bool IsCurrentCallOnChannel() const;
334
319
 
@@ -340,28 +325,13 @@ class XdsClient::ChannelState::AdsCallState
340
325
  // The owning RetryableCall<>.
341
326
  RefCountedPtr<RetryableCall<AdsCallState>> parent_;
342
327
 
328
+ OrphanablePtr<XdsTransportFactory::XdsTransport::StreamingCall> call_;
329
+
343
330
  bool sent_initial_message_ = false;
344
331
  bool seen_response_ = false;
345
332
 
346
- // Always non-NULL.
347
- grpc_call* call_;
348
-
349
- // recv_initial_metadata
350
- grpc_metadata_array initial_metadata_recv_;
351
-
352
- // send_message
353
- grpc_byte_buffer* send_message_payload_ = nullptr;
354
- grpc_closure on_request_sent_;
355
-
356
- // recv_message
357
- grpc_byte_buffer* recv_message_payload_ = nullptr;
358
- grpc_closure on_response_received_;
359
-
360
- // recv_trailing_metadata
361
- grpc_metadata_array trailing_metadata_recv_;
362
- grpc_status_code status_code_;
363
- grpc_slice status_details_;
364
- grpc_closure on_status_received_;
333
+ const XdsResourceType* send_message_pending_
334
+ ABSL_GUARDED_BY(&XdsClient::mu_) = nullptr;
365
335
 
366
336
  // Resource types for which requests need to be sent.
367
337
  std::set<const XdsResourceType*> buffered_requests_;
@@ -376,11 +346,11 @@ class XdsClient::ChannelState::LrsCallState
376
346
  public:
377
347
  // The ctor and dtor should not be used directly.
378
348
  explicit LrsCallState(RefCountedPtr<RetryableCall<LrsCallState>> parent);
379
- ~LrsCallState() override;
380
349
 
381
350
  void Orphan() override;
382
351
 
383
- void MaybeStartReportingLocked();
352
+ void MaybeStartReportingLocked()
353
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
384
354
 
385
355
  RetryableCall<LrsCallState>* parent() { return parent_.get(); }
386
356
  ChannelState* chand() const { return parent_->chand(); }
@@ -388,30 +358,44 @@ class XdsClient::ChannelState::LrsCallState
388
358
  bool seen_response() const { return seen_response_; }
389
359
 
390
360
  private:
361
+ class StreamEventHandler
362
+ : public XdsTransportFactory::XdsTransport::StreamingCall::EventHandler {
363
+ public:
364
+ explicit StreamEventHandler(RefCountedPtr<LrsCallState> lrs_calld)
365
+ : lrs_calld_(std::move(lrs_calld)) {}
366
+
367
+ void OnRequestSent(bool ok) override { lrs_calld_->OnRequestSent(ok); }
368
+ void OnRecvMessage(absl::string_view payload) override {
369
+ lrs_calld_->OnRecvMessage(payload);
370
+ }
371
+ void OnStatusReceived(absl::Status status) override {
372
+ lrs_calld_->OnStatusReceived(std::move(status));
373
+ }
374
+
375
+ private:
376
+ RefCountedPtr<LrsCallState> lrs_calld_;
377
+ };
378
+
391
379
  // Reports client-side load stats according to a fixed interval.
392
380
  class Reporter : public InternallyRefCounted<Reporter> {
393
381
  public:
394
382
  Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
395
383
  : parent_(std::move(parent)), report_interval_(report_interval) {
396
- GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
397
- grpc_schedule_on_exec_ctx);
398
- GRPC_CLOSURE_INIT(&on_report_done_, OnReportDone, this,
399
- grpc_schedule_on_exec_ctx);
400
384
  ScheduleNextReportLocked();
401
385
  }
402
386
 
403
- void Orphan() override;
387
+ // Disable thread-safety analysis because this method is called via
388
+ // OrphanablePtr<>, but there's no way to pass the lock annotation
389
+ // through there.
390
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
391
+
392
+ void OnReportDoneLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
404
393
 
405
394
  private:
406
395
  void ScheduleNextReportLocked()
407
396
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
408
- static void OnNextReportTimer(void* arg, grpc_error_handle error);
409
- bool OnNextReportTimerLocked(grpc_error_handle error)
410
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
397
+ bool OnNextReportTimer();
411
398
  bool SendReportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
412
- static void OnReportDone(void* arg, grpc_error_handle error);
413
- bool OnReportDoneLocked(grpc_error_handle error)
414
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
415
399
 
416
400
  bool IsCurrentReporterOnCall() const {
417
401
  return this == parent_->reporter_.get();
@@ -424,47 +408,23 @@ class XdsClient::ChannelState::LrsCallState
424
408
  // The load reporting state.
425
409
  const Duration report_interval_;
426
410
  bool last_report_counters_were_zero_ = false;
427
- bool next_report_timer_callback_pending_ = false;
428
- grpc_timer next_report_timer_;
429
- grpc_closure on_next_report_timer_;
430
- grpc_closure on_report_done_;
411
+ absl::optional<EventEngine::TaskHandle> timer_handle_
412
+ ABSL_GUARDED_BY(&XdsClient::mu_);
431
413
  };
432
414
 
433
- static void OnInitialRequestSent(void* arg, grpc_error_handle error);
434
- void OnInitialRequestSentLocked()
435
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
436
- static void OnResponseReceived(void* arg, grpc_error_handle error);
437
- bool OnResponseReceivedLocked()
438
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
439
- static void OnStatusReceived(void* arg, grpc_error_handle error);
440
- void OnStatusReceivedLocked(grpc_error_handle error)
441
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
415
+ void OnRequestSent(bool ok);
416
+ void OnRecvMessage(absl::string_view payload);
417
+ void OnStatusReceived(absl::Status status);
442
418
 
443
419
  bool IsCurrentCallOnChannel() const;
444
420
 
445
421
  // The owning RetryableCall<>.
446
422
  RefCountedPtr<RetryableCall<LrsCallState>> parent_;
447
- bool seen_response_ = false;
448
-
449
- // Always non-NULL.
450
- grpc_call* call_;
451
-
452
- // recv_initial_metadata
453
- grpc_metadata_array initial_metadata_recv_;
454
423
 
455
- // send_message
456
- grpc_byte_buffer* send_message_payload_ = nullptr;
457
- grpc_closure on_initial_request_sent_;
424
+ OrphanablePtr<XdsTransportFactory::XdsTransport::StreamingCall> call_;
458
425
 
459
- // recv_message
460
- grpc_byte_buffer* recv_message_payload_ = nullptr;
461
- grpc_closure on_response_received_;
462
-
463
- // recv_trailing_metadata
464
- grpc_metadata_array trailing_metadata_recv_;
465
- grpc_status_code status_code_;
466
- grpc_slice status_details_;
467
- grpc_closure on_status_received_;
426
+ bool seen_response_ = false;
427
+ bool send_message_pending_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
468
428
 
469
429
  // Load reporting state.
470
430
  bool send_all_clusters_ = false;
@@ -473,58 +433,10 @@ class XdsClient::ChannelState::LrsCallState
473
433
  OrphanablePtr<Reporter> reporter_;
474
434
  };
475
435
 
476
- //
477
- // XdsClient::ChannelState::StateWatcher
478
- //
479
-
480
- class XdsClient::ChannelState::StateWatcher
481
- : public AsyncConnectivityStateWatcherInterface {
482
- public:
483
- explicit StateWatcher(WeakRefCountedPtr<ChannelState> parent)
484
- : parent_(std::move(parent)) {}
485
-
486
- private:
487
- void OnConnectivityStateChange(grpc_connectivity_state new_state,
488
- const absl::Status& status) override {
489
- {
490
- MutexLock lock(&parent_->xds_client_->mu_);
491
- if (!parent_->shutting_down_ &&
492
- new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
493
- // In TRANSIENT_FAILURE. Notify all watchers of error.
494
- gpr_log(GPR_INFO,
495
- "[xds_client %p] xds channel for server %s in "
496
- "state TRANSIENT_FAILURE: %s",
497
- parent_->xds_client(), parent_->server_.server_uri.c_str(),
498
- status.ToString().c_str());
499
- parent_->xds_client_->NotifyOnErrorLocked(
500
- absl::UnavailableError(absl::StrCat(
501
- "xds channel in TRANSIENT_FAILURE, connectivity error: ",
502
- status.ToString())));
503
- }
504
- }
505
- parent_->xds_client()->work_serializer_.DrainQueue();
506
- }
507
-
508
- WeakRefCountedPtr<ChannelState> parent_;
509
- };
510
-
511
436
  //
512
437
  // XdsClient::ChannelState
513
438
  //
514
439
 
515
- namespace {
516
-
517
- grpc_channel* CreateXdsChannel(grpc_channel_args* args,
518
- const XdsBootstrap::XdsServer& server) {
519
- RefCountedPtr<grpc_channel_credentials> channel_creds =
520
- CoreConfiguration::Get().channel_creds_registry().CreateChannelCreds(
521
- server.channel_creds_type, server.channel_creds_config);
522
- return grpc_channel_create(server.server_uri.c_str(), channel_creds.get(),
523
- args);
524
- }
525
-
526
- } // namespace
527
-
528
440
  XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
529
441
  const XdsBootstrap::XdsServer& server)
530
442
  : DualRefCounted<ChannelState>(
@@ -534,38 +446,50 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
534
446
  xds_client_(std::move(xds_client)),
535
447
  server_(server) {
536
448
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
537
- gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
538
- xds_client_.get(), server.server_uri.c_str());
539
- }
540
- channel_ = CreateXdsChannel(xds_client_->args_, server);
541
- GPR_ASSERT(channel_ != nullptr);
542
- StartConnectivityWatchLocked();
449
+ gpr_log(GPR_INFO, "[xds_client %p] creating channel %p for server %s",
450
+ xds_client_.get(), this, server.server_uri().c_str());
451
+ }
452
+ absl::Status status;
453
+ transport_ = xds_client_->transport_factory_->Create(
454
+ server,
455
+ [self = WeakRef(DEBUG_LOCATION, "OnConnectivityFailure")](
456
+ absl::Status status) {
457
+ self->OnConnectivityFailure(std::move(status));
458
+ },
459
+ &status);
460
+ GPR_ASSERT(transport_ != nullptr);
461
+ if (!status.ok()) SetChannelStatusLocked(std::move(status));
543
462
  }
544
463
 
545
464
  XdsClient::ChannelState::~ChannelState() {
546
465
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
547
466
  gpr_log(GPR_INFO, "[xds_client %p] destroying xds channel %p for server %s",
548
- xds_client(), this, server_.server_uri.c_str());
467
+ xds_client(), this, server_.server_uri().c_str());
549
468
  }
550
- grpc_channel_destroy(channel_);
551
469
  xds_client_.reset(DEBUG_LOCATION, "ChannelState");
552
470
  }
553
471
 
554
472
  // This method should only ever be called when holding the lock, but we can't
555
473
  // use a ABSL_EXCLUSIVE_LOCKS_REQUIRED annotation, because Orphan() will be
556
- // called from DualRefCounted::Unref, which cannot have a lock annotation for a
557
- // lock in this subclass.
474
+ // called from DualRefCounted::Unref, which cannot have a lock annotation for
475
+ // a lock in this subclass.
558
476
  void XdsClient::ChannelState::Orphan() ABSL_NO_THREAD_SAFETY_ANALYSIS {
477
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
478
+ gpr_log(GPR_INFO, "[xds_client %p] orphaning xds channel %p for server %s",
479
+ xds_client(), this, server_.server_uri().c_str());
480
+ }
559
481
  shutting_down_ = true;
560
- CancelConnectivityWatchLocked();
482
+ transport_.reset();
561
483
  // At this time, all strong refs are removed, remove from channel map to
562
- // prevent subsequent subscription from trying to use this ChannelState as it
563
- // is shutting down.
564
- xds_client_->xds_server_channel_map_.erase(server_);
484
+ // prevent subsequent subscription from trying to use this ChannelState as
485
+ // it is shutting down.
486
+ xds_client_->xds_server_channel_map_.erase(&server_);
565
487
  ads_calld_.reset();
566
488
  lrs_calld_.reset();
567
489
  }
568
490
 
491
+ void XdsClient::ChannelState::ResetBackoff() { transport_->ResetBackoff(); }
492
+
569
493
  XdsClient::ChannelState::AdsCallState* XdsClient::ChannelState::ads_calld()
570
494
  const {
571
495
  return ads_calld_->calld();
@@ -576,10 +500,6 @@ XdsClient::ChannelState::LrsCallState* XdsClient::ChannelState::lrs_calld()
576
500
  return lrs_calld_->calld();
577
501
  }
578
502
 
579
- bool XdsClient::ChannelState::HasActiveAdsCall() const {
580
- return ads_calld_ != nullptr && ads_calld_->calld() != nullptr;
581
- }
582
-
583
503
  void XdsClient::ChannelState::MaybeStartLrsCall() {
584
504
  if (lrs_calld_ != nullptr) return;
585
505
  lrs_calld_.reset(new RetryableCall<LrsCallState>(
@@ -587,45 +507,10 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
587
507
  }
588
508
 
589
509
  void XdsClient::ChannelState::StopLrsCallLocked() {
590
- xds_client_->xds_load_report_server_map_.erase(server_);
510
+ xds_client_->xds_load_report_server_map_.erase(&server_);
591
511
  lrs_calld_.reset();
592
512
  }
593
513
 
594
- namespace {
595
-
596
- bool IsLameChannel(grpc_channel* channel) {
597
- grpc_channel_element* elem =
598
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
599
- return elem->filter == &LameClientFilter::kFilter;
600
- }
601
-
602
- } // namespace
603
-
604
- void XdsClient::ChannelState::StartConnectivityWatchLocked() {
605
- if (IsLameChannel(channel_)) {
606
- xds_client()->NotifyOnErrorLocked(
607
- absl::UnavailableError("xds client has a lame channel"));
608
- return;
609
- }
610
- ClientChannel* client_channel =
611
- ClientChannel::GetFromChannel(Channel::FromC(channel_));
612
- GPR_ASSERT(client_channel != nullptr);
613
- watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
614
- client_channel->AddConnectivityWatcher(
615
- GRPC_CHANNEL_IDLE,
616
- OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
617
- }
618
-
619
- void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
620
- if (IsLameChannel(channel_)) {
621
- return;
622
- }
623
- ClientChannel* client_channel =
624
- ClientChannel::GetFromChannel(Channel::FromC(channel_));
625
- GPR_ASSERT(client_channel != nullptr);
626
- client_channel->RemoveConnectivityWatcher(watcher_);
627
- }
628
-
629
514
  void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
630
515
  const XdsResourceName& name) {
631
516
  if (ads_calld_ == nullptr) {
@@ -658,6 +543,56 @@ void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
658
543
  }
659
544
  }
660
545
 
546
+ void XdsClient::ChannelState::OnConnectivityFailure(absl::Status status) {
547
+ {
548
+ MutexLock lock(&xds_client_->mu_);
549
+ SetChannelStatusLocked(std::move(status));
550
+ }
551
+ xds_client_->work_serializer_.DrainQueue();
552
+ }
553
+
554
+ void XdsClient::ChannelState::SetChannelStatusLocked(absl::Status status) {
555
+ if (shutting_down_) return;
556
+ status = absl::Status(status.code(), absl::StrCat("xDS channel for server ",
557
+ server_.server_uri(), ": ",
558
+ status.message()));
559
+ gpr_log(GPR_INFO, "[xds_client %p] %s", xds_client(),
560
+ status.ToString().c_str());
561
+ // If the node ID is set, append that to the status message that we send to
562
+ // the watchers, so that it will appear in log messages visible to users.
563
+ const auto* node = xds_client_->bootstrap_->node();
564
+ if (node != nullptr) {
565
+ status = absl::Status(
566
+ status.code(),
567
+ absl::StrCat(status.message(),
568
+ " (node ID:", xds_client_->bootstrap_->node()->id(), ")"));
569
+ }
570
+ // Save status in channel, so that we can immediately generate an
571
+ // error for any new watchers that may be started.
572
+ status_ = status;
573
+ // Find all watchers for this channel.
574
+ std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
575
+ for (const auto& a : xds_client_->authority_state_map_) { // authority
576
+ if (a.second.channel_state != this) continue;
577
+ for (const auto& t : a.second.resource_map) { // type
578
+ for (const auto& r : t.second) { // resource id
579
+ for (const auto& w : r.second.watchers) { // watchers
580
+ watchers.insert(w.second);
581
+ }
582
+ }
583
+ }
584
+ }
585
+ // Enqueue notification for the watchers.
586
+ xds_client_->work_serializer_.Schedule(
587
+ [watchers = std::move(watchers), status = std::move(status)]()
588
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(xds_client_->work_serializer_) {
589
+ for (const auto& watcher : watchers) {
590
+ watcher->OnError(status);
591
+ }
592
+ },
593
+ DEBUG_LOCATION);
594
+ }
595
+
661
596
  //
662
597
  // XdsClient::ChannelState::RetryableCall<>
663
598
  //
@@ -673,9 +608,6 @@ XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
673
608
  .set_jitter(GRPC_XDS_RECONNECT_JITTER)
674
609
  .set_max_backoff(Duration::Seconds(
675
610
  GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS))) {
676
- // Closure Initialization
677
- GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
678
- grpc_schedule_on_exec_ctx);
679
611
  StartNewCallLocked();
680
612
  }
681
613
 
@@ -683,7 +615,10 @@ template <typename T>
683
615
  void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
684
616
  shutting_down_ = true;
685
617
  calld_.reset();
686
- if (retry_timer_callback_pending_) grpc_timer_cancel(&retry_timer_);
618
+ if (timer_handle_.has_value()) {
619
+ chand()->xds_client()->engine()->Cancel(*timer_handle_);
620
+ timer_handle_.reset();
621
+ }
687
622
  this->Unref(DEBUG_LOCATION, "RetryableCall+orphaned");
688
623
  }
689
624
 
@@ -699,13 +634,13 @@ void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
699
634
  template <typename T>
700
635
  void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
701
636
  if (shutting_down_) return;
702
- GPR_ASSERT(chand_->channel_ != nullptr);
637
+ GPR_ASSERT(chand_->transport_ != nullptr);
703
638
  GPR_ASSERT(calld_ == nullptr);
704
639
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
705
- gpr_log(
706
- GPR_INFO,
707
- "[xds_client %p] xds server %s: start new call from retryable call %p",
708
- chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
640
+ gpr_log(GPR_INFO,
641
+ "[xds_client %p] xds server %s: start new call from retryable "
642
+ "call %p",
643
+ chand()->xds_client(), chand()->server_.server_uri().c_str(), this);
709
644
  }
710
645
  calld_ = MakeOrphanable<T>(
711
646
  this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
@@ -715,45 +650,39 @@ template <typename T>
715
650
  void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
716
651
  if (shutting_down_) return;
717
652
  const Timestamp next_attempt_time = backoff_.NextAttemptTime();
653
+ const Duration timeout =
654
+ std::max(next_attempt_time - Timestamp::Now(), Duration::Zero());
718
655
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
719
- Duration timeout =
720
- std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
721
656
  gpr_log(GPR_INFO,
722
657
  "[xds_client %p] xds server %s: call attempt failed; "
723
658
  "retry timer will fire in %" PRId64 "ms.",
724
- chand()->xds_client(), chand()->server_.server_uri.c_str(),
659
+ chand()->xds_client(), chand()->server_.server_uri().c_str(),
725
660
  timeout.millis());
726
661
  }
727
- this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
728
- grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
729
- retry_timer_callback_pending_ = true;
730
- }
731
-
732
- template <typename T>
733
- void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
734
- void* arg, grpc_error_handle error) {
735
- RetryableCall* calld = static_cast<RetryableCall*>(arg);
736
- {
737
- MutexLock lock(&calld->chand_->xds_client()->mu_);
738
- calld->OnRetryTimerLocked(GRPC_ERROR_REF(error));
739
- }
740
- calld->Unref(DEBUG_LOCATION, "RetryableCall+retry_timer_done");
662
+ timer_handle_ = chand()->xds_client()->engine()->RunAfter(
663
+ timeout,
664
+ [self = this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start")]() {
665
+ ApplicationCallbackExecCtx callback_exec_ctx;
666
+ ExecCtx exec_ctx;
667
+ self->OnRetryTimer();
668
+ });
741
669
  }
742
670
 
743
671
  template <typename T>
744
- void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
745
- grpc_error_handle error) {
746
- retry_timer_callback_pending_ = false;
747
- if (!shutting_down_ && GRPC_ERROR_IS_NONE(error)) {
672
+ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer() {
673
+ MutexLock lock(&chand_->xds_client()->mu_);
674
+ if (timer_handle_.has_value()) {
675
+ timer_handle_.reset();
676
+ if (shutting_down_) return;
748
677
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
749
678
  gpr_log(GPR_INFO,
750
679
  "[xds_client %p] xds server %s: retry timer fired (retryable "
751
680
  "call: %p)",
752
- chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
681
+ chand()->xds_client(), chand()->server_.server_uri().c_str(),
682
+ this);
753
683
  }
754
684
  StartNewCallLocked();
755
685
  }
756
- GRPC_ERROR_UNREF(error);
757
686
  }
758
687
 
759
688
  //
@@ -768,7 +697,7 @@ absl::Status XdsClient::ChannelState::AdsCallState::AdsResponseParser::
768
697
  "[xds_client %p] xds server %s: received ADS response: type_url=%s, "
769
698
  "version=%s, nonce=%s, num_resources=%" PRIuPTR,
770
699
  ads_call_state_->xds_client(),
771
- ads_call_state_->chand()->server_.server_uri.c_str(),
700
+ ads_call_state_->chand()->server_.server_uri().c_str(),
772
701
  fields.type_url.c_str(), fields.version.c_str(), fields.nonce.c_str(),
773
702
  fields.num_resources);
774
703
  }
@@ -811,48 +740,68 @@ void UpdateResourceMetadataNacked(const std::string& version,
811
740
  } // namespace
812
741
 
813
742
  void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
814
- const XdsEncodingContext& context, size_t idx, absl::string_view type_url,
815
- absl::string_view serialized_resource) {
743
+ upb_Arena* arena, size_t idx, absl::string_view type_url,
744
+ absl::string_view resource_name, absl::string_view serialized_resource) {
745
+ std::string error_prefix = absl::StrCat(
746
+ "resource index ", idx, ": ",
747
+ resource_name.empty() ? "" : absl::StrCat(resource_name, ": "));
816
748
  // Check the type_url of the resource.
817
- bool is_v2 = false;
818
- if (!result_.type->IsType(type_url, &is_v2)) {
749
+ if (result_.type_url != type_url) {
819
750
  result_.errors.emplace_back(
820
- absl::StrCat("resource index ", idx, ": incorrect resource type ",
821
- type_url, " (should be ", result_.type_url, ")"));
751
+ absl::StrCat(error_prefix, "incorrect resource type \"", type_url,
752
+ "\" (should be \"", result_.type_url, "\")"));
822
753
  return;
823
754
  }
824
755
  // Parse the resource.
825
- absl::StatusOr<XdsResourceType::DecodeResult> result =
826
- result_.type->Decode(context, serialized_resource, is_v2);
827
- if (!result.ok()) {
756
+ XdsResourceType::DecodeContext context = {
757
+ xds_client(), ads_call_state_->chand()->server_, &grpc_xds_client_trace,
758
+ xds_client()->symtab_.ptr(), arena};
759
+ XdsResourceType::DecodeResult decode_result =
760
+ result_.type->Decode(context, serialized_resource);
761
+ // If we didn't already have the resource name from the Resource
762
+ // wrapper, try to get it from the decoding result.
763
+ if (resource_name.empty()) {
764
+ if (decode_result.name.has_value()) {
765
+ resource_name = *decode_result.name;
766
+ error_prefix =
767
+ absl::StrCat("resource index ", idx, ": ", resource_name, ": ");
768
+ } else {
769
+ // We don't have any way of determining the resource name, so
770
+ // there's nothing more we can do here.
771
+ result_.errors.emplace_back(absl::StrCat(
772
+ error_prefix, decode_result.resource.status().ToString()));
773
+ return;
774
+ }
775
+ }
776
+ // If decoding failed, make sure we include the error in the NACK.
777
+ const absl::Status& decode_status = decode_result.resource.status();
778
+ if (!decode_status.ok()) {
828
779
  result_.errors.emplace_back(
829
- absl::StrCat("resource index ", idx, ": ", result.status().ToString()));
830
- return;
780
+ absl::StrCat(error_prefix, decode_status.ToString()));
831
781
  }
832
782
  // Check the resource name.
833
- auto resource_name =
834
- xds_client()->ParseXdsResourceName(result->name, result_.type);
835
- if (!resource_name.ok()) {
836
- result_.errors.emplace_back(absl::StrCat(
837
- "resource index ", idx, ": Cannot parse xDS resource name \"",
838
- result->name, "\""));
783
+ auto parsed_resource_name =
784
+ xds_client()->ParseXdsResourceName(resource_name, result_.type);
785
+ if (!parsed_resource_name.ok()) {
786
+ result_.errors.emplace_back(
787
+ absl::StrCat(error_prefix, "Cannot parse xDS resource name"));
839
788
  return;
840
789
  }
841
790
  // Cancel resource-does-not-exist timer, if needed.
842
791
  auto timer_it = ads_call_state_->state_map_.find(result_.type);
843
792
  if (timer_it != ads_call_state_->state_map_.end()) {
844
- auto it =
845
- timer_it->second.subscribed_resources.find(resource_name->authority);
793
+ auto it = timer_it->second.subscribed_resources.find(
794
+ parsed_resource_name->authority);
846
795
  if (it != timer_it->second.subscribed_resources.end()) {
847
- auto res_it = it->second.find(resource_name->key);
796
+ auto res_it = it->second.find(parsed_resource_name->key);
848
797
  if (res_it != it->second.end()) {
849
- res_it->second->MaybeCancelTimer();
798
+ res_it->second->MarkSeen();
850
799
  }
851
800
  }
852
801
  }
853
802
  // Lookup the authority in the cache.
854
803
  auto authority_it =
855
- xds_client()->authority_state_map_.find(resource_name->authority);
804
+ xds_client()->authority_state_map_.find(parsed_resource_name->authority);
856
805
  if (authority_it == xds_client()->authority_state_map_.end()) {
857
806
  return; // Skip resource -- we don't have a subscription for it.
858
807
  }
@@ -864,14 +813,15 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
864
813
  }
865
814
  auto& type_map = type_it->second;
866
815
  // Found type, so look up resource key.
867
- auto it = type_map.find(resource_name->key);
816
+ auto it = type_map.find(parsed_resource_name->key);
868
817
  if (it == type_map.end()) {
869
818
  return; // Skip resource -- we don't have a subscription for it.
870
819
  }
871
820
  ResourceState& resource_state = it->second;
872
821
  // If needed, record that we've seen this resource.
873
822
  if (result_.type->AllResourcesRequiredInSotW()) {
874
- result_.resources_seen[resource_name->authority].insert(resource_name->key);
823
+ result_.resources_seen[parsed_resource_name->authority].insert(
824
+ parsed_resource_name->key);
875
825
  }
876
826
  // If we previously ignored the resource's deletion, log that we're
877
827
  // now re-adding it.
@@ -880,21 +830,18 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
880
830
  "[xds_client %p] xds server %s: server returned new version of "
881
831
  "resource for which we previously ignored a deletion: type %s "
882
832
  "name %s",
883
- xds_client(), ads_call_state_->chand()->server_.server_uri.c_str(),
884
- std::string(type_url).c_str(), result->name.c_str());
833
+ xds_client(),
834
+ ads_call_state_->chand()->server_.server_uri().c_str(),
835
+ std::string(type_url).c_str(), std::string(resource_name).c_str());
885
836
  resource_state.ignored_deletion = false;
886
837
  }
887
838
  // Update resource state based on whether the resource is valid.
888
- if (!result->resource.ok()) {
889
- result_.errors.emplace_back(absl::StrCat(
890
- "resource index ", idx, ": ", result->name,
891
- ": validation error: ", result->resource.status().ToString()));
839
+ if (!decode_status.ok()) {
892
840
  xds_client()->NotifyWatchersOnErrorLocked(
893
841
  resource_state.watchers,
894
- absl::UnavailableError(absl::StrCat(
895
- "invalid resource: ", result->resource.status().ToString())));
896
- UpdateResourceMetadataNacked(result_.version,
897
- result->resource.status().ToString(),
842
+ absl::UnavailableError(
843
+ absl::StrCat("invalid resource: ", decode_status.ToString())));
844
+ UpdateResourceMetadataNacked(result_.version, decode_status.ToString(),
898
845
  update_time_, &resource_state.meta);
899
846
  return;
900
847
  }
@@ -903,16 +850,17 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
903
850
  // If it didn't change, ignore it.
904
851
  if (resource_state.resource != nullptr &&
905
852
  result_.type->ResourcesEqual(resource_state.resource.get(),
906
- result->resource->get())) {
853
+ decode_result.resource->get())) {
907
854
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
908
855
  gpr_log(GPR_INFO,
909
856
  "[xds_client %p] %s resource %s identical to current, ignoring.",
910
- xds_client(), result_.type_url.c_str(), result->name.c_str());
857
+ xds_client(), result_.type_url.c_str(),
858
+ std::string(resource_name).c_str());
911
859
  }
912
860
  return;
913
861
  }
914
862
  // Update the resource state.
915
- resource_state.resource = std::move(*result->resource);
863
+ resource_state.resource = std::move(*decode_result.resource);
916
864
  resource_state.meta = CreateResourceMetadataAcked(
917
865
  std::string(serialized_resource), result_.version, update_time_);
918
866
  // Notify watchers.
@@ -930,6 +878,12 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
930
878
  DEBUG_LOCATION);
931
879
  }
932
880
 
881
+ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::
882
+ ResourceWrapperParsingFailed(size_t idx, absl::string_view message) {
883
+ result_.errors.emplace_back(
884
+ absl::StrCat("resource index ", idx, ": ", message));
885
+ }
886
+
933
887
  //
934
888
  // XdsClient::ChannelState::AdsCallState
935
889
  //
@@ -941,51 +895,27 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
941
895
  ? "AdsCallState"
942
896
  : nullptr),
943
897
  parent_(std::move(parent)) {
944
- // Init the ADS call. Note that the call will progress every time there's
945
- // activity in xds_client()->interested_parties_, which is comprised of
946
- // the polling entities from client_channel.
947
898
  GPR_ASSERT(xds_client() != nullptr);
948
- // Create a call with the specified method name.
899
+ // Init the ADS call.
949
900
  const char* method =
950
- chand()->server_.ShouldUseV3()
951
- ? "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
952
- "StreamAggregatedResources"
953
- : "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
954
- "StreamAggregatedResources";
955
- call_ = grpc_channel_create_pollset_set_call(
956
- chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
957
- xds_client()->interested_parties_,
958
- StaticSlice::FromStaticString(method).c_slice(), nullptr,
959
- Timestamp::InfFuture(), nullptr);
901
+ "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
902
+ "StreamAggregatedResources";
903
+ call_ = chand()->transport_->CreateStreamingCall(
904
+ method, std::make_unique<StreamEventHandler>(
905
+ // Passing the initial ref here. This ref will go away when
906
+ // the StreamEventHandler is destroyed.
907
+ RefCountedPtr<AdsCallState>(this)));
960
908
  GPR_ASSERT(call_ != nullptr);
961
- // Init data associated with the call.
962
- grpc_metadata_array_init(&initial_metadata_recv_);
963
- grpc_metadata_array_init(&trailing_metadata_recv_);
964
909
  // Start the call.
965
910
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
966
911
  gpr_log(GPR_INFO,
967
912
  "[xds_client %p] xds server %s: starting ADS call "
968
913
  "(calld: %p, call: %p)",
969
- xds_client(), chand()->server_.server_uri.c_str(), this, call_);
970
- }
971
- // Create the ops.
972
- grpc_call_error call_error;
973
- grpc_op ops[3];
974
- memset(ops, 0, sizeof(ops));
975
- // Op: send initial metadata.
976
- grpc_op* op = ops;
977
- op->op = GRPC_OP_SEND_INITIAL_METADATA;
978
- op->data.send_initial_metadata.count = 0;
979
- op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
980
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
981
- op->reserved = nullptr;
982
- op++;
983
- call_error = grpc_call_start_batch_and_execute(
984
- call_, ops, static_cast<size_t>(op - ops), nullptr);
985
- GPR_ASSERT(GRPC_CALL_OK == call_error);
986
- // Op: send request message.
987
- GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
988
- grpc_schedule_on_exec_ctx);
914
+ xds_client(), chand()->server_.server_uri().c_str(), this,
915
+ call_.get());
916
+ }
917
+ // If this is a reconnect, add any necessary subscriptions from what's
918
+ // already in the cache.
989
919
  for (const auto& a : xds_client()->authority_state_map_) {
990
920
  const std::string& authority = a.first;
991
921
  // Skip authorities that are not using this xDS channel.
@@ -998,120 +928,45 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
998
928
  }
999
929
  }
1000
930
  }
931
+ // Send initial message if we added any subscriptions above.
1001
932
  for (const auto& p : state_map_) {
1002
933
  SendMessageLocked(p.first);
1003
934
  }
1004
- // Op: recv initial metadata.
1005
- op = ops;
1006
- op->op = GRPC_OP_RECV_INITIAL_METADATA;
1007
- op->data.recv_initial_metadata.recv_initial_metadata =
1008
- &initial_metadata_recv_;
1009
- op->flags = 0;
1010
- op->reserved = nullptr;
1011
- op++;
1012
- // Op: recv response.
1013
- op->op = GRPC_OP_RECV_MESSAGE;
1014
- op->data.recv_message.recv_message = &recv_message_payload_;
1015
- op->flags = 0;
1016
- op->reserved = nullptr;
1017
- op++;
1018
- Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
1019
- GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
1020
- grpc_schedule_on_exec_ctx);
1021
- call_error = grpc_call_start_batch_and_execute(
1022
- call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
1023
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1024
- // Op: recv server status.
1025
- op = ops;
1026
- op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
1027
- op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
1028
- op->data.recv_status_on_client.status = &status_code_;
1029
- op->data.recv_status_on_client.status_details = &status_details_;
1030
- op->flags = 0;
1031
- op->reserved = nullptr;
1032
- op++;
1033
- // This callback signals the end of the call, so it relies on the initial
1034
- // ref instead of a new ref. When it's invoked, it's the initial ref that is
1035
- // unreffed.
1036
- GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
1037
- grpc_schedule_on_exec_ctx);
1038
- call_error = grpc_call_start_batch_and_execute(
1039
- call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
1040
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1041
- }
1042
-
1043
- XdsClient::ChannelState::AdsCallState::~AdsCallState() {
1044
- grpc_metadata_array_destroy(&initial_metadata_recv_);
1045
- grpc_metadata_array_destroy(&trailing_metadata_recv_);
1046
- grpc_byte_buffer_destroy(send_message_payload_);
1047
- grpc_byte_buffer_destroy(recv_message_payload_);
1048
- grpc_slice_unref_internal(status_details_);
1049
- GPR_ASSERT(call_ != nullptr);
1050
- grpc_call_unref(call_);
1051
935
  }
1052
936
 
1053
937
  void XdsClient::ChannelState::AdsCallState::Orphan() {
1054
- GPR_ASSERT(call_ != nullptr);
1055
- // If we are here because xds_client wants to cancel the call,
1056
- // on_status_received_ will complete the cancellation and clean up. Otherwise,
1057
- // we are here because xds_client has to orphan a failed call, then the
1058
- // following cancellation will be a no-op.
1059
- grpc_call_cancel_internal(call_);
1060
938
  state_map_.clear();
1061
- // Note that the initial ref is hold by on_status_received_. So the
1062
- // corresponding unref happens in on_status_received_ instead of here.
939
+ // Note that the initial ref is held by the StreamEventHandler, which
940
+ // will be destroyed when call_ is destroyed, which may not happen
941
+ // here, since there may be other refs held to call_ by internal callbacks.
942
+ call_.reset();
1063
943
  }
1064
944
 
1065
945
  void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
1066
946
  const XdsResourceType* type)
1067
947
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
1068
948
  // Buffer message sending if an existing message is in flight.
1069
- if (send_message_payload_ != nullptr) {
949
+ if (send_message_pending_ != nullptr) {
1070
950
  buffered_requests_.insert(type);
1071
951
  return;
1072
952
  }
1073
953
  auto& state = state_map_[type];
1074
- grpc_slice request_payload_slice;
1075
- request_payload_slice = xds_client()->api_.CreateAdsRequest(
1076
- chand()->server_,
1077
- chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
1078
- chand()->resource_type_version_map_[type], state.nonce,
1079
- ResourceNamesForRequest(type), GRPC_ERROR_REF(state.error),
1080
- !sent_initial_message_);
954
+ std::string serialized_message = xds_client()->api_.CreateAdsRequest(
955
+ type->type_url(), chand()->resource_type_version_map_[type], state.nonce,
956
+ ResourceNamesForRequest(type), state.status, !sent_initial_message_);
1081
957
  sent_initial_message_ = true;
1082
958
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1083
959
  gpr_log(GPR_INFO,
1084
960
  "[xds_client %p] xds server %s: sending ADS request: type=%s "
1085
961
  "version=%s nonce=%s error=%s",
1086
- xds_client(), chand()->server_.server_uri.c_str(),
962
+ xds_client(), chand()->server_.server_uri().c_str(),
1087
963
  std::string(type->type_url()).c_str(),
1088
964
  chand()->resource_type_version_map_[type].c_str(),
1089
- state.nonce.c_str(), grpc_error_std_string(state.error).c_str());
1090
- }
1091
- GRPC_ERROR_UNREF(state.error);
1092
- state.error = GRPC_ERROR_NONE;
1093
- // Create message payload.
1094
- send_message_payload_ =
1095
- grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1096
- grpc_slice_unref_internal(request_payload_slice);
1097
- // Send the message.
1098
- grpc_op op;
1099
- memset(&op, 0, sizeof(op));
1100
- op.op = GRPC_OP_SEND_MESSAGE;
1101
- op.data.send_message.send_message = send_message_payload_;
1102
- Ref(DEBUG_LOCATION, "ADS+OnRequestSentLocked").release();
1103
- GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
1104
- grpc_schedule_on_exec_ctx);
1105
- grpc_call_error call_error =
1106
- grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
1107
- if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1108
- gpr_log(GPR_ERROR,
1109
- "[xds_client %p] xds server %s: error starting ADS send_message "
1110
- "batch on calld=%p: call_error=%d",
1111
- xds_client(), chand()->server_.server_uri.c_str(), this,
1112
- call_error);
1113
- GPR_ASSERT(GRPC_CALL_OK == call_error);
965
+ state.nonce.c_str(), state.status.ToString().c_str());
1114
966
  }
967
+ state.status = absl::OkStatus();
968
+ call_->SendMessage(std::move(serialized_message));
969
+ send_message_pending_ = type;
1115
970
  }
1116
971
 
1117
972
  void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
@@ -1132,7 +987,12 @@ void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
1132
987
  if (authority_map.empty()) {
1133
988
  type_state_map.subscribed_resources.erase(name.authority);
1134
989
  }
1135
- if (!delay_unsubscription) SendMessageLocked(type);
990
+ // Don't need to send unsubscription message if this was the last
991
+ // resource we were subscribed to, since we'll be closing the stream
992
+ // immediately in that case.
993
+ if (!delay_unsubscription && HasSubscribedResources()) {
994
+ SendMessageLocked(type);
995
+ }
1136
996
  }
1137
997
 
1138
998
  bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
@@ -1142,22 +1002,21 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
1142
1002
  return false;
1143
1003
  }
1144
1004
 
1145
- void XdsClient::ChannelState::AdsCallState::OnRequestSent(
1146
- void* arg, grpc_error_handle error) {
1147
- AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1148
- {
1149
- MutexLock lock(&ads_calld->xds_client()->mu_);
1150
- ads_calld->OnRequestSentLocked(GRPC_ERROR_REF(error));
1005
+ void XdsClient::ChannelState::AdsCallState::OnRequestSent(bool ok) {
1006
+ MutexLock lock(&xds_client()->mu_);
1007
+ // For each resource that was in the message we just sent, start the
1008
+ // resource timer if needed.
1009
+ if (ok) {
1010
+ auto& resource_type_state = state_map_[send_message_pending_];
1011
+ for (const auto& p : resource_type_state.subscribed_resources) {
1012
+ for (auto& q : p.second) {
1013
+ q.second->MaybeMarkSubscriptionSendComplete(
1014
+ Ref(DEBUG_LOCATION, "ResourceTimer"));
1015
+ }
1016
+ }
1151
1017
  }
1152
- ads_calld->Unref(DEBUG_LOCATION, "ADS+OnRequestSentLocked");
1153
- }
1154
-
1155
- void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
1156
- grpc_error_handle error) {
1157
- if (IsCurrentCallOnChannel() && GRPC_ERROR_IS_NONE(error)) {
1158
- // Clean up the sent message.
1159
- grpc_byte_buffer_destroy(send_message_payload_);
1160
- send_message_payload_ = nullptr;
1018
+ send_message_pending_ = nullptr;
1019
+ if (ok && IsCurrentCallOnChannel()) {
1161
1020
  // Continue to send another pending message if any.
1162
1021
  // TODO(roth): The current code to handle buffered messages has the
1163
1022
  // advantage of sending only the most recent list of resource names for
@@ -1173,184 +1032,149 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
1173
1032
  buffered_requests_.erase(it);
1174
1033
  }
1175
1034
  }
1176
- GRPC_ERROR_UNREF(error);
1177
1035
  }
1178
1036
 
1179
- void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
1180
- void* arg, grpc_error_handle /* error */) {
1181
- AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1182
- bool done;
1037
+ void XdsClient::ChannelState::AdsCallState::OnRecvMessage(
1038
+ absl::string_view payload) {
1183
1039
  {
1184
- MutexLock lock(&ads_calld->xds_client()->mu_);
1185
- done = ads_calld->OnResponseReceivedLocked();
1186
- }
1187
- ads_calld->xds_client()->work_serializer_.DrainQueue();
1188
- if (done) ads_calld->Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
1189
- }
1190
-
1191
- bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1192
- // Empty payload means the call was cancelled.
1193
- if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
1194
- return true;
1195
- }
1196
- // Read the response.
1197
- grpc_byte_buffer_reader bbr;
1198
- grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
1199
- grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
1200
- grpc_byte_buffer_reader_destroy(&bbr);
1201
- grpc_byte_buffer_destroy(recv_message_payload_);
1202
- recv_message_payload_ = nullptr;
1203
- // Parse and validate the response.
1204
- AdsResponseParser parser(this);
1205
- absl::Status status = xds_client()->api_.ParseAdsResponse(
1206
- chand()->server_, response_slice, &parser);
1207
- grpc_slice_unref_internal(response_slice);
1208
- if (!status.ok()) {
1209
- // Ignore unparsable response.
1210
- gpr_log(GPR_ERROR,
1211
- "[xds_client %p] xds server %s: error parsing ADS response (%s) "
1212
- "-- ignoring",
1213
- xds_client(), chand()->server_.server_uri.c_str(),
1214
- status.ToString().c_str());
1215
- } else {
1216
- seen_response_ = true;
1217
- AdsResponseParser::Result result = parser.TakeResult();
1218
- // Update nonce.
1219
- auto& state = state_map_[result.type];
1220
- state.nonce = result.nonce;
1221
- // If we got an error, set state.error so that we'll NACK the update.
1222
- if (!result.errors.empty()) {
1223
- std::string error = absl::StrJoin(result.errors, "; ");
1224
- gpr_log(
1225
- GPR_ERROR,
1226
- "[xds_client %p] xds server %s: ADS response invalid for resource "
1227
- "type %s version %s, will NACK: nonce=%s error=%s",
1228
- xds_client(), chand()->server_.server_uri.c_str(),
1229
- result.type_url.c_str(), result.version.c_str(), state.nonce.c_str(),
1230
- error.c_str());
1231
- GRPC_ERROR_UNREF(state.error);
1232
- state.error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(error),
1233
- GRPC_ERROR_INT_GRPC_STATUS,
1234
- GRPC_STATUS_UNAVAILABLE);
1235
- }
1236
- // Delete resources not seen in update if needed.
1237
- if (result.type->AllResourcesRequiredInSotW()) {
1238
- for (auto& a : xds_client()->authority_state_map_) {
1239
- const std::string& authority = a.first;
1240
- AuthorityState& authority_state = a.second;
1241
- // Skip authorities that are not using this xDS channel.
1242
- if (authority_state.channel_state != chand()) continue;
1243
- auto seen_authority_it = result.resources_seen.find(authority);
1244
- // Find this resource type.
1245
- auto type_it = authority_state.resource_map.find(result.type);
1246
- if (type_it == authority_state.resource_map.end()) continue;
1247
- // Iterate over resource ids.
1248
- for (auto& r : type_it->second) {
1249
- const XdsResourceKey& resource_key = r.first;
1250
- ResourceState& resource_state = r.second;
1251
- if (seen_authority_it == result.resources_seen.end() ||
1252
- seen_authority_it->second.find(resource_key) ==
1253
- seen_authority_it->second.end()) {
1254
- // If the resource was newly requested but has not yet been
1255
- // received, we don't want to generate an error for the watchers,
1256
- // because this ADS response may be in reaction to an earlier
1257
- // request that did not yet request the new resource, so its absence
1258
- // from the response does not necessarily indicate that the resource
1259
- // does not exist. For that case, we rely on the request timeout
1260
- // instead.
1261
- if (resource_state.resource == nullptr) continue;
1262
- if (chand()->server_.IgnoreResourceDeletion()) {
1263
- if (!resource_state.ignored_deletion) {
1264
- gpr_log(GPR_ERROR,
1265
- "[xds_client %p] xds server %s: ignoring deletion "
1266
- "for resource type %s name %s",
1267
- xds_client(), chand()->server_.server_uri.c_str(),
1268
- result.type_url.c_str(),
1269
- XdsClient::ConstructFullXdsResourceName(
1270
- authority, result.type_url.c_str(), resource_key)
1271
- .c_str());
1272
- resource_state.ignored_deletion = true;
1040
+ MutexLock lock(&xds_client()->mu_);
1041
+ if (!IsCurrentCallOnChannel()) return;
1042
+ // Parse and validate the response.
1043
+ AdsResponseParser parser(this);
1044
+ absl::Status status = xds_client()->api_.ParseAdsResponse(payload, &parser);
1045
+ if (!status.ok()) {
1046
+ // Ignore unparsable response.
1047
+ gpr_log(GPR_ERROR,
1048
+ "[xds_client %p] xds server %s: error parsing ADS response (%s) "
1049
+ "-- ignoring",
1050
+ xds_client(), chand()->server_.server_uri().c_str(),
1051
+ status.ToString().c_str());
1052
+ } else {
1053
+ seen_response_ = true;
1054
+ chand()->status_ = absl::OkStatus();
1055
+ AdsResponseParser::Result result = parser.TakeResult();
1056
+ // Update nonce.
1057
+ auto& state = state_map_[result.type];
1058
+ state.nonce = result.nonce;
1059
+ // If we got an error, set state.status so that we'll NACK the update.
1060
+ if (!result.errors.empty()) {
1061
+ state.status = absl::UnavailableError(
1062
+ absl::StrCat("xDS response validation errors: [",
1063
+ absl::StrJoin(result.errors, "; "), "]"));
1064
+ gpr_log(GPR_ERROR,
1065
+ "[xds_client %p] xds server %s: ADS response invalid for "
1066
+ "resource "
1067
+ "type %s version %s, will NACK: nonce=%s status=%s",
1068
+ xds_client(), chand()->server_.server_uri().c_str(),
1069
+ result.type_url.c_str(), result.version.c_str(),
1070
+ state.nonce.c_str(), state.status.ToString().c_str());
1071
+ }
1072
+ // Delete resources not seen in update if needed.
1073
+ if (result.type->AllResourcesRequiredInSotW()) {
1074
+ for (auto& a : xds_client()->authority_state_map_) {
1075
+ const std::string& authority = a.first;
1076
+ AuthorityState& authority_state = a.second;
1077
+ // Skip authorities that are not using this xDS channel.
1078
+ if (authority_state.channel_state != chand()) continue;
1079
+ auto seen_authority_it = result.resources_seen.find(authority);
1080
+ // Find this resource type.
1081
+ auto type_it = authority_state.resource_map.find(result.type);
1082
+ if (type_it == authority_state.resource_map.end()) continue;
1083
+ // Iterate over resource ids.
1084
+ for (auto& r : type_it->second) {
1085
+ const XdsResourceKey& resource_key = r.first;
1086
+ ResourceState& resource_state = r.second;
1087
+ if (seen_authority_it == result.resources_seen.end() ||
1088
+ seen_authority_it->second.find(resource_key) ==
1089
+ seen_authority_it->second.end()) {
1090
+ // If the resource was newly requested but has not yet been
1091
+ // received, we don't want to generate an error for the
1092
+ // watchers, because this ADS response may be in reaction to an
1093
+ // earlier request that did not yet request the new resource, so
1094
+ // its absence from the response does not necessarily indicate
1095
+ // that the resource does not exist. For that case, we rely on
1096
+ // the request timeout instead.
1097
+ if (resource_state.resource == nullptr) continue;
1098
+ if (chand()->server_.IgnoreResourceDeletion()) {
1099
+ if (!resource_state.ignored_deletion) {
1100
+ gpr_log(GPR_ERROR,
1101
+ "[xds_client %p] xds server %s: ignoring deletion "
1102
+ "for resource type %s name %s",
1103
+ xds_client(), chand()->server_.server_uri().c_str(),
1104
+ result.type_url.c_str(),
1105
+ XdsClient::ConstructFullXdsResourceName(
1106
+ authority, result.type_url.c_str(), resource_key)
1107
+ .c_str());
1108
+ resource_state.ignored_deletion = true;
1109
+ }
1110
+ } else {
1111
+ resource_state.resource.reset();
1112
+ resource_state.meta.client_status =
1113
+ XdsApi::ResourceMetadata::DOES_NOT_EXIST;
1114
+ xds_client()->NotifyWatchersOnResourceDoesNotExist(
1115
+ resource_state.watchers);
1273
1116
  }
1274
- } else {
1275
- resource_state.resource.reset();
1276
- xds_client()->NotifyWatchersOnResourceDoesNotExist(
1277
- resource_state.watchers);
1278
1117
  }
1279
1118
  }
1280
1119
  }
1281
1120
  }
1282
- }
1283
- // If we had valid resources, update the version.
1284
- if (result.have_valid_resources) {
1285
- chand()->resource_type_version_map_[result.type] =
1286
- std::move(result.version);
1287
- // Start load reporting if needed.
1288
- auto& lrs_call = chand()->lrs_calld_;
1289
- if (lrs_call != nullptr) {
1290
- LrsCallState* lrs_calld = lrs_call->calld();
1291
- if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
1121
+ // If we had valid resources or the update was empty, update the version.
1122
+ if (result.have_valid_resources || result.errors.empty()) {
1123
+ chand()->resource_type_version_map_[result.type] =
1124
+ std::move(result.version);
1125
+ // Start load reporting if needed.
1126
+ auto& lrs_call = chand()->lrs_calld_;
1127
+ if (lrs_call != nullptr) {
1128
+ LrsCallState* lrs_calld = lrs_call->calld();
1129
+ if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
1130
+ }
1292
1131
  }
1132
+ // Send ACK or NACK.
1133
+ SendMessageLocked(result.type);
1293
1134
  }
1294
- // Send ACK or NACK.
1295
- SendMessageLocked(result.type);
1296
- }
1297
- if (xds_client()->shutting_down_) return true;
1298
- // Keep listening for updates.
1299
- grpc_op op;
1300
- memset(&op, 0, sizeof(op));
1301
- op.op = GRPC_OP_RECV_MESSAGE;
1302
- op.data.recv_message.recv_message = &recv_message_payload_;
1303
- op.flags = 0;
1304
- op.reserved = nullptr;
1305
- GPR_ASSERT(call_ != nullptr);
1306
- // Reuse the "ADS+OnResponseReceivedLocked" ref taken in ctor.
1307
- const grpc_call_error call_error =
1308
- grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
1309
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1310
- return false;
1135
+ }
1136
+ xds_client()->work_serializer_.DrainQueue();
1311
1137
  }
1312
1138
 
1313
1139
  void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
1314
- void* arg, grpc_error_handle error) {
1315
- AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1140
+ absl::Status status) {
1316
1141
  {
1317
- MutexLock lock(&ads_calld->xds_client()->mu_);
1318
- ads_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
1319
- }
1320
- ads_calld->xds_client()->work_serializer_.DrainQueue();
1321
- ads_calld->Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
1322
- }
1323
-
1324
- void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
1325
- grpc_error_handle error) {
1326
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1327
- char* status_details = grpc_slice_to_c_string(status_details_);
1328
- gpr_log(GPR_INFO,
1329
- "[xds_client %p] xds server %s: ADS call status received "
1330
- "(chand=%p, ads_calld=%p, call=%p): "
1331
- "status=%d, details='%s', error='%s'",
1332
- xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
1333
- call_, status_code_, status_details,
1334
- grpc_error_std_string(error).c_str());
1335
- gpr_free(status_details);
1336
- }
1337
- // Ignore status from a stale call.
1338
- if (IsCurrentCallOnChannel()) {
1339
- // Try to restart the call.
1340
- parent_->OnCallFinishedLocked();
1341
- // Send error to all watchers.
1342
- xds_client()->NotifyOnErrorLocked(absl::UnavailableError(absl::StrFormat(
1343
- "xDS call failed: xDS server: %s, ADS call status code=%d, "
1344
- "details='%s', error='%s'",
1345
- chand()->server_.server_uri, status_code_,
1346
- StringViewFromSlice(status_details_), grpc_error_std_string(error))));
1142
+ MutexLock lock(&xds_client()->mu_);
1143
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1144
+ gpr_log(GPR_INFO,
1145
+ "[xds_client %p] xds server %s: ADS call status received "
1146
+ "(chand=%p, ads_calld=%p, call=%p): %s",
1147
+ xds_client(), chand()->server_.server_uri().c_str(), chand(),
1148
+ this, call_.get(), status.ToString().c_str());
1149
+ }
1150
+ // Cancel any does-not-exist timers that may be pending.
1151
+ for (const auto& p : state_map_) {
1152
+ for (const auto& q : p.second.subscribed_resources) {
1153
+ for (auto& r : q.second) {
1154
+ r.second->MaybeCancelTimer();
1155
+ }
1156
+ }
1157
+ }
1158
+ // Ignore status from a stale call.
1159
+ if (IsCurrentCallOnChannel()) {
1160
+ // Try to restart the call.
1161
+ parent_->OnCallFinishedLocked();
1162
+ // If we didn't receive a response on the stream, report the
1163
+ // stream failure as a connectivity failure, which will report the
1164
+ // error to all watchers of resources on this channel.
1165
+ if (!seen_response_) {
1166
+ chand()->SetChannelStatusLocked(absl::UnavailableError(
1167
+ absl::StrCat("xDS call failed with no responses received; status: ",
1168
+ status.ToString())));
1169
+ }
1170
+ }
1347
1171
  }
1348
- GRPC_ERROR_UNREF(error);
1172
+ xds_client()->work_serializer_.DrainQueue();
1349
1173
  }
1350
1174
 
1351
1175
  bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
1352
- // If the retryable ADS call is null (which only happens when the xds channel
1353
- // is shutting down), all the ADS calls are stale.
1176
+ // If the retryable ADS call is null (which only happens when the xds
1177
+ // channel is shutting down), all the ADS calls are stale.
1354
1178
  if (chand()->ads_calld_ == nullptr) return false;
1355
1179
  return this == chand()->ads_calld_->calld();
1356
1180
  }
@@ -1368,7 +1192,7 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
1368
1192
  resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
1369
1193
  authority, type->type_url(), resource_key));
1370
1194
  OrphanablePtr<ResourceTimer>& resource_timer = p.second;
1371
- resource_timer->MaybeStartTimer(Ref(DEBUG_LOCATION, "ResourceTimer"));
1195
+ resource_timer->MarkSubscriptionSendStarted();
1372
1196
  }
1373
1197
  }
1374
1198
  }
@@ -1380,38 +1204,35 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
1380
1204
  //
1381
1205
 
1382
1206
  void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
1383
- if (next_report_timer_callback_pending_) {
1384
- grpc_timer_cancel(&next_report_timer_);
1207
+ if (timer_handle_.has_value() &&
1208
+ xds_client()->engine()->Cancel(*timer_handle_)) {
1209
+ timer_handle_.reset();
1210
+ Unref(DEBUG_LOCATION, "Orphan");
1385
1211
  }
1386
1212
  }
1387
1213
 
1388
1214
  void XdsClient::ChannelState::LrsCallState::Reporter::
1389
1215
  ScheduleNextReportLocked() {
1390
- const Timestamp next_report_time = ExecCtx::Get()->Now() + report_interval_;
1391
- grpc_timer_init(&next_report_timer_, next_report_time,
1392
- &on_next_report_timer_);
1393
- next_report_timer_callback_pending_ = true;
1394
- }
1395
-
1396
- void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
1397
- void* arg, grpc_error_handle error) {
1398
- Reporter* self = static_cast<Reporter*>(arg);
1399
- bool done;
1400
- {
1401
- MutexLock lock(&self->xds_client()->mu_);
1402
- done = self->OnNextReportTimerLocked(GRPC_ERROR_REF(error));
1403
- }
1404
- if (done) self->Unref(DEBUG_LOCATION, "Reporter+timer");
1216
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1217
+ gpr_log(GPR_INFO,
1218
+ "[xds_client %p] xds server %s: scheduling load report timer",
1219
+ xds_client(), parent_->chand()->server_.server_uri().c_str());
1220
+ }
1221
+ timer_handle_ = xds_client()->engine()->RunAfter(report_interval_, [this]() {
1222
+ ApplicationCallbackExecCtx callback_exec_ctx;
1223
+ ExecCtx exec_ctx;
1224
+ if (OnNextReportTimer()) {
1225
+ Unref(DEBUG_LOCATION, "OnNextReportTimer()");
1226
+ }
1227
+ });
1405
1228
  }
1406
1229
 
1407
- bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
1408
- grpc_error_handle error) {
1409
- next_report_timer_callback_pending_ = false;
1410
- if (!GRPC_ERROR_IS_NONE(error) || !IsCurrentReporterOnCall()) {
1411
- GRPC_ERROR_UNREF(error);
1412
- return true;
1413
- }
1414
- return SendReportLocked();
1230
+ bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer() {
1231
+ MutexLock lock(&xds_client()->mu_);
1232
+ timer_handle_.reset();
1233
+ if (!IsCurrentReporterOnCall()) return true;
1234
+ SendReportLocked();
1235
+ return false;
1415
1236
  }
1416
1237
 
1417
1238
  namespace {
@@ -1442,7 +1263,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1442
1263
  last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
1443
1264
  if (old_val && last_report_counters_were_zero_) {
1444
1265
  auto it = xds_client()->xds_load_report_server_map_.find(
1445
- parent_->chand()->server_);
1266
+ &parent_->chand()->server_);
1446
1267
  if (it == xds_client()->xds_load_report_server_map_.end() ||
1447
1268
  it->second.load_report_map.empty()) {
1448
1269
  it->second.channel_state->StopLrsCallLocked();
@@ -1451,65 +1272,34 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1451
1272
  ScheduleNextReportLocked();
1452
1273
  return false;
1453
1274
  }
1454
- // Create a request that contains the snapshot.
1455
- grpc_slice request_payload_slice =
1275
+ // Send a request that contains the snapshot.
1276
+ std::string serialized_payload =
1456
1277
  xds_client()->api_.CreateLrsRequest(std::move(snapshot));
1457
- parent_->send_message_payload_ =
1458
- grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1459
- grpc_slice_unref_internal(request_payload_slice);
1460
- // Send the report.
1461
- grpc_op op;
1462
- memset(&op, 0, sizeof(op));
1463
- op.op = GRPC_OP_SEND_MESSAGE;
1464
- op.data.send_message.send_message = parent_->send_message_payload_;
1465
- grpc_call_error call_error = grpc_call_start_batch_and_execute(
1466
- parent_->call_, &op, 1, &on_report_done_);
1467
- if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1468
- gpr_log(GPR_ERROR,
1469
- "[xds_client %p] xds server %s: error starting LRS send_message "
1470
- "batch on calld=%p: call_error=%d",
1471
- xds_client(), parent_->chand()->server_.server_uri.c_str(), this,
1472
- call_error);
1473
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1474
- }
1278
+ parent_->call_->SendMessage(std::move(serialized_payload));
1279
+ parent_->send_message_pending_ = true;
1475
1280
  return false;
1476
1281
  }
1477
1282
 
1478
- void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
1479
- void* arg, grpc_error_handle error) {
1480
- Reporter* self = static_cast<Reporter*>(arg);
1481
- bool done;
1482
- {
1483
- MutexLock lock(&self->xds_client()->mu_);
1484
- done = self->OnReportDoneLocked(GRPC_ERROR_REF(error));
1485
- }
1486
- if (done) self->Unref(DEBUG_LOCATION, "Reporter+report_done");
1487
- }
1488
-
1489
- bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
1490
- grpc_error_handle error) {
1491
- grpc_byte_buffer_destroy(parent_->send_message_payload_);
1492
- parent_->send_message_payload_ = nullptr;
1283
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked() {
1284
+ // If a reporter starts a send_message op, then the reporting interval
1285
+ // changes and we destroy that reporter and create a new one, and then
1286
+ // the send_message op started by the old reporter finishes, this
1287
+ // method will be called even though it was for a completion started
1288
+ // by the old reporter. In that case, the timer will be pending, so
1289
+ // we just ignore the completion and wait for the timer to fire.
1290
+ if (timer_handle_.has_value()) return;
1493
1291
  // If there are no more registered stats to report, cancel the call.
1494
- auto it =
1495
- xds_client()->xds_load_report_server_map_.find(parent_->chand()->server_);
1496
- if (it == xds_client()->xds_load_report_server_map_.end() ||
1497
- it->second.load_report_map.empty()) {
1498
- it->second.channel_state->StopLrsCallLocked();
1499
- GRPC_ERROR_UNREF(error);
1500
- return true;
1501
- }
1502
- if (!GRPC_ERROR_IS_NONE(error) || !IsCurrentReporterOnCall()) {
1503
- GRPC_ERROR_UNREF(error);
1504
- // If this reporter is no longer the current one on the call, the reason
1505
- // might be that it was orphaned for a new one due to config update.
1506
- if (!IsCurrentReporterOnCall()) {
1507
- parent_->MaybeStartReportingLocked();
1292
+ auto it = xds_client()->xds_load_report_server_map_.find(
1293
+ &parent_->chand()->server_);
1294
+ if (it == xds_client()->xds_load_report_server_map_.end()) return;
1295
+ if (it->second.load_report_map.empty()) {
1296
+ if (it->second.channel_state != nullptr) {
1297
+ it->second.channel_state->StopLrsCallLocked();
1508
1298
  }
1509
- return true;
1299
+ return;
1510
1300
  }
1301
+ // Otherwise, schedule the next load report.
1511
1302
  ScheduleNextReportLocked();
1512
- return false;
1513
1303
  }
1514
1304
 
1515
1305
  //
@@ -1528,123 +1318,41 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
1528
1318
  // the polling entities from client_channel.
1529
1319
  GPR_ASSERT(xds_client() != nullptr);
1530
1320
  const char* method =
1531
- chand()->server_.ShouldUseV3()
1532
- ? "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats"
1533
- : "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats";
1534
- call_ = grpc_channel_create_pollset_set_call(
1535
- chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
1536
- xds_client()->interested_parties_,
1537
- Slice::FromStaticString(method).c_slice(), nullptr,
1538
- Timestamp::InfFuture(), nullptr);
1321
+ "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats";
1322
+ call_ = chand()->transport_->CreateStreamingCall(
1323
+ method, std::make_unique<StreamEventHandler>(
1324
+ // Passing the initial ref here. This ref will go away when
1325
+ // the StreamEventHandler is destroyed.
1326
+ RefCountedPtr<LrsCallState>(this)));
1539
1327
  GPR_ASSERT(call_ != nullptr);
1540
- // Init the request payload.
1541
- grpc_slice request_payload_slice =
1542
- xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
1543
- send_message_payload_ =
1544
- grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1545
- grpc_slice_unref_internal(request_payload_slice);
1546
- // Init other data associated with the LRS call.
1547
- grpc_metadata_array_init(&initial_metadata_recv_);
1548
- grpc_metadata_array_init(&trailing_metadata_recv_);
1549
1328
  // Start the call.
1550
1329
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1551
- gpr_log(
1552
- GPR_INFO,
1553
- "[xds_client %p] xds server %s: starting LRS call (calld=%p, call=%p)",
1554
- xds_client(), chand()->server_.server_uri.c_str(), this, call_);
1555
- }
1556
- // Create the ops.
1557
- grpc_call_error call_error;
1558
- grpc_op ops[3];
1559
- memset(ops, 0, sizeof(ops));
1560
- // Op: send initial metadata.
1561
- grpc_op* op = ops;
1562
- op->op = GRPC_OP_SEND_INITIAL_METADATA;
1563
- op->data.send_initial_metadata.count = 0;
1564
- op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
1565
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
1566
- op->reserved = nullptr;
1567
- op++;
1568
- // Op: send request message.
1569
- GPR_ASSERT(send_message_payload_ != nullptr);
1570
- op->op = GRPC_OP_SEND_MESSAGE;
1571
- op->data.send_message.send_message = send_message_payload_;
1572
- op->flags = 0;
1573
- op->reserved = nullptr;
1574
- op++;
1575
- Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
1576
- GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
1577
- grpc_schedule_on_exec_ctx);
1578
- call_error = grpc_call_start_batch_and_execute(
1579
- call_, ops, static_cast<size_t>(op - ops), &on_initial_request_sent_);
1580
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1581
- // Op: recv initial metadata.
1582
- op = ops;
1583
- op->op = GRPC_OP_RECV_INITIAL_METADATA;
1584
- op->data.recv_initial_metadata.recv_initial_metadata =
1585
- &initial_metadata_recv_;
1586
- op->flags = 0;
1587
- op->reserved = nullptr;
1588
- op++;
1589
- // Op: recv response.
1590
- op->op = GRPC_OP_RECV_MESSAGE;
1591
- op->data.recv_message.recv_message = &recv_message_payload_;
1592
- op->flags = 0;
1593
- op->reserved = nullptr;
1594
- op++;
1595
- Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
1596
- GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
1597
- grpc_schedule_on_exec_ctx);
1598
- call_error = grpc_call_start_batch_and_execute(
1599
- call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
1600
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1601
- // Op: recv server status.
1602
- op = ops;
1603
- op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
1604
- op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
1605
- op->data.recv_status_on_client.status = &status_code_;
1606
- op->data.recv_status_on_client.status_details = &status_details_;
1607
- op->flags = 0;
1608
- op->reserved = nullptr;
1609
- op++;
1610
- // This callback signals the end of the call, so it relies on the initial
1611
- // ref instead of a new ref. When it's invoked, it's the initial ref that is
1612
- // unreffed.
1613
- GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
1614
- grpc_schedule_on_exec_ctx);
1615
- call_error = grpc_call_start_batch_and_execute(
1616
- call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
1617
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1618
- }
1619
-
1620
- XdsClient::ChannelState::LrsCallState::~LrsCallState() {
1621
- grpc_metadata_array_destroy(&initial_metadata_recv_);
1622
- grpc_metadata_array_destroy(&trailing_metadata_recv_);
1623
- grpc_byte_buffer_destroy(send_message_payload_);
1624
- grpc_byte_buffer_destroy(recv_message_payload_);
1625
- grpc_slice_unref_internal(status_details_);
1626
- GPR_ASSERT(call_ != nullptr);
1627
- grpc_call_unref(call_);
1330
+ gpr_log(GPR_INFO,
1331
+ "[xds_client %p] xds server %s: starting LRS call (calld=%p, "
1332
+ "call=%p)",
1333
+ xds_client(), chand()->server_.server_uri().c_str(), this,
1334
+ call_.get());
1335
+ }
1336
+ // Send the initial request.
1337
+ std::string serialized_payload = xds_client()->api_.CreateLrsInitialRequest();
1338
+ call_->SendMessage(std::move(serialized_payload));
1339
+ send_message_pending_ = true;
1628
1340
  }
1629
1341
 
1630
1342
  void XdsClient::ChannelState::LrsCallState::Orphan() {
1631
1343
  reporter_.reset();
1632
- GPR_ASSERT(call_ != nullptr);
1633
- // If we are here because xds_client wants to cancel the call,
1634
- // on_status_received_ will complete the cancellation and clean up. Otherwise,
1635
- // we are here because xds_client has to orphan a failed call, then the
1636
- // following cancellation will be a no-op.
1637
- grpc_call_cancel_internal(call_);
1638
- // Note that the initial ref is hold by on_status_received_. So the
1639
- // corresponding unref happens in on_status_received_ instead of here.
1344
+ // Note that the initial ref is held by the StreamEventHandler, which
1345
+ // will be destroyed when call_ is destroyed, which may not happen
1346
+ // here, since there may be other refs held to call_ by internal callbacks.
1347
+ call_.reset();
1640
1348
  }
1641
1349
 
1642
1350
  void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
1643
1351
  // Don't start again if already started.
1644
1352
  if (reporter_ != nullptr) return;
1645
- // Don't start if the previous send_message op (of the initial request or the
1646
- // last report of the previous reporter) hasn't completed.
1647
- if (send_message_payload_ != nullptr) return;
1353
+ // Don't start if the previous send_message op (of the initial request or
1354
+ // the last report of the previous reporter) hasn't completed.
1355
+ if (call_ != nullptr && send_message_pending_) return;
1648
1356
  // Don't start if no LRS response has arrived.
1649
1357
  if (!seen_response()) return;
1650
1358
  // Don't start if the ADS call hasn't received any valid response. Note that
@@ -1656,170 +1364,113 @@ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
1656
1364
  return;
1657
1365
  }
1658
1366
  // Start reporting.
1367
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1368
+ gpr_log(GPR_INFO, "[xds_client %p] xds server %s: creating load reporter",
1369
+ xds_client(), chand()->server_.server_uri().c_str());
1370
+ }
1659
1371
  reporter_ = MakeOrphanable<Reporter>(
1660
1372
  Ref(DEBUG_LOCATION, "LRS+load_report+start"), load_reporting_interval_);
1661
1373
  }
1662
1374
 
1663
- void XdsClient::ChannelState::LrsCallState::OnInitialRequestSent(
1664
- void* arg, grpc_error_handle /*error*/) {
1665
- LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1666
- {
1667
- MutexLock lock(&lrs_calld->xds_client()->mu_);
1668
- lrs_calld->OnInitialRequestSentLocked();
1375
+ void XdsClient::ChannelState::LrsCallState::OnRequestSent(bool /*ok*/) {
1376
+ MutexLock lock(&xds_client()->mu_);
1377
+ send_message_pending_ = false;
1378
+ if (reporter_ != nullptr) {
1379
+ reporter_->OnReportDoneLocked();
1380
+ } else {
1381
+ MaybeStartReportingLocked();
1669
1382
  }
1670
- lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked");
1671
- }
1672
-
1673
- void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
1674
- // Clear the send_message_payload_.
1675
- grpc_byte_buffer_destroy(send_message_payload_);
1676
- send_message_payload_ = nullptr;
1677
- MaybeStartReportingLocked();
1678
1383
  }
1679
1384
 
1680
- void XdsClient::ChannelState::LrsCallState::OnResponseReceived(
1681
- void* arg, grpc_error_handle /*error*/) {
1682
- LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1683
- bool done;
1684
- {
1685
- MutexLock lock(&lrs_calld->xds_client()->mu_);
1686
- done = lrs_calld->OnResponseReceivedLocked();
1687
- }
1688
- if (done) lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked");
1689
- }
1690
-
1691
- bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
1692
- // Empty payload means the call was cancelled.
1693
- if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
1694
- return true;
1695
- }
1696
- // Read the response.
1697
- grpc_byte_buffer_reader bbr;
1698
- grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
1699
- grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
1700
- grpc_byte_buffer_reader_destroy(&bbr);
1701
- grpc_byte_buffer_destroy(recv_message_payload_);
1702
- recv_message_payload_ = nullptr;
1703
- // This anonymous lambda is a hack to avoid the usage of goto.
1704
- [&]() {
1705
- // Parse the response.
1706
- bool send_all_clusters = false;
1707
- std::set<std::string> new_cluster_names;
1708
- Duration new_load_reporting_interval;
1709
- grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
1710
- response_slice, &send_all_clusters, &new_cluster_names,
1711
- &new_load_reporting_interval);
1712
- if (!GRPC_ERROR_IS_NONE(parse_error)) {
1713
- gpr_log(GPR_ERROR,
1714
- "[xds_client %p] xds server %s: LRS response parsing failed: %s",
1715
- xds_client(), chand()->server_.server_uri.c_str(),
1716
- grpc_error_std_string(parse_error).c_str());
1717
- GRPC_ERROR_UNREF(parse_error);
1718
- return;
1385
+ void XdsClient::ChannelState::LrsCallState::OnRecvMessage(
1386
+ absl::string_view payload) {
1387
+ MutexLock lock(&xds_client()->mu_);
1388
+ // If we're no longer the current call, ignore the result.
1389
+ if (!IsCurrentCallOnChannel()) return;
1390
+ // Parse the response.
1391
+ bool send_all_clusters = false;
1392
+ std::set<std::string> new_cluster_names;
1393
+ Duration new_load_reporting_interval;
1394
+ absl::Status status = xds_client()->api_.ParseLrsResponse(
1395
+ payload, &send_all_clusters, &new_cluster_names,
1396
+ &new_load_reporting_interval);
1397
+ if (!status.ok()) {
1398
+ gpr_log(GPR_ERROR,
1399
+ "[xds_client %p] xds server %s: LRS response parsing failed: %s",
1400
+ xds_client(), chand()->server_.server_uri().c_str(),
1401
+ status.ToString().c_str());
1402
+ return;
1403
+ }
1404
+ seen_response_ = true;
1405
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1406
+ gpr_log(
1407
+ GPR_INFO,
1408
+ "[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
1409
+ " cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
1410
+ "ms",
1411
+ xds_client(), chand()->server_.server_uri().c_str(),
1412
+ new_cluster_names.size(), send_all_clusters,
1413
+ new_load_reporting_interval.millis());
1414
+ size_t i = 0;
1415
+ for (const auto& name : new_cluster_names) {
1416
+ gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
1417
+ xds_client(), i++, name.c_str());
1719
1418
  }
1720
- seen_response_ = true;
1419
+ }
1420
+ if (new_load_reporting_interval <
1421
+ Duration::Milliseconds(GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
1422
+ new_load_reporting_interval =
1423
+ Duration::Milliseconds(GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1721
1424
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1722
- gpr_log(
1723
- GPR_INFO,
1724
- "[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
1725
- " cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
1726
- "ms",
1727
- xds_client(), chand()->server_.server_uri.c_str(),
1728
- new_cluster_names.size(), send_all_clusters,
1729
- new_load_reporting_interval.millis());
1730
- size_t i = 0;
1731
- for (const auto& name : new_cluster_names) {
1732
- gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
1733
- xds_client(), i++, name.c_str());
1734
- }
1735
- }
1736
- if (new_load_reporting_interval <
1737
- Duration::Milliseconds(
1738
- GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
1739
- new_load_reporting_interval = Duration::Milliseconds(
1740
- GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1741
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1742
- gpr_log(GPR_INFO,
1743
- "[xds_client %p] xds server %s: increased load_report_interval "
1744
- "to minimum value %dms",
1745
- xds_client(), chand()->server_.server_uri.c_str(),
1746
- GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1747
- }
1425
+ gpr_log(GPR_INFO,
1426
+ "[xds_client %p] xds server %s: increased load_report_interval "
1427
+ "to minimum value %dms",
1428
+ xds_client(), chand()->server_.server_uri().c_str(),
1429
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1748
1430
  }
1749
- // Ignore identical update.
1750
- if (send_all_clusters == send_all_clusters_ &&
1751
- cluster_names_ == new_cluster_names &&
1752
- load_reporting_interval_ == new_load_reporting_interval) {
1753
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1754
- gpr_log(
1755
- GPR_INFO,
1756
- "[xds_client %p] xds server %s: incoming LRS response identical "
1757
- "to current, ignoring.",
1758
- xds_client(), chand()->server_.server_uri.c_str());
1759
- }
1760
- return;
1431
+ }
1432
+ // Ignore identical update.
1433
+ if (send_all_clusters == send_all_clusters_ &&
1434
+ cluster_names_ == new_cluster_names &&
1435
+ load_reporting_interval_ == new_load_reporting_interval) {
1436
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1437
+ gpr_log(GPR_INFO,
1438
+ "[xds_client %p] xds server %s: incoming LRS response identical "
1439
+ "to current, ignoring.",
1440
+ xds_client(), chand()->server_.server_uri().c_str());
1761
1441
  }
1762
- // Stop current load reporting (if any) to adopt the new config.
1763
- reporter_.reset();
1764
- // Record the new config.
1765
- send_all_clusters_ = send_all_clusters;
1766
- cluster_names_ = std::move(new_cluster_names);
1767
- load_reporting_interval_ = new_load_reporting_interval;
1768
- // Try starting sending load report.
1769
- MaybeStartReportingLocked();
1770
- }();
1771
- grpc_slice_unref_internal(response_slice);
1772
- if (xds_client()->shutting_down_) return true;
1773
- // Keep listening for LRS config updates.
1774
- grpc_op op;
1775
- memset(&op, 0, sizeof(op));
1776
- op.op = GRPC_OP_RECV_MESSAGE;
1777
- op.data.recv_message.recv_message = &recv_message_payload_;
1778
- op.flags = 0;
1779
- op.reserved = nullptr;
1780
- GPR_ASSERT(call_ != nullptr);
1781
- // Reuse the "OnResponseReceivedLocked" ref taken in ctor.
1782
- const grpc_call_error call_error =
1783
- grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
1784
- GPR_ASSERT(GRPC_CALL_OK == call_error);
1785
- return false;
1786
- }
1787
-
1788
- void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
1789
- void* arg, grpc_error_handle error) {
1790
- LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1791
- {
1792
- MutexLock lock(&lrs_calld->xds_client()->mu_);
1793
- lrs_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
1442
+ return;
1794
1443
  }
1795
- lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnStatusReceivedLocked");
1444
+ // Stop current load reporting (if any) to adopt the new config.
1445
+ reporter_.reset();
1446
+ // Record the new config.
1447
+ send_all_clusters_ = send_all_clusters;
1448
+ cluster_names_ = std::move(new_cluster_names);
1449
+ load_reporting_interval_ = new_load_reporting_interval;
1450
+ // Try starting sending load report.
1451
+ MaybeStartReportingLocked();
1796
1452
  }
1797
1453
 
1798
- void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
1799
- grpc_error_handle error) {
1800
- GPR_ASSERT(call_ != nullptr);
1454
+ void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
1455
+ absl::Status status) {
1456
+ MutexLock lock(&xds_client()->mu_);
1801
1457
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1802
- char* status_details = grpc_slice_to_c_string(status_details_);
1803
1458
  gpr_log(GPR_INFO,
1804
1459
  "[xds_client %p] xds server %s: LRS call status received "
1805
- "(chand=%p, calld=%p, call=%p): "
1806
- "status=%d, details='%s', error='%s'",
1807
- xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
1808
- call_, status_code_, status_details,
1809
- grpc_error_std_string(error).c_str());
1810
- gpr_free(status_details);
1460
+ "(chand=%p, calld=%p, call=%p): %s",
1461
+ xds_client(), chand()->server_.server_uri().c_str(), chand(), this,
1462
+ call_.get(), status.ToString().c_str());
1811
1463
  }
1812
1464
  // Ignore status from a stale call.
1813
1465
  if (IsCurrentCallOnChannel()) {
1814
1466
  // Try to restart the call.
1815
1467
  parent_->OnCallFinishedLocked();
1816
1468
  }
1817
- GRPC_ERROR_UNREF(error);
1818
1469
  }
1819
1470
 
1820
1471
  bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
1821
- // If the retryable LRS call is null (which only happens when the xds channel
1822
- // is shutting down), all the LRS calls are stale.
1472
+ // If the retryable LRS call is null (which only happens when the xds
1473
+ // channel is shutting down), all the LRS calls are stale.
1823
1474
  if (chand()->lrs_calld_ == nullptr) return false;
1824
1475
  return this == chand()->lrs_calld_->calld();
1825
1476
  }
@@ -1828,86 +1479,66 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
1828
1479
  // XdsClient
1829
1480
  //
1830
1481
 
1831
- namespace {
1832
-
1833
- Duration GetRequestTimeout(const grpc_channel_args* args) {
1834
- return Duration::Milliseconds(grpc_channel_args_find_integer(
1835
- args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
1836
- {15000, 0, INT_MAX}));
1837
- }
1838
-
1839
- grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
1840
- absl::InlinedVector<grpc_arg, 1> args_to_add = {
1841
- grpc_channel_arg_integer_create(
1842
- const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
1843
- 5 * 60 * GPR_MS_PER_SEC),
1844
- };
1845
- return grpc_channel_args_copy_and_add(args, args_to_add.data(),
1846
- args_to_add.size());
1847
- }
1848
-
1849
- } // namespace
1850
-
1851
- XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
1852
- const grpc_channel_args* args)
1482
+ XdsClient::XdsClient(
1483
+ std::unique_ptr<XdsBootstrap> bootstrap,
1484
+ OrphanablePtr<XdsTransportFactory> transport_factory,
1485
+ std::shared_ptr<grpc_event_engine::experimental::EventEngine> engine,
1486
+ std::string user_agent_name, std::string user_agent_version,
1487
+ Duration resource_request_timeout)
1853
1488
  : DualRefCounted<XdsClient>(
1854
1489
  GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
1855
1490
  : nullptr),
1856
1491
  bootstrap_(std::move(bootstrap)),
1857
- args_(ModifyChannelArgs(args)),
1858
- request_timeout_(GetRequestTimeout(args)),
1492
+ transport_factory_(std::move(transport_factory)),
1493
+ request_timeout_(resource_request_timeout),
1859
1494
  xds_federation_enabled_(XdsFederationEnabled()),
1860
- interested_parties_(grpc_pollset_set_create()),
1861
- certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
1862
- bootstrap_->certificate_providers())),
1863
- api_(this, &grpc_xds_client_trace, bootstrap_->node(),
1864
- &bootstrap_->certificate_providers(), &symtab_) {
1495
+ api_(this, &grpc_xds_client_trace, bootstrap_->node(), &symtab_,
1496
+ std::move(user_agent_name), std::move(user_agent_version)),
1497
+ engine_(std::move(engine)) {
1865
1498
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1866
1499
  gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
1867
1500
  }
1868
- // Calling grpc_init to ensure gRPC does not shut down until the XdsClient is
1869
- // destroyed.
1870
- grpc_init();
1501
+ GPR_ASSERT(bootstrap_ != nullptr);
1502
+ if (bootstrap_->node() != nullptr) {
1503
+ gpr_log(GPR_INFO, "[xds_client %p] xDS node ID: %s", this,
1504
+ bootstrap_->node()->id().c_str());
1505
+ }
1871
1506
  }
1872
1507
 
1873
1508
  XdsClient::~XdsClient() {
1874
1509
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1875
1510
  gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
1876
1511
  }
1877
- grpc_channel_args_destroy(args_);
1878
- grpc_pollset_set_destroy(interested_parties_);
1879
- // Calling grpc_shutdown to ensure gRPC does not shut down until the XdsClient
1880
- // is destroyed.
1881
- grpc_shutdown();
1882
1512
  }
1883
1513
 
1884
1514
  void XdsClient::Orphan() {
1885
1515
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1886
1516
  gpr_log(GPR_INFO, "[xds_client %p] shutting down xds client", this);
1887
1517
  }
1888
- {
1889
- MutexLock lock(g_mu);
1890
- if (g_xds_client == this) g_xds_client = nullptr;
1891
- }
1892
- {
1893
- MutexLock lock(&mu_);
1894
- shutting_down_ = true;
1895
- // Clear cache and any remaining watchers that may not have been cancelled.
1896
- authority_state_map_.clear();
1897
- invalid_watchers_.clear();
1518
+ MutexLock lock(&mu_);
1519
+ shutting_down_ = true;
1520
+ // Clear cache and any remaining watchers that may not have been cancelled.
1521
+ authority_state_map_.clear();
1522
+ invalid_watchers_.clear();
1523
+ // We may still be sending lingering queued load report data, so don't
1524
+ // just clear the load reporting map, but we do want to clear the refs
1525
+ // we're holding to the ChannelState objects, to make sure that
1526
+ // everything shuts down properly.
1527
+ for (auto& p : xds_load_report_server_map_) {
1528
+ p.second.channel_state.reset(DEBUG_LOCATION, "XdsClient::Orphan()");
1898
1529
  }
1899
1530
  }
1900
1531
 
1901
1532
  RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
1902
- const XdsBootstrap::XdsServer& server) {
1903
- auto it = xds_server_channel_map_.find(server);
1533
+ const XdsBootstrap::XdsServer& server, const char* reason) {
1534
+ auto it = xds_server_channel_map_.find(&server);
1904
1535
  if (it != xds_server_channel_map_.end()) {
1905
- return it->second->Ref(DEBUG_LOCATION, "Authority");
1536
+ return it->second->Ref(DEBUG_LOCATION, reason);
1906
1537
  }
1907
1538
  // Channel not found, so create a new one.
1908
1539
  auto channel_state = MakeRefCounted<ChannelState>(
1909
1540
  WeakRef(DEBUG_LOCATION, "ChannelState"), server);
1910
- xds_server_channel_map_[server] = channel_state.get();
1541
+ xds_server_channel_map_[&server] = channel_state.get();
1911
1542
  return channel_state;
1912
1543
  }
1913
1544
 
@@ -1923,17 +1554,16 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1923
1554
  invalid_watchers_[w] = watcher;
1924
1555
  }
1925
1556
  work_serializer_.Run(
1926
- // TODO(yashykt): When we move to C++14, capture watcher using
1927
- // std::move()
1928
- [watcher, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1929
- watcher->OnError(status);
1930
- },
1557
+ [watcher = std::move(watcher), status = std::move(status)]()
1558
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1559
+ watcher->OnError(status);
1560
+ },
1931
1561
  DEBUG_LOCATION);
1932
1562
  };
1933
1563
  auto resource_name = ParseXdsResourceName(name, type);
1934
1564
  if (!resource_name.ok()) {
1935
- fail(absl::UnavailableError(absl::StrFormat(
1936
- "Unable to parse resource name for listener %s", name)));
1565
+ fail(absl::UnavailableError(
1566
+ absl::StrCat("Unable to parse resource name ", name)));
1937
1567
  return;
1938
1568
  }
1939
1569
  // Find server to use.
@@ -1947,11 +1577,17 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1947
1577
  "\" not present in bootstrap config")));
1948
1578
  return;
1949
1579
  }
1950
- if (!authority->xds_servers.empty()) {
1951
- xds_server = &authority->xds_servers[0];
1952
- }
1580
+ xds_server = authority->server();
1953
1581
  }
1954
1582
  if (xds_server == nullptr) xds_server = &bootstrap_->server();
1583
+ // Canonify the xDS server instance, so that we make sure we're using
1584
+ // the same instance as will be used in AddClusterDropStats() and
1585
+ // AddClusterLocalityStats(). This may yield a different result than
1586
+ // the logic above if the same server is listed both in the authority
1587
+ // and as the top-level server.
1588
+ // TODO(roth): This is really ugly -- need to find a better way to
1589
+ // index the xDS server than by address here.
1590
+ xds_server = bootstrap_->FindXdsServer(*xds_server);
1955
1591
  {
1956
1592
  MutexLock lock(&mu_);
1957
1593
  MaybeRegisterResourceTypeLocked(type);
@@ -1975,12 +1611,60 @@ void XdsClient::WatchResource(const XdsResourceType* type,
1975
1611
  delete value;
1976
1612
  },
1977
1613
  DEBUG_LOCATION);
1614
+ } else if (resource_state.meta.client_status ==
1615
+ XdsApi::ResourceMetadata::DOES_NOT_EXIST) {
1616
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1617
+ gpr_log(GPR_INFO,
1618
+ "[xds_client %p] reporting cached does-not-exist for %s", this,
1619
+ std::string(name).c_str());
1620
+ }
1621
+ work_serializer_.Schedule(
1622
+ [watcher]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1623
+ watcher->OnResourceDoesNotExist();
1624
+ },
1625
+ DEBUG_LOCATION);
1626
+ } else if (resource_state.meta.client_status ==
1627
+ XdsApi::ResourceMetadata::NACKED) {
1628
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1629
+ gpr_log(
1630
+ GPR_INFO,
1631
+ "[xds_client %p] reporting cached validation failure for %s: %s",
1632
+ this, std::string(name).c_str(),
1633
+ resource_state.meta.failed_details.c_str());
1634
+ }
1635
+ std::string details = resource_state.meta.failed_details;
1636
+ const auto* node = bootstrap_->node();
1637
+ if (node != nullptr) {
1638
+ absl::StrAppend(&details, " (node ID:", bootstrap_->node()->id(), ")");
1639
+ }
1640
+ work_serializer_.Schedule(
1641
+ [watcher, details = std::move(details)]()
1642
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1643
+ watcher->OnError(absl::UnavailableError(
1644
+ absl::StrCat("invalid resource: ", details)));
1645
+ },
1646
+ DEBUG_LOCATION);
1978
1647
  }
1979
1648
  // If the authority doesn't yet have a channel, set it, creating it if
1980
1649
  // needed.
1981
1650
  if (authority_state.channel_state == nullptr) {
1982
1651
  authority_state.channel_state =
1983
- GetOrCreateChannelStateLocked(*xds_server);
1652
+ GetOrCreateChannelStateLocked(*xds_server, "start watch");
1653
+ }
1654
+ absl::Status channel_status = authority_state.channel_state->status();
1655
+ if (!channel_status.ok()) {
1656
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1657
+ gpr_log(GPR_INFO,
1658
+ "[xds_client %p] returning cached channel error for %s: %s",
1659
+ this, std::string(name).c_str(),
1660
+ channel_status.ToString().c_str());
1661
+ }
1662
+ work_serializer_.Schedule(
1663
+ [watcher = std::move(watcher), status = std::move(channel_status)]()
1664
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) mutable {
1665
+ watcher->OnError(std::move(status));
1666
+ },
1667
+ DEBUG_LOCATION);
1984
1668
  }
1985
1669
  authority_state.channel_state->SubscribeLocked(type, *resource_name);
1986
1670
  }
@@ -2040,23 +1724,21 @@ void XdsClient::MaybeRegisterResourceTypeLocked(
2040
1724
  return;
2041
1725
  }
2042
1726
  resource_types_.emplace(resource_type->type_url(), resource_type);
2043
- v2_resource_types_.emplace(resource_type->v2_type_url(), resource_type);
2044
- resource_type->InitUpbSymtab(symtab_.ptr());
1727
+ resource_type->InitUpbSymtab(this, symtab_.ptr());
2045
1728
  }
2046
1729
 
2047
1730
  const XdsResourceType* XdsClient::GetResourceTypeLocked(
2048
1731
  absl::string_view resource_type) {
2049
1732
  auto it = resource_types_.find(resource_type);
2050
1733
  if (it != resource_types_.end()) return it->second;
2051
- auto it2 = v2_resource_types_.find(resource_type);
2052
- if (it2 != v2_resource_types_.end()) return it2->second;
2053
1734
  return nullptr;
2054
1735
  }
2055
1736
 
2056
1737
  absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
2057
1738
  absl::string_view name, const XdsResourceType* type) {
2058
1739
  // Old-style names use the empty string for authority.
2059
- // authority is prefixed with "old:" to indicate that it's an old-style name.
1740
+ // authority is prefixed with "old:" to indicate that it's an old-style
1741
+ // name.
2060
1742
  if (!xds_federation_enabled_ || !absl::StartsWith(name, "xdstp:")) {
2061
1743
  return XdsResourceName{"old:", {std::string(name), {}}};
2062
1744
  }
@@ -2066,7 +1748,7 @@ absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
2066
1748
  // Split the resource type off of the path to get the id.
2067
1749
  std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
2068
1750
  absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
2069
- if (!type->IsType(path_parts.first, nullptr)) {
1751
+ if (type->type_url() != path_parts.first) {
2070
1752
  return absl::InvalidArgumentError(
2071
1753
  "xdstp URI path must indicate valid xDS resource type");
2072
1754
  }
@@ -2098,40 +1780,45 @@ std::string XdsClient::ConstructFullXdsResourceName(
2098
1780
  RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
2099
1781
  const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
2100
1782
  absl::string_view eds_service_name) {
2101
- if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
1783
+ const auto* server = bootstrap_->FindXdsServer(xds_server);
1784
+ if (server == nullptr) return nullptr;
2102
1785
  auto key =
2103
1786
  std::make_pair(std::string(cluster_name), std::string(eds_service_name));
2104
- MutexLock lock(&mu_);
2105
- // We jump through some hoops here to make sure that the const
2106
- // XdsBootstrap::XdsServer& and absl::string_views
2107
- // stored in the XdsClusterDropStats object point to the
2108
- // XdsBootstrap::XdsServer and strings
2109
- // in the load_report_map_ key, so that they have the same lifetime.
2110
- auto server_it =
2111
- xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
2112
- if (server_it->second.channel_state == nullptr) {
2113
- server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
2114
- }
2115
- auto load_report_it = server_it->second.load_report_map
2116
- .emplace(std::move(key), LoadReportState())
2117
- .first;
2118
- LoadReportState& load_report_state = load_report_it->second;
2119
1787
  RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
2120
- if (load_report_state.drop_stats != nullptr) {
2121
- cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
2122
- }
2123
- if (cluster_drop_stats == nullptr) {
1788
+ {
1789
+ MutexLock lock(&mu_);
1790
+ // We jump through some hoops here to make sure that the const
1791
+ // XdsBootstrap::XdsServer& and absl::string_views
1792
+ // stored in the XdsClusterDropStats object point to the
1793
+ // XdsBootstrap::XdsServer and strings
1794
+ // in the load_report_map_ key, so that they have the same lifetime.
1795
+ auto server_it =
1796
+ xds_load_report_server_map_.emplace(server, LoadReportServer()).first;
1797
+ if (server_it->second.channel_state == nullptr) {
1798
+ server_it->second.channel_state = GetOrCreateChannelStateLocked(
1799
+ *server, "load report map (drop stats)");
1800
+ }
1801
+ auto load_report_it = server_it->second.load_report_map
1802
+ .emplace(std::move(key), LoadReportState())
1803
+ .first;
1804
+ LoadReportState& load_report_state = load_report_it->second;
2124
1805
  if (load_report_state.drop_stats != nullptr) {
2125
- load_report_state.deleted_drop_stats +=
2126
- load_report_state.drop_stats->GetSnapshotAndReset();
1806
+ cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
2127
1807
  }
2128
- cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
2129
- Ref(DEBUG_LOCATION, "DropStats"), server_it->first,
2130
- load_report_it->first.first /*cluster_name*/,
2131
- load_report_it->first.second /*eds_service_name*/);
2132
- load_report_state.drop_stats = cluster_drop_stats.get();
1808
+ if (cluster_drop_stats == nullptr) {
1809
+ if (load_report_state.drop_stats != nullptr) {
1810
+ load_report_state.deleted_drop_stats +=
1811
+ load_report_state.drop_stats->GetSnapshotAndReset();
1812
+ }
1813
+ cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
1814
+ Ref(DEBUG_LOCATION, "DropStats"), *server,
1815
+ load_report_it->first.first /*cluster_name*/,
1816
+ load_report_it->first.second /*eds_service_name*/);
1817
+ load_report_state.drop_stats = cluster_drop_stats.get();
1818
+ }
1819
+ server_it->second.channel_state->MaybeStartLrsCall();
2133
1820
  }
2134
- server_it->second.channel_state->MaybeStartLrsCall();
1821
+ work_serializer_.DrainQueue();
2135
1822
  return cluster_drop_stats;
2136
1823
  }
2137
1824
 
@@ -2139,8 +1826,10 @@ void XdsClient::RemoveClusterDropStats(
2139
1826
  const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
2140
1827
  absl::string_view eds_service_name,
2141
1828
  XdsClusterDropStats* cluster_drop_stats) {
1829
+ const auto* server = bootstrap_->FindXdsServer(xds_server);
1830
+ if (server == nullptr) return;
2142
1831
  MutexLock lock(&mu_);
2143
- auto server_it = xds_load_report_server_map_.find(xds_server);
1832
+ auto server_it = xds_load_report_server_map_.find(server);
2144
1833
  if (server_it == xds_load_report_server_map_.end()) return;
2145
1834
  auto load_report_it = server_it->second.load_report_map.find(
2146
1835
  std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
@@ -2159,42 +1848,48 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
2159
1848
  const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
2160
1849
  absl::string_view eds_service_name,
2161
1850
  RefCountedPtr<XdsLocalityName> locality) {
2162
- if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
1851
+ const auto* server = bootstrap_->FindXdsServer(xds_server);
1852
+ if (server == nullptr) return nullptr;
2163
1853
  auto key =
2164
1854
  std::make_pair(std::string(cluster_name), std::string(eds_service_name));
2165
- MutexLock lock(&mu_);
2166
- // We jump through some hoops here to make sure that the const
2167
- // XdsBootstrap::XdsServer& and absl::string_views
2168
- // stored in the XdsClusterDropStats object point to the
2169
- // XdsBootstrap::XdsServer and strings
2170
- // in the load_report_map_ key, so that they have the same lifetime.
2171
- auto server_it =
2172
- xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
2173
- if (server_it->second.channel_state == nullptr) {
2174
- server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
2175
- }
2176
- auto load_report_it = server_it->second.load_report_map
2177
- .emplace(std::move(key), LoadReportState())
2178
- .first;
2179
- LoadReportState& load_report_state = load_report_it->second;
2180
- LoadReportState::LocalityState& locality_state =
2181
- load_report_state.locality_stats[locality];
2182
1855
  RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
2183
- if (locality_state.locality_stats != nullptr) {
2184
- cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
2185
- }
2186
- if (cluster_locality_stats == nullptr) {
1856
+ {
1857
+ MutexLock lock(&mu_);
1858
+ // We jump through some hoops here to make sure that the const
1859
+ // XdsBootstrap::XdsServer& and absl::string_views
1860
+ // stored in the XdsClusterDropStats object point to the
1861
+ // XdsBootstrap::XdsServer and strings
1862
+ // in the load_report_map_ key, so that they have the same lifetime.
1863
+ auto server_it =
1864
+ xds_load_report_server_map_.emplace(server, LoadReportServer()).first;
1865
+ if (server_it->second.channel_state == nullptr) {
1866
+ server_it->second.channel_state = GetOrCreateChannelStateLocked(
1867
+ *server, "load report map (locality stats)");
1868
+ }
1869
+ auto load_report_it = server_it->second.load_report_map
1870
+ .emplace(std::move(key), LoadReportState())
1871
+ .first;
1872
+ LoadReportState& load_report_state = load_report_it->second;
1873
+ LoadReportState::LocalityState& locality_state =
1874
+ load_report_state.locality_stats[locality];
2187
1875
  if (locality_state.locality_stats != nullptr) {
2188
- locality_state.deleted_locality_stats +=
2189
- locality_state.locality_stats->GetSnapshotAndReset();
1876
+ cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
1877
+ }
1878
+ if (cluster_locality_stats == nullptr) {
1879
+ if (locality_state.locality_stats != nullptr) {
1880
+ locality_state.deleted_locality_stats +=
1881
+ locality_state.locality_stats->GetSnapshotAndReset();
1882
+ }
1883
+ cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
1884
+ Ref(DEBUG_LOCATION, "LocalityStats"), *server,
1885
+ load_report_it->first.first /*cluster_name*/,
1886
+ load_report_it->first.second /*eds_service_name*/,
1887
+ std::move(locality));
1888
+ locality_state.locality_stats = cluster_locality_stats.get();
2190
1889
  }
2191
- cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
2192
- Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
2193
- load_report_it->first.first /*cluster_name*/,
2194
- load_report_it->first.second /*eds_service_name*/, std::move(locality));
2195
- locality_state.locality_stats = cluster_locality_stats.get();
1890
+ server_it->second.channel_state->MaybeStartLrsCall();
2196
1891
  }
2197
- server_it->second.channel_state->MaybeStartLrsCall();
1892
+ work_serializer_.DrainQueue();
2198
1893
  return cluster_locality_stats;
2199
1894
  }
2200
1895
 
@@ -2203,8 +1898,10 @@ void XdsClient::RemoveClusterLocalityStats(
2203
1898
  absl::string_view eds_service_name,
2204
1899
  const RefCountedPtr<XdsLocalityName>& locality,
2205
1900
  XdsClusterLocalityStats* cluster_locality_stats) {
1901
+ const auto* server = bootstrap_->FindXdsServer(xds_server);
1902
+ if (server == nullptr) return;
2206
1903
  MutexLock lock(&mu_);
2207
- auto server_it = xds_load_report_server_map_.find(xds_server);
1904
+ auto server_it = xds_load_report_server_map_.find(server);
2208
1905
  if (server_it == xds_load_report_server_map_.end()) return;
2209
1906
  auto load_report_it = server_it->second.load_report_map.find(
2210
1907
  std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
@@ -2225,38 +1922,10 @@ void XdsClient::RemoveClusterLocalityStats(
2225
1922
  void XdsClient::ResetBackoff() {
2226
1923
  MutexLock lock(&mu_);
2227
1924
  for (auto& p : xds_server_channel_map_) {
2228
- grpc_channel_reset_connect_backoff(p.second->channel());
1925
+ p.second->ResetBackoff();
2229
1926
  }
2230
1927
  }
2231
1928
 
2232
- void XdsClient::NotifyOnErrorLocked(absl::Status status) {
2233
- const auto* node = bootstrap_->node();
2234
- if (node != nullptr) {
2235
- status = absl::Status(
2236
- status.code(), absl::StrCat(status.message(),
2237
- " (node ID:", bootstrap_->node()->id, ")"));
2238
- }
2239
- std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
2240
- for (const auto& a : authority_state_map_) { // authority
2241
- for (const auto& t : a.second.resource_map) { // type
2242
- for (const auto& r : t.second) { // resource id
2243
- for (const auto& w : r.second.watchers) { // watchers
2244
- watchers.insert(w.second);
2245
- }
2246
- }
2247
- }
2248
- }
2249
- work_serializer_.Schedule(
2250
- // TODO(yashykt): When we move to C++14, capture watchers using
2251
- // std::move()
2252
- [watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
2253
- for (const auto& watcher : watchers) {
2254
- watcher->OnError(status);
2255
- }
2256
- },
2257
- DEBUG_LOCATION);
2258
- }
2259
-
2260
1929
  void XdsClient::NotifyWatchersOnErrorLocked(
2261
1930
  const std::map<ResourceWatcherInterface*,
2262
1931
  RefCountedPtr<ResourceWatcherInterface>>& watchers,
@@ -2264,15 +1933,16 @@ void XdsClient::NotifyWatchersOnErrorLocked(
2264
1933
  const auto* node = bootstrap_->node();
2265
1934
  if (node != nullptr) {
2266
1935
  status = absl::Status(
2267
- status.code(), absl::StrCat(status.message(),
2268
- " (node ID:", bootstrap_->node()->id, ")"));
1936
+ status.code(),
1937
+ absl::StrCat(status.message(), " (node ID:", node->id(), ")"));
2269
1938
  }
2270
1939
  work_serializer_.Schedule(
2271
- [watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
2272
- for (const auto& p : watchers) {
2273
- p.first->OnError(status);
2274
- }
2275
- },
1940
+ [watchers, status = std::move(status)]()
1941
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
1942
+ for (const auto& p : watchers) {
1943
+ p.first->OnError(status);
1944
+ }
1945
+ },
2276
1946
  DEBUG_LOCATION);
2277
1947
  }
2278
1948
 
@@ -2295,7 +1965,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2295
1965
  gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
2296
1966
  }
2297
1967
  XdsApi::ClusterLoadReportMap snapshot_map;
2298
- auto server_it = xds_load_report_server_map_.find(xds_server);
1968
+ auto server_it = xds_load_report_server_map_.find(&xds_server);
2299
1969
  if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
2300
1970
  auto& load_report_map = server_it->second.load_report_map;
2301
1971
  for (auto load_report_it = load_report_map.begin();
@@ -2354,7 +2024,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
2354
2024
  }
2355
2025
  }
2356
2026
  // Compute load report interval.
2357
- const Timestamp now = ExecCtx::Get()->Now();
2027
+ const Timestamp now = Timestamp::Now();
2358
2028
  snapshot.load_report_interval = now - load_report.last_report_time;
2359
2029
  load_report.last_report_time = now;
2360
2030
  // Record snapshot.
@@ -2394,192 +2064,4 @@ std::string XdsClient::DumpClientConfigBinary() {
2394
2064
  return api_.AssembleClientConfig(resource_type_metadata_map);
2395
2065
  }
2396
2066
 
2397
- //
2398
- // accessors for global state
2399
- //
2400
-
2401
- void XdsClientGlobalInit() {
2402
- g_mu = new Mutex;
2403
- XdsHttpFilterRegistry::Init();
2404
- XdsClusterSpecifierPluginRegistry::Init();
2405
- }
2406
-
2407
- // TODO(roth): Find a better way to clear the fallback config that does
2408
- // not require using ABSL_NO_THREAD_SAFETY_ANALYSIS.
2409
- void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
2410
- gpr_free(g_fallback_bootstrap_config);
2411
- g_fallback_bootstrap_config = nullptr;
2412
- delete g_mu;
2413
- g_mu = nullptr;
2414
- XdsHttpFilterRegistry::Shutdown();
2415
- XdsClusterSpecifierPluginRegistry::Shutdown();
2416
- }
2417
-
2418
- namespace {
2419
-
2420
- std::string GetBootstrapContents(const char* fallback_config,
2421
- grpc_error_handle* error) {
2422
- // First, try GRPC_XDS_BOOTSTRAP env var.
2423
- UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
2424
- if (path != nullptr) {
2425
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2426
- gpr_log(GPR_INFO,
2427
- "Got bootstrap file location from GRPC_XDS_BOOTSTRAP "
2428
- "environment variable: %s",
2429
- path.get());
2430
- }
2431
- grpc_slice contents;
2432
- *error =
2433
- grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
2434
- if (!GRPC_ERROR_IS_NONE(*error)) return "";
2435
- std::string contents_str(StringViewFromSlice(contents));
2436
- grpc_slice_unref_internal(contents);
2437
- return contents_str;
2438
- }
2439
- // Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
2440
- UniquePtr<char> env_config(gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
2441
- if (env_config != nullptr) {
2442
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2443
- gpr_log(GPR_INFO,
2444
- "Got bootstrap contents from GRPC_XDS_BOOTSTRAP_CONFIG "
2445
- "environment variable");
2446
- }
2447
- return env_config.get();
2448
- }
2449
- // Finally, try fallback config.
2450
- if (fallback_config != nullptr) {
2451
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2452
- gpr_log(GPR_INFO, "Got bootstrap contents from fallback config");
2453
- }
2454
- return fallback_config;
2455
- }
2456
- // No bootstrap config found.
2457
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2458
- "Environment variables GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG "
2459
- "not defined");
2460
- return "";
2461
- }
2462
-
2463
- } // namespace
2464
-
2465
- RefCountedPtr<XdsClient> XdsClient::GetOrCreate(const grpc_channel_args* args,
2466
- grpc_error_handle* error) {
2467
- RefCountedPtr<XdsClient> xds_client;
2468
- // If getting bootstrap from channel args, create a local XdsClient
2469
- // instance for the channel or server instead of using the global instance.
2470
- const char* bootstrap_config = grpc_channel_args_find_string(
2471
- args, GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG);
2472
- if (bootstrap_config != nullptr) {
2473
- std::unique_ptr<XdsBootstrap> bootstrap =
2474
- XdsBootstrap::Create(bootstrap_config, error);
2475
- if (GRPC_ERROR_IS_NONE(*error)) {
2476
- grpc_channel_args* xds_channel_args =
2477
- grpc_channel_args_find_pointer<grpc_channel_args>(
2478
- args,
2479
- GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_CLIENT_CHANNEL_ARGS);
2480
- return MakeRefCounted<XdsClient>(std::move(bootstrap), xds_channel_args);
2481
- }
2482
- return nullptr;
2483
- }
2484
- // Otherwise, use the global instance.
2485
- {
2486
- MutexLock lock(g_mu);
2487
- if (g_xds_client != nullptr) {
2488
- auto xds_client = g_xds_client->RefIfNonZero();
2489
- if (xds_client != nullptr) return xds_client;
2490
- }
2491
- // Find bootstrap contents.
2492
- std::string bootstrap_contents =
2493
- GetBootstrapContents(g_fallback_bootstrap_config, error);
2494
- if (!GRPC_ERROR_IS_NONE(*error)) return nullptr;
2495
- if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
2496
- gpr_log(GPR_INFO, "xDS bootstrap contents: %s",
2497
- bootstrap_contents.c_str());
2498
- }
2499
- // Parse bootstrap.
2500
- std::unique_ptr<XdsBootstrap> bootstrap =
2501
- XdsBootstrap::Create(bootstrap_contents, error);
2502
- if (!GRPC_ERROR_IS_NONE(*error)) return nullptr;
2503
- // Instantiate XdsClient.
2504
- xds_client =
2505
- MakeRefCounted<XdsClient>(std::move(bootstrap), g_channel_args);
2506
- g_xds_client = xds_client.get();
2507
- }
2508
- return xds_client;
2509
- }
2510
-
2511
- namespace internal {
2512
-
2513
- void SetXdsChannelArgsForTest(grpc_channel_args* args) {
2514
- MutexLock lock(g_mu);
2515
- g_channel_args = args;
2516
- }
2517
-
2518
- void UnsetGlobalXdsClientForTest() {
2519
- MutexLock lock(g_mu);
2520
- g_xds_client = nullptr;
2521
- }
2522
-
2523
- void SetXdsFallbackBootstrapConfig(const char* config) {
2524
- MutexLock lock(g_mu);
2525
- gpr_free(g_fallback_bootstrap_config);
2526
- g_fallback_bootstrap_config = gpr_strdup(config);
2527
- }
2528
-
2529
- } // namespace internal
2530
-
2531
- //
2532
- // embedding XdsClient in channel args
2533
- //
2534
-
2535
- #define GRPC_ARG_XDS_CLIENT "grpc.internal.xds_client"
2536
-
2537
- namespace {
2538
-
2539
- void* XdsClientArgCopy(void* p) {
2540
- XdsClient* xds_client = static_cast<XdsClient*>(p);
2541
- xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
2542
- return p;
2543
- }
2544
-
2545
- void XdsClientArgDestroy(void* p) {
2546
- XdsClient* xds_client = static_cast<XdsClient*>(p);
2547
- xds_client->Unref(DEBUG_LOCATION, "channel arg");
2548
- }
2549
-
2550
- int XdsClientArgCmp(void* p, void* q) { return QsortCompare(p, q); }
2551
-
2552
- const grpc_arg_pointer_vtable kXdsClientArgVtable = {
2553
- XdsClientArgCopy, XdsClientArgDestroy, XdsClientArgCmp};
2554
-
2555
- } // namespace
2556
-
2557
- grpc_arg XdsClient::MakeChannelArg() const {
2558
- return grpc_channel_arg_pointer_create(const_cast<char*>(GRPC_ARG_XDS_CLIENT),
2559
- const_cast<XdsClient*>(this),
2560
- &kXdsClientArgVtable);
2561
- }
2562
-
2563
- RefCountedPtr<XdsClient> XdsClient::GetFromChannelArgs(
2564
- const grpc_channel_args& args) {
2565
- XdsClient* xds_client =
2566
- grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
2567
- if (xds_client == nullptr) return nullptr;
2568
- return xds_client->Ref(DEBUG_LOCATION, "GetFromChannelArgs");
2569
- }
2570
-
2571
2067
  } // namespace grpc_core
2572
-
2573
- // The returned bytes may contain NULL(0), so we can't use c-string.
2574
- grpc_slice grpc_dump_xds_configs(void) {
2575
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2576
- grpc_core::ExecCtx exec_ctx;
2577
- grpc_error_handle error = GRPC_ERROR_NONE;
2578
- auto xds_client = grpc_core::XdsClient::GetOrCreate(nullptr, &error);
2579
- if (!GRPC_ERROR_IS_NONE(error)) {
2580
- // If we isn't using xDS, just return an empty string.
2581
- GRPC_ERROR_UNREF(error);
2582
- return grpc_empty_slice();
2583
- }
2584
- return grpc_slice_from_cpp_string(xds_client->DumpClientConfigBinary());
2585
- }