aboutsummaryrefslogtreecommitdiff
path: root/weed/filer2
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-05-22 10:54:42 -0700
committerChris Lu <chris.lu@gmail.com>2020-05-22 10:54:42 -0700
commite5a0787653e78178e3d1357127c9d4f954bbeea6 (patch)
tree0b5fa2c9986127f7a496814d70248a5a97dfbd29 /weed/filer2
parentab4c9ac22104b1bf0df53f2c8b46d80e3f143665 (diff)
downloadseaweedfs-e5a0787653e78178e3d1357127c9d4f954bbeea6.tar.xz
seaweedfs-e5a0787653e78178e3d1357127c9d4f954bbeea6.zip
filer: leveldb store add auto recovery, report correct error
fix https://github.com/chrislusf/seaweedfs/issues/1326
Diffstat (limited to 'weed/filer2')
-rw-r--r--weed/filer2/leveldb/leveldb_store.go4
-rw-r--r--weed/filer2/leveldb2/leveldb2_store.go6
2 files changed, 9 insertions, 1 deletions
diff --git a/weed/filer2/leveldb/leveldb_store.go b/weed/filer2/leveldb/leveldb_store.go
index f8e56d93c..675b6e19d 100644
--- a/weed/filer2/leveldb/leveldb_store.go
+++ b/weed/filer2/leveldb/leveldb_store.go
@@ -6,6 +6,7 @@ import (
"fmt"
"github.com/syndtr/goleveldb/leveldb"
+ "github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/opt"
leveldb_util "github.com/syndtr/goleveldb/leveldb/util"
@@ -49,6 +50,9 @@ func (store *LevelDBStore) initialize(dir string) (err error) {
}
if store.db, err = leveldb.OpenFile(dir, opts); err != nil {
+ if errors.IsCorrupted(err) {
+ store.db, err = leveldb.RecoverFile(dir, opts)
+ }
glog.Infof("filer store open dir %s: %v", dir, err)
return
}
diff --git a/weed/filer2/leveldb2/leveldb2_store.go b/weed/filer2/leveldb2/leveldb2_store.go
index 61fd2e9e6..c907e8746 100644
--- a/weed/filer2/leveldb2/leveldb2_store.go
+++ b/weed/filer2/leveldb2/leveldb2_store.go
@@ -9,6 +9,7 @@ import (
"os"
"github.com/syndtr/goleveldb/leveldb"
+ "github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/opt"
leveldb_util "github.com/syndtr/goleveldb/leveldb/util"
@@ -52,9 +53,12 @@ func (store *LevelDB2Store) initialize(dir string, dbCount int) (err error) {
dbFolder := fmt.Sprintf("%s/%02d", dir, d)
os.MkdirAll(dbFolder, 0755)
db, dbErr := leveldb.OpenFile(dbFolder, opts)
+ if errors.IsCorrupted(dbErr) {
+ db, dbErr = leveldb.RecoverFile(dbFolder, opts)
+ }
if dbErr != nil {
glog.Errorf("filer store open dir %s: %v", dbFolder, dbErr)
- return
+ return dbErr
}
store.dbs = append(store.dbs, db)
}