mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
fix(blobnode): disk broken, rocksdb sst file corruption
with: #1000334360 Signed-off-by: mawei029 <mawei2@oppo.com>
This commit is contained in:
parent
ad264f1da5
commit
cd4a5d8a72
@ -18,6 +18,7 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
bncom "github.com/cubefs/cubefs/blobstore/blobnode/base"
|
||||
@ -30,6 +31,9 @@ var (
|
||||
ErrStopped = errors.New("db: err stopped")
|
||||
ErrShardMetaNotDir = errors.New("db: shard meta not directory")
|
||||
ErrWrongConfig = errors.New("db: wrong config item")
|
||||
|
||||
// it means db sst file corruption, disk broken
|
||||
dbCorruption = "corruption: bad table magic number"
|
||||
)
|
||||
|
||||
type MetaHandler interface {
|
||||
@ -52,7 +56,7 @@ type metadb struct {
|
||||
}
|
||||
|
||||
func (md *metadb) handleError(err error) {
|
||||
if bncom.IsEIO(err) && md.handleIOError != nil {
|
||||
if (bncom.IsEIO(err) || isMetaEIO(err)) && md.handleIOError != nil {
|
||||
md.handleIOError(err)
|
||||
}
|
||||
}
|
||||
@ -163,3 +167,11 @@ func newMetaDB(path string, config MetaConfig) (md *metadb, err error) {
|
||||
func NewMetaHandler(dirpath string, config MetaConfig) (mh MetaHandler, err error) {
|
||||
return newMetaDB(dirpath, config)
|
||||
}
|
||||
|
||||
func isMetaEIO(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
errMsg := strings.ToLower(err.Error())
|
||||
return strings.Contains(errMsg, dbCorruption)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user