mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-16 19:14:41 -07:00
LDM trigger to move raft leaders
Signed-off-by: Derek Collison <derek@nats.io>
This commit is contained in:
@@ -369,6 +369,31 @@ func (s *Server) lookupRaftNode(group string) RaftNode {
|
||||
return n
|
||||
}
|
||||
|
||||
func (s *Server) transferRaftLeaders() bool {
|
||||
if s == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
var nodes []RaftNode
|
||||
s.rnMu.RLock()
|
||||
if len(s.raftNodes) > 0 {
|
||||
s.Noticef("Transferring any raft leaders")
|
||||
}
|
||||
for _, n := range s.raftNodes {
|
||||
nodes = append(nodes, n)
|
||||
}
|
||||
s.rnMu.RUnlock()
|
||||
|
||||
var didTransfer bool
|
||||
for _, node := range nodes {
|
||||
if node.Leader() {
|
||||
node.StepDown()
|
||||
didTransfer = true
|
||||
}
|
||||
}
|
||||
return didTransfer
|
||||
}
|
||||
|
||||
func (s *Server) shutdownRaftNodes() {
|
||||
if s == nil {
|
||||
return
|
||||
@@ -380,6 +405,7 @@ func (s *Server) shutdownRaftNodes() {
|
||||
nodes = append(nodes, n)
|
||||
}
|
||||
s.rnMu.RUnlock()
|
||||
|
||||
for _, node := range nodes {
|
||||
if node.Leader() {
|
||||
node.StepDown()
|
||||
|
||||
@@ -3060,6 +3060,16 @@ func (s *Server) lameDuckMode() {
|
||||
}
|
||||
s.mu.Unlock()
|
||||
|
||||
// If we are running any raftNodes transfer leaders.
|
||||
if hadTransfers := s.transferRaftLeaders(); hadTransfers {
|
||||
// They will tranfer leadership quickly, but wait here for a second.
|
||||
select {
|
||||
case <-time.After(time.Second):
|
||||
case <-s.quitCh:
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for accept loops to be done to make sure that no new
|
||||
// client can connect
|
||||
for i := 0; i < expected; i++ {
|
||||
|
||||
Reference in New Issue
Block a user