diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 18d14b9597..16661378f8 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -294,37 +294,7 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( return nil, err } db.db = innerDB - - db.compTimeMeter = metrics.GetOrRegisterMeter(namespace+"compact/time", nil) - db.compReadMeter = metrics.GetOrRegisterMeter(namespace+"compact/input", nil) - db.compWriteMeter = metrics.GetOrRegisterMeter(namespace+"compact/output", nil) - db.diskSizeGauge = metrics.GetOrRegisterGauge(namespace+"disk/size", nil) - db.diskReadMeter = metrics.GetOrRegisterMeter(namespace+"disk/read", nil) - db.diskWriteMeter = metrics.GetOrRegisterMeter(namespace+"disk/write", nil) - db.writeDelayMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/duration", nil) - db.writeDelayNMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/counter", nil) - db.memCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/memory", nil) - db.level0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/level0", nil) - db.nonlevel0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/nonlevel0", nil) - db.seekCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/seek", nil) - db.manualMemAllocGauge = metrics.GetOrRegisterGauge(namespace+"memory/manualalloc", nil) - db.liveMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/live", nil) - db.zombieMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/zombie", nil) - db.blockCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/hit", nil) - db.blockCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/miss", nil) - db.tableCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/hit", nil) - db.tableCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/miss", nil) - db.filterHitGauge = metrics.GetOrRegisterGauge(namespace+"filter/hit", nil) - db.filterMissGauge = metrics.GetOrRegisterGauge(namespace+"filter/miss", nil) - db.estimatedCompDebtGauge = metrics.GetOrRegisterGauge(namespace+"compact/estimateDebt", nil) - db.liveCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/count", nil) - db.liveCompSizeGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/size", nil) - db.readExistedCount = metrics.GetOrRegisterCounter(namespace+"read/existed/count", nil) - db.readNotfoundCount = metrics.GetOrRegisterCounter(namespace+"read/notfound/count", nil) - db.writeCount = metrics.GetOrRegisterCounter(namespace+"write/count", nil) - db.readExistedTime = metrics.NewRegisteredResettingTimer(namespace+"read/existed/duration", nil) - db.readNotfoundTime = metrics.NewRegisteredResettingTimer(namespace+"read/notfound/duration", nil) - db.writeTime = metrics.NewRegisteredResettingTimer(namespace+"write/duration", nil) + db.registerMetrics(namespace) // Start up the metrics gathering and return go db.meter(metricsGatheringInterval, namespace) @@ -521,6 +491,40 @@ func (d *Database) SyncKeyValue() error { return d.db.Apply(b, pebble.Sync) } +// registerMetrics registers the metrics for the database. +func (d *Database) registerMetrics(namespace string) { + d.compTimeMeter = metrics.GetOrRegisterMeter(namespace+"compact/time", nil) + d.compReadMeter = metrics.GetOrRegisterMeter(namespace+"compact/input", nil) + d.compWriteMeter = metrics.GetOrRegisterMeter(namespace+"compact/output", nil) + d.diskSizeGauge = metrics.GetOrRegisterGauge(namespace+"disk/size", nil) + d.diskReadMeter = metrics.GetOrRegisterMeter(namespace+"disk/read", nil) + d.diskWriteMeter = metrics.GetOrRegisterMeter(namespace+"disk/write", nil) + d.writeDelayMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/duration", nil) + d.writeDelayNMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/counter", nil) + d.memCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/memory", nil) + d.level0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/level0", nil) + d.nonlevel0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/nonlevel0", nil) + d.seekCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/seek", nil) + d.manualMemAllocGauge = metrics.GetOrRegisterGauge(namespace+"memory/manualalloc", nil) + d.liveMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/live", nil) + d.zombieMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/zombie", nil) + d.blockCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/hit", nil) + d.blockCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/miss", nil) + d.tableCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/hit", nil) + d.tableCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/miss", nil) + d.filterHitGauge = metrics.GetOrRegisterGauge(namespace+"filter/hit", nil) + d.filterMissGauge = metrics.GetOrRegisterGauge(namespace+"filter/miss", nil) + d.estimatedCompDebtGauge = metrics.GetOrRegisterGauge(namespace+"compact/estimateDebt", nil) + d.liveCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/count", nil) + d.liveCompSizeGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/size", nil) + d.readExistedCount = metrics.GetOrRegisterCounter(namespace+"read/existed/count", nil) + d.readNotfoundCount = metrics.GetOrRegisterCounter(namespace+"read/notfound/count", nil) + d.writeCount = metrics.GetOrRegisterCounter(namespace+"write/count", nil) + d.readExistedTime = metrics.NewRegisteredResettingTimer(namespace+"read/existed/duration", nil) + d.readNotfoundTime = metrics.NewRegisteredResettingTimer(namespace+"read/notfound/duration", nil) + d.writeTime = metrics.NewRegisteredResettingTimer(namespace+"write/duration", nil) +} + // meter periodically retrieves internal pebble counters and reports them to // the metrics subsystem. func (d *Database) meter(refresh time.Duration, namespace string) { diff --git a/ethdb/pebble/pebble_test.go b/ethdb/pebble/pebble_test.go index e703a8d0ce..f56122beac 100644 --- a/ethdb/pebble/pebble_test.go +++ b/ethdb/pebble/pebble_test.go @@ -29,15 +29,17 @@ import ( func TestPebbleDB(t *testing.T) { t.Run("DatabaseSuite", func(t *testing.T) { dbtest.TestDatabaseSuite(t, func() ethdb.KeyValueStore { - db, err := pebble.Open("", &pebble.Options{ + idb, err := pebble.Open("", &pebble.Options{ FS: vfs.NewMem(), }) if err != nil { t.Fatal(err) } - return &Database{ - db: db, + db := &Database{ + db: idb, } + db.registerMetrics("") + return db }) }) }