aboutsummaryrefslogtreecommitdiffstats
path: root/configd/src/apps/sentinel/config-owner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'configd/src/apps/sentinel/config-owner.cpp')
-rw-r--r--configd/src/apps/sentinel/config-owner.cpp43
1 files changed, 22 insertions, 21 deletions
diff --git a/configd/src/apps/sentinel/config-owner.cpp b/configd/src/apps/sentinel/config-owner.cpp
index 840c5b1add1..074f7187537 100644
--- a/configd/src/apps/sentinel/config-owner.cpp
+++ b/configd/src/apps/sentinel/config-owner.cpp
@@ -10,13 +10,22 @@ LOG_SETUP(".config-owner");
namespace config::sentinel {
-ConfigOwner::ConfigOwner() : _subscriber() {}
+ConfigOwner::ConfigOwner() = default;
ConfigOwner::~ConfigOwner() = default;
void
ConfigOwner::subscribe(const std::string & configId, std::chrono::milliseconds timeout) {
_sentinelHandle = _subscriber.subscribe<SentinelConfig>(configId, timeout);
+ try {
+ _modelHandle =_modelSubscriber.subscribe<ModelConfig>("admin/model", timeout);
+ } catch (ConfigTimeoutException & ex) {
+ LOG(warning, "Timeout getting model config: %s [skipping connectivity checks]", ex.getMessage().c_str());
+ } catch (InvalidConfigException& ex) {
+ LOG(warning, "Invalid model config: %s [skipping connectivity checks]", ex.getMessage().c_str());
+ } catch (ConfigRuntimeException& ex) {
+ LOG(warning, "Runtime exception getting model config: %s [skipping connectivity checks]", ex.getMessage().c_str());
+ }
}
void
@@ -29,6 +38,7 @@ ConfigOwner::doConfigure()
const auto & app = config.application;
LOG(config, "Sentinel got %zd service elements [tenant(%s), application(%s), instance(%s)] for config generation %" PRId64,
config.service.size(), app.tenant.c_str(), app.name.c_str(), app.instance.c_str(), _currGeneration);
+ getModelConfig();
}
@@ -42,29 +52,20 @@ ConfigOwner::checkForConfigUpdate() {
return false;
}
-std::unique_ptr<ModelConfig>
-ConfigOwner::fetchModelConfig(std::chrono::milliseconds timeout)
-{
- std::unique_ptr<ModelConfig> modelConfig;
- ConfigSubscriber tempSubscriber;
- try {
- ConfigHandle<ModelConfig>::UP modelHandle =
- tempSubscriber.subscribe<ModelConfig>("admin/model", timeout);
- if (tempSubscriber.nextGenerationNow()) {
- modelConfig = modelHandle->getConfig();
+std::optional<ModelConfig>
+ConfigOwner::getModelConfig() {
+ if (_modelHandle && _modelSubscriber.nextGenerationNow()) {
+ if (auto newModel = _modelHandle->getConfig()) {
LOG(config, "Sentinel got model info [version %s] for %zd hosts [config generation %" PRId64 "]",
- modelConfig->vespaVersion.c_str(), modelConfig->hosts.size(),
- tempSubscriber.getGeneration());
+ newModel->vespaVersion.c_str(), newModel->hosts.size(), _modelSubscriber.getGeneration());
+ _modelConfig = std::move(newModel);
}
- } catch (ConfigTimeoutException & ex) {
- LOG(warning, "Timeout getting model config: %s [skipping connectivity checks]", ex.getMessage().c_str());
- } catch (InvalidConfigException& ex) {
- LOG(warning, "Invalid model config: %s [skipping connectivity checks]", ex.getMessage().c_str());
- } catch (ConfigRuntimeException& ex) {
- LOG(warning, "Runtime exception getting model config: %s [skipping connectivity checks]", ex.getMessage().c_str());
-
}
- return modelConfig;
+ if (_modelConfig) {
+ return ModelConfig(*_modelConfig);
+ } else {
+ return {};
+ }
}
}