fix(raft): set no leader for the application layer when raft stopped by panic.

Signed-off-by: true1064 <tangjingyu@oppo.com>
This commit is contained in:
true1064 2024-08-01 18:14:26 +08:00 committed by AmazingChi
parent c9b97d24a2
commit 2313a509a7
2 changed files with 13 additions and 6 deletions

View File

@ -272,6 +272,7 @@ func (s *raft) run() {
s.stopSnapping()
s.raftConfig.Storage.Close()
close(s.done)
atomic.StorePointer(&s.curSoftSt, unsafe.Pointer(&softState{leader: NoLeader, term: 0}))
log.LogWarnf("raft(%v) quit run", s.raftFsm.id)
}()

View File

@ -888,14 +888,18 @@ func (mp *metaPartition) HandleLeaderChange(leader uint64) {
go mp.raftPartition.TryToLeader(mp.config.PartitionId)
return
}
log.LogDebugf("[metaPartition] HandleLeaderChange close conn %v, nodeId: %v, leader: %v", serverPort, mp.config.NodeId, leader)
exporter.Warning(fmt.Sprintf("[metaPartition]mp[%v] HandleLeaderChange close conn %v, nodeId: %v, leader: %v", mp.config.PartitionId, serverPort, mp.config.NodeId, leader))
log.LogDebugf("[metaPartition] pid: %v HandleLeaderChange close conn %v, nodeId: %v, leader: %v",
mp.config.PartitionId, serverPort, mp.config.NodeId, leader)
exporter.Warning(fmt.Sprintf("[metaPartition]mp[%v] HandleLeaderChange close conn %v, nodeId: %v, leader: %v",
mp.config.PartitionId, serverPort, mp.config.NodeId, leader))
conn.(*net.TCPConn).SetLinger(0)
conn.Close()
}
if mp.config.NodeId != leader {
log.LogDebugf("[metaPartition] pid: %v HandleLeaderChange become unleader nodeId: %v, leader: %v", mp.config.PartitionId, mp.config.NodeId, leader)
exporter.Warning(fmt.Sprintf("[metaPartition] pid: %v HandleLeaderChange become unleader nodeId: %v, leader: %v", mp.config.PartitionId, mp.config.NodeId, leader))
log.LogDebugf("[metaPartition] pid: %v HandleLeaderChange become unleader nodeId: %v, leader: %v",
mp.config.PartitionId, mp.config.NodeId, leader)
exporter.Warning(fmt.Sprintf("[metaPartition] pid: %v HandleLeaderChange become unleader nodeId: %v, leader: %v",
mp.config.PartitionId, mp.config.NodeId, leader))
mp.storeChan <- &storeMsg{
command: stopStoreTick,
}
@ -905,8 +909,10 @@ func (mp *metaPartition) HandleLeaderChange(leader uint64) {
command: startStoreTick,
}
log.LogDebugf("[metaPartition] pid: %v HandleLeaderChange become leader conn %v, nodeId: %v, leader: %v", mp.config.PartitionId, serverPort, mp.config.NodeId, leader)
exporter.Warning(fmt.Sprintf("[metaPartition] pid: %v HandleLeaderChange become leader conn %v, nodeId: %v, leader: %v", mp.config.PartitionId, serverPort, mp.config.NodeId, leader))
log.LogDebugf("[metaPartition] pid: %v HandleLeaderChange become leader conn %v, nodeId: %v, leader: %v",
mp.config.PartitionId, serverPort, mp.config.NodeId, leader)
exporter.Warning(fmt.Sprintf("[metaPartition] pid: %v HandleLeaderChange become leader conn %v, nodeId: %v, leader: %v",
mp.config.PartitionId, serverPort, mp.config.NodeId, leader))
if mp.config.Start == 0 && mp.config.Cursor == 0 {
id, err := mp.nextInodeID()
if err != nil {