feat(master): when traversing the dp decommission queue, add a check for the deletion status of its associated volume.

close: #1000329496

Signed-off-by: shuqiang-zheng <zhengshuqiang@oppo.com>
This commit is contained in:
shuqiang-zheng 2025-09-09 11:39:27 +08:00 committed by 贺迟
parent a89871ce64
commit 37db5cf3b1
2 changed files with 22 additions and 1 deletions

View File

@ -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)

View File

@ -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)