mirror of
https://github.com/systemed/tilemaker.git
synced 2026-05-06 08:26:46 -04:00
feat: tilemaker-server graceful shutdown on signals (#801)
This commit is contained in:
@@ -407,6 +407,23 @@ namespace SimpleWeb {
|
|||||||
if(!io_service) {
|
if(!io_service) {
|
||||||
io_service = std::make_shared<io_context>();
|
io_service = std::make_shared<io_context>();
|
||||||
internal_io_service = true;
|
internal_io_service = true;
|
||||||
|
|
||||||
|
// Create signal_set responding to signals
|
||||||
|
signals = std::make_shared<boost::asio::signal_set>(*io_service, SIGINT, SIGTERM);
|
||||||
|
#ifdef SIGQUIT
|
||||||
|
signals->add(SIGQUIT);
|
||||||
|
#endif
|
||||||
|
signals->async_wait(
|
||||||
|
[ref(io_service), this](const boost::system::error_code &ec, int signal_number) {
|
||||||
|
if (!ec) {
|
||||||
|
std::cout << "Signal number " << signal_number << std::endl;
|
||||||
|
std::cout << "Gracefully stopping server"<< std::endl;
|
||||||
|
io_service->stop();
|
||||||
|
} else {
|
||||||
|
std::cout << "Error " << ec.value() << " - " << ec.message()
|
||||||
|
<< " - Signal number - " << signal_number << std::endl;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!acceptor)
|
if(!acceptor)
|
||||||
@@ -499,6 +516,7 @@ namespace SimpleWeb {
|
|||||||
std::mutex start_stop_mutex;
|
std::mutex start_stop_mutex;
|
||||||
|
|
||||||
bool internal_io_service = false;
|
bool internal_io_service = false;
|
||||||
|
std::shared_ptr<boost::asio::signal_set> signals;
|
||||||
|
|
||||||
std::unique_ptr<asio::ip::tcp::acceptor> acceptor;
|
std::unique_ptr<asio::ip::tcp::acceptor> acceptor;
|
||||||
std::vector<std::thread> threads;
|
std::vector<std::thread> threads;
|
||||||
|
|||||||
+1
-1
@@ -77,7 +77,6 @@ int main(int argc, char* argv[]) {
|
|||||||
server.config.port = port;
|
server.config.port = port;
|
||||||
sqlite::database db;
|
sqlite::database db;
|
||||||
db.init(input);
|
db.init(input);
|
||||||
cout << "Starting local server on port " << server.config.port << endl;
|
|
||||||
|
|
||||||
server.resource["^/([0-9]+)/([0-9]+)/([0-9]+).pbf$"]["GET"] = [&db](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> request) {
|
server.resource["^/([0-9]+)/([0-9]+)/([0-9]+).pbf$"]["GET"] = [&db](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> request) {
|
||||||
int32_t zoom = stoi(request->path_match[1]);
|
int32_t zoom = stoi(request->path_match[1]);
|
||||||
@@ -146,5 +145,6 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
cout << "Starting local server on port " << server.config.port << endl;
|
||||||
server.start();
|
server.start();
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user