Line data Source code
1 : #include "source/common/rds/rds_route_config_provider_impl.h" 2 : 3 : namespace Envoy { 4 : namespace Rds { 5 : 6 : RdsRouteConfigProviderImpl::RdsRouteConfigProviderImpl( 7 : RdsRouteConfigSubscriptionSharedPtr&& subscription, 8 : Server::Configuration::ServerFactoryContext& factory_context) 9 : : subscription_(std::move(subscription)), 10 50 : config_update_info_(subscription_->routeConfigUpdate()), tls_(factory_context.threadLocal()) { 11 : 12 50 : auto initial_config = config_update_info_->parsedConfiguration(); 13 50 : ASSERT(initial_config); 14 100 : tls_.set([initial_config](Event::Dispatcher&) { 15 100 : return std::make_shared<ThreadLocalConfig>(initial_config); 16 100 : }); 17 : // It should be 1:1 mapping due to shared rds config. 18 50 : ASSERT(subscription_->routeConfigProvider() == nullptr); 19 50 : subscription_->routeConfigProvider() = this; 20 50 : } 21 : 22 50 : RdsRouteConfigProviderImpl::~RdsRouteConfigProviderImpl() { 23 50 : ASSERT(subscription_->routeConfigProvider() != nullptr); 24 50 : subscription_->routeConfigProvider() = nullptr; 25 50 : } 26 : 27 : const absl::optional<RouteConfigProvider::ConfigInfo>& 28 154 : RdsRouteConfigProviderImpl::configInfo() const { 29 154 : return config_update_info_->configInfo(); 30 154 : } 31 : 32 36 : absl::Status RdsRouteConfigProviderImpl::onConfigUpdate() { 33 36 : tls_.runOnAllThreads([new_config = config_update_info_->parsedConfiguration()]( 34 72 : OptRef<ThreadLocalConfig> tls) { tls->config_ = new_config; }); 35 36 : return absl::OkStatus(); 36 36 : } 37 : 38 : } // namespace Rds 39 : } // namespace Envoy