From 6975172d01292e29c9404eb3322c4629802fe02c Mon Sep 17 00:00:00 2001 From: ucwong Date: Wed, 8 Apr 2020 17:26:16 +0800 Subject: [PATCH] whisper/mailserver : recover corrupt db files before opening (#20891) * whisper/mailserver : recover db file when openfile corrupted * whisper/mailserver : fix db -> s.db * whisper/mailserver : common/errors for dbfile --- whisper/mailserver/mailserver.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/whisper/mailserver/mailserver.go b/whisper/mailserver/mailserver.go index d2c3f116a1..7312bbe23d 100644 --- a/whisper/mailserver/mailserver.go +++ b/whisper/mailserver/mailserver.go @@ -27,6 +27,7 @@ import ( "github.com/ethereum/go-ethereum/rlp" whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/errors" "github.com/syndtr/goleveldb/leveldb/opt" "github.com/syndtr/goleveldb/leveldb/util" ) @@ -70,6 +71,9 @@ func (s *WMailServer) Init(shh *whisper.Whisper, path string, password string, p } s.db, err = leveldb.OpenFile(path, &opt.Options{OpenFilesCacheCapacity: 32}) + if _, iscorrupted := err.(*errors.ErrCorrupted); iscorrupted { + s.db, err = leveldb.RecoverFile(path, nil) + } if err != nil { return fmt.Errorf("open DB file: %s", err) }