fix(scheduler): record DiskDrop and ManualMigrate task in cache

with: #1000088302

Signed-off-by: xiejian <xiejian3@oppo.com>
This commit is contained in:
xiejian 2025-08-15 10:37:33 +08:00 committed by slasher
parent 05c3635ff4
commit 39622270c8
2 changed files with 32 additions and 4 deletions

View File

@ -886,7 +886,7 @@ func (mgr *MigrateMgr) DeletedTasks() []DeletedTask {
func (mgr *MigrateMgr) addMigratingVuid(diskID proto.DiskID, vuid proto.Vuid, taskID string) {
switch mgr.taskType {
case proto.TaskTypeBalance: // only balance task need to add
case proto.TaskTypeBalance, proto.TaskTypeDiskDrop, proto.TaskTypeManualMigrate:
mgr.diskMigratingVuids.addMigratingVuid(diskID, vuid, taskID)
default:
}
@ -894,7 +894,7 @@ func (mgr *MigrateMgr) addMigratingVuid(diskID proto.DiskID, vuid proto.Vuid, ta
func (mgr *MigrateMgr) deleteMigratingVuid(diskID proto.DiskID, vuid proto.Vuid) {
switch mgr.taskType {
case proto.TaskTypeBalance: // only balance task need to add
case proto.TaskTypeBalance, proto.TaskTypeDiskDrop, proto.TaskTypeManualMigrate:
mgr.diskMigratingVuids.deleteMigratingVuid(diskID, vuid)
default:
}

View File

@ -515,13 +515,13 @@ func TestAddMigrateTask(t *testing.T) {
t1 := mockGenMigrateTask(proto.TaskTypeDiskDrop, "z0", 4, 100, proto.MigrateStateInited, MockMigrateVolInfoMap)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().AddMigrateTask(any, any).Return(nil)
mgr.AddTask(ctx, t1)
require.False(t, mgr.IsMigratingDisk(proto.DiskID(4)))
require.True(t, mgr.IsMigratingDisk(proto.DiskID(4)))
mgr.taskType = proto.TaskTypeManualMigrate
t1 = mockGenMigrateTask(proto.TaskTypeManualMigrate, "z0", 4, 100, proto.MigrateStateInited, MockMigrateVolInfoMap)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().AddMigrateTask(any, any).Return(nil)
mgr.AddTask(ctx, t1)
require.False(t, mgr.IsMigratingDisk(proto.DiskID(4)))
require.True(t, mgr.IsMigratingDisk(proto.DiskID(4)))
}
{
ctx := context.Background()
@ -675,3 +675,31 @@ func TestMigrateAction(t *testing.T) {
mgr.Close()
}
func TestMigrateDiskVuidMap(t *testing.T) {
ctx := context.Background()
mgr := newMigrateMgr(t)
mgr.taskType = proto.TaskTypeManualMigrate
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().AddMigrateTask(any, any).Return(nil)
// add
t1 := mockGenMigrateTask(proto.TaskTypeManualMigrate, "z0", 4, 100, proto.MigrateStateInited, MockMigrateVolInfoMap)
mgr.AddTask(ctx, t1)
require.True(t, mgr.IsTaskExist(t1.SourceDiskID, t1.SourceVuid))
// delete
t1.State = proto.MigrateStateWorkCompleted
mgr.finishQueue.PushTask(t1.TaskID, t1)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().UpdateMigrateTask(any, any).Return(nil)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().DeleteMigrateTask(any, any).Return(nil)
mgr.taskLogger.(*mocks.MockRecordLogEncoder).EXPECT().Encode(any).Return(nil)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().UpdateVolume(any, any, any, any).Return(nil)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().ReleaseVolumeUnit(any, any, any).Return(nil)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().GetVolumeInfo(any, any).Return(MockMigrateVolInfoMap[100], nil)
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().UnlockVolume(any, any, any).Return(nil)
mgr.volumeUpdater.(*MockTaskAPI).EXPECT().UpdateLeaderVolumeCache(any, any).Return(nil)
err := mgr.finishTask()
require.NoError(t, err)
require.False(t, mgr.IsTaskExist(t1.SourceDiskID, t1.SourceVuid))
}