Centralize leveldb.OpenFile allowing Recover corrupted db everywhere (#1072)

This commit is contained in:
Adrià Cidre 2018-07-02 10:42:16 +02:00 committed by GitHub
parent 8aa046e893
commit 237aeea7b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 9 deletions

View File

@ -6,8 +6,8 @@ import (
"log"
"os"
"github.com/status-im/status-go/db"
"github.com/status-im/status-go/mailserver"
"github.com/syndtr/goleveldb/leveldb"
)
var (
@ -47,7 +47,7 @@ func init() {
}
func main() {
db, err := leveldb.OpenFile(*dbPath, nil)
db, err := db.Open(*dbPath, nil)
if err != nil {
log.Fatal(err)
}

View File

@ -45,14 +45,15 @@ func Create(path, dbName string) (*leveldb.DB, error) {
}
path = filepath.Join(path, dbName)
opts := &opt.Options{OpenFilesCacheCapacity: 5}
db, err := leveldb.OpenFile(path, opts)
return Open(path, &opt.Options{OpenFilesCacheCapacity: 5})
}
// Open opens an existing leveldb database
func Open(path string, opts *opt.Options) (db *leveldb.DB, err error) {
db, err = leveldb.OpenFile(path, opts)
if _, iscorrupted := err.(*errors.ErrCorrupted); iscorrupted {
log.Info("database is corrupted trying to recover", "path", path)
db, err = leveldb.RecoverFile(path, nil)
}
if err != nil {
return nil, err
}
return db, err
return
}

View File

@ -29,6 +29,7 @@ import (
"github.com/ethereum/go-ethereum/metrics"
"github.com/ethereum/go-ethereum/rlp"
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
"github.com/status-im/status-go/db"
"github.com/status-im/status-go/params"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/iterator"
@ -119,7 +120,7 @@ func (s *WMailServer) Init(shh *whisper.Whisper, config *params.WhisperConfig) e
return errPasswordNotProvided
}
db, err := leveldb.OpenFile(config.DataDir, nil)
db, err := db.Open(config.DataDir, nil)
if err != nil {
return fmt.Errorf("open DB: %s", err)
}