Skip to content

Commit

Permalink
Track shares that failed to be added
Browse files Browse the repository at this point in the history
  • Loading branch information
SChernykh committed Jan 7, 2023
1 parent b346b93 commit ccc5117
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 17 deletions.
19 changes: 14 additions & 5 deletions src/block_template.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1115,7 +1115,7 @@ std::vector<uint8_t> BlockTemplate::get_block_template_blob(uint32_t template_id
return m_blockTemplateBlob;
}

void BlockTemplate::submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce)
bool BlockTemplate::submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce)
{
WriteLock lock(m_lock);

Expand Down Expand Up @@ -1154,17 +1154,26 @@ void BlockTemplate::submit_sidechain_block(uint32_t template_id, uint32_t nonce,
m_poolBlockTemplate->m_verified = true;
if (!m_sidechain->block_seen(*m_poolBlockTemplate)) {
m_poolBlockTemplate->m_wantBroadcast = true;
m_sidechain->add_block(*m_poolBlockTemplate);
const bool result = m_sidechain->add_block(*m_poolBlockTemplate);
if (!result) {
LOGWARN(3, "failed to submit a share: add_block failed for template id " << template_id);
}
return result;
}
return;

const PoolBlock* b = m_poolBlockTemplate;
LOGWARN(3, "failed to submit a share: template id " << template_id << ", block " << b->m_sidechainId << ", nonce = " << b->m_nonce << ", extra_nonce = " << b->m_extraNonce << " was already added before");
return false;
}

BlockTemplate* old = m_oldTemplates[template_id % array_size(&BlockTemplate::m_oldTemplates)];

if (old && (template_id == old->m_templateId)) {
old->submit_sidechain_block(template_id, nonce, extra_nonce);
return;
return old->submit_sidechain_block(template_id, nonce, extra_nonce);
}

LOGWARN(3, "failed to submit a share: template id " << template_id << " is too old/out of range, current template id is " << m_templateId);
return false;
}

} // namespace p2pool
2 changes: 1 addition & 1 deletion src/block_template.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class BlockTemplate
FORCEINLINE uint64_t height() const { return m_height; }
FORCEINLINE difficulty_type difficulty() const { return m_difficulty; }

void submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce);
bool submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce);

FORCEINLINE const std::vector<MinerShare>& shares() const { return m_shares; }
FORCEINLINE const PoolBlock* pool_block_template() const { return m_poolBlockTemplate; }
Expand Down
4 changes: 2 additions & 2 deletions src/p2pool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -619,10 +619,10 @@ void p2pool::submit_block() const
});
}

void p2pool::submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce)
bool p2pool::submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce)
{
LOGINFO(3, "submit_sidechain_block: template id = " << template_id << ", nonce = " << nonce << ", extra_nonce = " << extra_nonce);
m_blockTemplate->submit_sidechain_block(template_id, nonce, extra_nonce);
return m_blockTemplate->submit_sidechain_block(template_id, nonce, extra_nonce);
}

void p2pool::update_block_template_async(bool is_alternative_block)
Expand Down
2 changes: 1 addition & 1 deletion src/p2pool.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class p2pool : public MinerCallbackHandler, public nocopy_nomove

void submit_block_async(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce);
void submit_block_async(std::vector<uint8_t>&& blob);
void submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce);
bool submit_sidechain_block(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce);

void update_block_template_async(bool is_alternative_block = false);
void update_block_template();
Expand Down
6 changes: 4 additions & 2 deletions src/side_chain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,7 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
return true;
}

void SideChain::add_block(const PoolBlock& block)
bool SideChain::add_block(const PoolBlock& block)
{
LOGINFO(3, "add_block: height = " << block.m_sidechainHeight <<
", id = " << block.m_sidechainId <<
Expand Down Expand Up @@ -620,7 +620,7 @@ void SideChain::add_block(const PoolBlock& block)
);

delete new_block;
return;
return false;
}

m_blocksByHeight[new_block->m_sidechainHeight].push_back(new_block);
Expand All @@ -643,6 +643,8 @@ void SideChain::add_block(const PoolBlock& block)
else {
verify_loop(new_block);
}

return true;
}

PoolBlock* SideChain::find_block(const hash& id) const
Expand Down
2 changes: 1 addition & 1 deletion src/side_chain.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class SideChain : public nocopy_nomove
bool block_seen(const PoolBlock& block);
void unsee_block(const PoolBlock& block);
bool add_external_block(PoolBlock& block, std::vector<hash>& missing_blocks);
void add_block(const PoolBlock& block);
bool add_block(const PoolBlock& block);
void get_missing_blocks(std::vector<hash>& missing_blocks) const;

