From bc2660f509ba384087f1b86cdffe61daace9a3df Mon Sep 17 00:00:00 2001 From: XMRig Date: Wed, 25 Apr 2018 23:17:27 +0700 Subject: [PATCH] Add support for skip invalid pools. --- src/common/config/CommonConfig.cpp | 31 +++++++++++++++++++---------- src/common/config/CommonConfig.h | 13 +++++++++--- src/common/config/ConfigLoader.cpp | 11 +++++----- src/common/config/ConfigWatcher.cpp | 2 +- src/core/Config.cpp | 8 ++++++-- src/core/Config.h | 2 +- src/interfaces/IConfig.h | 3 +-- 7 files changed, 45 insertions(+), 25 deletions(-) diff --git a/src/common/config/CommonConfig.cpp b/src/common/config/CommonConfig.cpp index 5bad4af5..5eaf68fd 100644 --- a/src/common/config/CommonConfig.cpp +++ b/src/common/config/CommonConfig.cpp @@ -55,7 +55,8 @@ xmrig::CommonConfig::CommonConfig() : m_donateLevel(kDefaultDonateLevel), m_printTime(60), m_retries(5), - m_retryPause(5) + m_retryPause(5), + m_state(NoneState) { m_pools.push_back(Pool()); @@ -71,13 +72,15 @@ xmrig::CommonConfig::~CommonConfig() } -bool xmrig::CommonConfig::adjust() +bool xmrig::CommonConfig::finalize() { - if (m_adjusted) { - return false; + if (m_state == ReadyState) { + return true; } - m_adjusted = true; + if (m_state == ErrorState) { + return false; + } if (!m_algorithm.isValid()) { m_algorithm.setAlgo(CRYPTONIGHT); @@ -85,18 +88,24 @@ bool xmrig::CommonConfig::adjust() for (Pool &pool : m_pools) { pool.adjust(m_algorithm.algo()); + + if (pool.isValid() && pool.algorithm().isValid()) { + m_activePools.push_back(std::move(pool)); + } } + m_pools.clear(); + + if (m_activePools.empty()) { + m_state = ErrorState; + return false; + } + + m_state = ReadyState; return true; } -bool xmrig::CommonConfig::isValid() const -{ - return m_pools[0].isValid() && m_algorithm.isValid(); -} - - bool xmrig::CommonConfig::parseBoolean(int key, bool enable) { switch (key) { diff --git a/src/common/config/CommonConfig.h b/src/common/config/CommonConfig.h index b04de6eb..d54afe3a 100644 --- a/src/common/config/CommonConfig.h +++ b/src/common/config/CommonConfig.h @@ -53,7 +53,7 @@ public: inline const char *apiWorkerId() const { return m_apiWorkerId.data(); } inline const char *logFile() const { return m_logFile.data(); } inline const char *userAgent() const { return m_userAgent.data(); } - inline const std::vector &pools() const { return m_pools; } + inline const std::vector &pools() const { return m_activePools; } inline int apiPort() const { return m_apiPort; } inline int donateLevel() const { return m_donateLevel; } inline int printTime() const { return m_printTime; } @@ -65,8 +65,13 @@ public: inline const char *fileName() const override { return m_fileName.data(); } protected: - bool adjust() override; - bool isValid() const override; + enum State { + NoneState, + ReadyState, + ErrorState + }; + + bool finalize() override; bool parseBoolean(int key, bool enable) override; bool parseString(int key, const char *arg) override; bool parseUint64(int key, uint64_t arg) override; @@ -86,6 +91,8 @@ protected: int m_printTime; int m_retries; int m_retryPause; + State m_state; + std::vector m_activePools; std::vector m_pools; xmrig::c_str m_apiToken; xmrig::c_str m_apiWorkerId; diff --git a/src/common/config/ConfigLoader.cpp b/src/common/config/ConfigLoader.cpp index cc92213f..919ff00c 100644 --- a/src/common/config/ConfigLoader.cpp +++ b/src/common/config/ConfigLoader.cpp @@ -108,9 +108,8 @@ bool xmrig::ConfigLoader::loadFromJSON(xmrig::IConfig *config, const rapidjson:: } config->parseJSON(doc); - config->adjust(); - return config->isValid(); + return config->finalize(); } @@ -163,11 +162,14 @@ xmrig::IConfig *xmrig::ConfigLoader::load(int argc, char **argv, IConfigCreator return nullptr; } - if (!config->isValid()) { + if (!config->finalize()) { + delete config; + + config = m_creator->create(); loadFromFile(config, Platform::defaultConfigName()); } - if (!config->isValid()) { + if (!config->finalize()) { fprintf(stderr, "No valid configuration found. Exiting.\n"); delete config; return nullptr; @@ -177,7 +179,6 @@ xmrig::IConfig *xmrig::ConfigLoader::load(int argc, char **argv, IConfigCreator m_watcher = new xmrig::ConfigWatcher(config->fileName(), creator, listener); } - config->adjust(); return config; } diff --git a/src/common/config/ConfigWatcher.cpp b/src/common/config/ConfigWatcher.cpp index a08b2be7..bde35f23 100644 --- a/src/common/config/ConfigWatcher.cpp +++ b/src/common/config/ConfigWatcher.cpp @@ -83,7 +83,7 @@ void xmrig::ConfigWatcher::reload() IConfig *config = m_creator->create(); ConfigLoader::loadFromFile(config, m_path.data()); - if (!config->isValid()) { + if (!config->finalize()) { LOG_ERR("reloading failed"); delete config; diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 329d595a..a27dc917 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -141,9 +141,13 @@ xmrig::Config *xmrig::Config::load(int argc, char **argv, IWatcherListener *list } -bool xmrig::Config::adjust() +bool xmrig::Config::finalize() { - if (!CommonConfig::adjust()) { + if (m_state != NoneState) { + return CommonConfig::finalize(); + } + + if (!CommonConfig::finalize()) { return false; } diff --git a/src/core/Config.h b/src/core/Config.h index 13320a80..0c6a2173 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -88,7 +88,7 @@ public: static Config *load(int argc, char **argv, IWatcherListener *listener); protected: - bool adjust() override; + bool finalize() override; bool parseBoolean(int key, bool enable) override; bool parseString(int key, const char *arg) override; bool parseUint64(int key, uint64_t arg) override; diff --git a/src/interfaces/IConfig.h b/src/interfaces/IConfig.h index cf4f0d23..2422b891 100644 --- a/src/interfaces/IConfig.h +++ b/src/interfaces/IConfig.h @@ -91,8 +91,7 @@ public: virtual ~IConfig() {} - virtual bool adjust() = 0; - virtual bool isValid() const = 0; + virtual bool finalize() = 0; virtual bool isWatch() const = 0; virtual bool parseBoolean(int key, bool enable) = 0; virtual bool parseString(int key, const char *arg) = 0;