From 0e98165aa2f26cd8b7872c6565bc69611ede48ed Mon Sep 17 00:00:00 2001 From: Quentin Mc Gaw Date: Fri, 28 Feb 2025 17:23:29 +0100 Subject: [PATCH 1/3] fix(metrics): coreth uses its own registry - Define global `Registry` in metrics/ - All metrics in coreth uses this registry to avoid potential conflicts - plugin/evm initializeMetrics uses this registry --- core/blockchain.go | 73 ++++++++++++------------ core/state/snapshot/snapshot.go | 85 ++++++++++++++-------------- core/txpool/blobpool/metrics.go | 73 ++++++++++++------------ core/txpool/legacypool/legacypool.go | 43 +++++++------- metrics/registry.go | 10 ++++ peer/peer_tracker.go | 7 ++- peer/stats/stats.go | 5 +- plugin/evm/atomic/mempool.go | 11 ++-- plugin/evm/vm.go | 11 +++- rpc/metrics.go | 11 ++-- sync/client/stats/stats.go | 13 +++-- sync/handlers/stats/stats.go | 53 ++++++++--------- sync/statesync/trie_sync_stats.go | 7 ++- triedb/hashdb/database.go | 59 +++++++++---------- triedb/pathdb/metrics.go | 61 ++++++++++---------- utils/metered_cache.go | 15 ++--- warp/handlers/stats.go | 17 +++--- warp/verifier_stats.go | 5 +- 18 files changed, 297 insertions(+), 262 deletions(-) create mode 100644 metrics/registry.go diff --git a/core/blockchain.go b/core/blockchain.go index 81806728a5..8ac81bae3d 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -46,6 +46,7 @@ import ( "github.com/ava-labs/coreth/core/state/snapshot" "github.com/ava-labs/coreth/core/types" "github.com/ava-labs/coreth/internal/version" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/params" "github.com/ava-labs/coreth/triedb/hashdb" "github.com/ava-labs/coreth/triedb/pathdb" @@ -61,42 +62,42 @@ import ( ) var ( - accountReadTimer = metrics.NewRegisteredCounter("chain/account/reads", nil) - accountHashTimer = metrics.NewRegisteredCounter("chain/account/hashes", nil) - accountUpdateTimer = metrics.NewRegisteredCounter("chain/account/updates", nil) - accountCommitTimer = metrics.NewRegisteredCounter("chain/account/commits", nil) - storageReadTimer = metrics.NewRegisteredCounter("chain/storage/reads", nil) - storageHashTimer = metrics.NewRegisteredCounter("chain/storage/hashes", nil) - storageUpdateTimer = metrics.NewRegisteredCounter("chain/storage/updates", nil) - storageCommitTimer = metrics.NewRegisteredCounter("chain/storage/commits", nil) - snapshotAccountReadTimer = metrics.NewRegisteredCounter("chain/snapshot/account/reads", nil) - snapshotStorageReadTimer = metrics.NewRegisteredCounter("chain/snapshot/storage/reads", nil) - snapshotCommitTimer = metrics.NewRegisteredCounter("chain/snapshot/commits", nil) - - triedbCommitTimer = metrics.NewRegisteredCounter("chain/triedb/commits", nil) - - blockInsertTimer = metrics.NewRegisteredCounter("chain/block/inserts", nil) - blockInsertCount = metrics.NewRegisteredCounter("chain/block/inserts/count", nil) - blockContentValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/content", nil) - blockStateInitTimer = metrics.NewRegisteredCounter("chain/block/inits/state", nil) - blockExecutionTimer = metrics.NewRegisteredCounter("chain/block/executions", nil) - blockTrieOpsTimer = metrics.NewRegisteredCounter("chain/block/trie", nil) - blockValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/state", nil) - blockWriteTimer = metrics.NewRegisteredCounter("chain/block/writes", nil) - - acceptorQueueGauge = metrics.NewRegisteredGauge("chain/acceptor/queue/size", nil) - acceptorWorkTimer = metrics.NewRegisteredCounter("chain/acceptor/work", nil) - acceptorWorkCount = metrics.NewRegisteredCounter("chain/acceptor/work/count", nil) - processedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/processed", nil) - acceptedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/accepted", nil) - badBlockCounter = metrics.NewRegisteredCounter("chain/block/bad/count", nil) - - txUnindexTimer = metrics.NewRegisteredCounter("chain/txs/unindex", nil) - acceptedTxsCounter = metrics.NewRegisteredCounter("chain/txs/accepted", nil) - processedTxsCounter = metrics.NewRegisteredCounter("chain/txs/processed", nil) - - acceptedLogsCounter = metrics.NewRegisteredCounter("chain/logs/accepted", nil) - processedLogsCounter = metrics.NewRegisteredCounter("chain/logs/processed", nil) + accountReadTimer = metrics.NewRegisteredCounter("chain/account/reads", cmetrics.Registry) + accountHashTimer = metrics.NewRegisteredCounter("chain/account/hashes", cmetrics.Registry) + accountUpdateTimer = metrics.NewRegisteredCounter("chain/account/updates", cmetrics.Registry) + accountCommitTimer = metrics.NewRegisteredCounter("chain/account/commits", cmetrics.Registry) + storageReadTimer = metrics.NewRegisteredCounter("chain/storage/reads", cmetrics.Registry) + storageHashTimer = metrics.NewRegisteredCounter("chain/storage/hashes", cmetrics.Registry) + storageUpdateTimer = metrics.NewRegisteredCounter("chain/storage/updates", cmetrics.Registry) + storageCommitTimer = metrics.NewRegisteredCounter("chain/storage/commits", cmetrics.Registry) + snapshotAccountReadTimer = metrics.NewRegisteredCounter("chain/snapshot/account/reads", cmetrics.Registry) + snapshotStorageReadTimer = metrics.NewRegisteredCounter("chain/snapshot/storage/reads", cmetrics.Registry) + snapshotCommitTimer = metrics.NewRegisteredCounter("chain/snapshot/commits", cmetrics.Registry) + + triedbCommitTimer = metrics.NewRegisteredCounter("chain/triedb/commits", cmetrics.Registry) + + blockInsertTimer = metrics.NewRegisteredCounter("chain/block/inserts", cmetrics.Registry) + blockInsertCount = metrics.NewRegisteredCounter("chain/block/inserts/count", cmetrics.Registry) + blockContentValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/content", cmetrics.Registry) + blockStateInitTimer = metrics.NewRegisteredCounter("chain/block/inits/state", cmetrics.Registry) + blockExecutionTimer = metrics.NewRegisteredCounter("chain/block/executions", cmetrics.Registry) + blockTrieOpsTimer = metrics.NewRegisteredCounter("chain/block/trie", cmetrics.Registry) + blockValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/state", cmetrics.Registry) + blockWriteTimer = metrics.NewRegisteredCounter("chain/block/writes", cmetrics.Registry) + + acceptorQueueGauge = metrics.NewRegisteredGauge("chain/acceptor/queue/size", cmetrics.Registry) + acceptorWorkTimer = metrics.NewRegisteredCounter("chain/acceptor/work", cmetrics.Registry) + acceptorWorkCount = metrics.NewRegisteredCounter("chain/acceptor/work/count", cmetrics.Registry) + processedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/processed", cmetrics.Registry) + acceptedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/accepted", cmetrics.Registry) + badBlockCounter = metrics.NewRegisteredCounter("chain/block/bad/count", cmetrics.Registry) + + txUnindexTimer = metrics.NewRegisteredCounter("chain/txs/unindex", cmetrics.Registry) + acceptedTxsCounter = metrics.NewRegisteredCounter("chain/txs/accepted", cmetrics.Registry) + processedTxsCounter = metrics.NewRegisteredCounter("chain/txs/processed", cmetrics.Registry) + + acceptedLogsCounter = metrics.NewRegisteredCounter("chain/logs/accepted", cmetrics.Registry) + processedLogsCounter = metrics.NewRegisteredCounter("chain/logs/processed", cmetrics.Registry) ErrRefuseToCorruptArchiver = errors.New("node has operated with pruning disabled, shutting down to prevent missing tries") diff --git a/core/state/snapshot/snapshot.go b/core/state/snapshot/snapshot.go index 917bbf368c..55d7e0612a 100644 --- a/core/state/snapshot/snapshot.go +++ b/core/state/snapshot/snapshot.go @@ -35,6 +35,7 @@ import ( "time" "github.com/ava-labs/coreth/core/rawdb" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/common" ethsnapshot "github.com/ava-labs/libevm/core/state/snapshot" "github.com/ava-labs/libevm/ethdb" @@ -56,48 +57,48 @@ const ( ) var ( - snapshotCleanAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/hit", nil) - snapshotCleanAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/miss", nil) - snapshotCleanAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/inex", nil) - snapshotCleanAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/read", nil) - snapshotCleanAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/write", nil) - - snapshotCleanStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/hit", nil) - snapshotCleanStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/miss", nil) - snapshotCleanStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/inex", nil) - snapshotCleanStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/read", nil) - snapshotCleanStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/write", nil) - - snapshotDirtyAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/hit", nil) - snapshotDirtyAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/miss", nil) - snapshotDirtyAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/inex", nil) - snapshotDirtyAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/read", nil) - snapshotDirtyAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/write", nil) - - snapshotDirtyStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/hit", nil) - snapshotDirtyStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/miss", nil) - snapshotDirtyStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/inex", nil) - snapshotDirtyStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/read", nil) - snapshotDirtyStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/write", nil) - - snapshotDirtyAccountHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/account/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) - snapshotDirtyStorageHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/storage/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) - - snapshotFlushAccountItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/item", nil) - snapshotFlushAccountSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/size", nil) - snapshotFlushStorageItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/item", nil) - snapshotFlushStorageSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/size", nil) - - snapshotBloomIndexTimer = metrics.NewRegisteredResettingTimer("state/snapshot/bloom/index", nil) - snapshotBloomErrorGauge = metrics.NewRegisteredGaugeFloat64("state/snapshot/bloom/error", nil) - - snapshotBloomAccountTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/truehit", nil) - snapshotBloomAccountFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/falsehit", nil) - snapshotBloomAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/miss", nil) - - snapshotBloomStorageTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/truehit", nil) - snapshotBloomStorageFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/falsehit", nil) - snapshotBloomStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/miss", nil) + snapshotCleanAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/hit", cmetrics.Registry) + snapshotCleanAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/miss", cmetrics.Registry) + snapshotCleanAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/inex", cmetrics.Registry) + snapshotCleanAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/read", cmetrics.Registry) + snapshotCleanAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/write", cmetrics.Registry) + + snapshotCleanStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/hit", cmetrics.Registry) + snapshotCleanStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/miss", cmetrics.Registry) + snapshotCleanStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/inex", cmetrics.Registry) + snapshotCleanStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/read", cmetrics.Registry) + snapshotCleanStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/write", cmetrics.Registry) + + snapshotDirtyAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/hit", cmetrics.Registry) + snapshotDirtyAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/miss", cmetrics.Registry) + snapshotDirtyAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/inex", cmetrics.Registry) + snapshotDirtyAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/read", cmetrics.Registry) + snapshotDirtyAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/write", cmetrics.Registry) + + snapshotDirtyStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/hit", cmetrics.Registry) + snapshotDirtyStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/miss", cmetrics.Registry) + snapshotDirtyStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/inex", cmetrics.Registry) + snapshotDirtyStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/read", cmetrics.Registry) + snapshotDirtyStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/write", cmetrics.Registry) + + snapshotDirtyAccountHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/account/hit/depth", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)) + snapshotDirtyStorageHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/storage/hit/depth", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)) + + snapshotFlushAccountItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/item", cmetrics.Registry) + snapshotFlushAccountSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/size", cmetrics.Registry) + snapshotFlushStorageItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/item", cmetrics.Registry) + snapshotFlushStorageSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/size", cmetrics.Registry) + + snapshotBloomIndexTimer = metrics.NewRegisteredResettingTimer("state/snapshot/bloom/index", cmetrics.Registry) + snapshotBloomErrorGauge = metrics.NewRegisteredGaugeFloat64("state/snapshot/bloom/error", cmetrics.Registry) + + snapshotBloomAccountTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/truehit", cmetrics.Registry) + snapshotBloomAccountFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/falsehit", cmetrics.Registry) + snapshotBloomAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/miss", cmetrics.Registry) + + snapshotBloomStorageTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/truehit", cmetrics.Registry) + snapshotBloomStorageFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/falsehit", cmetrics.Registry) + snapshotBloomStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/miss", cmetrics.Registry) // ErrSnapshotStale is returned from data accessors if the underlying snapshot // layer had been invalidated due to the chain progressing forward far enough diff --git a/core/txpool/blobpool/metrics.go b/core/txpool/blobpool/metrics.go index ccd4dbb574..d3a006e72c 100644 --- a/core/txpool/blobpool/metrics.go +++ b/core/txpool/blobpool/metrics.go @@ -26,22 +26,25 @@ package blobpool -import "github.com/ava-labs/libevm/metrics" +import ( + cmetrics "github.com/ava-labs/coreth/metrics" + "github.com/ava-labs/libevm/metrics" +) var ( // datacapGauge tracks the user's configured capacity for the blob pool. It // is mostly a way to expose/debug issues. - datacapGauge = metrics.NewRegisteredGauge("blobpool/datacap", nil) + datacapGauge = metrics.NewRegisteredGauge("blobpool/datacap", cmetrics.Registry) // The below metrics track the per-datastore metrics for the primary blob // store and the temporary limbo store. - datausedGauge = metrics.NewRegisteredGauge("blobpool/dataused", nil) - datarealGauge = metrics.NewRegisteredGauge("blobpool/datareal", nil) - slotusedGauge = metrics.NewRegisteredGauge("blobpool/slotused", nil) + datausedGauge = metrics.NewRegisteredGauge("blobpool/dataused", cmetrics.Registry) + datarealGauge = metrics.NewRegisteredGauge("blobpool/datareal", cmetrics.Registry) + slotusedGauge = metrics.NewRegisteredGauge("blobpool/slotused", cmetrics.Registry) - limboDatausedGauge = metrics.NewRegisteredGauge("blobpool/limbo/dataused", nil) - limboDatarealGauge = metrics.NewRegisteredGauge("blobpool/limbo/datareal", nil) - limboSlotusedGauge = metrics.NewRegisteredGauge("blobpool/limbo/slotused", nil) + limboDatausedGauge = metrics.NewRegisteredGauge("blobpool/limbo/dataused", cmetrics.Registry) + limboDatarealGauge = metrics.NewRegisteredGauge("blobpool/limbo/datareal", cmetrics.Registry) + limboSlotusedGauge = metrics.NewRegisteredGauge("blobpool/limbo/slotused", cmetrics.Registry) // The below metrics track the per-shelf metrics for the primary blob store // and the temporary limbo store. @@ -60,19 +63,19 @@ var ( // // There are no oversized data in the limbo, it only contains blobs and some // constant metadata. - oversizedDatausedGauge = metrics.NewRegisteredGauge("blobpool/oversized/dataused", nil) - oversizedDatagapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/datagaps", nil) - oversizedSlotusedGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotused", nil) - oversizedSlotgapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotgaps", nil) + oversizedDatausedGauge = metrics.NewRegisteredGauge("blobpool/oversized/dataused", cmetrics.Registry) + oversizedDatagapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/datagaps", cmetrics.Registry) + oversizedSlotusedGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotused", cmetrics.Registry) + oversizedSlotgapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotgaps", cmetrics.Registry) // basefeeGauge and blobfeeGauge track the current network 1559 base fee and // 4844 blob fee respectively. - basefeeGauge = metrics.NewRegisteredGauge("blobpool/basefee", nil) - blobfeeGauge = metrics.NewRegisteredGauge("blobpool/blobfee", nil) + basefeeGauge = metrics.NewRegisteredGauge("blobpool/basefee", cmetrics.Registry) + blobfeeGauge = metrics.NewRegisteredGauge("blobpool/blobfee", cmetrics.Registry) // pooltipGauge is the configurable miner tip to permit a transaction into // the pool. - pooltipGauge = metrics.NewRegisteredGauge("blobpool/pooltip", nil) + pooltipGauge = metrics.NewRegisteredGauge("blobpool/pooltip", cmetrics.Registry) // addwait/time, resetwait/time and getwait/time track the rough health of // the pool and whether it's capable of keeping up with the load from the @@ -89,27 +92,27 @@ var ( // The below metrics track various cases where transactions are dropped out // of the pool. Most are exceptional, some are chain progression and some // threshold cappings. - dropInvalidMeter = metrics.NewRegisteredMeter("blobpool/drop/invalid", nil) // Invalid transaction, consensus change or bugfix, neutral-ish - dropDanglingMeter = metrics.NewRegisteredMeter("blobpool/drop/dangling", nil) // First nonce gapped, bad - dropFilledMeter = metrics.NewRegisteredMeter("blobpool/drop/filled", nil) // State full-overlap, chain progress, ok - dropOverlappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overlapped", nil) // State partial-overlap, chain progress, ok - dropRepeatedMeter = metrics.NewRegisteredMeter("blobpool/drop/repeated", nil) // Repeated nonce, bad - dropGappedMeter = metrics.NewRegisteredMeter("blobpool/drop/gapped", nil) // Non-first nonce gapped, bad - dropOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/drop/overdrafted", nil) // Balance exceeded, bad - dropOvercappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overcapped", nil) // Per-account cap exceeded, bad - dropOverflownMeter = metrics.NewRegisteredMeter("blobpool/drop/overflown", nil) // Global disk cap exceeded, neutral-ish - dropUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/drop/underpriced", nil) // Gas tip changed, neutral - dropReplacedMeter = metrics.NewRegisteredMeter("blobpool/drop/replaced", nil) // Transaction replaced, neutral + dropInvalidMeter = metrics.NewRegisteredMeter("blobpool/drop/invalid", cmetrics.Registry) // Invalid transaction, consensus change or bugfix, neutral-ish + dropDanglingMeter = metrics.NewRegisteredMeter("blobpool/drop/dangling", cmetrics.Registry) // First nonce gapped, bad + dropFilledMeter = metrics.NewRegisteredMeter("blobpool/drop/filled", cmetrics.Registry) // State full-overlap, chain progress, ok + dropOverlappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overlapped", cmetrics.Registry) // State partial-overlap, chain progress, ok + dropRepeatedMeter = metrics.NewRegisteredMeter("blobpool/drop/repeated", cmetrics.Registry) // Repeated nonce, bad + dropGappedMeter = metrics.NewRegisteredMeter("blobpool/drop/gapped", cmetrics.Registry) // Non-first nonce gapped, bad + dropOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/drop/overdrafted", cmetrics.Registry) // Balance exceeded, bad + dropOvercappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overcapped", cmetrics.Registry) // Per-account cap exceeded, bad + dropOverflownMeter = metrics.NewRegisteredMeter("blobpool/drop/overflown", cmetrics.Registry) // Global disk cap exceeded, neutral-ish + dropUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/drop/underpriced", cmetrics.Registry) // Gas tip changed, neutral + dropReplacedMeter = metrics.NewRegisteredMeter("blobpool/drop/replaced", cmetrics.Registry) // Transaction replaced, neutral // The below metrics track various outcomes of transactions being added to // the pool. - addInvalidMeter = metrics.NewRegisteredMeter("blobpool/add/invalid", nil) // Invalid transaction, reject, neutral - addUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/add/underpriced", nil) // Gas tip too low, neutral - addStaleMeter = metrics.NewRegisteredMeter("blobpool/add/stale", nil) // Nonce already filled, reject, bad-ish - addGappedMeter = metrics.NewRegisteredMeter("blobpool/add/gapped", nil) // Nonce gapped, reject, bad-ish - addOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/add/overdrafted", nil) // Balance exceeded, reject, neutral - addOvercappedMeter = metrics.NewRegisteredMeter("blobpool/add/overcapped", nil) // Per-account cap exceeded, reject, neutral - addNoreplaceMeter = metrics.NewRegisteredMeter("blobpool/add/noreplace", nil) // Replacement fees or tips too low, neutral - addNonExclusiveMeter = metrics.NewRegisteredMeter("blobpool/add/nonexclusive", nil) // Plain transaction from same account exists, reject, neutral - addValidMeter = metrics.NewRegisteredMeter("blobpool/add/valid", nil) // Valid transaction, add, neutral + addInvalidMeter = metrics.NewRegisteredMeter("blobpool/add/invalid", cmetrics.Registry) // Invalid transaction, reject, neutral + addUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/add/underpriced", cmetrics.Registry) // Gas tip too low, neutral + addStaleMeter = metrics.NewRegisteredMeter("blobpool/add/stale", cmetrics.Registry) // Nonce already filled, reject, bad-ish + addGappedMeter = metrics.NewRegisteredMeter("blobpool/add/gapped", cmetrics.Registry) // Nonce gapped, reject, bad-ish + addOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/add/overdrafted", cmetrics.Registry) // Balance exceeded, reject, neutral + addOvercappedMeter = metrics.NewRegisteredMeter("blobpool/add/overcapped", cmetrics.Registry) // Per-account cap exceeded, reject, neutral + addNoreplaceMeter = metrics.NewRegisteredMeter("blobpool/add/noreplace", cmetrics.Registry) // Replacement fees or tips too low, neutral + addNonExclusiveMeter = metrics.NewRegisteredMeter("blobpool/add/nonexclusive", cmetrics.Registry) // Plain transaction from same account exists, reject, neutral + addValidMeter = metrics.NewRegisteredMeter("blobpool/add/valid", cmetrics.Registry) // Valid transaction, add, neutral ) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index a7d0839dc0..ec7f798704 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -40,6 +40,7 @@ import ( "github.com/ava-labs/coreth/core/state" "github.com/ava-labs/coreth/core/txpool" "github.com/ava-labs/coreth/core/types" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/params" "github.com/ava-labs/coreth/plugin/evm/header" "github.com/ava-labs/coreth/utils" @@ -81,40 +82,40 @@ var ( var ( // Metrics for the pending pool - pendingDiscardMeter = metrics.NewRegisteredMeter("txpool/pending/discard", nil) - pendingReplaceMeter = metrics.NewRegisteredMeter("txpool/pending/replace", nil) - pendingRateLimitMeter = metrics.NewRegisteredMeter("txpool/pending/ratelimit", nil) // Dropped due to rate limiting - pendingNofundsMeter = metrics.NewRegisteredMeter("txpool/pending/nofunds", nil) // Dropped due to out-of-funds + pendingDiscardMeter = metrics.NewRegisteredMeter("txpool/pending/discard", cmetrics.Registry) + pendingReplaceMeter = metrics.NewRegisteredMeter("txpool/pending/replace", cmetrics.Registry) + pendingRateLimitMeter = metrics.NewRegisteredMeter("txpool/pending/ratelimit", cmetrics.Registry) // Dropped due to rate limiting + pendingNofundsMeter = metrics.NewRegisteredMeter("txpool/pending/nofunds", cmetrics.Registry) // Dropped due to out-of-funds // Metrics for the queued pool - queuedDiscardMeter = metrics.NewRegisteredMeter("txpool/queued/discard", nil) - queuedReplaceMeter = metrics.NewRegisteredMeter("txpool/queued/replace", nil) - queuedRateLimitMeter = metrics.NewRegisteredMeter("txpool/queued/ratelimit", nil) // Dropped due to rate limiting - queuedNofundsMeter = metrics.NewRegisteredMeter("txpool/queued/nofunds", nil) // Dropped due to out-of-funds - queuedEvictionMeter = metrics.NewRegisteredMeter("txpool/queued/eviction", nil) // Dropped due to lifetime + queuedDiscardMeter = metrics.NewRegisteredMeter("txpool/queued/discard", cmetrics.Registry) + queuedReplaceMeter = metrics.NewRegisteredMeter("txpool/queued/replace", cmetrics.Registry) + queuedRateLimitMeter = metrics.NewRegisteredMeter("txpool/queued/ratelimit", cmetrics.Registry) // Dropped due to rate limiting + queuedNofundsMeter = metrics.NewRegisteredMeter("txpool/queued/nofunds", cmetrics.Registry) // Dropped due to out-of-funds + queuedEvictionMeter = metrics.NewRegisteredMeter("txpool/queued/eviction", cmetrics.Registry) // Dropped due to lifetime // General tx metrics - knownTxMeter = metrics.NewRegisteredMeter("txpool/known", nil) - validTxMeter = metrics.NewRegisteredMeter("txpool/valid", nil) - invalidTxMeter = metrics.NewRegisteredMeter("txpool/invalid", nil) - underpricedTxMeter = metrics.NewRegisteredMeter("txpool/underpriced", nil) - overflowedTxMeter = metrics.NewRegisteredMeter("txpool/overflowed", nil) + knownTxMeter = metrics.NewRegisteredMeter("txpool/known", cmetrics.Registry) + validTxMeter = metrics.NewRegisteredMeter("txpool/valid", cmetrics.Registry) + invalidTxMeter = metrics.NewRegisteredMeter("txpool/invalid", cmetrics.Registry) + underpricedTxMeter = metrics.NewRegisteredMeter("txpool/underpriced", cmetrics.Registry) + overflowedTxMeter = metrics.NewRegisteredMeter("txpool/overflowed", cmetrics.Registry) // throttleTxMeter counts how many transactions are rejected due to too-many-changes between // txpool reorgs. - throttleTxMeter = metrics.NewRegisteredMeter("txpool/throttle", nil) + throttleTxMeter = metrics.NewRegisteredMeter("txpool/throttle", cmetrics.Registry) // reorgDurationTimer measures how long time a txpool reorg takes. - reorgDurationTimer = metrics.NewRegisteredTimer("txpool/reorgtime", nil) + reorgDurationTimer = metrics.NewRegisteredTimer("txpool/reorgtime", cmetrics.Registry) // dropBetweenReorgHistogram counts how many drops we experience between two reorg runs. It is expected // that this number is pretty low, since txpool reorgs happen very frequently. dropBetweenReorgHistogram = metrics.NewRegisteredHistogram("txpool/dropbetweenreorg", nil, metrics.NewExpDecaySample(1028, 0.015)) - pendingGauge = metrics.NewRegisteredGauge("txpool/pending", nil) - queuedGauge = metrics.NewRegisteredGauge("txpool/queued", nil) - localGauge = metrics.NewRegisteredGauge("txpool/local", nil) - slotsGauge = metrics.NewRegisteredGauge("txpool/slots", nil) + pendingGauge = metrics.NewRegisteredGauge("txpool/pending", cmetrics.Registry) + queuedGauge = metrics.NewRegisteredGauge("txpool/queued", cmetrics.Registry) + localGauge = metrics.NewRegisteredGauge("txpool/local", cmetrics.Registry) + slotsGauge = metrics.NewRegisteredGauge("txpool/slots", cmetrics.Registry) - reheapTimer = metrics.NewRegisteredTimer("txpool/reheap", nil) + reheapTimer = metrics.NewRegisteredTimer("txpool/reheap", cmetrics.Registry) ) // BlockChain defines the minimal set of methods needed to back a tx pool with diff --git a/metrics/registry.go b/metrics/registry.go new file mode 100644 index 0000000000..f60aef2344 --- /dev/null +++ b/metrics/registry.go @@ -0,0 +1,10 @@ +package metrics + +import "github.com/ava-labs/libevm/metrics" + +// Registry is a metrics registry to be used by metrics in coreth. +// We use it especially to avoid conflicts with imports, direct or +// indirect, of libevm packages with global scope metrics variables +// using the default registry. Coreth should avoid using the default +// registry to avoid any conflict. +var Registry = metrics.NewRegistry() diff --git a/peer/peer_tracker.go b/peer/peer_tracker.go index c529dc1e32..6ae211f1fb 100644 --- a/peer/peer_tracker.go +++ b/peer/peer_tracker.go @@ -15,6 +15,7 @@ import ( "github.com/ava-labs/libevm/log" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -55,12 +56,12 @@ type peerTracker struct { func NewPeerTracker() *peerTracker { return &peerTracker{ peers: make(map[ids.NodeID]*peerInfo), - numTrackedPeers: metrics.GetOrRegisterGauge("net_tracked_peers", nil), + numTrackedPeers: metrics.GetOrRegisterGauge("net_tracked_peers", cmetrics.Registry), trackedPeers: make(set.Set[ids.NodeID]), - numResponsivePeers: metrics.GetOrRegisterGauge("net_responsive_peers", nil), + numResponsivePeers: metrics.GetOrRegisterGauge("net_responsive_peers", cmetrics.Registry), responsivePeers: make(set.Set[ids.NodeID]), bandwidthHeap: utils_math.NewMaxAveragerHeap(), - averageBandwidthMetric: metrics.GetOrRegisterGaugeFloat64("net_average_bandwidth", nil), + averageBandwidthMetric: metrics.GetOrRegisterGaugeFloat64("net_average_bandwidth", cmetrics.Registry), averageBandwidth: utils_math.NewAverager(0, bandwidthHalflife, time.Now()), } } diff --git a/peer/stats/stats.go b/peer/stats/stats.go index 5a3c2918f4..907c7ffc59 100644 --- a/peer/stats/stats.go +++ b/peer/stats/stats.go @@ -6,6 +6,7 @@ package stats import ( "time" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -30,7 +31,7 @@ func (h *requestHandlerStats) UpdateTimeUntilDeadline(duration time.Duration) { func NewRequestHandlerStats() RequestHandlerStats { return &requestHandlerStats{ - timeUntilDeadline: metrics.GetOrRegisterTimer("net_req_time_until_deadline", nil), - droppedRequests: metrics.GetOrRegisterCounter("net_req_deadline_dropped", nil), + timeUntilDeadline: metrics.GetOrRegisterTimer("net_req_time_until_deadline", cmetrics.Registry), + droppedRequests: metrics.GetOrRegisterCounter("net_req_deadline_dropped", cmetrics.Registry), } } diff --git a/plugin/evm/atomic/mempool.go b/plugin/evm/atomic/mempool.go index 4754b070c9..354042b881 100644 --- a/plugin/evm/atomic/mempool.go +++ b/plugin/evm/atomic/mempool.go @@ -14,6 +14,7 @@ import ( "github.com/ava-labs/avalanchego/snow" "github.com/prometheus/client_golang/prometheus" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/plugin/evm/config" "github.com/ava-labs/libevm/log" "github.com/ava-labs/libevm/metrics" @@ -46,11 +47,11 @@ type mempoolMetrics struct { // newMempoolMetrics constructs metrics for the atomic mempool func newMempoolMetrics() *mempoolMetrics { return &mempoolMetrics{ - pendingTxs: metrics.GetOrRegisterGauge("atomic_mempool_pending_txs", nil), - currentTxs: metrics.GetOrRegisterGauge("atomic_mempool_current_txs", nil), - issuedTxs: metrics.GetOrRegisterGauge("atomic_mempool_issued_txs", nil), - addedTxs: metrics.GetOrRegisterCounter("atomic_mempool_added_txs", nil), - discardedTxs: metrics.GetOrRegisterCounter("atomic_mempool_discarded_txs", nil), + pendingTxs: metrics.GetOrRegisterGauge("atomic_mempool_pending_txs", cmetrics.Registry), + currentTxs: metrics.GetOrRegisterGauge("atomic_mempool_current_txs", cmetrics.Registry), + issuedTxs: metrics.GetOrRegisterGauge("atomic_mempool_issued_txs", cmetrics.Registry), + addedTxs: metrics.GetOrRegisterCounter("atomic_mempool_added_txs", cmetrics.Registry), + discardedTxs: metrics.GetOrRegisterCounter("atomic_mempool_discarded_txs", cmetrics.Registry), } } diff --git a/plugin/evm/vm.go b/plugin/evm/vm.go index 904dc5a582..9f26d5cc7d 100644 --- a/plugin/evm/vm.go +++ b/plugin/evm/vm.go @@ -34,6 +34,7 @@ import ( "github.com/ava-labs/coreth/core/types" "github.com/ava-labs/coreth/eth" "github.com/ava-labs/coreth/eth/ethconfig" + cmetrics "github.com/ava-labs/coreth/metrics" corethprometheus "github.com/ava-labs/coreth/metrics/prometheus" "github.com/ava-labs/coreth/miner" "github.com/ava-labs/coreth/node" @@ -630,11 +631,15 @@ func (vm *VM) Initialize( func (vm *VM) initializeMetrics() error { metrics.Enabled = true - vm.sdkMetrics = prometheus.NewRegistry() - gatherer := corethprometheus.NewGatherer(metrics.DefaultRegistry) - if err := vm.ctx.Metrics.Register(ethMetricsPrefix, gatherer); err != nil { + corethGatherer := corethprometheus.NewGatherer(cmetrics.Registry) + if err := vm.ctx.Metrics.Register(ethMetricsPrefix, corethGatherer); err != nil { + return err + } + libevmGatherer := corethprometheus.NewGatherer(metrics.DefaultRegistry) + if err := vm.ctx.Metrics.Register(ethMetricsPrefix, libevmGatherer); err != nil { return err } + vm.sdkMetrics = prometheus.NewRegistry() return vm.ctx.Metrics.Register(sdkMetricsPrefix, vm.sdkMetrics) } diff --git a/rpc/metrics.go b/rpc/metrics.go index a4469545d7..d4a86b57bc 100644 --- a/rpc/metrics.go +++ b/rpc/metrics.go @@ -30,18 +30,19 @@ import ( "fmt" "time" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) var ( - rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", nil) - successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", nil) - failedRequestGauge = metrics.NewRegisteredGauge("rpc/failure", nil) + rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", cmetrics.Registry) + successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", cmetrics.Registry) + failedRequestGauge = metrics.NewRegisteredGauge("rpc/failure", cmetrics.Registry) // serveTimeHistName is the prefix of the per-request serving time histograms. serveTimeHistName = "rpc/duration" - rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil) + rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", cmetrics.Registry) ) // updateServeTimeHistogram tracks the serving time of a remote RPC call. @@ -56,5 +57,5 @@ func updateServeTimeHistogram(method string, success bool, elapsed time.Duration metrics.NewExpDecaySample(1028, 0.015), ) } - metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(elapsed.Nanoseconds()) + metrics.GetOrRegisterHistogramLazy(h, cmetrics.Registry, sampler).Update(elapsed.Nanoseconds()) } diff --git a/sync/client/stats/stats.go b/sync/client/stats/stats.go index 2be86a1d16..bef16dd207 100644 --- a/sync/client/stats/stats.go +++ b/sync/client/stats/stats.go @@ -7,6 +7,7 @@ import ( "fmt" "time" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/plugin/evm/message" "github.com/ava-labs/libevm/metrics" ) @@ -41,12 +42,12 @@ type messageMetric struct { func NewMessageMetric(name string) MessageMetric { return &messageMetric{ - requested: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_requested", name), nil), - succeeded: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_succeeded", name), nil), - failed: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_failed", name), nil), - invalidResponse: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_invalid_response", name), nil), - received: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_received", name), nil), - requestLatency: metrics.GetOrRegisterTimer(fmt.Sprintf("%s_request_latency", name), nil), + requested: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_requested", name), cmetrics.Registry), + succeeded: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_succeeded", name), cmetrics.Registry), + failed: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_failed", name), cmetrics.Registry), + invalidResponse: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_invalid_response", name), cmetrics.Registry), + received: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_received", name), cmetrics.Registry), + requestLatency: metrics.GetOrRegisterTimer(fmt.Sprintf("%s_request_latency", name), cmetrics.Registry), } } diff --git a/sync/handlers/stats/stats.go b/sync/handlers/stats/stats.go index 0d1171b82b..da483785e3 100644 --- a/sync/handlers/stats/stats.go +++ b/sync/handlers/stats/stats.go @@ -6,6 +6,7 @@ package stats import ( "time" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -172,36 +173,36 @@ func NewHandlerStats(enabled bool) HandlerStats { } return &handlerStats{ // initialize block request stats - blockRequest: metrics.GetOrRegisterCounter("block_request_count", nil), - missingBlockHash: metrics.GetOrRegisterCounter("block_request_missing_block_hash", nil), - blocksReturned: metrics.GetOrRegisterHistogram("block_request_total_blocks", nil, metrics.NewExpDecaySample(1028, 0.015)), - blockRequestProcessingTime: metrics.GetOrRegisterTimer("block_request_processing_time", nil), + blockRequest: metrics.GetOrRegisterCounter("block_request_count", cmetrics.Registry), + missingBlockHash: metrics.GetOrRegisterCounter("block_request_missing_block_hash", cmetrics.Registry), + blocksReturned: metrics.GetOrRegisterHistogram("block_request_total_blocks", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), + blockRequestProcessingTime: metrics.GetOrRegisterTimer("block_request_processing_time", cmetrics.Registry), // initialize code request stats - codeRequest: metrics.GetOrRegisterCounter("code_request_count", nil), - missingCodeHash: metrics.GetOrRegisterCounter("code_request_missing_code_hash", nil), - tooManyHashesRequested: metrics.GetOrRegisterCounter("code_request_too_many_hashes", nil), - duplicateHashesRequested: metrics.GetOrRegisterCounter("code_request_duplicate_hashes", nil), - codeReadDuration: metrics.GetOrRegisterTimer("code_request_read_time", nil), - codeBytesReturned: metrics.GetOrRegisterHistogram("code_request_bytes_returned", nil, metrics.NewExpDecaySample(1028, 0.015)), + codeRequest: metrics.GetOrRegisterCounter("code_request_count", cmetrics.Registry), + missingCodeHash: metrics.GetOrRegisterCounter("code_request_missing_code_hash", cmetrics.Registry), + tooManyHashesRequested: metrics.GetOrRegisterCounter("code_request_too_many_hashes", cmetrics.Registry), + duplicateHashesRequested: metrics.GetOrRegisterCounter("code_request_duplicate_hashes", cmetrics.Registry), + codeReadDuration: metrics.GetOrRegisterTimer("code_request_read_time", cmetrics.Registry), + codeBytesReturned: metrics.GetOrRegisterHistogram("code_request_bytes_returned", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), // initialize leafs request stats - leafsRequest: metrics.GetOrRegisterCounter("leafs_request_count", nil), - invalidLeafsRequest: metrics.GetOrRegisterCounter("leafs_request_invalid", nil), - leafsRequestProcessingTime: metrics.GetOrRegisterTimer("leafs_request_processing_time", nil), - leafsReturned: metrics.GetOrRegisterHistogram("leafs_request_total_leafs", nil, metrics.NewExpDecaySample(1028, 0.015)), - leafsReadTime: metrics.GetOrRegisterTimer("leafs_request_read_time", nil), - snapshotReadTime: metrics.GetOrRegisterTimer("leafs_request_snapshot_read_time", nil), - generateRangeProofTime: metrics.GetOrRegisterTimer("leafs_request_generate_range_proof_time", nil), - proofValsReturned: metrics.GetOrRegisterHistogram("leafs_request_proof_vals_returned", nil, metrics.NewExpDecaySample(1028, 0.015)), - missingRoot: metrics.GetOrRegisterCounter("leafs_request_missing_root", nil), - trieError: metrics.GetOrRegisterCounter("leafs_request_trie_error", nil), - proofError: metrics.GetOrRegisterCounter("leafs_request_proof_error", nil), - snapshotReadError: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_error", nil), - snapshotReadAttempt: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_attempt", nil), - snapshotReadSuccess: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_success", nil), - snapshotSegmentValid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_valid", nil), - snapshotSegmentInvalid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_invalid", nil), + leafsRequest: metrics.GetOrRegisterCounter("leafs_request_count", cmetrics.Registry), + invalidLeafsRequest: metrics.GetOrRegisterCounter("leafs_request_invalid", cmetrics.Registry), + leafsRequestProcessingTime: metrics.GetOrRegisterTimer("leafs_request_processing_time", cmetrics.Registry), + leafsReturned: metrics.GetOrRegisterHistogram("leafs_request_total_leafs", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), + leafsReadTime: metrics.GetOrRegisterTimer("leafs_request_read_time", cmetrics.Registry), + snapshotReadTime: metrics.GetOrRegisterTimer("leafs_request_snapshot_read_time", cmetrics.Registry), + generateRangeProofTime: metrics.GetOrRegisterTimer("leafs_request_generate_range_proof_time", cmetrics.Registry), + proofValsReturned: metrics.GetOrRegisterHistogram("leafs_request_proof_vals_returned", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), + missingRoot: metrics.GetOrRegisterCounter("leafs_request_missing_root", cmetrics.Registry), + trieError: metrics.GetOrRegisterCounter("leafs_request_trie_error", cmetrics.Registry), + proofError: metrics.GetOrRegisterCounter("leafs_request_proof_error", cmetrics.Registry), + snapshotReadError: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_error", cmetrics.Registry), + snapshotReadAttempt: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_attempt", cmetrics.Registry), + snapshotReadSuccess: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_success", cmetrics.Registry), + snapshotSegmentValid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_valid", cmetrics.Registry), + snapshotSegmentInvalid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_invalid", cmetrics.Registry), } } diff --git a/sync/statesync/trie_sync_stats.go b/sync/statesync/trie_sync_stats.go index b0e80041f1..3c624ca87d 100644 --- a/sync/statesync/trie_sync_stats.go +++ b/sync/statesync/trie_sync_stats.go @@ -10,6 +10,7 @@ import ( utils_math "github.com/ava-labs/avalanchego/utils/math" "github.com/ava-labs/avalanchego/utils/timer" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/common" "github.com/ava-labs/libevm/log" "github.com/ava-labs/libevm/metrics" @@ -49,9 +50,9 @@ func newTrieSyncStats() *trieSyncStats { lastUpdated: now, // metrics - totalLeafs: metrics.GetOrRegisterCounter("state_sync_total_leafs", nil), - leafsRateGauge: metrics.GetOrRegisterGauge("state_sync_leafs_per_second", nil), - triesSegmented: metrics.GetOrRegisterCounter("state_sync_tries_segmented", nil), + totalLeafs: metrics.GetOrRegisterCounter("state_sync_total_leafs", cmetrics.Registry), + leafsRateGauge: metrics.GetOrRegisterGauge("state_sync_leafs_per_second", cmetrics.Registry), + triesSegmented: metrics.GetOrRegisterCounter("state_sync_tries_segmented", cmetrics.Registry), } } diff --git a/triedb/hashdb/database.go b/triedb/hashdb/database.go index 1a2e975074..6d5e157ea3 100644 --- a/triedb/hashdb/database.go +++ b/triedb/hashdb/database.go @@ -35,6 +35,7 @@ import ( "github.com/ava-labs/coreth/core/rawdb" "github.com/ava-labs/coreth/core/types" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/utils" "github.com/ava-labs/libevm/common" "github.com/ava-labs/libevm/ethdb" @@ -53,35 +54,35 @@ const ( ) var ( - memcacheCleanHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/hit", nil) - memcacheCleanMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/miss", nil) - memcacheCleanReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/read", nil) - memcacheCleanWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/write", nil) - - memcacheDirtyHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/hit", nil) - memcacheDirtyMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/miss", nil) - memcacheDirtyReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/read", nil) - memcacheDirtyWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/write", nil) - - memcacheDirtySizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/size", nil) - memcacheDirtyChildSizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/childsize", nil) - memcacheDirtyNodesGauge = metrics.NewRegisteredGauge("hashdb/memcache/dirty/nodes", nil) - - memcacheFlushMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/count", nil) - memcacheFlushTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/time", nil) - memcacheFlushLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/locktime", nil) - memcacheFlushNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/nodes", nil) - memcacheFlushBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/bytes", nil) - - memcacheGCTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/gc/time", nil) - memcacheGCNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/nodes", nil) - memcacheGCBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/bytes", nil) - - memcacheCommitMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/count", nil) - memcacheCommitTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/time", nil) - memcacheCommitLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/locktime", nil) - memcacheCommitNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/nodes", nil) - memcacheCommitBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/bytes", nil) + memcacheCleanHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/hit", cmetrics.Registry) + memcacheCleanMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/miss", cmetrics.Registry) + memcacheCleanReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/read", cmetrics.Registry) + memcacheCleanWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/write", cmetrics.Registry) + + memcacheDirtyHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/hit", cmetrics.Registry) + memcacheDirtyMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/miss", cmetrics.Registry) + memcacheDirtyReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/read", cmetrics.Registry) + memcacheDirtyWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/write", cmetrics.Registry) + + memcacheDirtySizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/size", cmetrics.Registry) + memcacheDirtyChildSizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/childsize", cmetrics.Registry) + memcacheDirtyNodesGauge = metrics.NewRegisteredGauge("hashdb/memcache/dirty/nodes", cmetrics.Registry) + + memcacheFlushMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/count", cmetrics.Registry) + memcacheFlushTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/time", cmetrics.Registry) + memcacheFlushLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/locktime", cmetrics.Registry) + memcacheFlushNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/nodes", cmetrics.Registry) + memcacheFlushBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/bytes", cmetrics.Registry) + + memcacheGCTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/gc/time", cmetrics.Registry) + memcacheGCNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/nodes", cmetrics.Registry) + memcacheGCBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/bytes", cmetrics.Registry) + + memcacheCommitMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/count", cmetrics.Registry) + memcacheCommitTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/time", cmetrics.Registry) + memcacheCommitLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/locktime", cmetrics.Registry) + memcacheCommitNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/nodes", cmetrics.Registry) + memcacheCommitBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/bytes", cmetrics.Registry) ) // ChildResolver defines the required method to decode the provided diff --git a/triedb/pathdb/metrics.go b/triedb/pathdb/metrics.go index 21038ecfc6..9831497b70 100644 --- a/triedb/pathdb/metrics.go +++ b/triedb/pathdb/metrics.go @@ -26,36 +26,39 @@ package pathdb -import "github.com/ava-labs/libevm/metrics" +import ( + cmetrics "github.com/ava-labs/coreth/metrics" + "github.com/ava-labs/libevm/metrics" +) // nolint: unused var ( - cleanHitMeter = metrics.NewRegisteredMeter("pathdb/clean/hit", nil) - cleanMissMeter = metrics.NewRegisteredMeter("pathdb/clean/miss", nil) - cleanReadMeter = metrics.NewRegisteredMeter("pathdb/clean/read", nil) - cleanWriteMeter = metrics.NewRegisteredMeter("pathdb/clean/write", nil) - - dirtyHitMeter = metrics.NewRegisteredMeter("pathdb/dirty/hit", nil) - dirtyMissMeter = metrics.NewRegisteredMeter("pathdb/dirty/miss", nil) - dirtyReadMeter = metrics.NewRegisteredMeter("pathdb/dirty/read", nil) - dirtyWriteMeter = metrics.NewRegisteredMeter("pathdb/dirty/write", nil) - dirtyNodeHitDepthHist = metrics.NewRegisteredHistogram("pathdb/dirty/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) - - cleanFalseMeter = metrics.NewRegisteredMeter("pathdb/clean/false", nil) - dirtyFalseMeter = metrics.NewRegisteredMeter("pathdb/dirty/false", nil) - diskFalseMeter = metrics.NewRegisteredMeter("pathdb/disk/false", nil) - - commitTimeTimer = metrics.NewRegisteredTimer("pathdb/commit/time", nil) - commitNodesMeter = metrics.NewRegisteredMeter("pathdb/commit/nodes", nil) - commitBytesMeter = metrics.NewRegisteredMeter("pathdb/commit/bytes", nil) - - gcNodesMeter = metrics.NewRegisteredMeter("pathdb/gc/nodes", nil) - gcBytesMeter = metrics.NewRegisteredMeter("pathdb/gc/bytes", nil) - - diffLayerBytesMeter = metrics.NewRegisteredMeter("pathdb/diff/bytes", nil) - diffLayerNodesMeter = metrics.NewRegisteredMeter("pathdb/diff/nodes", nil) - - historyBuildTimeMeter = metrics.NewRegisteredTimer("pathdb/history/time", nil) - historyDataBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/data", nil) - historyIndexBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/index", nil) + cleanHitMeter = metrics.NewRegisteredMeter("pathdb/clean/hit", cmetrics.Registry) + cleanMissMeter = metrics.NewRegisteredMeter("pathdb/clean/miss", cmetrics.Registry) + cleanReadMeter = metrics.NewRegisteredMeter("pathdb/clean/read", cmetrics.Registry) + cleanWriteMeter = metrics.NewRegisteredMeter("pathdb/clean/write", cmetrics.Registry) + + dirtyHitMeter = metrics.NewRegisteredMeter("pathdb/dirty/hit", cmetrics.Registry) + dirtyMissMeter = metrics.NewRegisteredMeter("pathdb/dirty/miss", cmetrics.Registry) + dirtyReadMeter = metrics.NewRegisteredMeter("pathdb/dirty/read", cmetrics.Registry) + dirtyWriteMeter = metrics.NewRegisteredMeter("pathdb/dirty/write", cmetrics.Registry) + dirtyNodeHitDepthHist = metrics.NewRegisteredHistogram("pathdb/dirty/depth", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)) + + cleanFalseMeter = metrics.NewRegisteredMeter("pathdb/clean/false", cmetrics.Registry) + dirtyFalseMeter = metrics.NewRegisteredMeter("pathdb/dirty/false", cmetrics.Registry) + diskFalseMeter = metrics.NewRegisteredMeter("pathdb/disk/false", cmetrics.Registry) + + commitTimeTimer = metrics.NewRegisteredTimer("pathdb/commit/time", cmetrics.Registry) + commitNodesMeter = metrics.NewRegisteredMeter("pathdb/commit/nodes", cmetrics.Registry) + commitBytesMeter = metrics.NewRegisteredMeter("pathdb/commit/bytes", cmetrics.Registry) + + gcNodesMeter = metrics.NewRegisteredMeter("pathdb/gc/nodes", cmetrics.Registry) + gcBytesMeter = metrics.NewRegisteredMeter("pathdb/gc/bytes", cmetrics.Registry) + + diffLayerBytesMeter = metrics.NewRegisteredMeter("pathdb/diff/bytes", cmetrics.Registry) + diffLayerNodesMeter = metrics.NewRegisteredMeter("pathdb/diff/nodes", cmetrics.Registry) + + historyBuildTimeMeter = metrics.NewRegisteredTimer("pathdb/history/time", cmetrics.Registry) + historyDataBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/data", cmetrics.Registry) + historyIndexBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/index", cmetrics.Registry) ) diff --git a/utils/metered_cache.go b/utils/metered_cache.go index ee1807e36f..bfd02c74c1 100644 --- a/utils/metered_cache.go +++ b/utils/metered_cache.go @@ -9,6 +9,7 @@ import ( "time" "github.com/VictoriaMetrics/fastcache" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -45,13 +46,13 @@ func NewMeteredCache(size int, namespace string, updateFrequency uint64) *Metere } if namespace != "" { // only register stats if a namespace is provided. - mc.entriesCount = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/entriesCount", namespace), nil) - mc.bytesSize = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/bytesSize", namespace), nil) - mc.collisions = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/collisions", namespace), nil) - mc.gets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/gets", namespace), nil) - mc.sets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/sets", namespace), nil) - mc.misses = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/misses", namespace), nil) - mc.statsTime = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/statsTime", namespace), nil) + mc.entriesCount = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/entriesCount", namespace), cmetrics.Registry) + mc.bytesSize = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/bytesSize", namespace), cmetrics.Registry) + mc.collisions = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/collisions", namespace), cmetrics.Registry) + mc.gets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/gets", namespace), cmetrics.Registry) + mc.sets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/sets", namespace), cmetrics.Registry) + mc.misses = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/misses", namespace), cmetrics.Registry) + mc.statsTime = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/statsTime", namespace), cmetrics.Registry) } return mc } diff --git a/warp/handlers/stats.go b/warp/handlers/stats.go index 6a56d54076..04288efc6e 100644 --- a/warp/handlers/stats.go +++ b/warp/handlers/stats.go @@ -6,6 +6,7 @@ package handlers import ( "time" + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -24,14 +25,14 @@ type handlerStats struct { func newStats() *handlerStats { return &handlerStats{ - messageSignatureRequest: metrics.NewRegisteredCounter("message_signature_request_count", nil), - messageSignatureHit: metrics.NewRegisteredCounter("message_signature_request_hit", nil), - messageSignatureMiss: metrics.NewRegisteredCounter("message_signature_request_miss", nil), - messageSignatureRequestDuration: metrics.NewRegisteredGauge("message_signature_request_duration", nil), - blockSignatureRequest: metrics.NewRegisteredCounter("block_signature_request_count", nil), - blockSignatureHit: metrics.NewRegisteredCounter("block_signature_request_hit", nil), - blockSignatureMiss: metrics.NewRegisteredCounter("block_signature_request_miss", nil), - blockSignatureRequestDuration: metrics.NewRegisteredGauge("block_signature_request_duration", nil), + messageSignatureRequest: metrics.NewRegisteredCounter("message_signature_request_count", cmetrics.Registry), + messageSignatureHit: metrics.NewRegisteredCounter("message_signature_request_hit", cmetrics.Registry), + messageSignatureMiss: metrics.NewRegisteredCounter("message_signature_request_miss", cmetrics.Registry), + messageSignatureRequestDuration: metrics.NewRegisteredGauge("message_signature_request_duration", cmetrics.Registry), + blockSignatureRequest: metrics.NewRegisteredCounter("block_signature_request_count", cmetrics.Registry), + blockSignatureHit: metrics.NewRegisteredCounter("block_signature_request_hit", cmetrics.Registry), + blockSignatureMiss: metrics.NewRegisteredCounter("block_signature_request_miss", cmetrics.Registry), + blockSignatureRequestDuration: metrics.NewRegisteredGauge("block_signature_request_duration", cmetrics.Registry), } } diff --git a/warp/verifier_stats.go b/warp/verifier_stats.go index 6a47c31397..5179b87491 100644 --- a/warp/verifier_stats.go +++ b/warp/verifier_stats.go @@ -4,6 +4,7 @@ package warp import ( + cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -15,8 +16,8 @@ type verifierStats struct { func newVerifierStats() *verifierStats { return &verifierStats{ - messageParseFail: metrics.NewRegisteredCounter("warp_backend_message_parse_fail", nil), - blockValidationFail: metrics.NewRegisteredCounter("warp_backend_block_validation_fail", nil), + messageParseFail: metrics.NewRegisteredCounter("warp_backend_message_parse_fail", cmetrics.Registry), + blockValidationFail: metrics.NewRegisteredCounter("warp_backend_block_validation_fail", cmetrics.Registry), } } From eaef64126df3bb1f931337d153f59b1e89f1bf08 Mon Sep 17 00:00:00 2001 From: Quentin Mc Gaw Date: Wed, 5 Mar 2025 17:26:24 +0100 Subject: [PATCH 2/3] Use GetOrRegister metrics functions with default registry --- core/blockchain.go | 73 ++++++++++++------------ core/state/snapshot/snapshot.go | 85 ++++++++++++++-------------- core/txpool/blobpool/metrics.go | 85 ++++++++++++++-------------- core/txpool/legacypool/legacypool.go | 45 +++++++-------- metrics/registry.go | 10 ---- peer/peer_tracker.go | 7 +-- peer/stats/stats.go | 5 +- plugin/evm/atomic/mempool.go | 11 ++-- plugin/evm/vm.go | 9 +-- rpc/metrics.go | 11 ++-- sync/client/stats/stats.go | 13 ++--- sync/handlers/stats/stats.go | 53 +++++++++-------- sync/statesync/trie_sync_stats.go | 7 +-- triedb/hashdb/database.go | 59 ++++++++++--------- triedb/pathdb/metrics.go | 57 +++++++++---------- utils/metered_cache.go | 15 +++-- warp/handlers/stats.go | 17 +++--- warp/verifier_stats.go | 5 +- 18 files changed, 268 insertions(+), 299 deletions(-) delete mode 100644 metrics/registry.go diff --git a/core/blockchain.go b/core/blockchain.go index 8ac81bae3d..a526c5896f 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -46,7 +46,6 @@ import ( "github.com/ava-labs/coreth/core/state/snapshot" "github.com/ava-labs/coreth/core/types" "github.com/ava-labs/coreth/internal/version" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/params" "github.com/ava-labs/coreth/triedb/hashdb" "github.com/ava-labs/coreth/triedb/pathdb" @@ -62,42 +61,42 @@ import ( ) var ( - accountReadTimer = metrics.NewRegisteredCounter("chain/account/reads", cmetrics.Registry) - accountHashTimer = metrics.NewRegisteredCounter("chain/account/hashes", cmetrics.Registry) - accountUpdateTimer = metrics.NewRegisteredCounter("chain/account/updates", cmetrics.Registry) - accountCommitTimer = metrics.NewRegisteredCounter("chain/account/commits", cmetrics.Registry) - storageReadTimer = metrics.NewRegisteredCounter("chain/storage/reads", cmetrics.Registry) - storageHashTimer = metrics.NewRegisteredCounter("chain/storage/hashes", cmetrics.Registry) - storageUpdateTimer = metrics.NewRegisteredCounter("chain/storage/updates", cmetrics.Registry) - storageCommitTimer = metrics.NewRegisteredCounter("chain/storage/commits", cmetrics.Registry) - snapshotAccountReadTimer = metrics.NewRegisteredCounter("chain/snapshot/account/reads", cmetrics.Registry) - snapshotStorageReadTimer = metrics.NewRegisteredCounter("chain/snapshot/storage/reads", cmetrics.Registry) - snapshotCommitTimer = metrics.NewRegisteredCounter("chain/snapshot/commits", cmetrics.Registry) - - triedbCommitTimer = metrics.NewRegisteredCounter("chain/triedb/commits", cmetrics.Registry) - - blockInsertTimer = metrics.NewRegisteredCounter("chain/block/inserts", cmetrics.Registry) - blockInsertCount = metrics.NewRegisteredCounter("chain/block/inserts/count", cmetrics.Registry) - blockContentValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/content", cmetrics.Registry) - blockStateInitTimer = metrics.NewRegisteredCounter("chain/block/inits/state", cmetrics.Registry) - blockExecutionTimer = metrics.NewRegisteredCounter("chain/block/executions", cmetrics.Registry) - blockTrieOpsTimer = metrics.NewRegisteredCounter("chain/block/trie", cmetrics.Registry) - blockValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/state", cmetrics.Registry) - blockWriteTimer = metrics.NewRegisteredCounter("chain/block/writes", cmetrics.Registry) - - acceptorQueueGauge = metrics.NewRegisteredGauge("chain/acceptor/queue/size", cmetrics.Registry) - acceptorWorkTimer = metrics.NewRegisteredCounter("chain/acceptor/work", cmetrics.Registry) - acceptorWorkCount = metrics.NewRegisteredCounter("chain/acceptor/work/count", cmetrics.Registry) - processedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/processed", cmetrics.Registry) - acceptedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/accepted", cmetrics.Registry) - badBlockCounter = metrics.NewRegisteredCounter("chain/block/bad/count", cmetrics.Registry) - - txUnindexTimer = metrics.NewRegisteredCounter("chain/txs/unindex", cmetrics.Registry) - acceptedTxsCounter = metrics.NewRegisteredCounter("chain/txs/accepted", cmetrics.Registry) - processedTxsCounter = metrics.NewRegisteredCounter("chain/txs/processed", cmetrics.Registry) - - acceptedLogsCounter = metrics.NewRegisteredCounter("chain/logs/accepted", cmetrics.Registry) - processedLogsCounter = metrics.NewRegisteredCounter("chain/logs/processed", cmetrics.Registry) + accountReadTimer = metrics.GetOrRegisterCounter("chain/account/reads", nil) + accountHashTimer = metrics.GetOrRegisterCounter("chain/account/hashes", nil) + accountUpdateTimer = metrics.GetOrRegisterCounter("chain/account/updates", nil) + accountCommitTimer = metrics.GetOrRegisterCounter("chain/account/commits", nil) + storageReadTimer = metrics.GetOrRegisterCounter("chain/storage/reads", nil) + storageHashTimer = metrics.GetOrRegisterCounter("chain/storage/hashes", nil) + storageUpdateTimer = metrics.GetOrRegisterCounter("chain/storage/updates", nil) + storageCommitTimer = metrics.GetOrRegisterCounter("chain/storage/commits", nil) + snapshotAccountReadTimer = metrics.GetOrRegisterCounter("chain/snapshot/account/reads", nil) + snapshotStorageReadTimer = metrics.GetOrRegisterCounter("chain/snapshot/storage/reads", nil) + snapshotCommitTimer = metrics.GetOrRegisterCounter("chain/snapshot/commits", nil) + + triedbCommitTimer = metrics.GetOrRegisterCounter("chain/triedb/commits", nil) + + blockInsertTimer = metrics.GetOrRegisterCounter("chain/block/inserts", nil) + blockInsertCount = metrics.GetOrRegisterCounter("chain/block/inserts/count", nil) + blockContentValidationTimer = metrics.GetOrRegisterCounter("chain/block/validations/content", nil) + blockStateInitTimer = metrics.GetOrRegisterCounter("chain/block/inits/state", nil) + blockExecutionTimer = metrics.GetOrRegisterCounter("chain/block/executions", nil) + blockTrieOpsTimer = metrics.GetOrRegisterCounter("chain/block/trie", nil) + blockValidationTimer = metrics.GetOrRegisterCounter("chain/block/validations/state", nil) + blockWriteTimer = metrics.GetOrRegisterCounter("chain/block/writes", nil) + + acceptorQueueGauge = metrics.GetOrRegisterGauge("chain/acceptor/queue/size", nil) + acceptorWorkTimer = metrics.GetOrRegisterCounter("chain/acceptor/work", nil) + acceptorWorkCount = metrics.GetOrRegisterCounter("chain/acceptor/work/count", nil) + processedBlockGasUsedCounter = metrics.GetOrRegisterCounter("chain/block/gas/used/processed", nil) + acceptedBlockGasUsedCounter = metrics.GetOrRegisterCounter("chain/block/gas/used/accepted", nil) + badBlockCounter = metrics.GetOrRegisterCounter("chain/block/bad/count", nil) + + txUnindexTimer = metrics.GetOrRegisterCounter("chain/txs/unindex", nil) + acceptedTxsCounter = metrics.GetOrRegisterCounter("chain/txs/accepted", nil) + processedTxsCounter = metrics.GetOrRegisterCounter("chain/txs/processed", nil) + + acceptedLogsCounter = metrics.GetOrRegisterCounter("chain/logs/accepted", nil) + processedLogsCounter = metrics.GetOrRegisterCounter("chain/logs/processed", nil) ErrRefuseToCorruptArchiver = errors.New("node has operated with pruning disabled, shutting down to prevent missing tries") diff --git a/core/state/snapshot/snapshot.go b/core/state/snapshot/snapshot.go index 55d7e0612a..d638fc5320 100644 --- a/core/state/snapshot/snapshot.go +++ b/core/state/snapshot/snapshot.go @@ -35,7 +35,6 @@ import ( "time" "github.com/ava-labs/coreth/core/rawdb" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/common" ethsnapshot "github.com/ava-labs/libevm/core/state/snapshot" "github.com/ava-labs/libevm/ethdb" @@ -57,48 +56,48 @@ const ( ) var ( - snapshotCleanAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/hit", cmetrics.Registry) - snapshotCleanAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/miss", cmetrics.Registry) - snapshotCleanAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/inex", cmetrics.Registry) - snapshotCleanAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/read", cmetrics.Registry) - snapshotCleanAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/write", cmetrics.Registry) - - snapshotCleanStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/hit", cmetrics.Registry) - snapshotCleanStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/miss", cmetrics.Registry) - snapshotCleanStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/inex", cmetrics.Registry) - snapshotCleanStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/read", cmetrics.Registry) - snapshotCleanStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/write", cmetrics.Registry) - - snapshotDirtyAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/hit", cmetrics.Registry) - snapshotDirtyAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/miss", cmetrics.Registry) - snapshotDirtyAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/inex", cmetrics.Registry) - snapshotDirtyAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/read", cmetrics.Registry) - snapshotDirtyAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/write", cmetrics.Registry) - - snapshotDirtyStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/hit", cmetrics.Registry) - snapshotDirtyStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/miss", cmetrics.Registry) - snapshotDirtyStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/inex", cmetrics.Registry) - snapshotDirtyStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/read", cmetrics.Registry) - snapshotDirtyStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/write", cmetrics.Registry) - - snapshotDirtyAccountHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/account/hit/depth", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)) - snapshotDirtyStorageHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/storage/hit/depth", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)) - - snapshotFlushAccountItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/item", cmetrics.Registry) - snapshotFlushAccountSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/size", cmetrics.Registry) - snapshotFlushStorageItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/item", cmetrics.Registry) - snapshotFlushStorageSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/size", cmetrics.Registry) - - snapshotBloomIndexTimer = metrics.NewRegisteredResettingTimer("state/snapshot/bloom/index", cmetrics.Registry) - snapshotBloomErrorGauge = metrics.NewRegisteredGaugeFloat64("state/snapshot/bloom/error", cmetrics.Registry) - - snapshotBloomAccountTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/truehit", cmetrics.Registry) - snapshotBloomAccountFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/falsehit", cmetrics.Registry) - snapshotBloomAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/miss", cmetrics.Registry) - - snapshotBloomStorageTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/truehit", cmetrics.Registry) - snapshotBloomStorageFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/falsehit", cmetrics.Registry) - snapshotBloomStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/miss", cmetrics.Registry) + snapshotCleanAccountHitMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/hit", nil) + snapshotCleanAccountMissMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/miss", nil) + snapshotCleanAccountInexMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/inex", nil) + snapshotCleanAccountReadMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/read", nil) + snapshotCleanAccountWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/write", nil) + + snapshotCleanStorageHitMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/hit", nil) + snapshotCleanStorageMissMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/miss", nil) + snapshotCleanStorageInexMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/inex", nil) + snapshotCleanStorageReadMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/read", nil) + snapshotCleanStorageWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/write", nil) + + snapshotDirtyAccountHitMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/hit", nil) + snapshotDirtyAccountMissMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/miss", nil) + snapshotDirtyAccountInexMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/inex", nil) + snapshotDirtyAccountReadMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/read", nil) + snapshotDirtyAccountWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/write", nil) + + snapshotDirtyStorageHitMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/hit", nil) + snapshotDirtyStorageMissMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/miss", nil) + snapshotDirtyStorageInexMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/inex", nil) + snapshotDirtyStorageReadMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/read", nil) + snapshotDirtyStorageWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/write", nil) + + snapshotDirtyAccountHitDepthHist = metrics.GetOrRegisterHistogram("state/snapshot/dirty/account/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + snapshotDirtyStorageHitDepthHist = metrics.GetOrRegisterHistogram("state/snapshot/dirty/storage/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + + snapshotFlushAccountItemMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/account/item", nil) + snapshotFlushAccountSizeMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/account/size", nil) + snapshotFlushStorageItemMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/storage/item", nil) + snapshotFlushStorageSizeMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/storage/size", nil) + + snapshotBloomIndexTimer = metrics.GetOrRegisterResettingTimer("state/snapshot/bloom/index", nil) + snapshotBloomErrorGauge = metrics.GetOrRegisterGaugeFloat64("state/snapshot/bloom/error", nil) + + snapshotBloomAccountTrueHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/account/truehit", nil) + snapshotBloomAccountFalseHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/account/falsehit", nil) + snapshotBloomAccountMissMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/account/miss", nil) + + snapshotBloomStorageTrueHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/storage/truehit", nil) + snapshotBloomStorageFalseHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/storage/falsehit", nil) + snapshotBloomStorageMissMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/storage/miss", nil) // ErrSnapshotStale is returned from data accessors if the underlying snapshot // layer had been invalidated due to the chain progressing forward far enough diff --git a/core/txpool/blobpool/metrics.go b/core/txpool/blobpool/metrics.go index d3a006e72c..4c278c16a5 100644 --- a/core/txpool/blobpool/metrics.go +++ b/core/txpool/blobpool/metrics.go @@ -27,24 +27,23 @@ package blobpool import ( - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) var ( // datacapGauge tracks the user's configured capacity for the blob pool. It // is mostly a way to expose/debug issues. - datacapGauge = metrics.NewRegisteredGauge("blobpool/datacap", cmetrics.Registry) + datacapGauge = metrics.GetOrRegisterGauge("blobpool/datacap", nil) // The below metrics track the per-datastore metrics for the primary blob // store and the temporary limbo store. - datausedGauge = metrics.NewRegisteredGauge("blobpool/dataused", cmetrics.Registry) - datarealGauge = metrics.NewRegisteredGauge("blobpool/datareal", cmetrics.Registry) - slotusedGauge = metrics.NewRegisteredGauge("blobpool/slotused", cmetrics.Registry) + datausedGauge = metrics.GetOrRegisterGauge("blobpool/dataused", nil) + datarealGauge = metrics.GetOrRegisterGauge("blobpool/datareal", nil) + slotusedGauge = metrics.GetOrRegisterGauge("blobpool/slotused", nil) - limboDatausedGauge = metrics.NewRegisteredGauge("blobpool/limbo/dataused", cmetrics.Registry) - limboDatarealGauge = metrics.NewRegisteredGauge("blobpool/limbo/datareal", cmetrics.Registry) - limboSlotusedGauge = metrics.NewRegisteredGauge("blobpool/limbo/slotused", cmetrics.Registry) + limboDatausedGauge = metrics.GetOrRegisterGauge("blobpool/limbo/dataused", nil) + limboDatarealGauge = metrics.GetOrRegisterGauge("blobpool/limbo/datareal", nil) + limboSlotusedGauge = metrics.GetOrRegisterGauge("blobpool/limbo/slotused", nil) // The below metrics track the per-shelf metrics for the primary blob store // and the temporary limbo store. @@ -63,56 +62,56 @@ var ( // // There are no oversized data in the limbo, it only contains blobs and some // constant metadata. - oversizedDatausedGauge = metrics.NewRegisteredGauge("blobpool/oversized/dataused", cmetrics.Registry) - oversizedDatagapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/datagaps", cmetrics.Registry) - oversizedSlotusedGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotused", cmetrics.Registry) - oversizedSlotgapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotgaps", cmetrics.Registry) + oversizedDatausedGauge = metrics.GetOrRegisterGauge("blobpool/oversized/dataused", nil) + oversizedDatagapsGauge = metrics.GetOrRegisterGauge("blobpool/oversized/datagaps", nil) + oversizedSlotusedGauge = metrics.GetOrRegisterGauge("blobpool/oversized/slotused", nil) + oversizedSlotgapsGauge = metrics.GetOrRegisterGauge("blobpool/oversized/slotgaps", nil) // basefeeGauge and blobfeeGauge track the current network 1559 base fee and // 4844 blob fee respectively. - basefeeGauge = metrics.NewRegisteredGauge("blobpool/basefee", cmetrics.Registry) - blobfeeGauge = metrics.NewRegisteredGauge("blobpool/blobfee", cmetrics.Registry) + basefeeGauge = metrics.GetOrRegisterGauge("blobpool/basefee", nil) + blobfeeGauge = metrics.GetOrRegisterGauge("blobpool/blobfee", nil) // pooltipGauge is the configurable miner tip to permit a transaction into // the pool. - pooltipGauge = metrics.NewRegisteredGauge("blobpool/pooltip", cmetrics.Registry) + pooltipGauge = metrics.GetOrRegisterGauge("blobpool/pooltip", nil) // addwait/time, resetwait/time and getwait/time track the rough health of // the pool and whether it's capable of keeping up with the load from the // network. - addwaitHist = metrics.NewRegisteredHistogram("blobpool/addwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - addtimeHist = metrics.NewRegisteredHistogram("blobpool/addtime", nil, metrics.NewExpDecaySample(1028, 0.015)) - getwaitHist = metrics.NewRegisteredHistogram("blobpool/getwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - gettimeHist = metrics.NewRegisteredHistogram("blobpool/gettime", nil, metrics.NewExpDecaySample(1028, 0.015)) - pendwaitHist = metrics.NewRegisteredHistogram("blobpool/pendwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - pendtimeHist = metrics.NewRegisteredHistogram("blobpool/pendtime", nil, metrics.NewExpDecaySample(1028, 0.015)) - resetwaitHist = metrics.NewRegisteredHistogram("blobpool/resetwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - resettimeHist = metrics.NewRegisteredHistogram("blobpool/resettime", nil, metrics.NewExpDecaySample(1028, 0.015)) + addwaitHist = metrics.GetOrRegisterHistogram("blobpool/addwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + addtimeHist = metrics.GetOrRegisterHistogram("blobpool/addtime", nil, metrics.NewExpDecaySample(1028, 0.015)) + getwaitHist = metrics.GetOrRegisterHistogram("blobpool/getwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + gettimeHist = metrics.GetOrRegisterHistogram("blobpool/gettime", nil, metrics.NewExpDecaySample(1028, 0.015)) + pendwaitHist = metrics.GetOrRegisterHistogram("blobpool/pendwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + pendtimeHist = metrics.GetOrRegisterHistogram("blobpool/pendtime", nil, metrics.NewExpDecaySample(1028, 0.015)) + resetwaitHist = metrics.GetOrRegisterHistogram("blobpool/resetwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + resettimeHist = metrics.GetOrRegisterHistogram("blobpool/resettime", nil, metrics.NewExpDecaySample(1028, 0.015)) // The below metrics track various cases where transactions are dropped out // of the pool. Most are exceptional, some are chain progression and some // threshold cappings. - dropInvalidMeter = metrics.NewRegisteredMeter("blobpool/drop/invalid", cmetrics.Registry) // Invalid transaction, consensus change or bugfix, neutral-ish - dropDanglingMeter = metrics.NewRegisteredMeter("blobpool/drop/dangling", cmetrics.Registry) // First nonce gapped, bad - dropFilledMeter = metrics.NewRegisteredMeter("blobpool/drop/filled", cmetrics.Registry) // State full-overlap, chain progress, ok - dropOverlappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overlapped", cmetrics.Registry) // State partial-overlap, chain progress, ok - dropRepeatedMeter = metrics.NewRegisteredMeter("blobpool/drop/repeated", cmetrics.Registry) // Repeated nonce, bad - dropGappedMeter = metrics.NewRegisteredMeter("blobpool/drop/gapped", cmetrics.Registry) // Non-first nonce gapped, bad - dropOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/drop/overdrafted", cmetrics.Registry) // Balance exceeded, bad - dropOvercappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overcapped", cmetrics.Registry) // Per-account cap exceeded, bad - dropOverflownMeter = metrics.NewRegisteredMeter("blobpool/drop/overflown", cmetrics.Registry) // Global disk cap exceeded, neutral-ish - dropUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/drop/underpriced", cmetrics.Registry) // Gas tip changed, neutral - dropReplacedMeter = metrics.NewRegisteredMeter("blobpool/drop/replaced", cmetrics.Registry) // Transaction replaced, neutral + dropInvalidMeter = metrics.GetOrRegisterMeter("blobpool/drop/invalid", nil) // Invalid transaction, consensus change or bugfix, neutral-ish + dropDanglingMeter = metrics.GetOrRegisterMeter("blobpool/drop/dangling", nil) // First nonce gapped, bad + dropFilledMeter = metrics.GetOrRegisterMeter("blobpool/drop/filled", nil) // State full-overlap, chain progress, ok + dropOverlappedMeter = metrics.GetOrRegisterMeter("blobpool/drop/overlapped", nil) // State partial-overlap, chain progress, ok + dropRepeatedMeter = metrics.GetOrRegisterMeter("blobpool/drop/repeated", nil) // Repeated nonce, bad + dropGappedMeter = metrics.GetOrRegisterMeter("blobpool/drop/gapped", nil) // Non-first nonce gapped, bad + dropOverdraftedMeter = metrics.GetOrRegisterMeter("blobpool/drop/overdrafted", nil) // Balance exceeded, bad + dropOvercappedMeter = metrics.GetOrRegisterMeter("blobpool/drop/overcapped", nil) // Per-account cap exceeded, bad + dropOverflownMeter = metrics.GetOrRegisterMeter("blobpool/drop/overflown", nil) // Global disk cap exceeded, neutral-ish + dropUnderpricedMeter = metrics.GetOrRegisterMeter("blobpool/drop/underpriced", nil) // Gas tip changed, neutral + dropReplacedMeter = metrics.GetOrRegisterMeter("blobpool/drop/replaced", nil) // Transaction replaced, neutral // The below metrics track various outcomes of transactions being added to // the pool. - addInvalidMeter = metrics.NewRegisteredMeter("blobpool/add/invalid", cmetrics.Registry) // Invalid transaction, reject, neutral - addUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/add/underpriced", cmetrics.Registry) // Gas tip too low, neutral - addStaleMeter = metrics.NewRegisteredMeter("blobpool/add/stale", cmetrics.Registry) // Nonce already filled, reject, bad-ish - addGappedMeter = metrics.NewRegisteredMeter("blobpool/add/gapped", cmetrics.Registry) // Nonce gapped, reject, bad-ish - addOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/add/overdrafted", cmetrics.Registry) // Balance exceeded, reject, neutral - addOvercappedMeter = metrics.NewRegisteredMeter("blobpool/add/overcapped", cmetrics.Registry) // Per-account cap exceeded, reject, neutral - addNoreplaceMeter = metrics.NewRegisteredMeter("blobpool/add/noreplace", cmetrics.Registry) // Replacement fees or tips too low, neutral - addNonExclusiveMeter = metrics.NewRegisteredMeter("blobpool/add/nonexclusive", cmetrics.Registry) // Plain transaction from same account exists, reject, neutral - addValidMeter = metrics.NewRegisteredMeter("blobpool/add/valid", cmetrics.Registry) // Valid transaction, add, neutral + addInvalidMeter = metrics.GetOrRegisterMeter("blobpool/add/invalid", nil) // Invalid transaction, reject, neutral + addUnderpricedMeter = metrics.GetOrRegisterMeter("blobpool/add/underpriced", nil) // Gas tip too low, neutral + addStaleMeter = metrics.GetOrRegisterMeter("blobpool/add/stale", nil) // Nonce already filled, reject, bad-ish + addGappedMeter = metrics.GetOrRegisterMeter("blobpool/add/gapped", nil) // Nonce gapped, reject, bad-ish + addOverdraftedMeter = metrics.GetOrRegisterMeter("blobpool/add/overdrafted", nil) // Balance exceeded, reject, neutral + addOvercappedMeter = metrics.GetOrRegisterMeter("blobpool/add/overcapped", nil) // Per-account cap exceeded, reject, neutral + addNoreplaceMeter = metrics.GetOrRegisterMeter("blobpool/add/noreplace", nil) // Replacement fees or tips too low, neutral + addNonExclusiveMeter = metrics.GetOrRegisterMeter("blobpool/add/nonexclusive", nil) // Plain transaction from same account exists, reject, neutral + addValidMeter = metrics.GetOrRegisterMeter("blobpool/add/valid", nil) // Valid transaction, add, neutral ) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index ec7f798704..a64618cf7e 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -40,7 +40,6 @@ import ( "github.com/ava-labs/coreth/core/state" "github.com/ava-labs/coreth/core/txpool" "github.com/ava-labs/coreth/core/types" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/params" "github.com/ava-labs/coreth/plugin/evm/header" "github.com/ava-labs/coreth/utils" @@ -82,40 +81,40 @@ var ( var ( // Metrics for the pending pool - pendingDiscardMeter = metrics.NewRegisteredMeter("txpool/pending/discard", cmetrics.Registry) - pendingReplaceMeter = metrics.NewRegisteredMeter("txpool/pending/replace", cmetrics.Registry) - pendingRateLimitMeter = metrics.NewRegisteredMeter("txpool/pending/ratelimit", cmetrics.Registry) // Dropped due to rate limiting - pendingNofundsMeter = metrics.NewRegisteredMeter("txpool/pending/nofunds", cmetrics.Registry) // Dropped due to out-of-funds + pendingDiscardMeter = metrics.GetOrRegisterMeter("txpool/pending/discard", nil) + pendingReplaceMeter = metrics.GetOrRegisterMeter("txpool/pending/replace", nil) + pendingRateLimitMeter = metrics.GetOrRegisterMeter("txpool/pending/ratelimit", nil) // Dropped due to rate limiting + pendingNofundsMeter = metrics.GetOrRegisterMeter("txpool/pending/nofunds", nil) // Dropped due to out-of-funds // Metrics for the queued pool - queuedDiscardMeter = metrics.NewRegisteredMeter("txpool/queued/discard", cmetrics.Registry) - queuedReplaceMeter = metrics.NewRegisteredMeter("txpool/queued/replace", cmetrics.Registry) - queuedRateLimitMeter = metrics.NewRegisteredMeter("txpool/queued/ratelimit", cmetrics.Registry) // Dropped due to rate limiting - queuedNofundsMeter = metrics.NewRegisteredMeter("txpool/queued/nofunds", cmetrics.Registry) // Dropped due to out-of-funds - queuedEvictionMeter = metrics.NewRegisteredMeter("txpool/queued/eviction", cmetrics.Registry) // Dropped due to lifetime + queuedDiscardMeter = metrics.GetOrRegisterMeter("txpool/queued/discard", nil) + queuedReplaceMeter = metrics.GetOrRegisterMeter("txpool/queued/replace", nil) + queuedRateLimitMeter = metrics.GetOrRegisterMeter("txpool/queued/ratelimit", nil) // Dropped due to rate limiting + queuedNofundsMeter = metrics.GetOrRegisterMeter("txpool/queued/nofunds", nil) // Dropped due to out-of-funds + queuedEvictionMeter = metrics.GetOrRegisterMeter("txpool/queued/eviction", nil) // Dropped due to lifetime // General tx metrics - knownTxMeter = metrics.NewRegisteredMeter("txpool/known", cmetrics.Registry) - validTxMeter = metrics.NewRegisteredMeter("txpool/valid", cmetrics.Registry) - invalidTxMeter = metrics.NewRegisteredMeter("txpool/invalid", cmetrics.Registry) - underpricedTxMeter = metrics.NewRegisteredMeter("txpool/underpriced", cmetrics.Registry) - overflowedTxMeter = metrics.NewRegisteredMeter("txpool/overflowed", cmetrics.Registry) + knownTxMeter = metrics.GetOrRegisterMeter("txpool/known", nil) + validTxMeter = metrics.GetOrRegisterMeter("txpool/valid", nil) + invalidTxMeter = metrics.GetOrRegisterMeter("txpool/invalid", nil) + underpricedTxMeter = metrics.GetOrRegisterMeter("txpool/underpriced", nil) + overflowedTxMeter = metrics.GetOrRegisterMeter("txpool/overflowed", nil) // throttleTxMeter counts how many transactions are rejected due to too-many-changes between // txpool reorgs. - throttleTxMeter = metrics.NewRegisteredMeter("txpool/throttle", cmetrics.Registry) + throttleTxMeter = metrics.GetOrRegisterMeter("txpool/throttle", nil) // reorgDurationTimer measures how long time a txpool reorg takes. - reorgDurationTimer = metrics.NewRegisteredTimer("txpool/reorgtime", cmetrics.Registry) + reorgDurationTimer = metrics.GetOrRegisterTimer("txpool/reorgtime", nil) // dropBetweenReorgHistogram counts how many drops we experience between two reorg runs. It is expected // that this number is pretty low, since txpool reorgs happen very frequently. - dropBetweenReorgHistogram = metrics.NewRegisteredHistogram("txpool/dropbetweenreorg", nil, metrics.NewExpDecaySample(1028, 0.015)) + dropBetweenReorgHistogram = metrics.GetOrRegisterHistogram("txpool/dropbetweenreorg", nil, metrics.NewExpDecaySample(1028, 0.015)) - pendingGauge = metrics.NewRegisteredGauge("txpool/pending", cmetrics.Registry) - queuedGauge = metrics.NewRegisteredGauge("txpool/queued", cmetrics.Registry) - localGauge = metrics.NewRegisteredGauge("txpool/local", cmetrics.Registry) - slotsGauge = metrics.NewRegisteredGauge("txpool/slots", cmetrics.Registry) + pendingGauge = metrics.GetOrRegisterGauge("txpool/pending", nil) + queuedGauge = metrics.GetOrRegisterGauge("txpool/queued", nil) + localGauge = metrics.GetOrRegisterGauge("txpool/local", nil) + slotsGauge = metrics.GetOrRegisterGauge("txpool/slots", nil) - reheapTimer = metrics.NewRegisteredTimer("txpool/reheap", cmetrics.Registry) + reheapTimer = metrics.GetOrRegisterTimer("txpool/reheap", nil) ) // BlockChain defines the minimal set of methods needed to back a tx pool with diff --git a/metrics/registry.go b/metrics/registry.go deleted file mode 100644 index f60aef2344..0000000000 --- a/metrics/registry.go +++ /dev/null @@ -1,10 +0,0 @@ -package metrics - -import "github.com/ava-labs/libevm/metrics" - -// Registry is a metrics registry to be used by metrics in coreth. -// We use it especially to avoid conflicts with imports, direct or -// indirect, of libevm packages with global scope metrics variables -// using the default registry. Coreth should avoid using the default -// registry to avoid any conflict. -var Registry = metrics.NewRegistry() diff --git a/peer/peer_tracker.go b/peer/peer_tracker.go index 6ae211f1fb..c529dc1e32 100644 --- a/peer/peer_tracker.go +++ b/peer/peer_tracker.go @@ -15,7 +15,6 @@ import ( "github.com/ava-labs/libevm/log" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -56,12 +55,12 @@ type peerTracker struct { func NewPeerTracker() *peerTracker { return &peerTracker{ peers: make(map[ids.NodeID]*peerInfo), - numTrackedPeers: metrics.GetOrRegisterGauge("net_tracked_peers", cmetrics.Registry), + numTrackedPeers: metrics.GetOrRegisterGauge("net_tracked_peers", nil), trackedPeers: make(set.Set[ids.NodeID]), - numResponsivePeers: metrics.GetOrRegisterGauge("net_responsive_peers", cmetrics.Registry), + numResponsivePeers: metrics.GetOrRegisterGauge("net_responsive_peers", nil), responsivePeers: make(set.Set[ids.NodeID]), bandwidthHeap: utils_math.NewMaxAveragerHeap(), - averageBandwidthMetric: metrics.GetOrRegisterGaugeFloat64("net_average_bandwidth", cmetrics.Registry), + averageBandwidthMetric: metrics.GetOrRegisterGaugeFloat64("net_average_bandwidth", nil), averageBandwidth: utils_math.NewAverager(0, bandwidthHalflife, time.Now()), } } diff --git a/peer/stats/stats.go b/peer/stats/stats.go index 907c7ffc59..5a3c2918f4 100644 --- a/peer/stats/stats.go +++ b/peer/stats/stats.go @@ -6,7 +6,6 @@ package stats import ( "time" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -31,7 +30,7 @@ func (h *requestHandlerStats) UpdateTimeUntilDeadline(duration time.Duration) { func NewRequestHandlerStats() RequestHandlerStats { return &requestHandlerStats{ - timeUntilDeadline: metrics.GetOrRegisterTimer("net_req_time_until_deadline", cmetrics.Registry), - droppedRequests: metrics.GetOrRegisterCounter("net_req_deadline_dropped", cmetrics.Registry), + timeUntilDeadline: metrics.GetOrRegisterTimer("net_req_time_until_deadline", nil), + droppedRequests: metrics.GetOrRegisterCounter("net_req_deadline_dropped", nil), } } diff --git a/plugin/evm/atomic/mempool.go b/plugin/evm/atomic/mempool.go index 354042b881..4754b070c9 100644 --- a/plugin/evm/atomic/mempool.go +++ b/plugin/evm/atomic/mempool.go @@ -14,7 +14,6 @@ import ( "github.com/ava-labs/avalanchego/snow" "github.com/prometheus/client_golang/prometheus" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/plugin/evm/config" "github.com/ava-labs/libevm/log" "github.com/ava-labs/libevm/metrics" @@ -47,11 +46,11 @@ type mempoolMetrics struct { // newMempoolMetrics constructs metrics for the atomic mempool func newMempoolMetrics() *mempoolMetrics { return &mempoolMetrics{ - pendingTxs: metrics.GetOrRegisterGauge("atomic_mempool_pending_txs", cmetrics.Registry), - currentTxs: metrics.GetOrRegisterGauge("atomic_mempool_current_txs", cmetrics.Registry), - issuedTxs: metrics.GetOrRegisterGauge("atomic_mempool_issued_txs", cmetrics.Registry), - addedTxs: metrics.GetOrRegisterCounter("atomic_mempool_added_txs", cmetrics.Registry), - discardedTxs: metrics.GetOrRegisterCounter("atomic_mempool_discarded_txs", cmetrics.Registry), + pendingTxs: metrics.GetOrRegisterGauge("atomic_mempool_pending_txs", nil), + currentTxs: metrics.GetOrRegisterGauge("atomic_mempool_current_txs", nil), + issuedTxs: metrics.GetOrRegisterGauge("atomic_mempool_issued_txs", nil), + addedTxs: metrics.GetOrRegisterCounter("atomic_mempool_added_txs", nil), + discardedTxs: metrics.GetOrRegisterCounter("atomic_mempool_discarded_txs", nil), } } diff --git a/plugin/evm/vm.go b/plugin/evm/vm.go index 9f26d5cc7d..5bdc507847 100644 --- a/plugin/evm/vm.go +++ b/plugin/evm/vm.go @@ -34,7 +34,6 @@ import ( "github.com/ava-labs/coreth/core/types" "github.com/ava-labs/coreth/eth" "github.com/ava-labs/coreth/eth/ethconfig" - cmetrics "github.com/ava-labs/coreth/metrics" corethprometheus "github.com/ava-labs/coreth/metrics/prometheus" "github.com/ava-labs/coreth/miner" "github.com/ava-labs/coreth/node" @@ -631,12 +630,8 @@ func (vm *VM) Initialize( func (vm *VM) initializeMetrics() error { metrics.Enabled = true - corethGatherer := corethprometheus.NewGatherer(cmetrics.Registry) - if err := vm.ctx.Metrics.Register(ethMetricsPrefix, corethGatherer); err != nil { - return err - } - libevmGatherer := corethprometheus.NewGatherer(metrics.DefaultRegistry) - if err := vm.ctx.Metrics.Register(ethMetricsPrefix, libevmGatherer); err != nil { + gatherer := corethprometheus.NewGatherer(metrics.DefaultRegistry) + if err := vm.ctx.Metrics.Register(ethMetricsPrefix, gatherer); err != nil { return err } vm.sdkMetrics = prometheus.NewRegistry() diff --git a/rpc/metrics.go b/rpc/metrics.go index d4a86b57bc..7b7525d774 100644 --- a/rpc/metrics.go +++ b/rpc/metrics.go @@ -30,19 +30,18 @@ import ( "fmt" "time" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) var ( - rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", cmetrics.Registry) - successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", cmetrics.Registry) - failedRequestGauge = metrics.NewRegisteredGauge("rpc/failure", cmetrics.Registry) + rpcRequestGauge = metrics.GetOrRegisterGauge("rpc/requests", nil) + successfulRequestGauge = metrics.GetOrRegisterGauge("rpc/success", nil) + failedRequestGauge = metrics.GetOrRegisterGauge("rpc/failure", nil) // serveTimeHistName is the prefix of the per-request serving time histograms. serveTimeHistName = "rpc/duration" - rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", cmetrics.Registry) + rpcServingTimer = metrics.GetOrRegisterTimer("rpc/duration/all", nil) ) // updateServeTimeHistogram tracks the serving time of a remote RPC call. @@ -57,5 +56,5 @@ func updateServeTimeHistogram(method string, success bool, elapsed time.Duration metrics.NewExpDecaySample(1028, 0.015), ) } - metrics.GetOrRegisterHistogramLazy(h, cmetrics.Registry, sampler).Update(elapsed.Nanoseconds()) + metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(elapsed.Nanoseconds()) } diff --git a/sync/client/stats/stats.go b/sync/client/stats/stats.go index bef16dd207..2be86a1d16 100644 --- a/sync/client/stats/stats.go +++ b/sync/client/stats/stats.go @@ -7,7 +7,6 @@ import ( "fmt" "time" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/plugin/evm/message" "github.com/ava-labs/libevm/metrics" ) @@ -42,12 +41,12 @@ type messageMetric struct { func NewMessageMetric(name string) MessageMetric { return &messageMetric{ - requested: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_requested", name), cmetrics.Registry), - succeeded: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_succeeded", name), cmetrics.Registry), - failed: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_failed", name), cmetrics.Registry), - invalidResponse: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_invalid_response", name), cmetrics.Registry), - received: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_received", name), cmetrics.Registry), - requestLatency: metrics.GetOrRegisterTimer(fmt.Sprintf("%s_request_latency", name), cmetrics.Registry), + requested: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_requested", name), nil), + succeeded: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_succeeded", name), nil), + failed: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_failed", name), nil), + invalidResponse: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_invalid_response", name), nil), + received: metrics.GetOrRegisterCounter(fmt.Sprintf("%s_received", name), nil), + requestLatency: metrics.GetOrRegisterTimer(fmt.Sprintf("%s_request_latency", name), nil), } } diff --git a/sync/handlers/stats/stats.go b/sync/handlers/stats/stats.go index da483785e3..0d1171b82b 100644 --- a/sync/handlers/stats/stats.go +++ b/sync/handlers/stats/stats.go @@ -6,7 +6,6 @@ package stats import ( "time" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -173,36 +172,36 @@ func NewHandlerStats(enabled bool) HandlerStats { } return &handlerStats{ // initialize block request stats - blockRequest: metrics.GetOrRegisterCounter("block_request_count", cmetrics.Registry), - missingBlockHash: metrics.GetOrRegisterCounter("block_request_missing_block_hash", cmetrics.Registry), - blocksReturned: metrics.GetOrRegisterHistogram("block_request_total_blocks", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), - blockRequestProcessingTime: metrics.GetOrRegisterTimer("block_request_processing_time", cmetrics.Registry), + blockRequest: metrics.GetOrRegisterCounter("block_request_count", nil), + missingBlockHash: metrics.GetOrRegisterCounter("block_request_missing_block_hash", nil), + blocksReturned: metrics.GetOrRegisterHistogram("block_request_total_blocks", nil, metrics.NewExpDecaySample(1028, 0.015)), + blockRequestProcessingTime: metrics.GetOrRegisterTimer("block_request_processing_time", nil), // initialize code request stats - codeRequest: metrics.GetOrRegisterCounter("code_request_count", cmetrics.Registry), - missingCodeHash: metrics.GetOrRegisterCounter("code_request_missing_code_hash", cmetrics.Registry), - tooManyHashesRequested: metrics.GetOrRegisterCounter("code_request_too_many_hashes", cmetrics.Registry), - duplicateHashesRequested: metrics.GetOrRegisterCounter("code_request_duplicate_hashes", cmetrics.Registry), - codeReadDuration: metrics.GetOrRegisterTimer("code_request_read_time", cmetrics.Registry), - codeBytesReturned: metrics.GetOrRegisterHistogram("code_request_bytes_returned", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), + codeRequest: metrics.GetOrRegisterCounter("code_request_count", nil), + missingCodeHash: metrics.GetOrRegisterCounter("code_request_missing_code_hash", nil), + tooManyHashesRequested: metrics.GetOrRegisterCounter("code_request_too_many_hashes", nil), + duplicateHashesRequested: metrics.GetOrRegisterCounter("code_request_duplicate_hashes", nil), + codeReadDuration: metrics.GetOrRegisterTimer("code_request_read_time", nil), + codeBytesReturned: metrics.GetOrRegisterHistogram("code_request_bytes_returned", nil, metrics.NewExpDecaySample(1028, 0.015)), // initialize leafs request stats - leafsRequest: metrics.GetOrRegisterCounter("leafs_request_count", cmetrics.Registry), - invalidLeafsRequest: metrics.GetOrRegisterCounter("leafs_request_invalid", cmetrics.Registry), - leafsRequestProcessingTime: metrics.GetOrRegisterTimer("leafs_request_processing_time", cmetrics.Registry), - leafsReturned: metrics.GetOrRegisterHistogram("leafs_request_total_leafs", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), - leafsReadTime: metrics.GetOrRegisterTimer("leafs_request_read_time", cmetrics.Registry), - snapshotReadTime: metrics.GetOrRegisterTimer("leafs_request_snapshot_read_time", cmetrics.Registry), - generateRangeProofTime: metrics.GetOrRegisterTimer("leafs_request_generate_range_proof_time", cmetrics.Registry), - proofValsReturned: metrics.GetOrRegisterHistogram("leafs_request_proof_vals_returned", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)), - missingRoot: metrics.GetOrRegisterCounter("leafs_request_missing_root", cmetrics.Registry), - trieError: metrics.GetOrRegisterCounter("leafs_request_trie_error", cmetrics.Registry), - proofError: metrics.GetOrRegisterCounter("leafs_request_proof_error", cmetrics.Registry), - snapshotReadError: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_error", cmetrics.Registry), - snapshotReadAttempt: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_attempt", cmetrics.Registry), - snapshotReadSuccess: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_success", cmetrics.Registry), - snapshotSegmentValid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_valid", cmetrics.Registry), - snapshotSegmentInvalid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_invalid", cmetrics.Registry), + leafsRequest: metrics.GetOrRegisterCounter("leafs_request_count", nil), + invalidLeafsRequest: metrics.GetOrRegisterCounter("leafs_request_invalid", nil), + leafsRequestProcessingTime: metrics.GetOrRegisterTimer("leafs_request_processing_time", nil), + leafsReturned: metrics.GetOrRegisterHistogram("leafs_request_total_leafs", nil, metrics.NewExpDecaySample(1028, 0.015)), + leafsReadTime: metrics.GetOrRegisterTimer("leafs_request_read_time", nil), + snapshotReadTime: metrics.GetOrRegisterTimer("leafs_request_snapshot_read_time", nil), + generateRangeProofTime: metrics.GetOrRegisterTimer("leafs_request_generate_range_proof_time", nil), + proofValsReturned: metrics.GetOrRegisterHistogram("leafs_request_proof_vals_returned", nil, metrics.NewExpDecaySample(1028, 0.015)), + missingRoot: metrics.GetOrRegisterCounter("leafs_request_missing_root", nil), + trieError: metrics.GetOrRegisterCounter("leafs_request_trie_error", nil), + proofError: metrics.GetOrRegisterCounter("leafs_request_proof_error", nil), + snapshotReadError: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_error", nil), + snapshotReadAttempt: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_attempt", nil), + snapshotReadSuccess: metrics.GetOrRegisterCounter("leafs_request_snapshot_read_success", nil), + snapshotSegmentValid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_valid", nil), + snapshotSegmentInvalid: metrics.GetOrRegisterCounter("leafs_request_snapshot_segment_invalid", nil), } } diff --git a/sync/statesync/trie_sync_stats.go b/sync/statesync/trie_sync_stats.go index 3c624ca87d..b0e80041f1 100644 --- a/sync/statesync/trie_sync_stats.go +++ b/sync/statesync/trie_sync_stats.go @@ -10,7 +10,6 @@ import ( utils_math "github.com/ava-labs/avalanchego/utils/math" "github.com/ava-labs/avalanchego/utils/timer" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/common" "github.com/ava-labs/libevm/log" "github.com/ava-labs/libevm/metrics" @@ -50,9 +49,9 @@ func newTrieSyncStats() *trieSyncStats { lastUpdated: now, // metrics - totalLeafs: metrics.GetOrRegisterCounter("state_sync_total_leafs", cmetrics.Registry), - leafsRateGauge: metrics.GetOrRegisterGauge("state_sync_leafs_per_second", cmetrics.Registry), - triesSegmented: metrics.GetOrRegisterCounter("state_sync_tries_segmented", cmetrics.Registry), + totalLeafs: metrics.GetOrRegisterCounter("state_sync_total_leafs", nil), + leafsRateGauge: metrics.GetOrRegisterGauge("state_sync_leafs_per_second", nil), + triesSegmented: metrics.GetOrRegisterCounter("state_sync_tries_segmented", nil), } } diff --git a/triedb/hashdb/database.go b/triedb/hashdb/database.go index 6d5e157ea3..9eaf25fc7a 100644 --- a/triedb/hashdb/database.go +++ b/triedb/hashdb/database.go @@ -35,7 +35,6 @@ import ( "github.com/ava-labs/coreth/core/rawdb" "github.com/ava-labs/coreth/core/types" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/coreth/utils" "github.com/ava-labs/libevm/common" "github.com/ava-labs/libevm/ethdb" @@ -54,35 +53,35 @@ const ( ) var ( - memcacheCleanHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/hit", cmetrics.Registry) - memcacheCleanMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/miss", cmetrics.Registry) - memcacheCleanReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/read", cmetrics.Registry) - memcacheCleanWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/write", cmetrics.Registry) - - memcacheDirtyHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/hit", cmetrics.Registry) - memcacheDirtyMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/miss", cmetrics.Registry) - memcacheDirtyReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/read", cmetrics.Registry) - memcacheDirtyWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/write", cmetrics.Registry) - - memcacheDirtySizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/size", cmetrics.Registry) - memcacheDirtyChildSizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/childsize", cmetrics.Registry) - memcacheDirtyNodesGauge = metrics.NewRegisteredGauge("hashdb/memcache/dirty/nodes", cmetrics.Registry) - - memcacheFlushMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/count", cmetrics.Registry) - memcacheFlushTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/time", cmetrics.Registry) - memcacheFlushLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/locktime", cmetrics.Registry) - memcacheFlushNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/nodes", cmetrics.Registry) - memcacheFlushBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/bytes", cmetrics.Registry) - - memcacheGCTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/gc/time", cmetrics.Registry) - memcacheGCNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/nodes", cmetrics.Registry) - memcacheGCBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/bytes", cmetrics.Registry) - - memcacheCommitMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/count", cmetrics.Registry) - memcacheCommitTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/time", cmetrics.Registry) - memcacheCommitLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/locktime", cmetrics.Registry) - memcacheCommitNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/nodes", cmetrics.Registry) - memcacheCommitBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/bytes", cmetrics.Registry) + memcacheCleanHitMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/hit", nil) + memcacheCleanMissMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/miss", nil) + memcacheCleanReadMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/read", nil) + memcacheCleanWriteMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/write", nil) + + memcacheDirtyHitMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/hit", nil) + memcacheDirtyMissMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/miss", nil) + memcacheDirtyReadMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/read", nil) + memcacheDirtyWriteMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/write", nil) + + memcacheDirtySizeGauge = metrics.GetOrRegisterGaugeFloat64("hashdb/memcache/dirty/size", nil) + memcacheDirtyChildSizeGauge = metrics.GetOrRegisterGaugeFloat64("hashdb/memcache/dirty/childsize", nil) + memcacheDirtyNodesGauge = metrics.GetOrRegisterGauge("hashdb/memcache/dirty/nodes", nil) + + memcacheFlushMeter = metrics.GetOrRegisterMeter("hashdb/memcache/flush/count", nil) + memcacheFlushTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/flush/time", nil) + memcacheFlushLockTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/flush/locktime", nil) + memcacheFlushNodesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/flush/nodes", nil) + memcacheFlushBytesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/flush/bytes", nil) + + memcacheGCTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/gc/time", nil) + memcacheGCNodesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/gc/nodes", nil) + memcacheGCBytesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/gc/bytes", nil) + + memcacheCommitMeter = metrics.GetOrRegisterMeter("hashdb/memcache/commit/count", nil) + memcacheCommitTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/commit/time", nil) + memcacheCommitLockTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/commit/locktime", nil) + memcacheCommitNodesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/commit/nodes", nil) + memcacheCommitBytesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/commit/bytes", nil) ) // ChildResolver defines the required method to decode the provided diff --git a/triedb/pathdb/metrics.go b/triedb/pathdb/metrics.go index 9831497b70..2b12bcbd1d 100644 --- a/triedb/pathdb/metrics.go +++ b/triedb/pathdb/metrics.go @@ -27,38 +27,37 @@ package pathdb import ( - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) // nolint: unused var ( - cleanHitMeter = metrics.NewRegisteredMeter("pathdb/clean/hit", cmetrics.Registry) - cleanMissMeter = metrics.NewRegisteredMeter("pathdb/clean/miss", cmetrics.Registry) - cleanReadMeter = metrics.NewRegisteredMeter("pathdb/clean/read", cmetrics.Registry) - cleanWriteMeter = metrics.NewRegisteredMeter("pathdb/clean/write", cmetrics.Registry) - - dirtyHitMeter = metrics.NewRegisteredMeter("pathdb/dirty/hit", cmetrics.Registry) - dirtyMissMeter = metrics.NewRegisteredMeter("pathdb/dirty/miss", cmetrics.Registry) - dirtyReadMeter = metrics.NewRegisteredMeter("pathdb/dirty/read", cmetrics.Registry) - dirtyWriteMeter = metrics.NewRegisteredMeter("pathdb/dirty/write", cmetrics.Registry) - dirtyNodeHitDepthHist = metrics.NewRegisteredHistogram("pathdb/dirty/depth", cmetrics.Registry, metrics.NewExpDecaySample(1028, 0.015)) - - cleanFalseMeter = metrics.NewRegisteredMeter("pathdb/clean/false", cmetrics.Registry) - dirtyFalseMeter = metrics.NewRegisteredMeter("pathdb/dirty/false", cmetrics.Registry) - diskFalseMeter = metrics.NewRegisteredMeter("pathdb/disk/false", cmetrics.Registry) - - commitTimeTimer = metrics.NewRegisteredTimer("pathdb/commit/time", cmetrics.Registry) - commitNodesMeter = metrics.NewRegisteredMeter("pathdb/commit/nodes", cmetrics.Registry) - commitBytesMeter = metrics.NewRegisteredMeter("pathdb/commit/bytes", cmetrics.Registry) - - gcNodesMeter = metrics.NewRegisteredMeter("pathdb/gc/nodes", cmetrics.Registry) - gcBytesMeter = metrics.NewRegisteredMeter("pathdb/gc/bytes", cmetrics.Registry) - - diffLayerBytesMeter = metrics.NewRegisteredMeter("pathdb/diff/bytes", cmetrics.Registry) - diffLayerNodesMeter = metrics.NewRegisteredMeter("pathdb/diff/nodes", cmetrics.Registry) - - historyBuildTimeMeter = metrics.NewRegisteredTimer("pathdb/history/time", cmetrics.Registry) - historyDataBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/data", cmetrics.Registry) - historyIndexBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/index", cmetrics.Registry) + cleanHitMeter = metrics.GetOrRegisterMeter("pathdb/clean/hit", nil) + cleanMissMeter = metrics.GetOrRegisterMeter("pathdb/clean/miss", nil) + cleanReadMeter = metrics.GetOrRegisterMeter("pathdb/clean/read", nil) + cleanWriteMeter = metrics.GetOrRegisterMeter("pathdb/clean/write", nil) + + dirtyHitMeter = metrics.GetOrRegisterMeter("pathdb/dirty/hit", nil) + dirtyMissMeter = metrics.GetOrRegisterMeter("pathdb/dirty/miss", nil) + dirtyReadMeter = metrics.GetOrRegisterMeter("pathdb/dirty/read", nil) + dirtyWriteMeter = metrics.GetOrRegisterMeter("pathdb/dirty/write", nil) + dirtyNodeHitDepthHist = metrics.GetOrRegisterHistogram("pathdb/dirty/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + + cleanFalseMeter = metrics.GetOrRegisterMeter("pathdb/clean/false", nil) + dirtyFalseMeter = metrics.GetOrRegisterMeter("pathdb/dirty/false", nil) + diskFalseMeter = metrics.GetOrRegisterMeter("pathdb/disk/false", nil) + + commitTimeTimer = metrics.GetOrRegisterTimer("pathdb/commit/time", nil) + commitNodesMeter = metrics.GetOrRegisterMeter("pathdb/commit/nodes", nil) + commitBytesMeter = metrics.GetOrRegisterMeter("pathdb/commit/bytes", nil) + + gcNodesMeter = metrics.GetOrRegisterMeter("pathdb/gc/nodes", nil) + gcBytesMeter = metrics.GetOrRegisterMeter("pathdb/gc/bytes", nil) + + diffLayerBytesMeter = metrics.GetOrRegisterMeter("pathdb/diff/bytes", nil) + diffLayerNodesMeter = metrics.GetOrRegisterMeter("pathdb/diff/nodes", nil) + + historyBuildTimeMeter = metrics.GetOrRegisterTimer("pathdb/history/time", nil) + historyDataBytesMeter = metrics.GetOrRegisterMeter("pathdb/history/bytes/data", nil) + historyIndexBytesMeter = metrics.GetOrRegisterMeter("pathdb/history/bytes/index", nil) ) diff --git a/utils/metered_cache.go b/utils/metered_cache.go index bfd02c74c1..ee1807e36f 100644 --- a/utils/metered_cache.go +++ b/utils/metered_cache.go @@ -9,7 +9,6 @@ import ( "time" "github.com/VictoriaMetrics/fastcache" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -46,13 +45,13 @@ func NewMeteredCache(size int, namespace string, updateFrequency uint64) *Metere } if namespace != "" { // only register stats if a namespace is provided. - mc.entriesCount = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/entriesCount", namespace), cmetrics.Registry) - mc.bytesSize = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/bytesSize", namespace), cmetrics.Registry) - mc.collisions = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/collisions", namespace), cmetrics.Registry) - mc.gets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/gets", namespace), cmetrics.Registry) - mc.sets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/sets", namespace), cmetrics.Registry) - mc.misses = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/misses", namespace), cmetrics.Registry) - mc.statsTime = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/statsTime", namespace), cmetrics.Registry) + mc.entriesCount = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/entriesCount", namespace), nil) + mc.bytesSize = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/bytesSize", namespace), nil) + mc.collisions = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/collisions", namespace), nil) + mc.gets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/gets", namespace), nil) + mc.sets = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/sets", namespace), nil) + mc.misses = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/misses", namespace), nil) + mc.statsTime = metrics.GetOrRegisterGauge(fmt.Sprintf("%s/statsTime", namespace), nil) } return mc } diff --git a/warp/handlers/stats.go b/warp/handlers/stats.go index 04288efc6e..a316cad9c8 100644 --- a/warp/handlers/stats.go +++ b/warp/handlers/stats.go @@ -6,7 +6,6 @@ package handlers import ( "time" - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -25,14 +24,14 @@ type handlerStats struct { func newStats() *handlerStats { return &handlerStats{ - messageSignatureRequest: metrics.NewRegisteredCounter("message_signature_request_count", cmetrics.Registry), - messageSignatureHit: metrics.NewRegisteredCounter("message_signature_request_hit", cmetrics.Registry), - messageSignatureMiss: metrics.NewRegisteredCounter("message_signature_request_miss", cmetrics.Registry), - messageSignatureRequestDuration: metrics.NewRegisteredGauge("message_signature_request_duration", cmetrics.Registry), - blockSignatureRequest: metrics.NewRegisteredCounter("block_signature_request_count", cmetrics.Registry), - blockSignatureHit: metrics.NewRegisteredCounter("block_signature_request_hit", cmetrics.Registry), - blockSignatureMiss: metrics.NewRegisteredCounter("block_signature_request_miss", cmetrics.Registry), - blockSignatureRequestDuration: metrics.NewRegisteredGauge("block_signature_request_duration", cmetrics.Registry), + messageSignatureRequest: metrics.GetOrRegisterCounter("message_signature_request_count", nil), + messageSignatureHit: metrics.GetOrRegisterCounter("message_signature_request_hit", nil), + messageSignatureMiss: metrics.GetOrRegisterCounter("message_signature_request_miss", nil), + messageSignatureRequestDuration: metrics.GetOrRegisterGauge("message_signature_request_duration", nil), + blockSignatureRequest: metrics.GetOrRegisterCounter("block_signature_request_count", nil), + blockSignatureHit: metrics.GetOrRegisterCounter("block_signature_request_hit", nil), + blockSignatureMiss: metrics.GetOrRegisterCounter("block_signature_request_miss", nil), + blockSignatureRequestDuration: metrics.GetOrRegisterGauge("block_signature_request_duration", nil), } } diff --git a/warp/verifier_stats.go b/warp/verifier_stats.go index 5179b87491..d986d26eee 100644 --- a/warp/verifier_stats.go +++ b/warp/verifier_stats.go @@ -4,7 +4,6 @@ package warp import ( - cmetrics "github.com/ava-labs/coreth/metrics" "github.com/ava-labs/libevm/metrics" ) @@ -16,8 +15,8 @@ type verifierStats struct { func newVerifierStats() *verifierStats { return &verifierStats{ - messageParseFail: metrics.NewRegisteredCounter("warp_backend_message_parse_fail", cmetrics.Registry), - blockValidationFail: metrics.NewRegisteredCounter("warp_backend_block_validation_fail", cmetrics.Registry), + messageParseFail: metrics.GetOrRegisterCounter("warp_backend_message_parse_fail", nil), + blockValidationFail: metrics.GetOrRegisterCounter("warp_backend_block_validation_fail", nil), } } From fdc73545e23e90ba994839c6cebacf25d91d2a73 Mon Sep 17 00:00:00 2001 From: Quentin Mc Gaw Date: Thu, 6 Mar 2025 09:36:48 +0100 Subject: [PATCH 3/3] Use https://github.com/ava-labs/libevm/pull/159 --- accounts/abi/bind/bind_test.go | 5 ++ core/blockchain.go | 72 ++++++++++---------- core/state/snapshot/snapshot.go | 84 +++++++++++------------ core/txpool/blobpool/metrics.go | 88 ++++++++++++------------- core/txpool/legacypool/legacypool.go | 44 ++++++------- go.mod | 2 + go.sum | 4 +- rpc/metrics.go | 8 +-- scripts/tests.e2e.sh | 1 + triedb/hashdb/database.go | 58 ++++++++-------- triedb/pathdb/metrics.go | 60 ++++++++--------- warp/handlers/signature_request_test.go | 2 + warp/handlers/stats.go | 27 +++++--- warp/verifier_backend_test.go | 9 +++ warp/verifier_stats.go | 4 +- 15 files changed, 247 insertions(+), 221 deletions(-) diff --git a/accounts/abi/bind/bind_test.go b/accounts/abi/bind/bind_test.go index c1035f6b8a..b50a8424d3 100644 --- a/accounts/abi/bind/bind_test.go +++ b/accounts/abi/bind/bind_test.go @@ -2179,6 +2179,11 @@ func golangBindings(t *testing.T, overload bool) { if out, err := replacer.CombinedOutput(); err != nil { t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out) } + replacer = exec.Command(gocmd, "mod", "edit", "-x", "-require", "github.com/ava-labs/libevm@v0.0.0", "-replace", "github.com/ava-labs/libevm=github.com/ava-labs/libevm@v0.0.0-20250306081429-d1e374a7f932") + replacer.Dir = pkg + if out, err := replacer.CombinedOutput(); err != nil { + t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out) + } tidier := exec.Command(gocmd, "mod", "tidy", "-compat=1.22") tidier.Dir = pkg if out, err := tidier.CombinedOutput(); err != nil { diff --git a/core/blockchain.go b/core/blockchain.go index a526c5896f..91742bc9a0 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -61,42 +61,42 @@ import ( ) var ( - accountReadTimer = metrics.GetOrRegisterCounter("chain/account/reads", nil) - accountHashTimer = metrics.GetOrRegisterCounter("chain/account/hashes", nil) - accountUpdateTimer = metrics.GetOrRegisterCounter("chain/account/updates", nil) - accountCommitTimer = metrics.GetOrRegisterCounter("chain/account/commits", nil) - storageReadTimer = metrics.GetOrRegisterCounter("chain/storage/reads", nil) - storageHashTimer = metrics.GetOrRegisterCounter("chain/storage/hashes", nil) - storageUpdateTimer = metrics.GetOrRegisterCounter("chain/storage/updates", nil) - storageCommitTimer = metrics.GetOrRegisterCounter("chain/storage/commits", nil) - snapshotAccountReadTimer = metrics.GetOrRegisterCounter("chain/snapshot/account/reads", nil) - snapshotStorageReadTimer = metrics.GetOrRegisterCounter("chain/snapshot/storage/reads", nil) - snapshotCommitTimer = metrics.GetOrRegisterCounter("chain/snapshot/commits", nil) - - triedbCommitTimer = metrics.GetOrRegisterCounter("chain/triedb/commits", nil) - - blockInsertTimer = metrics.GetOrRegisterCounter("chain/block/inserts", nil) - blockInsertCount = metrics.GetOrRegisterCounter("chain/block/inserts/count", nil) - blockContentValidationTimer = metrics.GetOrRegisterCounter("chain/block/validations/content", nil) - blockStateInitTimer = metrics.GetOrRegisterCounter("chain/block/inits/state", nil) - blockExecutionTimer = metrics.GetOrRegisterCounter("chain/block/executions", nil) - blockTrieOpsTimer = metrics.GetOrRegisterCounter("chain/block/trie", nil) - blockValidationTimer = metrics.GetOrRegisterCounter("chain/block/validations/state", nil) - blockWriteTimer = metrics.GetOrRegisterCounter("chain/block/writes", nil) - - acceptorQueueGauge = metrics.GetOrRegisterGauge("chain/acceptor/queue/size", nil) - acceptorWorkTimer = metrics.GetOrRegisterCounter("chain/acceptor/work", nil) - acceptorWorkCount = metrics.GetOrRegisterCounter("chain/acceptor/work/count", nil) - processedBlockGasUsedCounter = metrics.GetOrRegisterCounter("chain/block/gas/used/processed", nil) - acceptedBlockGasUsedCounter = metrics.GetOrRegisterCounter("chain/block/gas/used/accepted", nil) - badBlockCounter = metrics.GetOrRegisterCounter("chain/block/bad/count", nil) - - txUnindexTimer = metrics.GetOrRegisterCounter("chain/txs/unindex", nil) - acceptedTxsCounter = metrics.GetOrRegisterCounter("chain/txs/accepted", nil) - processedTxsCounter = metrics.GetOrRegisterCounter("chain/txs/processed", nil) - - acceptedLogsCounter = metrics.GetOrRegisterCounter("chain/logs/accepted", nil) - processedLogsCounter = metrics.GetOrRegisterCounter("chain/logs/processed", nil) + accountReadTimer = metrics.GetOrRegisterOrOverrideCounter("chain/account/reads", nil) + accountHashTimer = metrics.GetOrRegisterOrOverrideCounter("chain/account/hashes", nil) + accountUpdateTimer = metrics.GetOrRegisterOrOverrideCounter("chain/account/updates", nil) + accountCommitTimer = metrics.GetOrRegisterOrOverrideCounter("chain/account/commits", nil) + storageReadTimer = metrics.GetOrRegisterOrOverrideCounter("chain/storage/reads", nil) + storageHashTimer = metrics.GetOrRegisterOrOverrideCounter("chain/storage/hashes", nil) + storageUpdateTimer = metrics.GetOrRegisterOrOverrideCounter("chain/storage/updates", nil) + storageCommitTimer = metrics.GetOrRegisterOrOverrideCounter("chain/storage/commits", nil) + snapshotAccountReadTimer = metrics.GetOrRegisterOrOverrideCounter("chain/snapshot/account/reads", nil) + snapshotStorageReadTimer = metrics.GetOrRegisterOrOverrideCounter("chain/snapshot/storage/reads", nil) + snapshotCommitTimer = metrics.GetOrRegisterOrOverrideCounter("chain/snapshot/commits", nil) + + triedbCommitTimer = metrics.GetOrRegisterOrOverrideCounter("chain/triedb/commits", nil) + + blockInsertTimer = metrics.NewRegisteredCounter("chain/block/inserts", nil) + blockInsertCount = metrics.NewRegisteredCounter("chain/block/inserts/count", nil) + blockContentValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/content", nil) + blockStateInitTimer = metrics.NewRegisteredCounter("chain/block/inits/state", nil) + blockExecutionTimer = metrics.NewRegisteredCounter("chain/block/executions", nil) + blockTrieOpsTimer = metrics.NewRegisteredCounter("chain/block/trie", nil) + blockValidationTimer = metrics.NewRegisteredCounter("chain/block/validations/state", nil) + blockWriteTimer = metrics.NewRegisteredCounter("chain/block/writes", nil) + + acceptorQueueGauge = metrics.NewRegisteredGauge("chain/acceptor/queue/size", nil) + acceptorWorkTimer = metrics.NewRegisteredCounter("chain/acceptor/work", nil) + acceptorWorkCount = metrics.NewRegisteredCounter("chain/acceptor/work/count", nil) + processedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/processed", nil) + acceptedBlockGasUsedCounter = metrics.NewRegisteredCounter("chain/block/gas/used/accepted", nil) + badBlockCounter = metrics.NewRegisteredCounter("chain/block/bad/count", nil) + + txUnindexTimer = metrics.NewRegisteredCounter("chain/txs/unindex", nil) + acceptedTxsCounter = metrics.NewRegisteredCounter("chain/txs/accepted", nil) + processedTxsCounter = metrics.NewRegisteredCounter("chain/txs/processed", nil) + + acceptedLogsCounter = metrics.NewRegisteredCounter("chain/logs/accepted", nil) + processedLogsCounter = metrics.NewRegisteredCounter("chain/logs/processed", nil) ErrRefuseToCorruptArchiver = errors.New("node has operated with pruning disabled, shutting down to prevent missing tries") diff --git a/core/state/snapshot/snapshot.go b/core/state/snapshot/snapshot.go index d638fc5320..917bbf368c 100644 --- a/core/state/snapshot/snapshot.go +++ b/core/state/snapshot/snapshot.go @@ -56,48 +56,48 @@ const ( ) var ( - snapshotCleanAccountHitMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/hit", nil) - snapshotCleanAccountMissMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/miss", nil) - snapshotCleanAccountInexMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/inex", nil) - snapshotCleanAccountReadMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/read", nil) - snapshotCleanAccountWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/account/write", nil) - - snapshotCleanStorageHitMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/hit", nil) - snapshotCleanStorageMissMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/miss", nil) - snapshotCleanStorageInexMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/inex", nil) - snapshotCleanStorageReadMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/read", nil) - snapshotCleanStorageWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/clean/storage/write", nil) - - snapshotDirtyAccountHitMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/hit", nil) - snapshotDirtyAccountMissMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/miss", nil) - snapshotDirtyAccountInexMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/inex", nil) - snapshotDirtyAccountReadMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/read", nil) - snapshotDirtyAccountWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/account/write", nil) - - snapshotDirtyStorageHitMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/hit", nil) - snapshotDirtyStorageMissMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/miss", nil) - snapshotDirtyStorageInexMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/inex", nil) - snapshotDirtyStorageReadMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/read", nil) - snapshotDirtyStorageWriteMeter = metrics.GetOrRegisterMeter("state/snapshot/dirty/storage/write", nil) - - snapshotDirtyAccountHitDepthHist = metrics.GetOrRegisterHistogram("state/snapshot/dirty/account/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) - snapshotDirtyStorageHitDepthHist = metrics.GetOrRegisterHistogram("state/snapshot/dirty/storage/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) - - snapshotFlushAccountItemMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/account/item", nil) - snapshotFlushAccountSizeMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/account/size", nil) - snapshotFlushStorageItemMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/storage/item", nil) - snapshotFlushStorageSizeMeter = metrics.GetOrRegisterMeter("state/snapshot/flush/storage/size", nil) - - snapshotBloomIndexTimer = metrics.GetOrRegisterResettingTimer("state/snapshot/bloom/index", nil) - snapshotBloomErrorGauge = metrics.GetOrRegisterGaugeFloat64("state/snapshot/bloom/error", nil) - - snapshotBloomAccountTrueHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/account/truehit", nil) - snapshotBloomAccountFalseHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/account/falsehit", nil) - snapshotBloomAccountMissMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/account/miss", nil) - - snapshotBloomStorageTrueHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/storage/truehit", nil) - snapshotBloomStorageFalseHitMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/storage/falsehit", nil) - snapshotBloomStorageMissMeter = metrics.GetOrRegisterMeter("state/snapshot/bloom/storage/miss", nil) + snapshotCleanAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/hit", nil) + snapshotCleanAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/miss", nil) + snapshotCleanAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/inex", nil) + snapshotCleanAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/read", nil) + snapshotCleanAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/account/write", nil) + + snapshotCleanStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/hit", nil) + snapshotCleanStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/miss", nil) + snapshotCleanStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/inex", nil) + snapshotCleanStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/read", nil) + snapshotCleanStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/clean/storage/write", nil) + + snapshotDirtyAccountHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/hit", nil) + snapshotDirtyAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/miss", nil) + snapshotDirtyAccountInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/inex", nil) + snapshotDirtyAccountReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/read", nil) + snapshotDirtyAccountWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/account/write", nil) + + snapshotDirtyStorageHitMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/hit", nil) + snapshotDirtyStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/miss", nil) + snapshotDirtyStorageInexMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/inex", nil) + snapshotDirtyStorageReadMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/read", nil) + snapshotDirtyStorageWriteMeter = metrics.NewRegisteredMeter("state/snapshot/dirty/storage/write", nil) + + snapshotDirtyAccountHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/account/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + snapshotDirtyStorageHitDepthHist = metrics.NewRegisteredHistogram("state/snapshot/dirty/storage/hit/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + + snapshotFlushAccountItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/item", nil) + snapshotFlushAccountSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/account/size", nil) + snapshotFlushStorageItemMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/item", nil) + snapshotFlushStorageSizeMeter = metrics.NewRegisteredMeter("state/snapshot/flush/storage/size", nil) + + snapshotBloomIndexTimer = metrics.NewRegisteredResettingTimer("state/snapshot/bloom/index", nil) + snapshotBloomErrorGauge = metrics.NewRegisteredGaugeFloat64("state/snapshot/bloom/error", nil) + + snapshotBloomAccountTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/truehit", nil) + snapshotBloomAccountFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/falsehit", nil) + snapshotBloomAccountMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/account/miss", nil) + + snapshotBloomStorageTrueHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/truehit", nil) + snapshotBloomStorageFalseHitMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/falsehit", nil) + snapshotBloomStorageMissMeter = metrics.NewRegisteredMeter("state/snapshot/bloom/storage/miss", nil) // ErrSnapshotStale is returned from data accessors if the underlying snapshot // layer had been invalidated due to the chain progressing forward far enough diff --git a/core/txpool/blobpool/metrics.go b/core/txpool/blobpool/metrics.go index 4c278c16a5..ccd4dbb574 100644 --- a/core/txpool/blobpool/metrics.go +++ b/core/txpool/blobpool/metrics.go @@ -26,24 +26,22 @@ package blobpool -import ( - "github.com/ava-labs/libevm/metrics" -) +import "github.com/ava-labs/libevm/metrics" var ( // datacapGauge tracks the user's configured capacity for the blob pool. It // is mostly a way to expose/debug issues. - datacapGauge = metrics.GetOrRegisterGauge("blobpool/datacap", nil) + datacapGauge = metrics.NewRegisteredGauge("blobpool/datacap", nil) // The below metrics track the per-datastore metrics for the primary blob // store and the temporary limbo store. - datausedGauge = metrics.GetOrRegisterGauge("blobpool/dataused", nil) - datarealGauge = metrics.GetOrRegisterGauge("blobpool/datareal", nil) - slotusedGauge = metrics.GetOrRegisterGauge("blobpool/slotused", nil) + datausedGauge = metrics.NewRegisteredGauge("blobpool/dataused", nil) + datarealGauge = metrics.NewRegisteredGauge("blobpool/datareal", nil) + slotusedGauge = metrics.NewRegisteredGauge("blobpool/slotused", nil) - limboDatausedGauge = metrics.GetOrRegisterGauge("blobpool/limbo/dataused", nil) - limboDatarealGauge = metrics.GetOrRegisterGauge("blobpool/limbo/datareal", nil) - limboSlotusedGauge = metrics.GetOrRegisterGauge("blobpool/limbo/slotused", nil) + limboDatausedGauge = metrics.NewRegisteredGauge("blobpool/limbo/dataused", nil) + limboDatarealGauge = metrics.NewRegisteredGauge("blobpool/limbo/datareal", nil) + limboSlotusedGauge = metrics.NewRegisteredGauge("blobpool/limbo/slotused", nil) // The below metrics track the per-shelf metrics for the primary blob store // and the temporary limbo store. @@ -62,56 +60,56 @@ var ( // // There are no oversized data in the limbo, it only contains blobs and some // constant metadata. - oversizedDatausedGauge = metrics.GetOrRegisterGauge("blobpool/oversized/dataused", nil) - oversizedDatagapsGauge = metrics.GetOrRegisterGauge("blobpool/oversized/datagaps", nil) - oversizedSlotusedGauge = metrics.GetOrRegisterGauge("blobpool/oversized/slotused", nil) - oversizedSlotgapsGauge = metrics.GetOrRegisterGauge("blobpool/oversized/slotgaps", nil) + oversizedDatausedGauge = metrics.NewRegisteredGauge("blobpool/oversized/dataused", nil) + oversizedDatagapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/datagaps", nil) + oversizedSlotusedGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotused", nil) + oversizedSlotgapsGauge = metrics.NewRegisteredGauge("blobpool/oversized/slotgaps", nil) // basefeeGauge and blobfeeGauge track the current network 1559 base fee and // 4844 blob fee respectively. - basefeeGauge = metrics.GetOrRegisterGauge("blobpool/basefee", nil) - blobfeeGauge = metrics.GetOrRegisterGauge("blobpool/blobfee", nil) + basefeeGauge = metrics.NewRegisteredGauge("blobpool/basefee", nil) + blobfeeGauge = metrics.NewRegisteredGauge("blobpool/blobfee", nil) // pooltipGauge is the configurable miner tip to permit a transaction into // the pool. - pooltipGauge = metrics.GetOrRegisterGauge("blobpool/pooltip", nil) + pooltipGauge = metrics.NewRegisteredGauge("blobpool/pooltip", nil) // addwait/time, resetwait/time and getwait/time track the rough health of // the pool and whether it's capable of keeping up with the load from the // network. - addwaitHist = metrics.GetOrRegisterHistogram("blobpool/addwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - addtimeHist = metrics.GetOrRegisterHistogram("blobpool/addtime", nil, metrics.NewExpDecaySample(1028, 0.015)) - getwaitHist = metrics.GetOrRegisterHistogram("blobpool/getwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - gettimeHist = metrics.GetOrRegisterHistogram("blobpool/gettime", nil, metrics.NewExpDecaySample(1028, 0.015)) - pendwaitHist = metrics.GetOrRegisterHistogram("blobpool/pendwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - pendtimeHist = metrics.GetOrRegisterHistogram("blobpool/pendtime", nil, metrics.NewExpDecaySample(1028, 0.015)) - resetwaitHist = metrics.GetOrRegisterHistogram("blobpool/resetwait", nil, metrics.NewExpDecaySample(1028, 0.015)) - resettimeHist = metrics.GetOrRegisterHistogram("blobpool/resettime", nil, metrics.NewExpDecaySample(1028, 0.015)) + addwaitHist = metrics.NewRegisteredHistogram("blobpool/addwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + addtimeHist = metrics.NewRegisteredHistogram("blobpool/addtime", nil, metrics.NewExpDecaySample(1028, 0.015)) + getwaitHist = metrics.NewRegisteredHistogram("blobpool/getwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + gettimeHist = metrics.NewRegisteredHistogram("blobpool/gettime", nil, metrics.NewExpDecaySample(1028, 0.015)) + pendwaitHist = metrics.NewRegisteredHistogram("blobpool/pendwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + pendtimeHist = metrics.NewRegisteredHistogram("blobpool/pendtime", nil, metrics.NewExpDecaySample(1028, 0.015)) + resetwaitHist = metrics.NewRegisteredHistogram("blobpool/resetwait", nil, metrics.NewExpDecaySample(1028, 0.015)) + resettimeHist = metrics.NewRegisteredHistogram("blobpool/resettime", nil, metrics.NewExpDecaySample(1028, 0.015)) // The below metrics track various cases where transactions are dropped out // of the pool. Most are exceptional, some are chain progression and some // threshold cappings. - dropInvalidMeter = metrics.GetOrRegisterMeter("blobpool/drop/invalid", nil) // Invalid transaction, consensus change or bugfix, neutral-ish - dropDanglingMeter = metrics.GetOrRegisterMeter("blobpool/drop/dangling", nil) // First nonce gapped, bad - dropFilledMeter = metrics.GetOrRegisterMeter("blobpool/drop/filled", nil) // State full-overlap, chain progress, ok - dropOverlappedMeter = metrics.GetOrRegisterMeter("blobpool/drop/overlapped", nil) // State partial-overlap, chain progress, ok - dropRepeatedMeter = metrics.GetOrRegisterMeter("blobpool/drop/repeated", nil) // Repeated nonce, bad - dropGappedMeter = metrics.GetOrRegisterMeter("blobpool/drop/gapped", nil) // Non-first nonce gapped, bad - dropOverdraftedMeter = metrics.GetOrRegisterMeter("blobpool/drop/overdrafted", nil) // Balance exceeded, bad - dropOvercappedMeter = metrics.GetOrRegisterMeter("blobpool/drop/overcapped", nil) // Per-account cap exceeded, bad - dropOverflownMeter = metrics.GetOrRegisterMeter("blobpool/drop/overflown", nil) // Global disk cap exceeded, neutral-ish - dropUnderpricedMeter = metrics.GetOrRegisterMeter("blobpool/drop/underpriced", nil) // Gas tip changed, neutral - dropReplacedMeter = metrics.GetOrRegisterMeter("blobpool/drop/replaced", nil) // Transaction replaced, neutral + dropInvalidMeter = metrics.NewRegisteredMeter("blobpool/drop/invalid", nil) // Invalid transaction, consensus change or bugfix, neutral-ish + dropDanglingMeter = metrics.NewRegisteredMeter("blobpool/drop/dangling", nil) // First nonce gapped, bad + dropFilledMeter = metrics.NewRegisteredMeter("blobpool/drop/filled", nil) // State full-overlap, chain progress, ok + dropOverlappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overlapped", nil) // State partial-overlap, chain progress, ok + dropRepeatedMeter = metrics.NewRegisteredMeter("blobpool/drop/repeated", nil) // Repeated nonce, bad + dropGappedMeter = metrics.NewRegisteredMeter("blobpool/drop/gapped", nil) // Non-first nonce gapped, bad + dropOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/drop/overdrafted", nil) // Balance exceeded, bad + dropOvercappedMeter = metrics.NewRegisteredMeter("blobpool/drop/overcapped", nil) // Per-account cap exceeded, bad + dropOverflownMeter = metrics.NewRegisteredMeter("blobpool/drop/overflown", nil) // Global disk cap exceeded, neutral-ish + dropUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/drop/underpriced", nil) // Gas tip changed, neutral + dropReplacedMeter = metrics.NewRegisteredMeter("blobpool/drop/replaced", nil) // Transaction replaced, neutral // The below metrics track various outcomes of transactions being added to // the pool. - addInvalidMeter = metrics.GetOrRegisterMeter("blobpool/add/invalid", nil) // Invalid transaction, reject, neutral - addUnderpricedMeter = metrics.GetOrRegisterMeter("blobpool/add/underpriced", nil) // Gas tip too low, neutral - addStaleMeter = metrics.GetOrRegisterMeter("blobpool/add/stale", nil) // Nonce already filled, reject, bad-ish - addGappedMeter = metrics.GetOrRegisterMeter("blobpool/add/gapped", nil) // Nonce gapped, reject, bad-ish - addOverdraftedMeter = metrics.GetOrRegisterMeter("blobpool/add/overdrafted", nil) // Balance exceeded, reject, neutral - addOvercappedMeter = metrics.GetOrRegisterMeter("blobpool/add/overcapped", nil) // Per-account cap exceeded, reject, neutral - addNoreplaceMeter = metrics.GetOrRegisterMeter("blobpool/add/noreplace", nil) // Replacement fees or tips too low, neutral - addNonExclusiveMeter = metrics.GetOrRegisterMeter("blobpool/add/nonexclusive", nil) // Plain transaction from same account exists, reject, neutral - addValidMeter = metrics.GetOrRegisterMeter("blobpool/add/valid", nil) // Valid transaction, add, neutral + addInvalidMeter = metrics.NewRegisteredMeter("blobpool/add/invalid", nil) // Invalid transaction, reject, neutral + addUnderpricedMeter = metrics.NewRegisteredMeter("blobpool/add/underpriced", nil) // Gas tip too low, neutral + addStaleMeter = metrics.NewRegisteredMeter("blobpool/add/stale", nil) // Nonce already filled, reject, bad-ish + addGappedMeter = metrics.NewRegisteredMeter("blobpool/add/gapped", nil) // Nonce gapped, reject, bad-ish + addOverdraftedMeter = metrics.NewRegisteredMeter("blobpool/add/overdrafted", nil) // Balance exceeded, reject, neutral + addOvercappedMeter = metrics.NewRegisteredMeter("blobpool/add/overcapped", nil) // Per-account cap exceeded, reject, neutral + addNoreplaceMeter = metrics.NewRegisteredMeter("blobpool/add/noreplace", nil) // Replacement fees or tips too low, neutral + addNonExclusiveMeter = metrics.NewRegisteredMeter("blobpool/add/nonexclusive", nil) // Plain transaction from same account exists, reject, neutral + addValidMeter = metrics.NewRegisteredMeter("blobpool/add/valid", nil) // Valid transaction, add, neutral ) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index a64618cf7e..a7d0839dc0 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -81,40 +81,40 @@ var ( var ( // Metrics for the pending pool - pendingDiscardMeter = metrics.GetOrRegisterMeter("txpool/pending/discard", nil) - pendingReplaceMeter = metrics.GetOrRegisterMeter("txpool/pending/replace", nil) - pendingRateLimitMeter = metrics.GetOrRegisterMeter("txpool/pending/ratelimit", nil) // Dropped due to rate limiting - pendingNofundsMeter = metrics.GetOrRegisterMeter("txpool/pending/nofunds", nil) // Dropped due to out-of-funds + pendingDiscardMeter = metrics.NewRegisteredMeter("txpool/pending/discard", nil) + pendingReplaceMeter = metrics.NewRegisteredMeter("txpool/pending/replace", nil) + pendingRateLimitMeter = metrics.NewRegisteredMeter("txpool/pending/ratelimit", nil) // Dropped due to rate limiting + pendingNofundsMeter = metrics.NewRegisteredMeter("txpool/pending/nofunds", nil) // Dropped due to out-of-funds // Metrics for the queued pool - queuedDiscardMeter = metrics.GetOrRegisterMeter("txpool/queued/discard", nil) - queuedReplaceMeter = metrics.GetOrRegisterMeter("txpool/queued/replace", nil) - queuedRateLimitMeter = metrics.GetOrRegisterMeter("txpool/queued/ratelimit", nil) // Dropped due to rate limiting - queuedNofundsMeter = metrics.GetOrRegisterMeter("txpool/queued/nofunds", nil) // Dropped due to out-of-funds - queuedEvictionMeter = metrics.GetOrRegisterMeter("txpool/queued/eviction", nil) // Dropped due to lifetime + queuedDiscardMeter = metrics.NewRegisteredMeter("txpool/queued/discard", nil) + queuedReplaceMeter = metrics.NewRegisteredMeter("txpool/queued/replace", nil) + queuedRateLimitMeter = metrics.NewRegisteredMeter("txpool/queued/ratelimit", nil) // Dropped due to rate limiting + queuedNofundsMeter = metrics.NewRegisteredMeter("txpool/queued/nofunds", nil) // Dropped due to out-of-funds + queuedEvictionMeter = metrics.NewRegisteredMeter("txpool/queued/eviction", nil) // Dropped due to lifetime // General tx metrics - knownTxMeter = metrics.GetOrRegisterMeter("txpool/known", nil) - validTxMeter = metrics.GetOrRegisterMeter("txpool/valid", nil) - invalidTxMeter = metrics.GetOrRegisterMeter("txpool/invalid", nil) - underpricedTxMeter = metrics.GetOrRegisterMeter("txpool/underpriced", nil) - overflowedTxMeter = metrics.GetOrRegisterMeter("txpool/overflowed", nil) + knownTxMeter = metrics.NewRegisteredMeter("txpool/known", nil) + validTxMeter = metrics.NewRegisteredMeter("txpool/valid", nil) + invalidTxMeter = metrics.NewRegisteredMeter("txpool/invalid", nil) + underpricedTxMeter = metrics.NewRegisteredMeter("txpool/underpriced", nil) + overflowedTxMeter = metrics.NewRegisteredMeter("txpool/overflowed", nil) // throttleTxMeter counts how many transactions are rejected due to too-many-changes between // txpool reorgs. - throttleTxMeter = metrics.GetOrRegisterMeter("txpool/throttle", nil) + throttleTxMeter = metrics.NewRegisteredMeter("txpool/throttle", nil) // reorgDurationTimer measures how long time a txpool reorg takes. - reorgDurationTimer = metrics.GetOrRegisterTimer("txpool/reorgtime", nil) + reorgDurationTimer = metrics.NewRegisteredTimer("txpool/reorgtime", nil) // dropBetweenReorgHistogram counts how many drops we experience between two reorg runs. It is expected // that this number is pretty low, since txpool reorgs happen very frequently. - dropBetweenReorgHistogram = metrics.GetOrRegisterHistogram("txpool/dropbetweenreorg", nil, metrics.NewExpDecaySample(1028, 0.015)) + dropBetweenReorgHistogram = metrics.NewRegisteredHistogram("txpool/dropbetweenreorg", nil, metrics.NewExpDecaySample(1028, 0.015)) - pendingGauge = metrics.GetOrRegisterGauge("txpool/pending", nil) - queuedGauge = metrics.GetOrRegisterGauge("txpool/queued", nil) - localGauge = metrics.GetOrRegisterGauge("txpool/local", nil) - slotsGauge = metrics.GetOrRegisterGauge("txpool/slots", nil) + pendingGauge = metrics.NewRegisteredGauge("txpool/pending", nil) + queuedGauge = metrics.NewRegisteredGauge("txpool/queued", nil) + localGauge = metrics.NewRegisteredGauge("txpool/local", nil) + slotsGauge = metrics.NewRegisteredGauge("txpool/slots", nil) - reheapTimer = metrics.GetOrRegisterTimer("txpool/reheap", nil) + reheapTimer = metrics.NewRegisteredTimer("txpool/reheap", nil) ) // BlockChain defines the minimal set of methods needed to back a tx pool with diff --git a/go.mod b/go.mod index 40b78d2cb8..529a6f924c 100644 --- a/go.mod +++ b/go.mod @@ -135,3 +135,5 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) + +replace github.com/ava-labs/libevm => github.com/ava-labs/libevm v0.0.0-20250306081429-d1e374a7f932 diff --git a/go.sum b/go.sum index d8f3ed41d8..c0a99cafcd 100644 --- a/go.sum +++ b/go.sum @@ -58,8 +58,8 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/ava-labs/avalanchego v1.12.3-0.20250220150250-9e886ffca1ba h1:VTGpl5PwfPo9046h6x7BvtjDGxEAPreNwaWK/0dwyFk= github.com/ava-labs/avalanchego v1.12.3-0.20250220150250-9e886ffca1ba/go.mod h1:oURZGkQSIWOGBqP2Lirf768MVAePVGdvYQfmHUZS4aE= -github.com/ava-labs/libevm v1.13.14-0.2.0.rc.3 h1:1CWGo2icnX9dRqGQl7CFywYGIZWxe+ucy0w8NAsVTWE= -github.com/ava-labs/libevm v1.13.14-0.2.0.rc.3/go.mod h1:+Iol+sVQ1KyoBsHf3veyrBmHCXr3xXRWq6ZXkgVfNLU= +github.com/ava-labs/libevm v0.0.0-20250306081429-d1e374a7f932 h1:wgX0Y626yEdjTyPNINTIOzzY0OrByxO47PFjKifgIs0= +github.com/ava-labs/libevm v0.0.0-20250306081429-d1e374a7f932/go.mod h1:+Iol+sVQ1KyoBsHf3veyrBmHCXr3xXRWq6ZXkgVfNLU= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= diff --git a/rpc/metrics.go b/rpc/metrics.go index 7b7525d774..a4469545d7 100644 --- a/rpc/metrics.go +++ b/rpc/metrics.go @@ -34,14 +34,14 @@ import ( ) var ( - rpcRequestGauge = metrics.GetOrRegisterGauge("rpc/requests", nil) - successfulRequestGauge = metrics.GetOrRegisterGauge("rpc/success", nil) - failedRequestGauge = metrics.GetOrRegisterGauge("rpc/failure", nil) + rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", nil) + successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", nil) + failedRequestGauge = metrics.NewRegisteredGauge("rpc/failure", nil) // serveTimeHistName is the prefix of the per-request serving time histograms. serveTimeHistName = "rpc/duration" - rpcServingTimer = metrics.GetOrRegisterTimer("rpc/duration/all", nil) + rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil) ) // updateServeTimeHistogram tracks the serving time of a remote RPC call. diff --git a/scripts/tests.e2e.sh b/scripts/tests.e2e.sh index 85f5bd3d48..ba828ec11e 100755 --- a/scripts/tests.e2e.sh +++ b/scripts/tests.e2e.sh @@ -45,6 +45,7 @@ git checkout -B "test-${AVALANCHE_VERSION}" "${AVALANCHE_VERSION}" echo "updating coreth dependency to point to ${CORETH_PATH}" go mod edit -replace "github.com/ava-labs/coreth=${CORETH_PATH}" +go mod edit -replace "github.com/ava-labs/libevm=github.com/ava-labs/libevm@v0.0.0-20250306081429-d1e374a7f932" go mod tidy echo "building avalanchego" diff --git a/triedb/hashdb/database.go b/triedb/hashdb/database.go index 9eaf25fc7a..1a2e975074 100644 --- a/triedb/hashdb/database.go +++ b/triedb/hashdb/database.go @@ -53,35 +53,35 @@ const ( ) var ( - memcacheCleanHitMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/hit", nil) - memcacheCleanMissMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/miss", nil) - memcacheCleanReadMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/read", nil) - memcacheCleanWriteMeter = metrics.GetOrRegisterMeter("hashdb/memcache/clean/write", nil) - - memcacheDirtyHitMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/hit", nil) - memcacheDirtyMissMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/miss", nil) - memcacheDirtyReadMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/read", nil) - memcacheDirtyWriteMeter = metrics.GetOrRegisterMeter("hashdb/memcache/dirty/write", nil) - - memcacheDirtySizeGauge = metrics.GetOrRegisterGaugeFloat64("hashdb/memcache/dirty/size", nil) - memcacheDirtyChildSizeGauge = metrics.GetOrRegisterGaugeFloat64("hashdb/memcache/dirty/childsize", nil) - memcacheDirtyNodesGauge = metrics.GetOrRegisterGauge("hashdb/memcache/dirty/nodes", nil) - - memcacheFlushMeter = metrics.GetOrRegisterMeter("hashdb/memcache/flush/count", nil) - memcacheFlushTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/flush/time", nil) - memcacheFlushLockTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/flush/locktime", nil) - memcacheFlushNodesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/flush/nodes", nil) - memcacheFlushBytesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/flush/bytes", nil) - - memcacheGCTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/gc/time", nil) - memcacheGCNodesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/gc/nodes", nil) - memcacheGCBytesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/gc/bytes", nil) - - memcacheCommitMeter = metrics.GetOrRegisterMeter("hashdb/memcache/commit/count", nil) - memcacheCommitTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/commit/time", nil) - memcacheCommitLockTimeTimer = metrics.GetOrRegisterResettingTimer("hashdb/memcache/commit/locktime", nil) - memcacheCommitNodesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/commit/nodes", nil) - memcacheCommitBytesMeter = metrics.GetOrRegisterMeter("hashdb/memcache/commit/bytes", nil) + memcacheCleanHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/hit", nil) + memcacheCleanMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/miss", nil) + memcacheCleanReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/read", nil) + memcacheCleanWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/clean/write", nil) + + memcacheDirtyHitMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/hit", nil) + memcacheDirtyMissMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/miss", nil) + memcacheDirtyReadMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/read", nil) + memcacheDirtyWriteMeter = metrics.NewRegisteredMeter("hashdb/memcache/dirty/write", nil) + + memcacheDirtySizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/size", nil) + memcacheDirtyChildSizeGauge = metrics.NewRegisteredGaugeFloat64("hashdb/memcache/dirty/childsize", nil) + memcacheDirtyNodesGauge = metrics.NewRegisteredGauge("hashdb/memcache/dirty/nodes", nil) + + memcacheFlushMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/count", nil) + memcacheFlushTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/time", nil) + memcacheFlushLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/flush/locktime", nil) + memcacheFlushNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/nodes", nil) + memcacheFlushBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/flush/bytes", nil) + + memcacheGCTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/gc/time", nil) + memcacheGCNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/nodes", nil) + memcacheGCBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/gc/bytes", nil) + + memcacheCommitMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/count", nil) + memcacheCommitTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/time", nil) + memcacheCommitLockTimeTimer = metrics.NewRegisteredResettingTimer("hashdb/memcache/commit/locktime", nil) + memcacheCommitNodesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/nodes", nil) + memcacheCommitBytesMeter = metrics.NewRegisteredMeter("hashdb/memcache/commit/bytes", nil) ) // ChildResolver defines the required method to decode the provided diff --git a/triedb/pathdb/metrics.go b/triedb/pathdb/metrics.go index 2b12bcbd1d..21038ecfc6 100644 --- a/triedb/pathdb/metrics.go +++ b/triedb/pathdb/metrics.go @@ -26,38 +26,36 @@ package pathdb -import ( - "github.com/ava-labs/libevm/metrics" -) +import "github.com/ava-labs/libevm/metrics" // nolint: unused var ( - cleanHitMeter = metrics.GetOrRegisterMeter("pathdb/clean/hit", nil) - cleanMissMeter = metrics.GetOrRegisterMeter("pathdb/clean/miss", nil) - cleanReadMeter = metrics.GetOrRegisterMeter("pathdb/clean/read", nil) - cleanWriteMeter = metrics.GetOrRegisterMeter("pathdb/clean/write", nil) - - dirtyHitMeter = metrics.GetOrRegisterMeter("pathdb/dirty/hit", nil) - dirtyMissMeter = metrics.GetOrRegisterMeter("pathdb/dirty/miss", nil) - dirtyReadMeter = metrics.GetOrRegisterMeter("pathdb/dirty/read", nil) - dirtyWriteMeter = metrics.GetOrRegisterMeter("pathdb/dirty/write", nil) - dirtyNodeHitDepthHist = metrics.GetOrRegisterHistogram("pathdb/dirty/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) - - cleanFalseMeter = metrics.GetOrRegisterMeter("pathdb/clean/false", nil) - dirtyFalseMeter = metrics.GetOrRegisterMeter("pathdb/dirty/false", nil) - diskFalseMeter = metrics.GetOrRegisterMeter("pathdb/disk/false", nil) - - commitTimeTimer = metrics.GetOrRegisterTimer("pathdb/commit/time", nil) - commitNodesMeter = metrics.GetOrRegisterMeter("pathdb/commit/nodes", nil) - commitBytesMeter = metrics.GetOrRegisterMeter("pathdb/commit/bytes", nil) - - gcNodesMeter = metrics.GetOrRegisterMeter("pathdb/gc/nodes", nil) - gcBytesMeter = metrics.GetOrRegisterMeter("pathdb/gc/bytes", nil) - - diffLayerBytesMeter = metrics.GetOrRegisterMeter("pathdb/diff/bytes", nil) - diffLayerNodesMeter = metrics.GetOrRegisterMeter("pathdb/diff/nodes", nil) - - historyBuildTimeMeter = metrics.GetOrRegisterTimer("pathdb/history/time", nil) - historyDataBytesMeter = metrics.GetOrRegisterMeter("pathdb/history/bytes/data", nil) - historyIndexBytesMeter = metrics.GetOrRegisterMeter("pathdb/history/bytes/index", nil) + cleanHitMeter = metrics.NewRegisteredMeter("pathdb/clean/hit", nil) + cleanMissMeter = metrics.NewRegisteredMeter("pathdb/clean/miss", nil) + cleanReadMeter = metrics.NewRegisteredMeter("pathdb/clean/read", nil) + cleanWriteMeter = metrics.NewRegisteredMeter("pathdb/clean/write", nil) + + dirtyHitMeter = metrics.NewRegisteredMeter("pathdb/dirty/hit", nil) + dirtyMissMeter = metrics.NewRegisteredMeter("pathdb/dirty/miss", nil) + dirtyReadMeter = metrics.NewRegisteredMeter("pathdb/dirty/read", nil) + dirtyWriteMeter = metrics.NewRegisteredMeter("pathdb/dirty/write", nil) + dirtyNodeHitDepthHist = metrics.NewRegisteredHistogram("pathdb/dirty/depth", nil, metrics.NewExpDecaySample(1028, 0.015)) + + cleanFalseMeter = metrics.NewRegisteredMeter("pathdb/clean/false", nil) + dirtyFalseMeter = metrics.NewRegisteredMeter("pathdb/dirty/false", nil) + diskFalseMeter = metrics.NewRegisteredMeter("pathdb/disk/false", nil) + + commitTimeTimer = metrics.NewRegisteredTimer("pathdb/commit/time", nil) + commitNodesMeter = metrics.NewRegisteredMeter("pathdb/commit/nodes", nil) + commitBytesMeter = metrics.NewRegisteredMeter("pathdb/commit/bytes", nil) + + gcNodesMeter = metrics.NewRegisteredMeter("pathdb/gc/nodes", nil) + gcBytesMeter = metrics.NewRegisteredMeter("pathdb/gc/bytes", nil) + + diffLayerBytesMeter = metrics.NewRegisteredMeter("pathdb/diff/bytes", nil) + diffLayerNodesMeter = metrics.NewRegisteredMeter("pathdb/diff/nodes", nil) + + historyBuildTimeMeter = metrics.NewRegisteredTimer("pathdb/history/time", nil) + historyDataBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/data", nil) + historyIndexBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/index", nil) ) diff --git a/warp/handlers/signature_request_test.go b/warp/handlers/signature_request_test.go index 5b30d7bc55..8bdd189c4e 100644 --- a/warp/handlers/signature_request_test.go +++ b/warp/handlers/signature_request_test.go @@ -107,6 +107,7 @@ func TestMessageSignatureHandler(t *testing.T) { for name, test := range tests { t.Run(name, func(t *testing.T) { handler := NewSignatureRequestHandler(backend, message.Codec) + t.Cleanup(handler.stats.clear) request, expectedResponse := test.setup() responseBytes, err := handler.OnMessageSignatureRequest(context.Background(), ids.GenerateTestNodeID(), 1, request) @@ -196,6 +197,7 @@ func TestBlockSignatureHandler(t *testing.T) { for name, test := range tests { t.Run(name, func(t *testing.T) { handler := NewSignatureRequestHandler(backend, message.Codec) + t.Cleanup(handler.stats.clear) request, expectedResponse := test.setup() responseBytes, err := handler.OnBlockSignatureRequest(context.Background(), ids.GenerateTestNodeID(), 1, request) diff --git a/warp/handlers/stats.go b/warp/handlers/stats.go index a316cad9c8..2d1b76c3c6 100644 --- a/warp/handlers/stats.go +++ b/warp/handlers/stats.go @@ -24,14 +24,14 @@ type handlerStats struct { func newStats() *handlerStats { return &handlerStats{ - messageSignatureRequest: metrics.GetOrRegisterCounter("message_signature_request_count", nil), - messageSignatureHit: metrics.GetOrRegisterCounter("message_signature_request_hit", nil), - messageSignatureMiss: metrics.GetOrRegisterCounter("message_signature_request_miss", nil), - messageSignatureRequestDuration: metrics.GetOrRegisterGauge("message_signature_request_duration", nil), - blockSignatureRequest: metrics.GetOrRegisterCounter("block_signature_request_count", nil), - blockSignatureHit: metrics.GetOrRegisterCounter("block_signature_request_hit", nil), - blockSignatureMiss: metrics.GetOrRegisterCounter("block_signature_request_miss", nil), - blockSignatureRequestDuration: metrics.GetOrRegisterGauge("block_signature_request_duration", nil), + messageSignatureRequest: metrics.NewRegisteredCounter("message_signature_request_count", nil), + messageSignatureHit: metrics.NewRegisteredCounter("message_signature_request_hit", nil), + messageSignatureMiss: metrics.NewRegisteredCounter("message_signature_request_miss", nil), + messageSignatureRequestDuration: metrics.NewRegisteredGauge("message_signature_request_duration", nil), + blockSignatureRequest: metrics.NewRegisteredCounter("block_signature_request_count", nil), + blockSignatureHit: metrics.NewRegisteredCounter("block_signature_request_hit", nil), + blockSignatureMiss: metrics.NewRegisteredCounter("block_signature_request_miss", nil), + blockSignatureRequestDuration: metrics.NewRegisteredGauge("block_signature_request_duration", nil), } } @@ -47,3 +47,14 @@ func (h *handlerStats) IncBlockSignatureMiss() { h.blockSignatureMiss.Inc(1) func (h *handlerStats) UpdateBlockSignatureRequestTime(duration time.Duration) { h.blockSignatureRequestDuration.Inc(int64(duration)) } + +func (h *handlerStats) clear() { + h.messageSignatureRequest.Clear() + h.messageSignatureHit.Clear() + h.messageSignatureMiss.Clear() + h.messageSignatureRequestDuration.Update(0) + h.blockSignatureRequest.Clear() + h.blockSignatureHit.Clear() + h.blockSignatureMiss.Clear() + h.blockSignatureRequestDuration.Update(0) +} diff --git a/warp/verifier_backend_test.go b/warp/verifier_backend_test.go index 718fd78dd1..08a2d946ec 100644 --- a/warp/verifier_backend_test.go +++ b/warp/verifier_backend_test.go @@ -20,6 +20,7 @@ import ( "github.com/ava-labs/coreth/plugin/evm/testutils" "github.com/ava-labs/coreth/utils" "github.com/ava-labs/coreth/warp/warptest" + "github.com/ava-labs/libevm/metrics" "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" ) @@ -102,6 +103,7 @@ func TestAddressedCallSignatures(t *testing.T) { sigCache = &cache.Empty[ids.ID, []byte]{} } warpBackend, err := NewBackend(snowCtx.NetworkID, snowCtx.ChainID, warpSigner, warptest.EmptyBlockClient, database, sigCache, [][]byte{offchainMessage.Bytes()}) + t.Cleanup(unregisterVerifierStats) require.NoError(t, err) handler := acp118.NewCachedHandler(sigCache, warpBackend, warpSigner) @@ -222,7 +224,9 @@ func TestBlockSignatures(t *testing.T) { sigCache, nil, ) + t.Cleanup(unregisterVerifierStats) require.NoError(t, err) + handler := acp118.NewCachedHandler(sigCache, warpBackend, warpSigner) requestBytes, expectedResponse := test.setup() @@ -258,3 +262,8 @@ func TestBlockSignatures(t *testing.T) { } } } + +func unregisterVerifierStats() { + metrics.Unregister("warp_backend_message_parse_fail") + metrics.Unregister("warp_backend_block_validation_fail") +} diff --git a/warp/verifier_stats.go b/warp/verifier_stats.go index d986d26eee..6a47c31397 100644 --- a/warp/verifier_stats.go +++ b/warp/verifier_stats.go @@ -15,8 +15,8 @@ type verifierStats struct { func newVerifierStats() *verifierStats { return &verifierStats{ - messageParseFail: metrics.GetOrRegisterCounter("warp_backend_message_parse_fail", nil), - blockValidationFail: metrics.GetOrRegisterCounter("warp_backend_block_validation_fail", nil), + messageParseFail: metrics.NewRegisteredCounter("warp_backend_message_parse_fail", nil), + blockValidationFail: metrics.NewRegisteredCounter("warp_backend_block_validation_fail", nil), } }