Skip to content

Commit

Permalink
update config provider
Browse files Browse the repository at this point in the history
Signed-off-by: Quanjie Lin<quanlin@google.com>
Signed-off-by: Quanjie Lin <quanlin@google.com>
  • Loading branch information
quanjielin committed Feb 8, 2019
1 parent ed28a13 commit 1d79741
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 13 deletions.
21 changes: 11 additions & 10 deletions source/common/config/config_provider_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class ConfigSubscriptionInstanceBase : public Init::Target,
}

protected:
ConfigSubscriptionInstanceBase(const std::string& name, const std::string& manager_identifier,
ConfigSubscriptionInstanceBase(const std::string& name, const uint64_t manager_identifier,
ConfigProviderManagerImplBase& config_provider_manager,
TimeSource& time_source, const SystemTime& last_updated,
const LocalInfo::LocalInfo& local_info)
Expand All @@ -222,7 +222,7 @@ class ConfigSubscriptionInstanceBase : public Init::Target,
const std::string name_;
std::function<void()> initialize_callback_;
std::unordered_set<MutableConfigProviderImplBase*> mutable_config_providers_;
const std::string manager_identifier_;
const uint64_t manager_identifier_;
ConfigProviderManagerImplBase& config_provider_manager_;
TimeSource& time_source_;
SystemTime last_updated_;
Expand Down Expand Up @@ -345,8 +345,9 @@ class ConfigProviderManagerImplBase : public ConfigProviderManager, public Singl
using ConfigProviderSet = std::unordered_set<ConfigProvider*>;
using ConfigProviderMap = std::unordered_map<ConfigProviderInstanceType,
std::unique_ptr<ConfigProviderSet>, EnumClassHash>;

using ConfigSubscriptionMap =
std::unordered_map<std::string, std::weak_ptr<ConfigSubscriptionInstanceBase>>;
std::unordered_map<uint64_t, std::weak_ptr<ConfigSubscriptionInstanceBase>>;

ConfigProviderManagerImplBase(Server::Admin& admin, const std::string& config_name);

Expand All @@ -369,15 +370,15 @@ class ConfigProviderManagerImplBase : public ConfigProviderManager, public Singl
* @return std::shared_ptr<T> an existing (if a match is found) or newly allocated subscription.
*/
template <typename T>
std::shared_ptr<T> getSubscription(
const Protobuf::Message& config_source_proto, Init::Manager& init_manager,
const std::function<ConfigSubscriptionInstanceBaseSharedPtr(
const std::string&, ConfigProviderManagerImplBase&)>& subscription_factory_fn) {
std::shared_ptr<T>
getSubscription(const Protobuf::Message& config_source_proto, Init::Manager& init_manager,
const std::function<ConfigSubscriptionInstanceBaseSharedPtr(
const uint64_t, ConfigProviderManagerImplBase&)>& subscription_factory_fn) {
static_assert(std::is_base_of<ConfigSubscriptionInstanceBase, T>::value,
"T must be a subclass of ConfigSubscriptionInstanceBase");

ConfigSubscriptionInstanceBaseSharedPtr subscription;
const std::string manager_identifier = config_source_proto.SerializeAsString();
const uint64_t manager_identifier = MessageUtil::hash(config_source_proto);

auto it = config_subscriptions_.find(manager_identifier);
if (it == config_subscriptions_.end()) {
Expand All @@ -401,12 +402,12 @@ class ConfigProviderManagerImplBase : public ConfigProviderManager, public Singl
}

private:
void bindSubscription(const std::string& manager_identifier,
void bindSubscription(const uint64_t manager_identifier,
ConfigSubscriptionInstanceBaseSharedPtr& subscription) {
config_subscriptions_.insert({manager_identifier, subscription});
}

void unbindSubscription(const std::string& manager_identifier) {
void unbindSubscription(const uint64_t manager_identifier) {
config_subscriptions_.erase(manager_identifier);
}

Expand Down
6 changes: 3 additions & 3 deletions test/common/config/config_provider_impl_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class DummyConfigSubscription
: public ConfigSubscriptionInstanceBase,
Envoy::Config::SubscriptionCallbacks<test::common::config::DummyConfig> {
public:
DummyConfigSubscription(const std::string& manager_identifier,
DummyConfigSubscription(const uint64_t manager_identifier,
Server::Configuration::FactoryContext& factory_context,
DummyConfigProviderManager& config_provider_manager);

Expand Down Expand Up @@ -162,7 +162,7 @@ class DummyConfigProviderManager : public ConfigProviderManagerImplBase {
const std::string&) override {
DummyConfigSubscriptionSharedPtr subscription = getSubscription<DummyConfigSubscription>(
config_source_proto, factory_context.initManager(),
[&factory_context](const std::string& manager_identifier,
[&factory_context](const uint64_t manager_identifier,
ConfigProviderManagerImplBase& config_provider_manager)
-> ConfigSubscriptionInstanceBaseSharedPtr {
return std::make_shared<DummyConfigSubscription>(
Expand Down Expand Up @@ -199,7 +199,7 @@ StaticDummyConfigProvider::StaticDummyConfigProvider(
config_(std::make_shared<DummyConfig>(config_proto)), config_proto_(config_proto) {}

DummyConfigSubscription::DummyConfigSubscription(
const std::string& manager_identifier, Server::Configuration::FactoryContext& factory_context,
const uint64_t manager_identifier, Server::Configuration::FactoryContext& factory_context,
DummyConfigProviderManager& config_provider_manager)
: ConfigSubscriptionInstanceBase(
"DummyDS", manager_identifier, config_provider_manager, factory_context.timeSource(),
Expand Down

0 comments on commit 1d79741

Please sign in to comment.