aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahoo-inc.com>2017-09-06 10:49:58 +0200
committerGitHub <noreply@github.com>2017-09-06 10:49:58 +0200
commit0c8f9bdd5a8d6ce35e1a8adba174c51dc8583a92 (patch)
tree9a336fe9165478af96adcf4386a9b1702121311c
parent368d5774e2df4db2ffd821c21d46790a3c89022b (diff)
parentd223330caeb49a458748fc6dfed719bc17688809 (diff)
Merge pull request #3336 from vespa-engine/balder/request-shutdown-instead-of-quick-exit-2
Balder/request shutdown instead of quick exit 2
-rw-r--r--searchcore/src/apps/proton/proton.cpp8
-rw-r--r--storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp17
-rw-r--r--storage/src/vespa/storage/storageserver/storagenode.cpp6
-rw-r--r--storage/src/vespa/storage/storageserver/storagenode.h5
-rw-r--r--storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp8
-rw-r--r--storageframework/src/vespa/storageframework/generic/component/component.cpp8
-rw-r--r--storageframework/src/vespa/storageframework/generic/component/componentregister.h7
-rw-r--r--storageserver/src/vespa/storageserver/app/process.h1
8 files changed, 23 insertions, 37 deletions
diff --git a/searchcore/src/apps/proton/proton.cpp b/searchcore/src/apps/proton/proton.cpp
index 7515ddc4e23..5cdc8e04eb4 100644
--- a/searchcore/src/apps/proton/proton.cpp
+++ b/searchcore/src/apps/proton/proton.cpp
@@ -11,8 +11,6 @@
#include <vespa/vespalib/io/fileutil.h>
#include <vespa/config/common/exceptions.h>
#include <vespa/fastos/app.h>
-
-#include <string>
#include <iostream>
#include <vespa/log/log.h>
@@ -224,9 +222,9 @@ App::Main()
proton.getMetricManager().init(params.identity, proton.getThreadPool());
}
EV_STARTED("proton");
- while (!(SIG::INT.check() || SIG::TERM.check())) {
+ while (!(SIG::INT.check() || SIG::TERM.check() || (spiProton && spiProton->getNode().attemptedStopped()))) {
FastOS_Thread::Sleep(1000);
- if (spiProton.get() && spiProton->configUpdated()) {
+ if (spiProton && spiProton->configUpdated()) {
storage::ResumeGuard guard(spiProton->getNode().pause());
spiProton->updateConfig();
}
@@ -247,7 +245,7 @@ App::Main()
}
}
}
- if (spiProton.get()) {
+ if (spiProton) {
spiProton->getNode().requestShutdown("controlled shutdown");
spiProton->shutdown();
EV_STOPPING("servicelayer", "clean shutdown");
diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp
index bc13d8b31ab..483cffaf751 100644
--- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp
+++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp
@@ -7,7 +7,6 @@
#include <vespa/vespalib/util/host_name.h>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/component/vtag.h>
-#include <sstream>
#include <vespa/log/log.h>
LOG_SETUP(".status");
@@ -57,7 +56,7 @@ void StatusWebServer::configure(std::unique_ptr<vespa::config::content::core::St
int newPort = config->httpport;
// If server is already running, ignore config updates that doesn't
// alter port, or suggests random port.
- if (_httpServer.get() != 0) {
+ if (_httpServer) {
if (newPort == 0 || newPort == _port) return;
}
// Try to create new server before destroying old.
@@ -89,21 +88,23 @@ void StatusWebServer::configure(std::unique_ptr<vespa::config::content::core::St
if (!started) {
std::ostringstream ost;
ost << "Failed to start status HTTP server using port " << newPort << ".";
- if (_httpServer.get() != 0) {
+ if (_httpServer) {
ost << " Status server still running on port " << _port << " instead of suggested port " << newPort;
}
- LOG(fatal, "Failed to start status HTTP server using port %u. Old port was %u. Exiting.", newPort, _port);
- std::quick_exit(67);
+ LOG(fatal, "%s.", ost.str().c_str());
+ _component->requestShutdown(ost.str());
+ _httpServer.reset();
+ return;
}
// Now that we know config update went well, update internal state
_port = server->getListenPort();
LOG(config, "Status pages now available on port %u", _port);
- if (_httpServer.get() != 0) {
+ if (_httpServer) {
LOG(debug, "Shutting down old status server.");
- _httpServer.reset(0);
+ _httpServer.reset();
LOG(debug, "Done shutting down old status server.");
}
- } else if (_httpServer.get() != 0) {
+ } else if (_httpServer) {
LOG(info, "No longer running status server as negative port was given "
"in config, indicating not to run a server.");
}
diff --git a/storage/src/vespa/storage/storageserver/storagenode.cpp b/storage/src/vespa/storage/storageserver/storagenode.cpp
index 27f98b478ce..85f54431cfb 100644
--- a/storage/src/vespa/storage/storageserver/storagenode.cpp
+++ b/storage/src/vespa/storage/storageserver/storagenode.cpp
@@ -103,13 +103,13 @@ StorageNode::subscribeToConfigs()
void
StorageNode::initialize()
{
+ _context.getComponentRegister().registerShutdownListener(*this);
+
// Fetch configs needed first. These functions will just grab the config
// and store them away, while having the config lock.
subscribeToConfigs();
- _context.getMemoryManager().setMaximumMemoryUsage(
- _serverConfig->memorytouse);
- _context.getComponentRegister().registerShutdownListener(*this);
+ _context.getMemoryManager().setMaximumMemoryUsage(_serverConfig->memorytouse);
updateUpgradeFlag(*_clusterConfig);
// First update some basics that doesn't depend on anything else to be
diff --git a/storage/src/vespa/storage/storageserver/storagenode.h b/storage/src/vespa/storage/storageserver/storagenode.h
index 4c4918e6977..753f3c85330 100644
--- a/storage/src/vespa/storage/storageserver/storagenode.h
+++ b/storage/src/vespa/storage/storageserver/storagenode.h
@@ -111,7 +111,7 @@ private:
// First components that doesn't depend on others
std::unique_ptr<StatusWebServer> _statusWebServer;
- std::shared_ptr<StorageMetricSet> _metrics;
+ std::shared_ptr<StorageMetricSet> _metrics;
std::unique_ptr<metrics::MetricManager> _metricManager;
// Depends on bucket databases and stop() functionality
@@ -122,8 +122,7 @@ private:
std::unique_ptr<StatusMetricConsumer> _statusMetrics;
// Depends on metric manager
std::unique_ptr<StateReporter> _stateReporter;
-
- std::unique_ptr<StateManager> _stateManager;
+ std::unique_ptr<StateManager> _stateManager;
// The storage chain can depend on anything.
std::unique_ptr<StorageLink> _chain;
diff --git a/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp b/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp
index cda2fee4628..a03f79b008d 100644
--- a/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp
+++ b/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp
@@ -5,9 +5,7 @@
#include <vespa/metrics/metricmanager.h>
#include <vespa/vespalib/util/exceptions.h>
-namespace storage {
-namespace framework {
-namespace defaultimplementation {
+namespace storage::framework::defaultimplementation {
ComponentRegisterImpl::ComponentRegisterImpl()
: _componentLock(),
@@ -184,6 +182,4 @@ ComponentRegisterImpl::registerShutdownListener(ShutdownListener& listener)
_shutdownListener = &listener;
}
-} // defaultimplementation
-} // framework
-} // storage
+}
diff --git a/storageframework/src/vespa/storageframework/generic/component/component.cpp b/storageframework/src/vespa/storageframework/generic/component/component.cpp
index 6457ed73795..a35cad68b00 100644
--- a/storageframework/src/vespa/storageframework/generic/component/component.cpp
+++ b/storageframework/src/vespa/storageframework/generic/component/component.cpp
@@ -4,10 +4,8 @@
#include "componentregister.h"
#include <vespa/storageframework/generic/metric/metricregistrator.h>
#include <vespa/storageframework/generic/thread/threadpool.h>
-#include <vespa/vespalib/util/sync.h>
-namespace storage {
-namespace framework {
+namespace storage::framework {
void
Component::open()
@@ -137,6 +135,4 @@ Component::requestShutdown(vespalib::stringref reason)
_componentRegister->requestShutdown(reason);
}
-} // framework
-} // storage
-
+}
diff --git a/storageframework/src/vespa/storageframework/generic/component/componentregister.h b/storageframework/src/vespa/storageframework/generic/component/componentregister.h
index 521e23ba1aa..3babd8b29bc 100644
--- a/storageframework/src/vespa/storageframework/generic/component/componentregister.h
+++ b/storageframework/src/vespa/storageframework/generic/component/componentregister.h
@@ -13,8 +13,7 @@
#include <vespa/vespalib/stllike/string.h>
-namespace storage {
-namespace framework {
+namespace storage::framework {
class ManagedComponent;
@@ -25,6 +24,4 @@ struct ComponentRegister {
virtual void requestShutdown(vespalib::stringref reason) = 0;
};
-} // framework
-} // storage
-
+}
diff --git a/storageserver/src/vespa/storageserver/app/process.h b/storageserver/src/vespa/storageserver/app/process.h
index 030b51f929e..bbffca30593 100644
--- a/storageserver/src/vespa/storageserver/app/process.h
+++ b/storageserver/src/vespa/storageserver/app/process.h
@@ -19,7 +19,6 @@
#include <vespa/config/subscription/configuri.h>
#include <vespa/config/subscription/configsubscriber.h>
-
namespace document { class DocumentTypeRepo; }
namespace storage {