fix(master): if the decommission fails and requires retry, set the status to 'mark' only at the end of the decommission function

Signed-off-by: chihe <chihe@oppo.com>
This commit is contained in:
chihe 2024-09-19 19:13:13 +08:00 committed by AmazingChi
parent ac54435341
commit a3fb3d301b
2 changed files with 5 additions and 11 deletions

View File

@ -73,7 +73,7 @@ func formatClusterView(cv *proto.ClusterView, cn *proto.ClusterNodeInfo, cp *pro
sb.WriteString(fmt.Sprintf(" DataPartitionTimeout : %v\n", cv.DpTimeout))
sb.WriteString(fmt.Sprintf(" volDeletionDelayTime : %v h\n", cv.VolDeletionDelayTimeHour))
sb.WriteString(fmt.Sprintf(" EnableAutoDecommission : %v\n", cv.EnableAutoDecommission))
sb.WriteString(fmt.Sprintf(" AutoDecommissionDiskIntervak : %v\n", cv.AutoDecommissionDiskInterval))
sb.WriteString(fmt.Sprintf(" AutoDecommissionDiskInterval : %v\n", cv.AutoDecommissionDiskInterval))
sb.WriteString(fmt.Sprintf(" EnableAutoDpMetaRepair : %v\n", cv.EnableAutoDpMetaRepair))
sb.WriteString(fmt.Sprintf(" AutoDpMetaRepairParallelCnt : %v\n", cv.AutoDpMetaRepairParallelCnt))
sb.WriteString(fmt.Sprintf(" MarkDiskBrokenThreshold : %v\n", strutil.FormatPercent(cv.MarkDiskBrokenThreshold)))

View File

@ -1348,11 +1348,11 @@ func (partition *DataPartition) IsDoingDecommission() bool {
func (partition *DataPartition) TryToDecommission(c *Cluster) bool {
if !partition.IsMarkDecommission() {
log.LogWarnf("action[TryToDecommission] failed dp[%v] status expected markDecommission[%v]",
partition.PartitionID, atomic.LoadUint32(&partition.DecommissionStatus))
partition.decommissionInfo(), atomic.LoadUint32(&partition.DecommissionStatus))
return false
}
log.LogDebugf("action[TryToDecommission] dp[%v]", partition.PartitionID)
log.LogDebugf("action[TryToDecommission] dp[%v]", partition.decommissionInfo())
return partition.Decommission(c)
}
@ -1490,15 +1490,7 @@ errHandler:
log.LogWarnf("action[decommissionDataPartition] partitionID:%v is stopped", partition.PartitionID)
return true
}
partition.DecommissionRetry++
if partition.DecommissionRetry >= defaultDecommissionRetryLimit {
partition.SetDecommissionStatus(DecommissionFail)
} else {
partition.SetDecommissionStatus(markDecommission) // retry again
partition.ReleaseDecommissionToken(c)
}
// if need rollback, set to fail
// do not reset DecommissionDstAddr outside the rollback operation, as it may cause rollback failure
if partition.DecommissionNeedRollback {
@ -1519,6 +1511,8 @@ errHandler:
partition.DecommissionDstAddr = ""
log.LogWarnf("action[decommissionDataPartition] partitionID:%v reset DecommissionDstAddr", partition.PartitionID)
}
partition.ReleaseDecommissionToken(c)
partition.SetDecommissionStatus(markDecommission)
}
}
msg = fmt.Sprintf("clusterID[%v] info[%v] offline failed:%v consume[%v]seconds",