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 52bdd2c2fa..e23eace2cf 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; - -namespace { -IO_SERVICE& GetIOService() { - static IO_SERVICE io; - return io; -} - +LicenseCheck::LicenseCheck() { } -// 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 866e630356..15b39cab43 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 +private: + LicenseCheck(); + +public: + static LicenseCheck & + GetInstance() { + static LicenseCheck instance; + return instance; + }; + static ServerError LegalityCheck(const std::string &license_file_path); + ServerError + StartCountingDown(const std::string &license_file_path); - // Part 2: Timing check license + ServerError + StopCountingDown(); + +private: static ServerError AlterFile(const std::string &license_file_path, const boost::system::error_code &ec, boost::asio::deadline_timer *pt); - - static ServerError - StartCountingDown(const std::string &license_file_path); - - static ServerError - StopCountingDown(); - - private: - +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 adede6eb2a..8480c2450c 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";