PoolBlock* find_block(const hash& id) const;
Expand Down
28 changes: 23 additions & 5 deletions src/stratum_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ StratumServer::StratumServer(p2pool* pool)
, m_hashrateDataTail_24h(0)
, m_cumulativeFoundSharesDiff(0.0)
, m_totalFoundShares(0)
, m_totalFailedShares(0)
, m_apiLastUpdateTime(0)
{
// Diffuse the initial state in case it has low quality
Expand Down Expand Up @@ -526,6 +527,7 @@ void StratumServer::reset_share_counters()
m_cumulativeHashesAtLastShare = 0;
m_cumulativeFoundSharesDiff = 0.0;
m_totalFoundShares = 0;
m_totalFailedShares = 0;
}

void StratumServer::print_stratum_status() const
Expand All @@ -535,7 +537,7 @@ void StratumServer::print_stratum_status() const

uint64_t hashes_since_last_share;
double average_effort;
int shares_found;
uint32_t shares_found, shares_failed;

{
ReadLock lock(m_hashrateDataLock);
Expand Down Expand Up @@ -565,18 +567,25 @@ void StratumServer::print_stratum_status() const
}

shares_found = m_totalFoundShares;
shares_failed = m_totalFailedShares;
}

const uint64_t hashrate_15m = (dt_15m > 0) ? (hashes_15m / dt_15m) : 0;
const uint64_t hashrate_1h = (dt_1h > 0) ? (hashes_1h / dt_1h ) : 0;
const uint64_t hashrate_24h = (dt_24h > 0) ? (hashes_24h / dt_24h) : 0;

char shares_failed_buf[64] = {};
log::Stream s(shares_failed_buf);
if (shares_failed) {
s << log::Yellow() << "\nShares failed = " << shares_failed << log::NoColor();
}

LOGINFO(0, "status" <<
"\nHashrate (15m est) = " << log::Hashrate(hashrate_15m) <<
"\nHashrate (1h est) = " << log::Hashrate(hashrate_1h) <<
"\nHashrate (24h est) = " << log::Hashrate(hashrate_24h) <<
"\nTotal hashes = " << total_hashes <<
"\nShares found = " << shares_found <<
"\nShares found = " << shares_found << shares_failed_buf <<
"\nAverage effort = " << average_effort << '%' <<
"\nCurrent effort = " << static_cast<double>(hashes_since_last_share) * 100.0 / m_pool->side_chain().difficulty().to_double() << '%' <<
"\nConnections = " << m_numConnections.load() << " (" << m_numIncomingConnections.load() << " incoming)"
Expand Down Expand Up @@ -882,7 +891,14 @@ void StratumServer::on_share_found(uv_work_t* req)
++server->m_totalFoundShares;
}

pool->submit_sidechain_block(share->m_templateId, share->m_nonce, share->m_extraNonce);
if (!pool->submit_sidechain_block(share->m_templateId, share->m_nonce, share->m_extraNonce)) {
WriteLock lock(server->m_hashrateDataLock);

if (server->m_totalFoundShares > 0) {
--server->m_totalFoundShares;
++server->m_totalFailedShares;
}
}
}

// Send the response to miner
Expand Down Expand Up @@ -1203,7 +1219,7 @@ void StratumServer::api_update_local_stats(uint64_t timestamp)

uint64_t hashes_since_last_share;
double average_effort;
int shares_found;
uint32_t shares_found, shares_failed;

{
ReadLock lock(m_hashrateDataLock);
Expand Down Expand Up @@ -1233,6 +1249,7 @@ void StratumServer::api_update_local_stats(uint64_t timestamp)
}

shares_found = m_totalFoundShares;
shares_failed = m_totalFailedShares;
}

const uint64_t hashrate_15m = (dt_15m > 0) ? (hashes_15m / dt_15m) : 0;
Expand All @@ -1245,13 +1262,14 @@ void StratumServer::api_update_local_stats(uint64_t timestamp)
int incoming_connections = m_numIncomingConnections;

m_pool->api()->set(p2pool_api::Category::LOCAL, "stats",
[hashrate_15m, hashrate_1h, hashrate_24h, total_hashes, shares_found, average_effort, current_effort, connections, incoming_connections](log::Stream& s)
[hashrate_15m, hashrate_1h, hashrate_24h, total_hashes, shares_found, shares_failed, average_effort, current_effort, connections, incoming_connections](log::Stream& s)
{
s << "{\"hashrate_15m\":" << hashrate_15m
<< ",\"hashrate_1h\":" << hashrate_1h
<< ",\"hashrate_24h\":" << hashrate_24h
<< ",\"total_hashes\":" << total_hashes
<< ",\"shares_found\":" << shares_found
<< ",\"shares_failed\":" << shares_failed
<< ",\"average_effort\":" << average_effort
<< ",\"current_effort\":" << current_effort
<< ",\"connections\":" << connections
Expand Down
1 change: 1 addition & 0 deletions src/stratum_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ class StratumServer : public TCPServer<STRATUM_BUF_SIZE, STRATUM_BUF_SIZE>

double m_cumulativeFoundSharesDiff;
uint32_t m_totalFoundShares;
uint32_t m_totalFailedShares;

uint64_t m_apiLastUpdateTime;

Expand Down

0 comments on commit ccc5117

Please sign in to comment.