diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-05-27 13:30:38 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-05-27 13:30:38 +0000 |
commit | 855c5b2ab689fa15ab6f8e9512d36d691ff3bfed (patch) | |
tree | 8d5d06ecf1ddd93944b47ccaddf9acbc78117779 /configd/src/apps/sentinel/config-owner.cpp | |
parent | f002266330e04b61f01ce901733ce83006319dc0 (diff) |
add class for config ownership
Diffstat (limited to 'configd/src/apps/sentinel/config-owner.cpp')
-rw-r--r-- | configd/src/apps/sentinel/config-owner.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/configd/src/apps/sentinel/config-owner.cpp b/configd/src/apps/sentinel/config-owner.cpp new file mode 100644 index 00000000000..f4ea76855f6 --- /dev/null +++ b/configd/src/apps/sentinel/config-owner.cpp @@ -0,0 +1,44 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "config-owner.h" +#include <vespa/vespalib/util/exceptions.h> +#include <string> + +#include <vespa/log/log.h> +LOG_SETUP(".config-owner"); + +namespace config::sentinel { + +ConfigOwner::ConfigOwner() : _subscriber() {} + +ConfigOwner::~ConfigOwner() = default; + +void +ConfigOwner::subscribe(const std::string & configId, std::chrono::milliseconds timeout) { + _sentinelHandle = _subscriber.subscribe<SentinelConfig>(configId, timeout); +} + +void +ConfigOwner::doConfigure() +{ + _currConfig = _sentinelHandle->getConfig(); + LOG_ASSERT(_currConfig); + _currGeneration = _subscriber.getGeneration(); + const SentinelConfig& config(*_currConfig); + const auto & app = config.application; + LOG(info, "ConfigOwner got %zd service elements [tenant(%s), application(%s), instance(%s)] for config generation %zd", + config.service.size(), app.tenant.c_str(), app.name.c_str(), app.instance.c_str(), _currGeneration); +} + + +// Return true if there was a config generation change +bool +ConfigOwner::checkForConfigUpdate() { + if (_subscriber.nextGenerationNow()) { + doConfigure(); + return true; + } + return false; +} + +} |