async_client_manager, config_source, stats_scope, skip_cluster_check, 0 /*grpc_service_idx*/,
absl::StatusOr<Envoy::OptRef<const envoy::config::core::v3::GrpcService>> maybe_grpc_service =
if (Runtime::runtimeFeatureEnabled("envoy.restart_features.use_cached_grpc_client_for_xds")) {
absl::Status XdsManagerImpl::initialize(const envoy::config::bootstrap::v3::Bootstrap& bootstrap,
local_info_, main_thread_dispatcher_, *cm_, validation_context_.dynamicValidationVisitor(),
XdsManagerImpl::initializeAdsConnections(const envoy::config::bootstrap::v3::Bootstrap& bootstrap) {
// Iterate over the ConfigSources defined in the bootstrap and initialize each as an ADS source.
// This is the only point where distinction between delta ADS and state-of-the-world ADS is made.
JitteredExponentialBackOffStrategyPtr backoff_strategy = std::move(strategy_or_error.value());
RETURN_IF_NOT_OK(createGrpcClients(cm_->grpcAsyncClientManager(), dyn_resources.ads_config(),
RETURN_IF_NOT_OK(createGrpcClients(cm_->grpcAsyncClientManager(), dyn_resources.ads_config(),
return subscription_factory_->subscriptionFromConfigSource(*config, type_url, scope, callbacks,
return subscription_factory_->subscriptionFromConfigSource(*config, type_url, scope, callbacks,
fmt::format("No valid authority was found for the given xDS-TP resource {}.", resource_name));
XdsManagerImpl::setAdsConfigSource(const envoy::config::core::v3::ApiConfigSource& config_source) {
if ((api_config_source.api_type() != envoy::config::core::v3::ApiConfigSource::AGGREGATED_GRPC) &&
JitteredExponentialBackOffStrategyPtr backoff_strategy = std::move(strategy_or_error.value());
XdsManagerImpl::validateAdsConfig(const envoy::config::core::v3::ApiConfigSource& config_source) {
JitteredExponentialBackOffStrategyPtr backoff_strategy = std::move(strategy_or_error.value());
cm_->grpcAsyncClientManager(), ads_config, *stats_.rootScope(), /*skip_cluster_check*/ false,