ethdb: print warning log if db is performing compaction

This commit is contained in:
rjl493456442 2018-05-21 13:47:59 +08:00
parent a3562823dd
commit 8e55f91630

View file

@ -207,6 +207,7 @@ func (db *LDBDatabase) meter(refresh time.Duration) {
delaystats [2]int64 delaystats [2]int64
lastWriteDelay time.Time lastWriteDelay time.Time
lastWriteDelayN time.Time lastWriteDelayN time.Time
lastWritePaused time.Time
) )
// Iterate ad infinitum and collect the stats // Iterate ad infinitum and collect the stats
@ -267,8 +268,9 @@ func (db *LDBDatabase) meter(refresh time.Duration) {
delayN int64 delayN int64
delayDuration string delayDuration string
duration time.Duration duration time.Duration
paused bool
) )
if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s", &delayN, &delayDuration); n != 2 || err != nil { if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil {
db.log.Error("Write delay statistic not found") db.log.Error("Write delay statistic not found")
return return
} }
@ -301,6 +303,15 @@ func (db *LDBDatabase) meter(refresh time.Duration) {
lastWriteDelay = time.Now() lastWriteDelay = time.Now()
} }
} }
// If leveldb's compaction has been going on for a long time, print a warning log here.
// If a warning that db is performing compaction has been displayed,
// any subsequent warnings will be withhold for 1 minute to don't overwhelm the user.
if paused && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 &&
time.Now().After(lastWritePaused.Add(writeDelayWarningThrottler)) {
db.log.Warn("Database is performing the compaction, all write operations will be paused")
lastWritePaused = time.Now()
}
delaystats[0], delaystats[1] = delayN, duration.Nanoseconds() delaystats[0], delaystats[1] = delayN, duration.Nanoseconds()
// Retrieve the database iostats. // Retrieve the database iostats.