From 1aad435d527018dd0ccd65c526440fec2867bae5 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sat, 3 Mar 2018 17:39:16 +0300 Subject: [PATCH] Fixed race condition at startup [#CLICKHOUSE-2] --- dbms/src/Common/Config/ConfigReloader.cpp | 8 +++++++- dbms/src/Common/Config/ConfigReloader.h | 3 +++ dbms/src/Server/Server.cpp | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dbms/src/Common/Config/ConfigReloader.cpp b/dbms/src/Common/Config/ConfigReloader.cpp index 53a5aa61cfa..54cbf507055 100644 --- a/dbms/src/Common/Config/ConfigReloader.cpp +++ b/dbms/src/Common/Config/ConfigReloader.cpp @@ -24,7 +24,11 @@ ConfigReloader::ConfigReloader( { if (!already_loaded) reloadIfNewer(/* force = */ true, /* throw_on_error = */ true, /* fallback_to_preprocessed = */ true); +} + +void ConfigReloader::start() +{ thread = std::thread(&ConfigReloader::run, this); } @@ -35,7 +39,9 @@ ConfigReloader::~ConfigReloader() { quit = true; zk_node_cache.getChangedEvent().set(); - thread.join(); + + if (thread.joinable()) + thread.join(); } catch (...) { diff --git a/dbms/src/Common/Config/ConfigReloader.h b/dbms/src/Common/Config/ConfigReloader.h index 2dcbea7a8bc..94b2d3c629c 100644 --- a/dbms/src/Common/Config/ConfigReloader.h +++ b/dbms/src/Common/Config/ConfigReloader.h @@ -39,6 +39,9 @@ public: ~ConfigReloader(); + /// Call this method to run the backround thread. + void start(); + private: void run(); diff --git a/dbms/src/Server/Server.cpp b/dbms/src/Server/Server.cpp index 44d4bb602c5..9e957dce461 100644 --- a/dbms/src/Server/Server.cpp +++ b/dbms/src/Server/Server.cpp @@ -473,6 +473,9 @@ int Server::main(const std::vector & /*args*/) for (auto & server : servers) server->start(); + main_config_reloader->start(); + users_config_reloader->start(); + { std::stringstream message; message << "Available RAM = " << formatReadableSizeWithBinarySuffix(getMemoryAmount()) << ";"