mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 14:46:42 +00:00
core: implement more tx metrics for when transactions are dropped
This commit is contained in:
parent
5665e25f25
commit
d1ed48c0c1
1 changed files with 10 additions and 0 deletions
|
|
@ -62,11 +62,14 @@ var (
|
||||||
pendingReplaceMeter = metrics.NewMeter("txpool/pending/replace")
|
pendingReplaceMeter = metrics.NewMeter("txpool/pending/replace")
|
||||||
pendingRLMeter = metrics.NewMeter("txpool/pending/ratelimit") // Dropped due to rate limiting
|
pendingRLMeter = metrics.NewMeter("txpool/pending/ratelimit") // Dropped due to rate limiting
|
||||||
pendingNofundsMeter = metrics.NewMeter("txpool/pending/nofunds") // Dropped due to out-of-funds
|
pendingNofundsMeter = metrics.NewMeter("txpool/pending/nofunds") // Dropped due to out-of-funds
|
||||||
|
pendingTooOldMeter = metrics.NewMeter("txpool/pending/oldnonce") // Dropped due to old nonce
|
||||||
// Metrics for the queued pool
|
// Metrics for the queued pool
|
||||||
queuedDiscardMeter = metrics.NewMeter("txpool/queued/discard")
|
queuedDiscardMeter = metrics.NewMeter("txpool/queued/discard")
|
||||||
queuedReplaceMeter = metrics.NewMeter("txpool/queued/replace")
|
queuedReplaceMeter = metrics.NewMeter("txpool/queued/replace")
|
||||||
queuedRLMeter = metrics.NewMeter("txpool/queued/ratelimit") // Dropped due to rate limiting
|
queuedRLMeter = metrics.NewMeter("txpool/queued/ratelimit") // Dropped due to rate limiting
|
||||||
queuedNofundsMeter = metrics.NewMeter("txpool/queued/nofunds") // Dropped due to out-of-funds
|
queuedNofundsMeter = metrics.NewMeter("txpool/queued/nofunds") // Dropped due to out-of-funds
|
||||||
|
queuedTooOldMeter = metrics.NewMeter("txpool/queued/oldnonce") // Dropped due to old nonce
|
||||||
|
// Metrics for the queued pool
|
||||||
// General tx metrics
|
// General tx metrics
|
||||||
invalidTxMeter = metrics.NewMeter("txpool/invalid")
|
invalidTxMeter = metrics.NewMeter("txpool/invalid")
|
||||||
|
|
||||||
|
|
@ -513,6 +516,7 @@ func (pool *TxPool) promoteExecutables() {
|
||||||
glog.Infof("Removed old queued transaction: %v", tx)
|
glog.Infof("Removed old queued transaction: %v", tx)
|
||||||
}
|
}
|
||||||
delete(pool.all, tx.Hash())
|
delete(pool.all, tx.Hash())
|
||||||
|
queuedTooOldMeter.Mark(1)
|
||||||
}
|
}
|
||||||
// Drop all transactions that are too costly (low balance)
|
// Drop all transactions that are too costly (low balance)
|
||||||
drops, _ := list.Filter(state.GetBalance(addr))
|
drops, _ := list.Filter(state.GetBalance(addr))
|
||||||
|
|
@ -521,6 +525,7 @@ func (pool *TxPool) promoteExecutables() {
|
||||||
glog.Infof("Removed unpayable queued transaction: %v", tx)
|
glog.Infof("Removed unpayable queued transaction: %v", tx)
|
||||||
}
|
}
|
||||||
delete(pool.all, tx.Hash())
|
delete(pool.all, tx.Hash())
|
||||||
|
queuedNofundsMeter.Mark(1)
|
||||||
}
|
}
|
||||||
// Gather all executable transactions and promote them
|
// Gather all executable transactions and promote them
|
||||||
for _, tx := range list.Ready(pool.pendingState.GetNonce(addr)) {
|
for _, tx := range list.Ready(pool.pendingState.GetNonce(addr)) {
|
||||||
|
|
@ -535,6 +540,7 @@ func (pool *TxPool) promoteExecutables() {
|
||||||
glog.Infof("Removed cap-exceeding queued transaction: %v", tx)
|
glog.Infof("Removed cap-exceeding queued transaction: %v", tx)
|
||||||
}
|
}
|
||||||
delete(pool.all, tx.Hash())
|
delete(pool.all, tx.Hash())
|
||||||
|
queuedRLMeter.Mark(1)
|
||||||
}
|
}
|
||||||
queued += uint64(list.Len())
|
queued += uint64(list.Len())
|
||||||
|
|
||||||
|
|
@ -549,6 +555,7 @@ func (pool *TxPool) promoteExecutables() {
|
||||||
pending += uint64(list.Len())
|
pending += uint64(list.Len())
|
||||||
}
|
}
|
||||||
if pending > maxPendingTotal {
|
if pending > maxPendingTotal {
|
||||||
|
pendingBeforeCap := pending
|
||||||
// Assemble a spam order to penalize large transactors first
|
// Assemble a spam order to penalize large transactors first
|
||||||
spammers := prque.New()
|
spammers := prque.New()
|
||||||
for addr, list := range pool.pending {
|
for addr, list := range pool.pending {
|
||||||
|
|
@ -595,6 +602,7 @@ func (pool *TxPool) promoteExecutables() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pendingRLMeter.Mark(int64(pendingBeforeCap - pending))
|
||||||
}
|
}
|
||||||
// If we've queued more transactions than the hard limit, drop oldest ones
|
// If we've queued more transactions than the hard limit, drop oldest ones
|
||||||
if queued > maxQueuedInTotal {
|
if queued > maxQueuedInTotal {
|
||||||
|
|
@ -618,6 +626,7 @@ func (pool *TxPool) promoteExecutables() {
|
||||||
pool.removeTx(tx.Hash())
|
pool.removeTx(tx.Hash())
|
||||||
}
|
}
|
||||||
drop -= size
|
drop -= size
|
||||||
|
queuedRLMeter.Mark(int64(size))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// Otherwise drop only last few transactions
|
// Otherwise drop only last few transactions
|
||||||
|
|
@ -625,6 +634,7 @@ func (pool *TxPool) promoteExecutables() {
|
||||||
for i := len(txs) - 1; i >= 0 && drop > 0; i-- {
|
for i := len(txs) - 1; i >= 0 && drop > 0; i-- {
|
||||||
pool.removeTx(txs[i].Hash())
|
pool.removeTx(txs[i].Hash())
|
||||||
drop--
|
drop--
|
||||||
|
queuedRLMeter.Mark(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue