fix(master): check raft leader before handle leader change. #1000228487

Signed-off-by: Victor1319 <zengxuewei@oppo.com>
This commit is contained in:
Victor1319 2025-07-14 17:14:12 +08:00 committed by zhumingze1108
parent 4dc8da9159
commit ff65346f7b
3 changed files with 18 additions and 2 deletions

View File

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

View File

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

View File

@ -126,6 +126,7 @@ type Server struct {
metaReady bool
apiServer *http.Server
cliMgr *ClientMgr
leaderChangeLk sync.RWMutex
}
// NewServer creates a new server