Add support for skip invalid pools.

This commit is contained in:
XMRig 2018-04-25 23:17:27 +07:00
parent 230962230f
commit bc2660f509
7 changed files with 45 additions and 25 deletions

View file

@ -55,7 +55,8 @@ xmrig::CommonConfig::CommonConfig() :
m_donateLevel(kDefaultDonateLevel), m_donateLevel(kDefaultDonateLevel),
m_printTime(60), m_printTime(60),
m_retries(5), m_retries(5),
m_retryPause(5) m_retryPause(5),
m_state(NoneState)
{ {
m_pools.push_back(Pool()); m_pools.push_back(Pool());
@ -71,13 +72,15 @@ xmrig::CommonConfig::~CommonConfig()
} }
bool xmrig::CommonConfig::adjust() bool xmrig::CommonConfig::finalize()
{ {
if (m_adjusted) { if (m_state == ReadyState) {
return false; return true;
} }
m_adjusted = true; if (m_state == ErrorState) {
return false;
}
if (!m_algorithm.isValid()) { if (!m_algorithm.isValid()) {
m_algorithm.setAlgo(CRYPTONIGHT); m_algorithm.setAlgo(CRYPTONIGHT);
@ -85,18 +88,24 @@ bool xmrig::CommonConfig::adjust()
for (Pool &pool : m_pools) { for (Pool &pool : m_pools) {
pool.adjust(m_algorithm.algo()); 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; return true;
} }
bool xmrig::CommonConfig::isValid() const
{
return m_pools[0].isValid() && m_algorithm.isValid();
}
bool xmrig::CommonConfig::parseBoolean(int key, bool enable) bool xmrig::CommonConfig::parseBoolean(int key, bool enable)
{ {
switch (key) { switch (key) {

View file

@ -53,7 +53,7 @@ public:
inline const char *apiWorkerId() const { return m_apiWorkerId.data(); } inline const char *apiWorkerId() const { return m_apiWorkerId.data(); }
inline const char *logFile() const { return m_logFile.data(); } inline const char *logFile() const { return m_logFile.data(); }
inline const char *userAgent() const { return m_userAgent.data(); } inline const char *userAgent() const { return m_userAgent.data(); }
inline const std::vector<Pool> &pools() const { return m_pools; } inline const std::vector<Pool> &pools() const { return m_activePools; }
inline int apiPort() const { return m_apiPort; } inline int apiPort() const { return m_apiPort; }
inline int donateLevel() const { return m_donateLevel; } inline int donateLevel() const { return m_donateLevel; }
inline int printTime() const { return m_printTime; } inline int printTime() const { return m_printTime; }
@ -65,8 +65,13 @@ public:
inline const char *fileName() const override { return m_fileName.data(); } inline const char *fileName() const override { return m_fileName.data(); }
protected: protected:
bool adjust() override; enum State {
bool isValid() const override; NoneState,
ReadyState,
ErrorState
};
bool finalize() override;
bool parseBoolean(int key, bool enable) override; bool parseBoolean(int key, bool enable) override;
bool parseString(int key, const char *arg) override; bool parseString(int key, const char *arg) override;
bool parseUint64(int key, uint64_t arg) override; bool parseUint64(int key, uint64_t arg) override;
@ -86,6 +91,8 @@ protected:
int m_printTime; int m_printTime;
int m_retries; int m_retries;
int m_retryPause; int m_retryPause;
State m_state;
std::vector<Pool> m_activePools;
std::vector<Pool> m_pools; std::vector<Pool> m_pools;
xmrig::c_str m_apiToken; xmrig::c_str m_apiToken;
xmrig::c_str m_apiWorkerId; xmrig::c_str m_apiWorkerId;

View file

@ -108,9 +108,8 @@ bool xmrig::ConfigLoader::loadFromJSON(xmrig::IConfig *config, const rapidjson::
} }
config->parseJSON(doc); 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; return nullptr;
} }
if (!config->isValid()) { if (!config->finalize()) {
delete config;
config = m_creator->create();
loadFromFile(config, Platform::defaultConfigName()); loadFromFile(config, Platform::defaultConfigName());
} }
if (!config->isValid()) { if (!config->finalize()) {
fprintf(stderr, "No valid configuration found. Exiting.\n"); fprintf(stderr, "No valid configuration found. Exiting.\n");
delete config; delete config;
return nullptr; 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); m_watcher = new xmrig::ConfigWatcher(config->fileName(), creator, listener);
} }
config->adjust();
return config; return config;
} }

View file

@ -83,7 +83,7 @@ void xmrig::ConfigWatcher::reload()
IConfig *config = m_creator->create(); IConfig *config = m_creator->create();
ConfigLoader::loadFromFile(config, m_path.data()); ConfigLoader::loadFromFile(config, m_path.data());
if (!config->isValid()) { if (!config->finalize()) {
LOG_ERR("reloading failed"); LOG_ERR("reloading failed");
delete config; delete config;

View file

@ -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; return false;
} }

View file

@ -88,7 +88,7 @@ public:
static Config *load(int argc, char **argv, IWatcherListener *listener); static Config *load(int argc, char **argv, IWatcherListener *listener);
protected: protected:
bool adjust() override; bool finalize() override;
bool parseBoolean(int key, bool enable) override; bool parseBoolean(int key, bool enable) override;
bool parseString(int key, const char *arg) override; bool parseString(int key, const char *arg) override;
bool parseUint64(int key, uint64_t arg) override; bool parseUint64(int key, uint64_t arg) override;

View file

@ -91,8 +91,7 @@ public:
virtual ~IConfig() {} virtual ~IConfig() {}
virtual bool adjust() = 0; virtual bool finalize() = 0;
virtual bool isValid() const = 0;
virtual bool isWatch() const = 0; virtual bool isWatch() const = 0;
virtual bool parseBoolean(int key, bool enable) = 0; virtual bool parseBoolean(int key, bool enable) = 0;
virtual bool parseString(int key, const char *arg) = 0; virtual bool parseString(int key, const char *arg) = 0;