mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
fix(master): fix an issue where token might consume twice during the decommission repair process of two replicaNum dp, due to the master changing the leader.
close: #1000336199 Signed-off-by: shuqiang-zheng <zhengshuqiang@oppo.com>
This commit is contained in:
parent
a59c4c71ed
commit
654d5bfcf2
@ -1214,6 +1214,17 @@ func (partition *DataPartition) ReleaseDecommissionFirstHostToken(c *Cluster) {
|
||||
atomic.StoreUint64(&dataNodeToRepairDpInfo.CurParallel, dataNodeParallel)
|
||||
}
|
||||
|
||||
func hasDpConsumedFirstHostToken(dataNodeToRepairDpInfo *DataNodeToDecommissionRepairDpInfo, firstReplica *DataReplica, partitionId uint64) bool {
|
||||
dataNodeToRepairDpInfo.mu.Lock()
|
||||
defer dataNodeToRepairDpInfo.mu.Unlock()
|
||||
if diskToRepairDpInfo, found := dataNodeToRepairDpInfo.DiskToDecommissionRepairDpMap[firstReplica.DiskPath]; found {
|
||||
if _, ok := diskToRepairDpInfo.RepairingDps[partitionId]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (partition *DataPartition) AcquireDecommissionFirstHostToken(c *Cluster) bool {
|
||||
var (
|
||||
ok bool
|
||||
@ -1254,6 +1265,13 @@ func (partition *DataPartition) AcquireDecommissionFirstHostToken(c *Cluster) bo
|
||||
DiskToDecommissionRepairDpMap: make(map[string]*DiskToDecommissionRepairDpInfo),
|
||||
})
|
||||
dataNodeToRepairDpInfo = value.(*DataNodeToDecommissionRepairDpInfo)
|
||||
|
||||
if partition.isSpecialReplicaCnt() && hasDpConsumedFirstHostToken(dataNodeToRepairDpInfo, firstReplica, partition.PartitionID) {
|
||||
log.LogDebugf("action[AcquireDecommissionFirstHostToken] dp %v has first host token when reloading meta",
|
||||
partition.PartitionID)
|
||||
return true
|
||||
}
|
||||
|
||||
dataNode, err = c.dataNode(firstReplica.Addr)
|
||||
if err != nil {
|
||||
log.LogErrorf("action[AcquireDecommissionFirstHostToken] failed, dp(%v) err(%v)", partition.PartitionID, err.Error())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user