summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-04-05 14:34:14 +0200
committerHenning Baldersheim <balder@oath.com>2018-04-05 14:34:14 +0200
commitcefa0ed8d78a922dcb3fdec28fbf75b238932f7f (patch)
tree514d114825e1dcbdefcc21fbf3c73a9668134329 /slobrok
parent5a283154b497d362265ad5a9e17ed019e5dd3239 (diff)
Only bring up the state server with vespa-slobrok app.
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/apps/slobrok/slobrok.cpp5
-rw-r--r--slobrok/src/vespa/slobrok/server/configshim.cpp6
-rw-r--r--slobrok/src/vespa/slobrok/server/configshim.h7
-rw-r--r--slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.cpp9
-rw-r--r--slobrok/src/vespa/slobrok/server/reconfigurable_stateserver.h1
-rw-r--r--slobrok/src/vespa/slobrok/server/sbenv.cpp7
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);