Skip to content

Commit 5d1d1a8

Browse files
rjl493456442karalabe
authored andcommitted
consensus, ethdb, metrics: implement forced-meter (#17667)
1 parent 41ac8dd commit 5d1d1a8

File tree

4 files changed

+49
-16
lines changed

4 files changed

+49
-16
lines changed

consensus/ethash/ethash.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ func New(config Config, notify []string, noverify bool) *Ethash {
485485
caches: newlru("cache", config.CachesInMem, newCache),
486486
datasets: newlru("dataset", config.DatasetsInMem, newDataset),
487487
update: make(chan struct{}),
488-
hashrate: metrics.NewMeter(),
488+
hashrate: metrics.NewMeterForced(),
489489
workCh: make(chan *sealTask),
490490
fetchWorkCh: make(chan *sealWork),
491491
submitWorkCh: make(chan *mineResult),
@@ -505,7 +505,7 @@ func NewTester(notify []string, noverify bool) *Ethash {
505505
caches: newlru("cache", 1, newCache),
506506
datasets: newlru("dataset", 1, newDataset),
507507
update: make(chan struct{}),
508-
hashrate: metrics.NewMeter(),
508+
hashrate: metrics.NewMeterForced(),
509509
workCh: make(chan *sealTask),
510510
fetchWorkCh: make(chan *sealWork),
511511
submitWorkCh: make(chan *mineResult),

ethdb/database.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,12 @@ func (db *LDBDatabase) LDB() *leveldb.DB {
155155

156156
// Meter configures the database metrics collectors and
157157
func (db *LDBDatabase) Meter(prefix string) {
158-
if metrics.Enabled {
159-
// Initialize all the metrics collector at the requested prefix
160-
db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil)
161-
db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil)
162-
db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil)
163-
db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil)
164-
db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil)
165-
}
166-
// Initialize write delay metrics no matter we are in metric mode or not.
158+
// Initialize all the metrics collector at the requested prefix
159+
db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil)
160+
db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil)
161+
db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil)
162+
db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil)
163+
db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil)
167164
db.writeDelayMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/duration", nil)
168165
db.writeDelayNMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/counter", nil)
169166

metrics/ewma.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ type EWMA interface {
1717

1818
// NewEWMA constructs a new EWMA with the given alpha.
1919
func NewEWMA(alpha float64) EWMA {
20-
if !Enabled {
21-
return NilEWMA{}
22-
}
2320
return &StandardEWMA{alpha: alpha}
2421
}
2522

metrics/meter.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,17 @@ func GetOrRegisterMeter(name string, r Registry) Meter {
2929
return r.GetOrRegister(name, NewMeter).(Meter)
3030
}
3131

32+
// GetOrRegisterMeterForced returns an existing Meter or constructs and registers a
33+
// new StandardMeter no matter the global switch is enabled or not.
34+
// Be sure to unregister the meter from the registry once it is of no use to
35+
// allow for garbage collection.
36+
func GetOrRegisterMeterForced(name string, r Registry) Meter {
37+
if nil == r {
38+
r = DefaultRegistry
39+
}
40+
return r.GetOrRegister(name, NewMeterForced).(Meter)
41+
}
42+
3243
// NewMeter constructs a new StandardMeter and launches a goroutine.
3344
// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
3445
func NewMeter() Meter {
@@ -46,8 +57,23 @@ func NewMeter() Meter {
4657
return m
4758
}
4859

49-
// NewMeter constructs and registers a new StandardMeter and launches a
50-
// goroutine.
60+
// NewMeterForced constructs a new StandardMeter and launches a goroutine no matter
61+
// the global switch is enabled or not.
62+
// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
63+
func NewMeterForced() Meter {
64+
m := newStandardMeter()
65+
arbiter.Lock()
66+
defer arbiter.Unlock()
67+
arbiter.meters[m] = struct{}{}
68+
if !arbiter.started {
69+
arbiter.started = true
70+
go arbiter.tick()
71+
}
72+
return m
73+
}
74+
75+
// NewRegisteredMeter constructs and registers a new StandardMeter
76+
// and launches a goroutine.
5177
// Be sure to unregister the meter from the registry once it is of no use to
5278
// allow for garbage collection.
5379
func NewRegisteredMeter(name string, r Registry) Meter {
@@ -59,6 +85,19 @@ func NewRegisteredMeter(name string, r Registry) Meter {
5985
return c
6086
}
6187

88+
// NewRegisteredMeterForced constructs and registers a new StandardMeter
89+
// and launches a goroutine no matter the global switch is enabled or not.
90+
// Be sure to unregister the meter from the registry once it is of no use to
91+
// allow for garbage collection.
92+
func NewRegisteredMeterForced(name string, r Registry) Meter {
93+
c := NewMeterForced()
94+
if nil == r {
95+
r = DefaultRegistry
96+
}
97+
r.Register(name, c)
98+
return c
99+
}
100+
62101
// MeterSnapshot is a read-only copy of another Meter.
63102
type MeterSnapshot struct {
64103
count int64

0 commit comments

Comments
 (0)