diff options
Diffstat (limited to 'configd')
-rw-r--r-- | configd/src/apps/sentinel/config-owner.cpp | 26 | ||||
-rw-r--r-- | configd/src/apps/sentinel/config-owner.h | 3 | ||||
-rw-r--r-- | configd/src/apps/sentinel/env.cpp | 22 |
3 files changed, 50 insertions, 1 deletions
diff --git a/configd/src/apps/sentinel/config-owner.cpp b/configd/src/apps/sentinel/config-owner.cpp index 3feec70d2e5..d5f06dff76b 100644 --- a/configd/src/apps/sentinel/config-owner.cpp +++ b/configd/src/apps/sentinel/config-owner.cpp @@ -2,6 +2,7 @@ #include "config-owner.h" #include <vespa/vespalib/util/exceptions.h> +#include <vespa/config/common/exceptions.h> #include <string> #include <vespa/log/log.h> @@ -41,4 +42,29 @@ 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(); + LOG(config, "Sentinel got model info [version %s] for %zd hosts [config generation %zd", + modelConfig->vespaVersion.c_str(), modelConfig->hosts.size(), + tempSubscriber.getGeneration()); + } + } 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; +} + } diff --git a/configd/src/apps/sentinel/config-owner.h b/configd/src/apps/sentinel/config-owner.h index 612db7fe9a1..2850e6b3904 100644 --- a/configd/src/apps/sentinel/config-owner.h +++ b/configd/src/apps/sentinel/config-owner.h @@ -3,9 +3,11 @@ #pragma once #include <vespa/config-sentinel.h> +#include <vespa/config-model.h> #include <vespa/config/config.h> using cloud::config::SentinelConfig; +using cloud::config::ModelConfig; using config::ConfigSubscriber; using config::ConfigHandle; @@ -35,6 +37,7 @@ public: bool hasConfig() const { return _currConfig.get() != nullptr; } const SentinelConfig& getConfig() const { return *_currConfig; } int64_t getGeneration() const { return _currGeneration; } + static std::unique_ptr<ModelConfig> fetchModelConfig(std::chrono::milliseconds timeout); }; } diff --git a/configd/src/apps/sentinel/env.cpp b/configd/src/apps/sentinel/env.cpp index 11ba20a18d5..c6c0b06a0ed 100644 --- a/configd/src/apps/sentinel/env.cpp +++ b/configd/src/apps/sentinel/env.cpp @@ -9,9 +9,12 @@ LOG_SETUP(".env"); +using namespace std::chrono_literals; + namespace config::sentinel { -constexpr std::chrono::milliseconds CONFIG_TIMEOUT_MS(3 * 60 * 1000); +constexpr std::chrono::milliseconds CONFIG_TIMEOUT_MS = 3min; +constexpr std::chrono::milliseconds MODEL_TIMEOUT_MS = 1500ms; Env::Env() : _cfgOwner(), @@ -38,6 +41,23 @@ void Env::boot(const std::string &configId) { configId.c_str(), cfg.port.telnet, cfg.port.rpc); rpcPort(cfg.port.rpc); statePort(cfg.port.telnet); + if (auto up = ConfigOwner::fetchModelConfig(MODEL_TIMEOUT_MS)) { + const ModelConfig &model = *up; + for (const auto & h : model.hosts) { + LOG(info, "- Model for host %s with %zd services", h.name.c_str(), h.services.size()); + for (const auto & s : h.services) { + if (s.name == "config-sentinel") { + LOG(info, " - Model for service %s type %s configid %s with %zd ports", + s.name.c_str(), s.type.c_str(), s.configid.c_str(), s.ports.size()); + for (const auto & p : s.ports) { + if (p.tags.find("rpc") != p.tags.npos) { + LOG(info, " - Model for port %d has tags %s", p.number, p.tags.c_str()); + } + } + } + } + } + } } void Env::rpcPort(int port) { |