grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux

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 (487) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  461. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  462. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  463. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  464. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  465. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  466. data/src/ruby/lib/grpc/version.rb +1 -1
  467. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  468. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  469. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  470. metadata +36 -29
  471. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  472. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  473. data/src/core/lib/event_engine/sockaddr.h +0 -44
  474. data/src/core/lib/gprpp/capture.h +0 -76
  475. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  476. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  477. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  478. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  479. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  480. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  481. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  482. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  483. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  484. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  485. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  486. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  487. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -0,0 +1,109 @@
1
+ /* This file was generated by upbc (the upb compiler) from the input
2
+ * file:
3
+ *
4
+ * xds/service/orca/v3/orca.proto
5
+ *
6
+ * Do not edit -- your changes will be discarded when the file is
7
+ * regenerated. */
8
+
9
+ #ifndef XDS_SERVICE_ORCA_V3_ORCA_PROTO_UPB_H_
10
+ #define XDS_SERVICE_ORCA_V3_ORCA_PROTO_UPB_H_
11
+
12
+ #include "upb/msg_internal.h"
13
+ #include "upb/decode.h"
14
+ #include "upb/decode_fast.h"
15
+ #include "upb/encode.h"
16
+
17
+ #include "upb/port_def.inc"
18
+
19
+ #ifdef __cplusplus
20
+ extern "C" {
21
+ #endif
22
+
23
+ struct xds_service_orca_v3_OrcaLoadReportRequest;
24
+ typedef struct xds_service_orca_v3_OrcaLoadReportRequest xds_service_orca_v3_OrcaLoadReportRequest;
25
+ extern const upb_MiniTable xds_service_orca_v3_OrcaLoadReportRequest_msginit;
26
+ struct google_protobuf_Duration;
27
+ extern const upb_MiniTable google_protobuf_Duration_msginit;
28
+
29
+
30
+
31
+ /* xds.service.orca.v3.OrcaLoadReportRequest */
32
+
33
+ UPB_INLINE xds_service_orca_v3_OrcaLoadReportRequest* xds_service_orca_v3_OrcaLoadReportRequest_new(upb_Arena* arena) {
34
+ return (xds_service_orca_v3_OrcaLoadReportRequest*)_upb_Message_New(&xds_service_orca_v3_OrcaLoadReportRequest_msginit, arena);
35
+ }
36
+ UPB_INLINE xds_service_orca_v3_OrcaLoadReportRequest* xds_service_orca_v3_OrcaLoadReportRequest_parse(const char* buf, size_t size, upb_Arena* arena) {
37
+ xds_service_orca_v3_OrcaLoadReportRequest* ret = xds_service_orca_v3_OrcaLoadReportRequest_new(arena);
38
+ if (!ret) return NULL;
39
+ if (upb_Decode(buf, size, ret, &xds_service_orca_v3_OrcaLoadReportRequest_msginit, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
40
+ return NULL;
41
+ }
42
+ return ret;
43
+ }
44
+ UPB_INLINE xds_service_orca_v3_OrcaLoadReportRequest* xds_service_orca_v3_OrcaLoadReportRequest_parse_ex(const char* buf, size_t size,
45
+ const upb_ExtensionRegistry* extreg,
46
+ int options, upb_Arena* arena) {
47
+ xds_service_orca_v3_OrcaLoadReportRequest* ret = xds_service_orca_v3_OrcaLoadReportRequest_new(arena);
48
+ if (!ret) return NULL;
49
+ if (upb_Decode(buf, size, ret, &xds_service_orca_v3_OrcaLoadReportRequest_msginit, extreg, options, arena) !=
50
+ kUpb_DecodeStatus_Ok) {
51
+ return NULL;
52
+ }
53
+ return ret;
54
+ }
55
+ UPB_INLINE char* xds_service_orca_v3_OrcaLoadReportRequest_serialize(const xds_service_orca_v3_OrcaLoadReportRequest* msg, upb_Arena* arena, size_t* len) {
56
+ return upb_Encode(msg, &xds_service_orca_v3_OrcaLoadReportRequest_msginit, 0, arena, len);
57
+ }
58
+ UPB_INLINE char* xds_service_orca_v3_OrcaLoadReportRequest_serialize_ex(const xds_service_orca_v3_OrcaLoadReportRequest* msg, int options,
59
+ upb_Arena* arena, size_t* len) {
60
+ return upb_Encode(msg, &xds_service_orca_v3_OrcaLoadReportRequest_msginit, options, arena, len);
61
+ }
62
+ UPB_INLINE bool xds_service_orca_v3_OrcaLoadReportRequest_has_report_interval(const xds_service_orca_v3_OrcaLoadReportRequest* msg) {
63
+ return _upb_hasbit(msg, 1);
64
+ }
65
+ UPB_INLINE void xds_service_orca_v3_OrcaLoadReportRequest_clear_report_interval(const xds_service_orca_v3_OrcaLoadReportRequest* msg) {
66
+ *UPB_PTR_AT(msg, UPB_SIZE(4, 8), const upb_Message*) = NULL;
67
+ }
68
+ UPB_INLINE const struct google_protobuf_Duration* xds_service_orca_v3_OrcaLoadReportRequest_report_interval(const xds_service_orca_v3_OrcaLoadReportRequest* msg) {
69
+ return *UPB_PTR_AT(msg, UPB_SIZE(4, 8), const struct google_protobuf_Duration*);
70
+ }
71
+ UPB_INLINE void xds_service_orca_v3_OrcaLoadReportRequest_clear_request_cost_names(const xds_service_orca_v3_OrcaLoadReportRequest* msg) {
72
+ _upb_array_detach(msg, UPB_SIZE(8, 16));
73
+ }
74
+ UPB_INLINE upb_StringView const* xds_service_orca_v3_OrcaLoadReportRequest_request_cost_names(const xds_service_orca_v3_OrcaLoadReportRequest* msg, size_t* len) {
75
+ return (upb_StringView const*)_upb_array_accessor(msg, UPB_SIZE(8, 16), len);
76
+ }
77
+
78
+ UPB_INLINE void xds_service_orca_v3_OrcaLoadReportRequest_set_report_interval(xds_service_orca_v3_OrcaLoadReportRequest *msg, struct google_protobuf_Duration* value) {
79
+ _upb_sethas(msg, 1);
80
+ *UPB_PTR_AT(msg, UPB_SIZE(4, 8), struct google_protobuf_Duration*) = value;
81
+ }
82
+ UPB_INLINE struct google_protobuf_Duration* xds_service_orca_v3_OrcaLoadReportRequest_mutable_report_interval(xds_service_orca_v3_OrcaLoadReportRequest* msg, upb_Arena* arena) {
83
+ struct google_protobuf_Duration* sub = (struct google_protobuf_Duration*)xds_service_orca_v3_OrcaLoadReportRequest_report_interval(msg);
84
+ if (sub == NULL) {
85
+ sub = (struct google_protobuf_Duration*)_upb_Message_New(&google_protobuf_Duration_msginit, arena);
86
+ if (!sub) return NULL;
87
+ xds_service_orca_v3_OrcaLoadReportRequest_set_report_interval(msg, sub);
88
+ }
89
+ return sub;
90
+ }
91
+ UPB_INLINE upb_StringView* xds_service_orca_v3_OrcaLoadReportRequest_mutable_request_cost_names(xds_service_orca_v3_OrcaLoadReportRequest* msg, size_t* len) {
92
+ return (upb_StringView*)_upb_array_mutable_accessor(msg, UPB_SIZE(8, 16), len);
93
+ }
94
+ UPB_INLINE upb_StringView* xds_service_orca_v3_OrcaLoadReportRequest_resize_request_cost_names(xds_service_orca_v3_OrcaLoadReportRequest* msg, size_t len, upb_Arena* arena) {
95
+ return (upb_StringView*)_upb_Array_Resize_accessor2(msg, UPB_SIZE(8, 16), len, UPB_SIZE(3, 4), arena);
96
+ }
97
+ UPB_INLINE bool xds_service_orca_v3_OrcaLoadReportRequest_add_request_cost_names(xds_service_orca_v3_OrcaLoadReportRequest* msg, upb_StringView val, upb_Arena* arena) {
98
+ return _upb_Array_Append_accessor2(msg, UPB_SIZE(8, 16), UPB_SIZE(3, 4), &val, arena);
99
+ }
100
+
101
+ extern const upb_MiniTable_File xds_service_orca_v3_orca_proto_upb_file_layout;
102
+
103
+ #ifdef __cplusplus
104
+ } /* extern "C" */
105
+ #endif
106
+
107
+ #include "upb/port_undef.inc"
108
+
109
+ #endif /* XDS_SERVICE_ORCA_V3_ORCA_PROTO_UPB_H_ */
@@ -28,8 +28,10 @@ namespace grpc_core {
28
28
  // CertificateProviderStore::CertificateProviderWrapper
29
29
  //
30
30
 
31
- const char* CertificateProviderStore::CertificateProviderWrapper::type() const {
32
- return "Wrapper";
31
+ UniqueTypeName CertificateProviderStore::CertificateProviderWrapper::type()
32
+ const {
33
+ static UniqueTypeName::Factory kFactory("Wrapper");
34
+ return kFactory.Create();
33
35
  }
34
36
 
35
37
  // If a certificate provider is created, the CertificateProviderStore
@@ -90,7 +90,7 @@ class CertificateProviderStore
90
90
  static_cast<const grpc_tls_certificate_provider*>(this), other);
91
91
  }
92
92
 
93
- const char* type() const override;
93
+ UniqueTypeName type() const override;
94
94
 
95
95
  absl::string_view key() const { return key_; }
96
96
 
@@ -263,7 +263,10 @@ XdsCertificateProvider::~XdsCertificateProvider() {
263
263
  distributor_->SetWatchStatusCallback(nullptr);
264
264
  }
265
265
 
266
- const char* XdsCertificateProvider::type() const { return "Xds"; }
266
+ UniqueTypeName XdsCertificateProvider::type() const {
267
+ static UniqueTypeName::Factory kFactory("Xds");
268
+ return kFactory.Create();
269
+ }
267
270
 
268
271
  bool XdsCertificateProvider::ProvidesRootCerts(const std::string& cert_name) {
269
272
  MutexLock lock(&mu_);
@@ -39,7 +39,7 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
39
39
  return distributor_;
40
40
  }
41
41
 
42
- const char* type() const override;
42
+ UniqueTypeName type() const override;
43
43
 
44
44
  bool ProvidesRootCerts(const std::string& cert_name);
45
45
  void UpdateRootCertNameAndDistributor(
@@ -53,7 +53,7 @@ bool XdsChannelStackModifier::ModifyChannelStack(ChannelStackBuilder* builder) {
53
53
  // Insert the filters after the census filter if present.
54
54
  auto it = builder->mutable_stack()->begin();
55
55
  while (it != builder->mutable_stack()->end()) {
56
- const char* filter_name_at_it = it->filter->name;
56
+ const char* filter_name_at_it = (*it)->name;
57
57
  if (strcmp("census_server", filter_name_at_it) == 0 ||
58
58
  strcmp("opencensus_server", filter_name_at_it) == 0) {
59
59
  break;
@@ -71,8 +71,7 @@ bool XdsChannelStackModifier::ModifyChannelStack(ChannelStackBuilder* builder) {
71
71
  ++it;
72
72
  }
73
73
  for (const grpc_channel_filter* filter : filters_) {
74
- it = builder->mutable_stack()->insert(
75
- it, ChannelStackBuilder::StackEntry{filter, nullptr});
74
+ it = builder->mutable_stack()->insert(it, filter);
76
75
  ++it;
77
76
  }
78
77
  return true;
@@ -96,9 +95,10 @@ XdsChannelStackModifier::GetFromChannelArgs(const grpc_channel_args& args) {
96
95
  void RegisterXdsChannelStackModifier(CoreConfiguration::Builder* builder) {
97
96
  builder->channel_init()->RegisterStage(
98
97
  GRPC_SERVER_CHANNEL, INT_MAX, [](ChannelStackBuilder* builder) {
98
+ const grpc_channel_args* channel_args = builder->channel_args().ToC();
99
99
  RefCountedPtr<XdsChannelStackModifier> channel_stack_modifier =
100
- XdsChannelStackModifier::GetFromChannelArgs(
101
- *builder->channel_args());
100
+ XdsChannelStackModifier::GetFromChannelArgs(*channel_args);
101
+ grpc_channel_args_destroy(channel_args);
102
102
  if (channel_stack_modifier != nullptr) {
103
103
  return channel_stack_modifier->ModifyChannelStack(builder);
104
104
  }
@@ -198,9 +198,20 @@ class XdsClient::ChannelState::AdsCallState
198
198
  Unref(DEBUG_LOCATION, "Orphan");
199
199
  }
200
200
 
201
- void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld) {
202
- if (timer_started_) return;
203
- timer_started_ = true;
201
+ void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld)
202
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
203
+ if (!timer_start_needed_) return;
204
+ timer_start_needed_ = false;
205
+ // Check if we already have a cached version of this resource
206
+ // (i.e., if this is the initial request for the resource after an
207
+ // ADS stream restart). If so, we don't start the timer, because
208
+ // (a) we already have the resource and (b) the server may
209
+ // optimize by not resending the resource that we already have.
210
+ auto& authority_state =
211
+ ads_calld->xds_client()->authority_state_map_[name_.authority];
212
+ ResourceState& state = authority_state.resource_map[type_][name_.key];
213
+ if (state.resource != nullptr) return;
214
+ // Start timer.
204
215
  ads_calld_ = std::move(ads_calld);
205
216
  Ref(DEBUG_LOCATION, "timer").release();
206
217
  timer_pending_ = true;
@@ -211,6 +222,18 @@ class XdsClient::ChannelState::AdsCallState
211
222
  }
212
223
 
213
224
  void MaybeCancelTimer() {
225
+ // If the timer hasn't been started yet, make sure we don't start
226
+ // it later. This can happen if the last watch for an LDS or CDS
227
+ // resource is cancelled and then restarted, both while an ADS
228
+ // request for a different resource type is being sent (causing
229
+ // the unsubscription and then resubscription requests to be
230
+ // queued), and then we get a response for the LDS or CDS resource.
231
+ // In that case, we would call MaybeCancelTimer() when we receive the
232
+ // response and then MaybeStartTimer() when we finally send the new
233
+ // LDS or CDS request, thus causing the timer to fire when it shouldn't.
234
+ // For details, see https://github.com/grpc/grpc/issues/29583.
235
+ // TODO(roth): Find a way to write a test for this case.
236
+ timer_start_needed_ = false;
214
237
  if (timer_pending_) {
215
238
  grpc_timer_cancel(&timer_);
216
239
  timer_pending_ = false;
@@ -233,23 +256,23 @@ class XdsClient::ChannelState::AdsCallState
233
256
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
234
257
  if (error == GRPC_ERROR_NONE && timer_pending_) {
235
258
  timer_pending_ = false;
236
- absl::Status watcher_error = absl::UnavailableError(absl::StrFormat(
237
- "timeout obtaining resource {type=%s name=%s} from xds server",
238
- type_->type_url(),
239
- XdsClient::ConstructFullXdsResourceName(
240
- name_.authority, type_->type_url(), name_.key)));
241
259
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
242
- gpr_log(GPR_INFO, "[xds_client %p] xds server %s: %s",
260
+ gpr_log(GPR_INFO,
261
+ "[xds_client %p] xds server %s: timeout obtaining resource "
262
+ "{type=%s name=%s} from xds server",
243
263
  ads_calld_->xds_client(),
244
264
  ads_calld_->chand()->server_.server_uri.c_str(),
245
- watcher_error.ToString().c_str());
265
+ std::string(type_->type_url()).c_str(),
266
+ XdsClient::ConstructFullXdsResourceName(
267
+ name_.authority, type_->type_url(), name_.key)
268
+ .c_str());
246
269
  }
247
270
  auto& authority_state =
248
271
  ads_calld_->xds_client()->authority_state_map_[name_.authority];
249
272
  ResourceState& state = authority_state.resource_map[type_][name_.key];
250
273
  state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
251
- ads_calld_->xds_client()->NotifyWatchersOnErrorLocked(state.watchers,
252
- watcher_error);
274
+ ads_calld_->xds_client()->NotifyWatchersOnResourceDoesNotExist(
275
+ state.watchers);
253
276
  }
254
277
  GRPC_ERROR_UNREF(error);
255
278
  }
@@ -258,7 +281,7 @@ class XdsClient::ChannelState::AdsCallState
258
281
  const XdsResourceName name_;
259
282
 
260
283
  RefCountedPtr<AdsCallState> ads_calld_;
261
- bool timer_started_ = false;
284
+ bool timer_start_needed_ = true;
262
285
  bool timer_pending_ = false;
263
286
  grpc_timer timer_;
264
287
  grpc_closure timer_callback_;
@@ -294,7 +317,8 @@ class XdsClient::ChannelState::AdsCallState
294
317
 
295
318
  // Constructs a list of resource names of a given type for an ADS
296
319
  // request. Also starts the timer for each resource if needed.
297
- std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type);
320
+ std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type)
321
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
298
322
 
299
323
  // The owning RetryableCall<>.
300
324
  RefCountedPtr<RetryableCall<AdsCallState>> parent_;
@@ -555,7 +579,7 @@ namespace {
555
579
  bool IsLameChannel(grpc_channel* channel) {
556
580
  grpc_channel_element* elem =
557
581
  grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
558
- return elem->filter == &grpc_lame_filter;
582
+ return elem->filter == &LameClientFilter::kFilter;
559
583
  }
560
584
 
561
585
  } // namespace
@@ -566,7 +590,8 @@ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
566
590
  absl::UnavailableError("xds client has a lame channel"));
567
591
  return;
568
592
  }
569
- ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
593
+ ClientChannel* client_channel =
594
+ ClientChannel::GetFromChannel(Channel::FromC(channel_));
570
595
  GPR_ASSERT(client_channel != nullptr);
571
596
  watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
572
597
  client_channel->AddConnectivityWatcher(
@@ -578,7 +603,8 @@ void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
578
603
  if (IsLameChannel(channel_)) {
579
604
  return;
580
605
  }
581
- ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
606
+ ClientChannel* client_channel =
607
+ ClientChannel::GetFromChannel(Channel::FromC(channel_));
582
608
  GPR_ASSERT(client_channel != nullptr);
583
609
  client_channel->RemoveConnectivityWatcher(watcher_);
584
610
  }
@@ -1925,11 +1951,9 @@ void XdsClient::CancelResourceWatch(const XdsResourceType* type,
1925
1951
  bool delay_unsubscription) {
1926
1952
  auto resource_name = ParseXdsResourceName(name, type);
1927
1953
  MutexLock lock(&mu_);
1928
- if (!resource_name.ok()) {
1929
- invalid_watchers_.erase(watcher);
1930
- return;
1931
- }
1932
- if (shutting_down_) return;
1954
+ // We cannot be sure whether the watcher is in invalid_watchers_ or in
1955
+ // authority_state_map_, so we check both, just to be safe.
1956
+ invalid_watchers_.erase(watcher);
1933
1957
  // Find authority.
1934
1958
  if (!resource_name.ok()) return;
1935
1959
  auto authority_it = authority_state_map_.find(resource_name->authority);
@@ -25,6 +25,7 @@
25
25
  #include "envoy/config/cluster/v3/circuit_breaker.upb.h"
26
26
  #include "envoy/config/cluster/v3/cluster.upb.h"
27
27
  #include "envoy/config/cluster/v3/cluster.upbdefs.h"
28
+ #include "envoy/config/cluster/v3/outlier_detection.upb.h"
28
29
  #include "envoy/config/core/v3/address.upb.h"
29
30
  #include "envoy/config/core/v3/base.upb.h"
30
31
  #include "envoy/config/core/v3/config_source.upb.h"
@@ -36,6 +37,8 @@
36
37
 
37
38
  #include <grpc/support/alloc.h>
38
39
 
40
+ #include "src/core/ext/xds/xds_common_types.h"
41
+ #include "src/core/ext/xds/xds_route_config.h"
39
42
  #include "src/core/lib/gpr/env.h"
40
43
  #include "src/core/lib/gpr/string.h"
41
44
  #include "src/core/lib/gprpp/host_port.h"
@@ -203,19 +206,6 @@ grpc_error_handle CdsLogicalDnsParse(
203
206
  return GRPC_ERROR_NONE;
204
207
  }
205
208
 
206
- // TODO(donnadionne): Check to see if cluster types aggregate_cluster and
207
- // logical_dns are enabled, this will be
208
- // removed once the cluster types are fully integration-tested and enabled by
209
- // default.
210
- bool XdsAggregateAndLogicalDnsClusterEnabled() {
211
- char* value = gpr_getenv(
212
- "GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER");
213
- bool parsed_value;
214
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
215
- gpr_free(value);
216
- return parse_succeeded && parsed_value;
217
- }
218
-
219
209
  grpc_error_handle CdsResourceParse(
220
210
  const XdsEncodingContext& context,
221
211
  const envoy_config_cluster_v3_Cluster* cluster, bool /*is_v2*/,
@@ -247,9 +237,6 @@ grpc_error_handle CdsResourceParse(
247
237
  if (service_name.size != 0) {
248
238
  cds_update->eds_service_name = UpbStringToStdString(service_name);
249
239
  }
250
- } else if (!XdsAggregateAndLogicalDnsClusterEnabled()) {
251
- errors.push_back(
252
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("DiscoveryType is not valid."));
253
240
  } else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
254
241
  envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
255
242
  cds_update->cluster_type = XdsClusterResource::ClusterType::LOGICAL_DNS;
@@ -398,6 +385,109 @@ grpc_error_handle CdsResourceParse(
398
385
  }
399
386
  }
400
387
  }
388
+ // As long as outlier detection field is present in the cluster update,
389
+ // we will end up with a outlier detection in the cluster resource which will
390
+ // lead to the creation of outlier detection in discovery mechanism. Values
391
+ // for outlier detection will be based on fields received and
392
+ // default values.
393
+ if (XdsOutlierDetectionEnabled() &&
394
+ envoy_config_cluster_v3_Cluster_has_outlier_detection(cluster)) {
395
+ OutlierDetectionConfig outlier_detection_update;
396
+ const envoy_config_cluster_v3_OutlierDetection* outlier_detection =
397
+ envoy_config_cluster_v3_Cluster_outlier_detection(cluster);
398
+ const google_protobuf_Duration* duration =
399
+ envoy_config_cluster_v3_OutlierDetection_interval(outlier_detection);
400
+ if (duration != nullptr) {
401
+ outlier_detection_update.interval = ParseDuration(duration);
402
+ }
403
+ duration = envoy_config_cluster_v3_OutlierDetection_base_ejection_time(
404
+ outlier_detection);
405
+ if (duration != nullptr) {
406
+ outlier_detection_update.base_ejection_time = ParseDuration(duration);
407
+ }
408
+ duration = envoy_config_cluster_v3_OutlierDetection_max_ejection_time(
409
+ outlier_detection);
410
+ if (duration != nullptr) {
411
+ outlier_detection_update.max_ejection_time = ParseDuration(duration);
412
+ }
413
+ const google_protobuf_UInt32Value* max_ejection_percent =
414
+ envoy_config_cluster_v3_OutlierDetection_max_ejection_percent(
415
+ outlier_detection);
416
+ if (max_ejection_percent != nullptr) {
417
+ outlier_detection_update.max_ejection_percent =
418
+ google_protobuf_UInt32Value_value(max_ejection_percent);
419
+ }
420
+ const google_protobuf_UInt32Value* enforcing_success_rate =
421
+ envoy_config_cluster_v3_OutlierDetection_enforcing_success_rate(
422
+ outlier_detection);
423
+ if (enforcing_success_rate != nullptr) {
424
+ uint32_t enforcement_percentage =
425
+ google_protobuf_UInt32Value_value(enforcing_success_rate);
426
+ if (enforcement_percentage != 0) {
427
+ OutlierDetectionConfig::SuccessRateEjection success_rate_ejection;
428
+ success_rate_ejection.enforcement_percentage = enforcement_percentage;
429
+ const google_protobuf_UInt32Value* minimum_hosts =
430
+ envoy_config_cluster_v3_OutlierDetection_success_rate_minimum_hosts(
431
+ outlier_detection);
432
+ if (minimum_hosts != nullptr) {
433
+ success_rate_ejection.minimum_hosts =
434
+ google_protobuf_UInt32Value_value(minimum_hosts);
435
+ }
436
+ const google_protobuf_UInt32Value* request_volume =
437
+ envoy_config_cluster_v3_OutlierDetection_success_rate_request_volume(
438
+ outlier_detection);
439
+ if (request_volume != nullptr) {
440
+ success_rate_ejection.request_volume =
441
+ google_protobuf_UInt32Value_value(request_volume);
442
+ }
443
+ const google_protobuf_UInt32Value* stdev_factor =
444
+ envoy_config_cluster_v3_OutlierDetection_success_rate_stdev_factor(
445
+ outlier_detection);
446
+ if (stdev_factor != nullptr) {
447
+ success_rate_ejection.stdev_factor =
448
+ google_protobuf_UInt32Value_value(stdev_factor);
449
+ }
450
+ outlier_detection_update.success_rate_ejection = success_rate_ejection;
451
+ }
452
+ }
453
+ const google_protobuf_UInt32Value* enforcing_failure_percentage =
454
+ envoy_config_cluster_v3_OutlierDetection_enforcing_failure_percentage(
455
+ outlier_detection);
456
+ if (enforcing_failure_percentage != nullptr) {
457
+ uint32_t enforcement_percentage =
458
+ google_protobuf_UInt32Value_value(enforcing_failure_percentage);
459
+ if (enforcement_percentage != 0) {
460
+ OutlierDetectionConfig::FailurePercentageEjection
461
+ failure_percentage_ejection;
462
+ failure_percentage_ejection.enforcement_percentage =
463
+ enforcement_percentage;
464
+ const google_protobuf_UInt32Value* minimum_hosts =
465
+ envoy_config_cluster_v3_OutlierDetection_failure_percentage_minimum_hosts(
466
+ outlier_detection);
467
+ if (minimum_hosts != nullptr) {
468
+ failure_percentage_ejection.minimum_hosts =
469
+ google_protobuf_UInt32Value_value(minimum_hosts);
470
+ }
471
+ const google_protobuf_UInt32Value* request_volume =
472
+ envoy_config_cluster_v3_OutlierDetection_failure_percentage_request_volume(
473
+ outlier_detection);
474
+ if (request_volume != nullptr) {
475
+ failure_percentage_ejection.request_volume =
476
+ google_protobuf_UInt32Value_value(request_volume);
477
+ }
478
+ const google_protobuf_UInt32Value* threshold =
479
+ envoy_config_cluster_v3_OutlierDetection_failure_percentage_threshold(
480
+ outlier_detection);
481
+ if (threshold != nullptr) {
482
+ failure_percentage_ejection.threshold =
483
+ google_protobuf_UInt32Value_value(threshold);
484
+ }
485
+ outlier_detection_update.failure_percentage_ejection =
486
+ failure_percentage_ejection;
487
+ }
488
+ }
489
+ cds_update->outlier_detection = outlier_detection_update;
490
+ }
401
491
  return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing CDS resource", &errors);
402
492
  }
403
493
 
@@ -27,6 +27,7 @@
27
27
  #include "envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h"
28
28
  #include "envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h"
29
29
 
30
+ #include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
30
31
  #include "src/core/ext/xds/xds_client.h"
31
32
  #include "src/core/ext/xds/xds_common_types.h"
32
33
  #include "src/core/ext/xds/xds_resource_type_impl.h"
@@ -63,6 +64,8 @@ struct XdsClusterResource {
63
64
  // cluster.
64
65
  uint32_t max_concurrent_requests = 1024;
65
66
 
67
+ absl::optional<OutlierDetectionConfig> outlier_detection;
68
+
66
69
  bool operator==(const XdsClusterResource& other) const {
67
70
  return cluster_type == other.cluster_type &&
68
71
  eds_service_name == other.eds_service_name &&
@@ -36,6 +36,7 @@
36
36
  #include <grpc/grpc.h>
37
37
 
38
38
  #include "src/core/ext/filters/fault_injection/fault_injection_filter.h"
39
+ #include "src/core/ext/xds/xds_common_types.h"
39
40
  #include "src/core/ext/xds/xds_http_filters.h"
40
41
  #include "src/core/lib/channel/channel_args.h"
41
42
  #include "src/core/lib/channel/channel_stack.h"
@@ -140,9 +141,8 @@ absl::StatusOr<Json> ParseHttpFaultIntoJson(
140
141
  envoy_extensions_filters_common_fault_v3_FaultDelay_fixed_delay(
141
142
  fault_delay);
142
143
  if (delay_duration != nullptr) {
143
- fault_injection_policy_json["delay"] = absl::StrFormat(
144
- "%d.%09ds", google_protobuf_Duration_seconds(delay_duration),
145
- google_protobuf_Duration_nanos(delay_duration));
144
+ fault_injection_policy_json["delay"] =
145
+ ParseDuration(delay_duration).ToJsonString();
146
146
  }
147
147
  // Set the headers if we enabled header delay injection control
148
148
  if (envoy_extensions_filters_common_fault_v3_FaultDelay_has_header_delay(
@@ -109,8 +109,10 @@ std::string XdsListenerResource::FilterChainData::ToString() const {
109
109
  //
110
110
 
111
111
  std::string XdsListenerResource::FilterChainMap::CidrRange::ToString() const {
112
+ auto addr_str = grpc_sockaddr_to_string(&address, false);
112
113
  return absl::StrCat(
113
- "{address_prefix=", grpc_sockaddr_to_string(&address, false),
114
+ "{address_prefix=",
115
+ addr_str.ok() ? addr_str.value() : addr_str.status().ToString(),
114
116
  ", prefix_len=", prefix_len, "}");
115
117
  }
116
118
 
@@ -776,9 +778,12 @@ grpc_error_handle AddFilterChainDataForSourceIpRange(
776
778
  } else {
777
779
  for (const auto& prefix_range :
778
780
  filter_chain.filter_chain_match.source_prefix_ranges) {
781
+ auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
782
+ if (!addr_str.ok()) {
783
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
784
+ }
779
785
  auto insert_result = source_ip_map->emplace(
780
- absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
781
- "/", prefix_range.prefix_len),
786
+ absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
782
787
  XdsListenerResource::FilterChainMap::SourceIp());
783
788
  if (insert_result.second) {
784
789
  insert_result.first->second.prefix_range.emplace(prefix_range);
@@ -860,9 +865,12 @@ grpc_error_handle AddFilterChainDataForDestinationIpRange(
860
865
  } else {
861
866
  for (const auto& prefix_range :
862
867
  filter_chain.filter_chain_match.prefix_ranges) {
868
+ auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
869
+ if (!addr_str.ok()) {
870
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
871
+ }
863
872
  auto insert_result = destination_ip_map->emplace(
864
- absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
865
- "/", prefix_range.prefix_len),
873
+ absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
866
874
  InternalFilterChainMap::DestinationIp());
867
875
  if (insert_result.second) {
868
876
  insert_result.first->second.prefix_range.emplace(prefix_range);
@@ -968,10 +976,12 @@ grpc_error_handle LdsResourceParse(
968
976
  envoy_config_listener_v3_Listener_api_listener(listener);
969
977
  const envoy_config_core_v3_Address* address =
970
978
  envoy_config_listener_v3_Listener_address(listener);
971
- if (api_listener != nullptr && address != nullptr) {
972
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
973
- "Listener has both address and ApiListener");
974
- }
979
+ // TODO(roth): Re-enable the following check once
980
+ // github.com/istio/istio/issues/38914 is resolved.
981
+ // if (api_listener != nullptr && address != nullptr) {
982
+ // return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
983
+ // "Listener has both address and ApiListener");
984
+ // }
975
985
  if (api_listener == nullptr && address == nullptr) {
976
986
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
977
987
  "Listener has neither address nor ApiListener");
@@ -1287,7 +1287,8 @@ grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
1287
1287
  grpc_core::ExecCtx exec_ctx;
1288
1288
  args = grpc_core::CoreConfiguration::Get()
1289
1289
  .channel_args_preconditioning()
1290
- .PreconditionChannelArgs(args);
1290
+ .PreconditionChannelArgs(args)
1291
+ .ToC();
1291
1292
  GRPC_API_TRACE(
1292
1293
  "grpc_server_config_fetcher_xds_create(notifier={on_serving_status_"
1293
1294
  "update=%p, user_data=%p}, args=%p)",