From 1d79741dd5864d93bc9a6513c6f9d5bfe9b7a004 Mon Sep 17 00:00:00 2001 From: Quanjie Lin Date: Thu, 7 Feb 2019 21:35:01 -0800 Subject: [PATCH] update config provider Signed-off-by: Quanjie Lin Signed-off-by: Quanjie Lin --- source/common/config/config_provider_impl.h | 21 ++++++++++--------- .../config/config_provider_impl_test.cc | 6 +++--- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/source/common/config/config_provider_impl.h b/source/common/config/config_provider_impl.h index 884cbcaf2be3..daaf6d6def2d 100644 --- a/source/common/config/config_provider_impl.h +++ b/source/common/config/config_provider_impl.h @@ -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) @@ -222,7 +222,7 @@ class ConfigSubscriptionInstanceBase : public Init::Target, const std::string name_; std::function initialize_callback_; std::unordered_set mutable_config_providers_; - const std::string manager_identifier_; + const uint64_t manager_identifier_; ConfigProviderManagerImplBase& config_provider_manager_; TimeSource& time_source_; SystemTime last_updated_; @@ -345,8 +345,9 @@ class ConfigProviderManagerImplBase : public ConfigProviderManager, public Singl using ConfigProviderSet = std::unordered_set; using ConfigProviderMap = std::unordered_map, EnumClassHash>; + using ConfigSubscriptionMap = - std::unordered_map>; + std::unordered_map>; ConfigProviderManagerImplBase(Server::Admin& admin, const std::string& config_name); @@ -369,15 +370,15 @@ class ConfigProviderManagerImplBase : public ConfigProviderManager, public Singl * @return std::shared_ptr an existing (if a match is found) or newly allocated subscription. */ template - std::shared_ptr getSubscription( - const Protobuf::Message& config_source_proto, Init::Manager& init_manager, - const std::function& subscription_factory_fn) { + std::shared_ptr + getSubscription(const Protobuf::Message& config_source_proto, Init::Manager& init_manager, + const std::function& subscription_factory_fn) { static_assert(std::is_base_of::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()) { @@ -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); } diff --git a/test/common/config/config_provider_impl_test.cc b/test/common/config/config_provider_impl_test.cc index 1f355769cda5..1d94dbf4b239 100644 --- a/test/common/config/config_provider_impl_test.cc +++ b/test/common/config/config_provider_impl_test.cc @@ -42,7 +42,7 @@ class DummyConfigSubscription : public ConfigSubscriptionInstanceBase, Envoy::Config::SubscriptionCallbacks { public: - DummyConfigSubscription(const std::string& manager_identifier, + DummyConfigSubscription(const uint64_t manager_identifier, Server::Configuration::FactoryContext& factory_context, DummyConfigProviderManager& config_provider_manager); @@ -162,7 +162,7 @@ class DummyConfigProviderManager : public ConfigProviderManagerImplBase { const std::string&) override { DummyConfigSubscriptionSharedPtr subscription = getSubscription( 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( @@ -199,7 +199,7 @@ StaticDummyConfigProvider::StaticDummyConfigProvider( config_(std::make_shared(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(),