mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
fix(master): check raft leader before handle leader change. #1000228487
Signed-off-by: Victor1319 <zengxuewei@oppo.com>
This commit is contained in:
parent
4dc8da9159
commit
ff65346f7b
@ -36,6 +36,19 @@ func (m *Server) getCurrAddr() string {
|
||||
}
|
||||
|
||||
func (m *Server) handleLeaderChange(leader uint64) {
|
||||
m.leaderChangeLk.Lock()
|
||||
defer m.leaderChangeLk.Unlock()
|
||||
|
||||
if m.partition != nil { // parition maybe nil for testcase
|
||||
leaderId, term := m.partition.LeaderTerm()
|
||||
log.LogWarnf("handleLeaderChange: get raft leader %d, term %d, old %d", leaderId, term, leader)
|
||||
|
||||
if leaderId != leader {
|
||||
log.LogWarnf("handleLeaderChange: leader id already changed, old %d, now %d", leader, leaderId)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if leader == 0 {
|
||||
log.LogWarnf("action[handleLeaderChange] but no leader")
|
||||
if WarnMetrics != nil {
|
||||
|
||||
@ -18,12 +18,14 @@ func TestHandleLeaderChange(t *testing.T) {
|
||||
leaderID := server.id
|
||||
newLeaderID := leaderID + 1
|
||||
server.handleLeaderChange(newLeaderID)
|
||||
if server.metaReady != false {
|
||||
if !server.metaReady { // leader not changed
|
||||
t.Errorf("logic error,metaReady should be false,metaReady[%v]", server.metaReady)
|
||||
return
|
||||
}
|
||||
|
||||
server.metaReady = false
|
||||
server.handleLeaderChange(leaderID)
|
||||
if server.metaReady == false {
|
||||
if !server.metaReady {
|
||||
t.Errorf("logic error,metaReady should be true,metaReady[%v]", server.metaReady)
|
||||
return
|
||||
}
|
||||
|
||||
@ -126,6 +126,7 @@ type Server struct {
|
||||
metaReady bool
|
||||
apiServer *http.Server
|
||||
cliMgr *ClientMgr
|
||||
leaderChangeLk sync.RWMutex
|
||||
}
|
||||
|
||||
// NewServer creates a new server
|
||||
|
||||
Loading…
Reference in New Issue
Block a user