From 51c9ffbaaf5e1bee6b3fc1f9d272fcdc636820b0 Mon Sep 17 00:00:00 2001 From: groot Date: Mon, 10 Jun 2019 19:16:44 +0800 Subject: [PATCH] fix license check bug Former-commit-id: 69114c03a3482ab0835e209b7c680d9b2a0f684c --- cpp/src/license/LicenseCheck.cpp | 47 ++++++++++++++++---------------- cpp/src/license/LicenseCheck.h | 35 ++++++++++++++---------- cpp/src/server/Server.cpp | 8 ++---- 3 files changed, 47 insertions(+), 43 deletions(-) diff --git a/cpp/src/license/LicenseCheck.cpp b/cpp/src/license/LicenseCheck.cpp index 52bdd2c2..e23eace2 100644 --- a/cpp/src/license/LicenseCheck.cpp +++ b/cpp/src/license/LicenseCheck.cpp @@ -9,25 +9,18 @@ #include #include #include +#include +#include namespace zilliz { namespace vecwise { namespace server { -using IO_SERVICE = boost::asio::io_service; +LicenseCheck::LicenseCheck() { -namespace { -IO_SERVICE& GetIOService() { - static IO_SERVICE io; - return io; } - -} - -// Part 1: Legality check - ServerError LicenseCheck::LegalityCheck(const std::string &license_file_path) { @@ -81,14 +74,16 @@ LicenseCheck::AlterFile(const std::string &license_file_path, const boost::system::error_code &ec, boost::asio::deadline_timer *pt) { - ServerError err = LegalityCheck(license_file_path); - if(err!=SERVER_SUCCESS) - { + ServerError err = LicenseCheck::LegalityCheck(license_file_path); + if(err!=SERVER_SUCCESS) { + printf("license file check error\n"); exit(1); } + printf("---runing---\n"); pt->expires_at(pt->expires_at() + boost::posix_time::hours(1)); - pt->async_wait(boost::bind(AlterFile, license_file_path, boost::asio::placeholders::error, pt)); + pt->async_wait(boost::bind(LicenseCheck::AlterFile, license_file_path, boost::asio::placeholders::error, pt)); + return SERVER_SUCCESS; } @@ -102,22 +97,26 @@ LicenseCheck::StartCountingDown(const std::string &license_file_path) { } //create a thread to run AlterFile - std::thread io_thread([&]() { - boost::asio::io_service& io = GetIOService(); - boost::asio::deadline_timer t(io, boost::posix_time::hours(1)); - t.async_wait(boost::bind(AlterFile, license_file_path, boost::asio::placeholders::error, &t)); - io.run();//this thread will block here - }); - io_thread.detach(); + if(counting_thread_ == nullptr) { + counting_thread_ = std::make_shared([&]() { + boost::asio::deadline_timer t(io_service_, boost::posix_time::hours(1)); + t.async_wait(boost::bind(LicenseCheck::AlterFile, license_file_path, boost::asio::placeholders::error, &t)); + io_service_.run();//this thread will block here + }); + } return SERVER_SUCCESS; } ServerError LicenseCheck::StopCountingDown() { - boost::asio::io_service& io = GetIOService(); - if(!io.stopped()) { - io.stop(); + if(!io_service_.stopped()) { + io_service_.stop(); + } + + if(counting_thread_ != nullptr) { + counting_thread_->join(); + counting_thread_ = nullptr; } return SERVER_SUCCESS; diff --git a/cpp/src/license/LicenseCheck.h b/cpp/src/license/LicenseCheck.h index 866e6303..15b39cab 100644 --- a/cpp/src/license/LicenseCheck.h +++ b/cpp/src/license/LicenseCheck.h @@ -4,36 +4,43 @@ #include "LicenseLibrary.h" #include -#include -#include +#include +#include namespace zilliz { namespace vecwise { namespace server { class LicenseCheck { - public: - // Part 1: Legality check - static ServerError - LegalityCheck(const std::string &license_file_path); +private: + LicenseCheck(); +public: + static LicenseCheck & + GetInstance() { + static LicenseCheck instance; + return instance; + }; - // Part 2: Timing check license static ServerError - AlterFile(const std::string &license_file_path, - const boost::system::error_code &ec, - boost::asio::deadline_timer *pt); - + LegalityCheck(const std::string &license_file_path); - static ServerError + ServerError StartCountingDown(const std::string &license_file_path); - static ServerError + ServerError StopCountingDown(); - private: +private: + static ServerError + AlterFile(const std::string &license_file_path, + const boost::system::error_code &ec, + boost::asio::deadline_timer *pt); +private: + boost::asio::io_service io_service_; + std::shared_ptr counting_thread_; }; diff --git a/cpp/src/server/Server.cpp b/cpp/src/server/Server.cpp index adede6eb..8480c245 100644 --- a/cpp/src/server/Server.cpp +++ b/cpp/src/server/Server.cpp @@ -159,15 +159,13 @@ Server::Start() { ConfigNode license_config = config.GetConfig(CONFIG_LICENSE); std::string license_file_path = license_config.GetValue(CONFIG_LICENSE_PATH); SERVER_LOG_INFO << "License path: " << license_file_path; + if(server::LicenseCheck::LegalityCheck(license_file_path) != SERVER_SUCCESS) { SERVER_LOG_ERROR << "License check failed"; exit(1); } - if(server::LicenseCheck::StartCountingDown(license_file_path) != SERVER_SUCCESS) { - SERVER_LOG_ERROR << "License counter start error"; - exit(1); - } + server::LicenseCheck::GetInstance().StartCountingDown(license_file_path); #endif // Handle Signal @@ -218,7 +216,7 @@ Server::Stop() { StopService(); #ifdef ENABLE_LICENSE - server::LicenseCheck::StopCountingDown(); + server::LicenseCheck::GetInstance().StopCountingDown(); #endif SERVER_LOG_INFO << "Vecwise server closed"; -- GitLab