From 6975172d01292e29c9404eb3322c4629802fe02c Mon Sep 17 00:00:00 2001
From: ucwong <ucwong@126.com>
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 d2c3f116a..7312bbe23 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)
 	}
-- 
GitLab