From 5f4ee4eacb073aab9c6fa3cc192f8cd36410a59d Mon Sep 17 00:00:00 2001 From: chihe Date: Tue, 19 Dec 2023 00:20:02 -0800 Subject: [PATCH] fix(metanode): hybrid cloud fix bug when update extent key after migration Signed-off-by: chihe --- metanode/partition_fsmop_inode.go | 23 +++++++++-------------- metanode/partition_op_inode.go | 6 +++++- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/metanode/partition_fsmop_inode.go b/metanode/partition_fsmop_inode.go index c230ff1d3..5ad5cacae 100644 --- a/metanode/partition_fsmop_inode.go +++ b/metanode/partition_fsmop_inode.go @@ -1050,21 +1050,16 @@ func (mp *metaPartition) fsmUpdateExtentKeyAfterMigration(ino *Inode) (resp *Ino } i := item.(*Inode) //only can migrate to HDD or ebs for now - if ino.StorageClass == proto.StorageClass_BlobStore { - //store old ek - i.HybridCouldExtentsMigration.storageClass = i.StorageClass - i.HybridCouldExtentsMigration.sortedEks = i.HybridCouldExtents.sortedEks - i.StorageClass = ino.HybridCouldExtentsMigration.storageClass - i.HybridCouldExtents.sortedEks = ino.HybridCouldExtentsMigration.sortedEks - } else { - tmpStorageClass := i.HybridCouldExtentsMigration.storageClass - tmpSortedEks := i.HybridCouldExtentsMigration.sortedEks - i.HybridCouldExtentsMigration.storageClass = i.StorageClass - i.HybridCouldExtentsMigration.sortedEks = i.HybridCouldExtents.sortedEks - i.StorageClass = tmpStorageClass - i.HybridCouldExtentsMigration.sortedEks = tmpSortedEks - } + tmpStorageClass := i.HybridCouldExtentsMigration.storageClass + tmpSortedEks := i.HybridCouldExtentsMigration.sortedEks + // store old storage ek in HybridCouldExtentsMigration i.HybridCouldExtentsMigration.storageClass = i.StorageClass + i.HybridCouldExtentsMigration.sortedEks = i.HybridCouldExtents.sortedEks + // store new storage ek in HybridCouldExtents + i.StorageClass = tmpStorageClass + i.HybridCouldExtents.sortedEks = tmpSortedEks + log.LogInfof("action[fsmForbiddenInodeMigration] inode %v storage class change from %v to %v", ino.Inode, + ino.HybridCouldExtentsMigration.storageClass, ino.StorageClass) //TODO:chihe delete old ek return } diff --git a/metanode/partition_op_inode.go b/metanode/partition_op_inode.go index 2fe3d2e5d..5194333c0 100644 --- a/metanode/partition_op_inode.go +++ b/metanode/partition_op_inode.go @@ -1088,10 +1088,14 @@ func (mp *metaPartition) UpdateExtentKeyAfterMigration(req *proto.UpdateExtentKe p.PacketErrorWithBody(proto.OpErr, []byte(err.Error())) return } + //store ek after migration in HybridCouldExtentsMigration ino.HybridCouldExtentsMigration.storageClass = req.StorageClass if req.StorageClass == proto.StorageClass_BlobStore { ino.HybridCouldExtentsMigration.sortedEks = NewSortedObjExtentsFromObjEks(req.NewObjExtentKeys) - } else if req.StorageClass != proto.MediaType_HDD { + } else if req.StorageClass == proto.MediaType_HDD { + //do nothing, ek has been stored in ino.HybridCouldExtentsMigration before UpdateExtentKeyAfterMigration + //is called + } else { err = fmt.Errorf("mp %v inode %v unsupport new migration storage class %v", mp.config.PartitionId, ino.Inode, req.StorageClass) log.LogErrorf("action[UpdateExtentKeyAfterMigration] %v", err)