diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-06-11 12:57:24 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-06-11 12:57:24 +0000 |
commit | 6f8792b0acfa3e417d124b519b6383065a6bfd7a (patch) | |
tree | 1aa4920a4dca29c97fc63dfb4cb86c1b61aed2f7 /configd/src/apps/sentinel/config-owner.cpp | |
parent | e607968dff6eee82f22f8aacc35e31d4afa2d807 (diff) |
add separate config subscriber for model
Diffstat (limited to 'configd/src/apps/sentinel/config-owner.cpp')
-rw-r--r-- | configd/src/apps/sentinel/config-owner.cpp | 43 |
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 {}; + } } } |