mirror of
https://github.com/monero-project/monero.git
synced 2024-11-17 08:17:37 +00:00
continue pool pruning even if a tx can't be found
This commit is contained in:
parent
b6a029f222
commit
fac7c43644
2 changed files with 31 additions and 5 deletions
|
@ -402,6 +402,19 @@ namespace cryptonote
|
||||||
m_txpool_max_weight = bytes;
|
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)
|
void tx_memory_pool::prune(size_t bytes)
|
||||||
{
|
{
|
||||||
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
CRITICAL_REGION_LOCAL(m_transactions_lock);
|
||||||
|
@ -423,8 +436,14 @@ namespace cryptonote
|
||||||
txpool_tx_meta_t meta;
|
txpool_tx_meta_t meta;
|
||||||
if (!m_blockchain.get_txpool_tx_meta(txid, meta))
|
if (!m_blockchain.get_txpool_tx_meta(txid, meta))
|
||||||
{
|
{
|
||||||
MERROR("Failed to find tx_meta in txpool");
|
static bool warned = false;
|
||||||
return;
|
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
|
// 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)
|
if (meta.kept_by_block)
|
||||||
|
@ -442,7 +461,7 @@ namespace cryptonote
|
||||||
// remove first, in case this throws, so key images aren't removed
|
// 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);
|
MINFO("Pruning tx " << txid << " from txpool: weight: " << meta.weight << ", fee/byte: " << it->first.first);
|
||||||
m_blockchain.remove_txpool_tx(txid);
|
m_blockchain.remove_txpool_tx(txid);
|
||||||
m_txpool_weight -= meta.weight;
|
reduce_txpool_weight(meta.weight);
|
||||||
remove_transaction_keyimages(tx, txid);
|
remove_transaction_keyimages(tx, txid);
|
||||||
MINFO("Pruned tx " << txid << " from txpool: weight: " << meta.weight << ", fee/byte: " << it->first.first);
|
MINFO("Pruned tx " << txid << " from txpool: weight: " << meta.weight << ", fee/byte: " << it->first.first);
|
||||||
m_txs_by_fee_and_receive_time.erase(it--);
|
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
|
// remove first, in case this throws, so key images aren't removed
|
||||||
m_blockchain.remove_txpool_tx(id);
|
m_blockchain.remove_txpool_tx(id);
|
||||||
m_txpool_weight -= tx_weight;
|
reduce_txpool_weight(tx_weight);
|
||||||
remove_transaction_keyimages(tx, id);
|
remove_transaction_keyimages(tx, id);
|
||||||
lock.commit();
|
lock.commit();
|
||||||
}
|
}
|
||||||
|
@ -725,7 +744,7 @@ namespace cryptonote
|
||||||
{
|
{
|
||||||
// remove first, so we only remove key images if the tx removal succeeds
|
// remove first, so we only remove key images if the tx removal succeeds
|
||||||
m_blockchain.remove_txpool_tx(txid);
|
m_blockchain.remove_txpool_tx(txid);
|
||||||
m_txpool_weight -= entry.second;
|
reduce_txpool_weight(entry.second);
|
||||||
remove_transaction_keyimages(tx, txid);
|
remove_transaction_keyimages(tx, txid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -406,6 +406,13 @@ namespace cryptonote
|
||||||
*/
|
*/
|
||||||
void set_txpool_max_weight(size_t bytes);
|
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_ARCHIVE_VER 11
|
||||||
#define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER 13
|
#define CURRENT_MEMPOOL_TX_DETAILS_ARCHIVE_VER 13
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue