diff options
author | Henning Baldersheim <balder@oath.com> | 2018-04-05 14:34:14 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-04-05 14:34:14 +0200 |
commit | cefa0ed8d78a922dcb3fdec28fbf75b238932f7f (patch) | |
tree | 514d114825e1dcbdefcc21fbf3c73a9668134329 /slobrok/src | |
parent | 5a283154b497d362265ad5a9e17ed019e5dd3239 (diff) |
Only bring up the state server with vespa-slobrok app.
Diffstat (limited to 'slobrok/src')
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<SBEnv>(shim); } else { ConfigShim shim(portnum, cfgId); - mainobj.reset(new SBEnv(shim)); + shim.enableStateServer(true); + mainobj = std::make_unique<SBEnv>(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 <thread> #include <vespa/log/log.h> +#include <vespa/config/common/exceptions.h> + LOG_SETUP(".reconfigurable_stateserver"); using namespace std::chrono_literals; @@ -22,12 +24,17 @@ ReconfigurableStateServer::ReconfigurableStateServer(const config::ConfigUri & c _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _server() { - _configFetcher->subscribe<vespa::config::StateserverConfig>(configUri.getConfigId(), this); + _configFetcher->subscribe<vespa::config::StateserverConfig>(configUri.getConfigId(), this, 0); _configFetcher->start(); } ReconfigurableStateServer::~ReconfigurableStateServer() = default; +bool +ReconfigurableStateServer::isServerUp() const +{ + return static_cast<bool>(_server); +} void ReconfigurableStateServer::configure(std::unique_ptr<vespa::config::StateserverConfig> 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<vespa::config::StateserverConfig> 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<std::string> & 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<ManagedRpcServer>(myspec.c_str(), myspec.c_str(), _rpcsrvmanager); + std::unique_ptr<ReconfigurableStateServer> stateServer; + if (_configShim.enableStateServer()) { + stateServer = std::make_unique<ReconfigurableStateServer>(_configShim.configId(), _health, _metrics, _components); + } + try { _configurator->poll(); ConfigTask configTask(getScheduler(), *_configurator); |