diff --git a/master/disk_manager.go b/master/disk_manager.go index 02504125b..d50f726e4 100644 --- a/master/disk_manager.go +++ b/master/disk_manager.go @@ -66,7 +66,8 @@ func (c *Cluster) checkDiskRecoveryProgress() { log.LogInfof("[checkDiskRecoveryProgress] dp(%v) decommission pause", partitionID) continue } - _, err = c.getVol(partition.VolName) + var vol *Vol + vol, err = c.getVol(partition.VolName) if err != nil { Warn(c.Name, fmt.Sprintf("checkDiskRecoveryProgress clusterID[%v],partitionID[%v] vol(%s) is not exist", c.Name, partitionID, partition.VolName)) @@ -81,6 +82,12 @@ func (c *Cluster) checkDiskRecoveryProgress() { log.LogWarnf("action[checkDiskRecoveryProgress] dp %v maybe deleted", partition.PartitionID) continue } + if (vol.status() == proto.VolStatusMarkDelete && !vol.Forbidden) || + (vol.status() == proto.VolStatusMarkDelete && vol.Forbidden && time.Until(vol.DeleteExecTime) <= 0) { + partition.SetDecommissionStatus(DecommissionSuccess, "checkDiskRecoveryProgress_volMarkDeleteCheck", "") + log.LogWarnf("action[checkDiskRecoveryProgress] vol(%v) corresponding to dp(%v) has been marked for deletion", partition.VolName, partition.PartitionID) + continue + } if partition.IsDiscard { partition.SetDecommissionStatus(DecommissionSuccess, "checkDiskRecoveryProgress_discardCheck", "") log.LogWarnf("[checkDiskRecoveryProgress] dp(%v) is discard, decommission successfully", partition.PartitionID) diff --git a/master/topology.go b/master/topology.go index 64c1f2cb5..7ac50449f 100644 --- a/master/topology.go +++ b/master/topology.go @@ -2322,6 +2322,20 @@ func (l *DecommissionDataPartitionList) startTraverse() { func updateDecommissionWeight(dps []*DataPartition, c *Cluster) { for _, dp := range dps { + vol, err := c.getVol(dp.VolName) + if err != nil { + log.LogWarnf("action[DecommissionListTraverse] dp[%v] get vol[%v] failed", dp.decommissionInfo(), dp.VolName) + dp.DecommissionErrorMessage = err.Error() + dp.markRollbackFailed(false, "traverDecommissionList_updateDecommissionWeight_volMarkDeleteCheck", err.Error()) + continue + } + if (vol.status() == proto.VolStatusMarkDelete && !vol.Forbidden) || + (vol.status() == proto.VolStatusMarkDelete && vol.Forbidden && time.Until(vol.DeleteExecTime) <= 0) { + dp.SetDecommissionStatus(DecommissionSuccess, "traverDecommissionList_updateDecommissionWeight_volMarkDeleteCheck", "") + log.LogWarnf("action[DecommissionListTraverse] skip dp(%v) since vol(%v) has been marked for deletion", dp.PartitionID, dp.VolName) + continue + } + if dp.IsDiscard { dp.SetDecommissionStatus(DecommissionSuccess, "traverDecommissionList_updateDecommissionWeight_discardCheck", "") log.LogWarnf("action[DecommissionListTraverse] skip dp(%v) discard(%v)", dp.PartitionID, dp.IsDiscard)