From cd4a5d8a72b93668b2761ae942eb657eeef2b88d Mon Sep 17 00:00:00 2001 From: mawei029 Date: Fri, 27 Jun 2025 10:11:15 +0800 Subject: [PATCH] fix(blobnode): disk broken, rocksdb sst file corruption with: #1000334360 Signed-off-by: mawei029 --- blobstore/blobnode/db/metadb.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/blobstore/blobnode/db/metadb.go b/blobstore/blobnode/db/metadb.go index 75508270f..00215b12d 100644 --- a/blobstore/blobnode/db/metadb.go +++ b/blobstore/blobnode/db/metadb.go @@ -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) +}