From cefa0ed8d78a922dcb3fdec28fbf75b238932f7f Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 5 Apr 2018 14:34:14 +0200 Subject: Only bring up the state server with vespa-slobrok app. --- slobrok/src/apps/slobrok/slobrok.cpp | 5 +++-- slobrok/src/vespa/slobrok/server/configshim.cpp | 6 +++++- slobrok/src/vespa/slobrok/server/configshim.h | 7 +++++-- slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.cpp | 9 ++++++++- slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.h | 1 + slobrok/src/vespa/slobrok/server/sbenv.cpp | 7 +++++-- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/slobrok/src/apps/slobrok/slobrok.cpp b/slobrok/src/apps/slobrok/slobrok.cpp index 5a1ddb918ba..e69f2df53f0 100644 --- a/slobrok/src/apps/slobrok/slobrok.cpp +++ b/slobrok/src/apps/slobrok/slobrok.cpp @@ -73,10 +73,11 @@ App::Main() if (cfgId.empty()) { LOG(debug, "no config id specified"); ConfigShim shim(portnum); - mainobj.reset(new SBEnv(shim)); + mainobj = std::make_unique(shim); } else { ConfigShim shim(portnum, cfgId); - mainobj.reset(new SBEnv(shim)); + shim.enableStateServer(true); + mainobj = std::make_unique(shim); } hook_sigterm(); res = mainobj->MainLoop(); diff --git a/slobrok/src/vespa/slobrok/server/configshim.cpp b/slobrok/src/vespa/slobrok/server/configshim.cpp index d312340aceb..15c39516ded 100644 --- a/slobrok/src/vespa/slobrok/server/configshim.cpp +++ b/slobrok/src/vespa/slobrok/server/configshim.cpp @@ -5,18 +5,22 @@ namespace slobrok { ConfigShim::ConfigShim(uint32_t port) - : _port(port), _configId(""), + : _port(port), + _enableStateServer(false), + _configId(""), _factory(config::ConfigUri::createEmpty()) {} ConfigShim::ConfigShim(uint32_t port, const std::string& cfgId) : _port(port), + _enableStateServer(false), _configId(cfgId), _factory(config::ConfigUri(_configId)) {} ConfigShim::ConfigShim(uint32_t port, const std::string& cfgId, config::IConfigContext::SP cfgCtx) : _port(port), + _enableStateServer(false), _configId(cfgId), _factory(config::ConfigUri(cfgId, cfgCtx)) {} diff --git a/slobrok/src/vespa/slobrok/server/configshim.h b/slobrok/src/vespa/slobrok/server/configshim.h index 40d44985747..750f6a4c139 100644 --- a/slobrok/src/vespa/slobrok/server/configshim.h +++ b/slobrok/src/vespa/slobrok/server/configshim.h @@ -9,8 +9,9 @@ namespace slobrok { class ConfigShim { private: - uint32_t _port; - std::string _configId; + uint32_t _port; + bool _enableStateServer; + std::string _configId; ConfiguratorFactory _factory; public: @@ -19,6 +20,8 @@ public: ConfigShim(uint32_t port, const std::string& cfgId, config::IConfigContext::SP cfgCtx); ~ConfigShim(); + ConfigShim & enableStateServer(bool v) { _enableStateServer = v; return *this; } + bool enableStateServer() const { return _enableStateServer; } uint32_t portNumber() const { return _port; } std::string configId() const { return _configId; } const char *id() const { return _configId.c_str(); } diff --git a/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.cpp b/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.cpp index 16cb23f6e05..3ae78029834 100644 --- a/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.cpp +++ b/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.cpp @@ -6,6 +6,8 @@ #include #include +#include + LOG_SETUP(".reconfigurable_stateserver"); using namespace std::chrono_literals; @@ -22,12 +24,17 @@ ReconfigurableStateServer::ReconfigurableStateServer(const config::ConfigUri & c _configFetcher(std::make_unique(configUri.getContext())), _server() { - _configFetcher->subscribe(configUri.getConfigId(), this); + _configFetcher->subscribe(configUri.getConfigId(), this, 0); _configFetcher->start(); } ReconfigurableStateServer::~ReconfigurableStateServer() = default; +bool +ReconfigurableStateServer::isServerUp() const +{ + return static_cast(_server); +} void ReconfigurableStateServer::configure(std::unique_ptr config) { diff --git a/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.h b/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.h index a8747d09bfd..92646e1972a 100644 --- a/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.h +++ b/slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.h @@ -19,6 +19,7 @@ public: vespalib::MetricsProducer & metrics, vespalib::ComponentConfigProducer & component); ~ReconfigurableStateServer(); + bool isServerUp() const; private: void configure(std::unique_ptr config) override; vespalib::HealthProducer & _health; diff --git a/slobrok/src/vespa/slobrok/server/sbenv.cpp b/slobrok/src/vespa/slobrok/server/sbenv.cpp index 849615544b0..35af0daf24a 100644 --- a/slobrok/src/vespa/slobrok/server/sbenv.cpp +++ b/slobrok/src/vespa/slobrok/server/sbenv.cpp @@ -162,8 +162,6 @@ toString(const std::vector & v) { int SBEnv::MainLoop() { - ReconfigurableStateServer stateServer(_configShim.configId(), _health, _metrics, _components); - if (! getSupervisor()->Listen(_configShim.portNumber())) { LOG(error, "unable to listen to port %d", _configShim.portNumber()); EV_STOPPING("slobrok", "could not listen"); @@ -176,6 +174,11 @@ SBEnv::MainLoop() _me = std::make_unique(myspec.c_str(), myspec.c_str(), _rpcsrvmanager); + std::unique_ptr stateServer; + if (_configShim.enableStateServer()) { + stateServer = std::make_unique(_configShim.configId(), _health, _metrics, _components); + } + try { _configurator->poll(); ConfigTask configTask(getScheduler(), *_configurator); -- cgit v1.2.3