From 0a7b6fda95b0068e9b12c7adac84c1ed65544e90 Mon Sep 17 00:00:00 2001 From: Victor1319 Date: Wed, 4 Dec 2024 14:46:31 +0800 Subject: [PATCH] fix(meta): to avoid write EXTENT_DEL_V2_xx header twice. #22860885 Signed-off-by: Victor1319 --- metanode/partition_delete_extents.go | 19 ++++++++++++++++--- metanode/partition_fsmop_inode.go | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/metanode/partition_delete_extents.go b/metanode/partition_delete_extents.go index ff145e11e..9566feda2 100644 --- a/metanode/partition_delete_extents.go +++ b/metanode/partition_delete_extents.go @@ -20,6 +20,7 @@ import ( "encoding/binary" "fmt" "io" + "io/fs" "io/ioutil" "os" "path" @@ -58,9 +59,21 @@ func (mp *metaPartition) createExtentDeleteFile(prefix string, idx int64, fileLi log.LogErrorf("[metaPartition] createExtentDeletFile openFile %v %v error %v", mp.config.RootDir, fileName, err) return } - if _, err = fp.Write(extentsFileHeader); err != nil { - log.LogErrorf("[metaPartition] createExtentDeletFile Write %v %v error %v", mp.config.RootDir, fileName, err) - fp.Close() + + var info fs.FileInfo + info, err = fp.Stat() + if err != nil { + log.LogErrorf("createExtentDeleteFile: stat new file failed, dir %s, name %s, err %v", mp.config.RootDir, fileName, err.Error()) + return + } + + if info.Size() > 0 { + log.LogWarnf("createExtentDeleteFile: file are already exist, no need to write header again, dir %s, name %s, size %d", mp.config.RootDir, fileName, info.Size()) + } else { + if _, err = fp.Write(extentsFileHeader); err != nil { + log.LogErrorf("[metaPartition] createExtentDeletFile Write %v %v error %v", mp.config.RootDir, fileName, err) + fp.Close() + } } fileSize = int64(len(extentsFileHeader)) fileList.PushBack(fileName) diff --git a/metanode/partition_fsmop_inode.go b/metanode/partition_fsmop_inode.go index 8ef53c923..d61fa8d2e 100644 --- a/metanode/partition_fsmop_inode.go +++ b/metanode/partition_fsmop_inode.go @@ -884,7 +884,7 @@ func (mp *metaPartition) fsmSendToChan(val []byte, v3 bool) (status uint8) { panic(fmt.Errorf("[fsmDelExtents] unmarshal sortExtents error, mp[%v], err(%s)", mp.config.PartitionId, err.Error())) } - log.LogInfof("fsmDelExtents mp[%v] delExtents(%v)", mp.config.PartitionId, len(sortExtents.eks)) + log.LogWarnf("fsmDelExtents mp[%v] delExtents(%v)", mp.config.PartitionId, len(sortExtents.eks)) mp.extDelCh <- sortExtents.eks return }