continue pool pruning even if a tx can't be found

This commit is contained in:
j-berman 2022-07-01 08:30:49 -07:00
parent 9750e1fa10
commit 628fdcdd49
2 changed files with 31 additions and 5 deletions

View file

@ -402,6 +402,19 @@ namespace cryptonote
m_txpool_max_weight = bytes;
}
//---------------------------------------------------------------------------------
void tx_memory_pool::reduce_txpool_weight(size_t weight)
{
if (weight > m_txpool_weight)
{
MERROR("Underflow in txpool weight");
m_txpool_weight = 0;
}
else
{
m_txpool_weight -= weight;
}
}
//---------------------------------------------------------------------------------
void tx_memory_pool::prune(size_t bytes)
{
CRITICAL_REGION_LOCAL(m_transactions_lock);
@ -423,8 +436,14 @@ namespace cryptonote
txpool_tx_meta_t meta;
if (!m_blockchain.get_txpool_tx_meta(txid, meta))
{
MERROR("Failed to find tx_meta in txpool");
return;
static bool warned = false;
if (!warned)
{
MERROR("Failed to find tx_meta in txpool (will only print once)");
warned = true;
}
--it;
continue;
}
// don't prune the kept_by_block ones, they're likely added because we're adding a block with those
if (meta.kept_by_block)
@ -442,7 +461,7 @@ namespace cryptonote
// remove first, in case this throws, so key images aren't removed
MINFO("Pruning tx " << txid << " from txpool: weight: " << meta.weight << ", fee/byte: " << it->first.first);
m_blockchain.remove_txpool_tx(txid);
m_txpool_weight -= meta.weight;
reduce_txpool_weight(meta.weight);
remove_transaction_keyimages(tx, txid);
MINFO("Pruned tx " << txid << " from txpool: weight: " << meta.weight << ", fee/byte: " << it->first.first);
m_txs_by_fee_and_receive_time.erase(it--);
@ -562,7 +581,7 @@ namespace cryptonote
// remove first, in case this throws, so key images aren't removed
m_blockchain.remove_txpool_tx(id);
m_txpool_weight -= tx_weight;
reduce_txpool_weight(tx_weight);
remove_transaction_keyimages(tx, id);
lock.commit();
}
@ -725,7 +744,7 @@ namespace cryptonote
{
// remove first, so we only remove key images if the tx removal succeeds
m_blockchain.remove_txpool_tx(txid);
m_txpool_weight -= entry.second;
reduce_txpool_weight(entry.second);
remove_transaction_keyimages(tx, txid);
}
}

View file

@ -406,6 +406,13 @@ namespace cryptonote
*/
void set_txpool_max_weight(size_t bytes);
/**
* @brief reduce the cumulative txpool weight by the weight provided
*
* @param weight the weight to reduce the total txpool weight by
*/
void reduce_txpool_weight(size_t weight);
#define CURRENT_MEMPOOL_ARCHIVE_VER 11
#define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER 13