From 523c4115177e887e65745547a74777f09aba013a Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Tue, 18 Oct 2016 09:12:12 +0200 Subject: [PATCH] core: Add metrics collection for transaction events; replace/discard for pending and future queues, as well as invalid transactions --- core/tx_pool.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/core/tx_pool.go b/core/tx_pool.go index 2c8a5c396c..540c8514d4 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -30,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/metrics" "gopkg.in/karalabe/cookiejar.v2/collections/prque" ) @@ -55,6 +56,15 @@ var ( evictionInterval = time.Minute // Time interval to check for evictable transactions ) +var ( + // Metrics + pendingDiscardMeter = metrics.NewMeter("core/txpool/transactions/pending/discard") + pendingReplaceMeter = metrics.NewMeter("core/txpool/transactions/pending/replace") + queuedDiscardMeter = metrics.NewMeter("core/txpool/transactions/queued/discard") + queuedReplaceMeter = metrics.NewMeter("core/txpool/transactions/queued/replace") + invalidTxMeter = metrics.NewMeter("core/txpool/transactions/invalid") +) + type stateFn func() (*state.StateDB, error) // TxPool contains all currently known transactions. Transactions @@ -306,6 +316,7 @@ func (pool *TxPool) add(tx *types.Transaction) error { } // Otherwise ensure basic validation passes and queue it up if err := pool.validateTx(tx); err != nil { + invalidTxMeter.Mark(1) return err } pool.enqueueTx(hash, tx) @@ -333,11 +344,13 @@ func (pool *TxPool) enqueueTx(hash common.Hash, tx *types.Transaction) { } inserted, old := pool.queue[from].Add(tx) if !inserted { + queuedDiscardMeter.Mark(1) return // An older transaction was better, discard this } // Discard any previous transaction and mark this if old != nil { delete(pool.all, old.Hash()) + queuedReplaceMeter.Mark(1) } pool.all[hash] = tx } @@ -360,11 +373,13 @@ func (pool *TxPool) promoteTx(addr common.Address, hash common.Hash, tx *types.T if !inserted { // An older transaction was better, discard this delete(pool.all, hash) + pendingDiscardMeter.Mark(1) return } // Otherwise discard any previous transaction and mark this if old != nil { delete(pool.all, old.Hash()) + pendingReplaceMeter.Mark(1) } pool.all[hash] = tx // Failsafe to work around direct pending inserts (tests)