diff --git a/metanode/inode.go b/metanode/inode.go index 5a679da47..7214773ae 100644 --- a/metanode/inode.go +++ b/metanode/inode.go @@ -162,6 +162,9 @@ func (i *Inode) setVer(seq uint64) { } func (i *Inode) insertEkRefMap(mpId uint64, ek *proto.ExtentKey) { + if !clusterEnableSnapshot { + return + } if i.multiSnap == nil { i.multiSnap = NewMultiSnap(i.getVer()) } @@ -1893,6 +1896,9 @@ func (i *Inode) CreateUnlinkVer(mpVer uint64, nVer uint64) { } func (i *Inode) CreateVer(ver uint64) { + if !clusterEnableSnapshot { + return + } // inode copy not include multi ver array ino := i.CopyDirectly().(*Inode) ino.Extents = NewSortedExtents() @@ -1913,6 +1919,9 @@ func (i *Inode) CreateVer(ver uint64) { } func (i *Inode) buildMultiSnap() { + if !clusterEnableSnapshot { + return + } if i.multiSnap == nil { i.multiSnap = &InodeMultiSnap{} } @@ -1969,6 +1978,9 @@ func (i *Inode) SplitExtentWithCheck(param *AppendExtParam) (delExtents []proto. // try to create version between curVer and seq of multiSnap.multiVersions[0] in verList func (i *Inode) CreateLowerVersion(curVer uint64, verlist *proto.VolVersionInfoList) (err error) { + if !clusterEnableSnapshot { + return + } verlist.RWLock.RLock() defer verlist.RWLock.RUnlock() @@ -2056,7 +2068,7 @@ func (i *Inode) AppendExtentWithCheck(param *AppendExtParam) (delExtents []proto } // TODO:support hybridcloud // multi version take effect - if i.getVer() > 0 && len(delExtents) > 0 { + if clusterEnableSnapshot && i.getVer() > 0 && len(delExtents) > 0 { var err error if err = i.CreateLowerVersion(i.getVer(), param.multiVersionList); err != nil { return @@ -2120,6 +2132,9 @@ func (i *Inode) DecNLinkByVer(verSeq uint64) { } func (i *Inode) DecSplitExts(mpId uint64, delExtents interface{}) { + if !clusterEnableSnapshot { + return + } log.LogDebugf("[DecSplitExts] mpId [%v] inode[%v]", mpId, i.Inode) cnt := len(delExtents.([]proto.ExtentKey)) for id := 0; id < cnt; id++ { diff --git a/metanode/partition_fsmop_inode.go b/metanode/partition_fsmop_inode.go index 9a32f5290..8ef53c923 100644 --- a/metanode/partition_fsmop_inode.go +++ b/metanode/partition_fsmop_inode.go @@ -577,13 +577,17 @@ func (mp *metaPartition) fsmAppendExtentsWithCheck(ino *Inode, isSplit bool) (st // conflict need delete eks[0], to clear garbage data if status == proto.OpConflictExtentsErr { log.LogInfof("action[fsmAppendExtentsWithCheck] mp[%v] OpConflictExtentsErr [%v]", mp.config.PartitionId, eks[:1]) - if !storage.IsTinyExtent(eks[0].ExtentId) && eks[0].ExtentOffset >= util.ExtentSize { + if !storage.IsTinyExtent(eks[0].ExtentId) && eks[0].ExtentOffset >= util.ExtentSize && clusterEnableSnapshot { eks[0].SetSplit(true) } mp.extDelCh <- eks[:1] } } else { - // TODO: support hybrid-cloud + if !clusterEnableSnapshot { + status = proto.OpArgMismatchErr + log.LogErrorf("action[fsmAppendExtentsWithCheck] mp[%v] snapshot not enabled", mp.config.PartitionId) + return + } // only the ek itself will be moved to level before // ino verseq be set with mp ver before submit in case other mp be updated while on flight, which will lead to // inconsistent between raft pairs diff --git a/metanode/sorted_extents.go b/metanode/sorted_extents.go index 858769604..05e17f279 100644 --- a/metanode/sorted_extents.go +++ b/metanode/sorted_extents.go @@ -148,6 +148,9 @@ func (se *SortedExtents) Append(ek proto.ExtentKey) (deleteExtents []proto.Exten } func storeEkSplit(mpId uint64, inodeID uint64, ekRef *sync.Map, ek *proto.ExtentKey) (id uint64) { + if !clusterEnableSnapshot { + return + } if ekRef == nil { log.LogErrorf("[storeEkSplit] mpId [%v] inodeID %v ekRef nil", mpId, inodeID) return @@ -486,14 +489,19 @@ func (se *SortedExtents) Truncate(offset uint64, doOnLastKey func(*proto.ExtentK if doOnLastKey != nil { doOnLastKey(&proto.ExtentKey{Size: uint32(lastKey.FileOffset + uint64(lastKey.Size) - offset)}) } + originSize := lastKey.Size + lastKey.Size = uint32(offset - lastKey.FileOffset) + if !clusterEnableSnapshot { + return + } + rsKey := &proto.ExtentKey{} *rsKey = *lastKey - lastKey.Size = uint32(offset - lastKey.FileOffset) if insertRefMap != nil { insertRefMap(lastKey) } - rsKey.Size -= lastKey.Size + rsKey.Size = originSize - lastKey.Size rsKey.FileOffset += uint64(lastKey.Size) rsKey.ExtentOffset += uint64(lastKey.Size) if insertRefMap != nil {