mirror of https://github.com/status-im/consul.git
Merge pull request #3450 from hashicorp/raft_peers_fix
Change member join reconcile step to process joining itself, to handl…
This commit is contained in:
commit
65299e9617
|
@ -626,11 +626,6 @@ func (s *Server) handleDeregisterMember(reason string, member serf.Member) error
|
|||
|
||||
// joinConsulServer is used to try to join another consul server
|
||||
func (s *Server) joinConsulServer(m serf.Member, parts *metadata.Server) error {
|
||||
// Do not join ourself
|
||||
if m.Name == s.config.NodeName {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check for possibility of multiple bootstrap nodes
|
||||
if parts.Bootstrap {
|
||||
members := s.serfLAN.Members()
|
||||
|
@ -643,20 +638,28 @@ func (s *Server) joinConsulServer(m serf.Member, parts *metadata.Server) error {
|
|||
}
|
||||
}
|
||||
|
||||
addr := (&net.TCPAddr{IP: m.Addr, Port: parts.Port}).String()
|
||||
|
||||
minRaftProtocol, err := ServerMinRaftProtocol(s.serfLAN.Members())
|
||||
if err != nil {
|
||||
// Processing ourselves could result in trying to remove ourselves to
|
||||
// fix up our address, which would make us step down. This is only
|
||||
// safe to attempt if there are multiple servers available.
|
||||
configFuture := s.raft.GetConfiguration()
|
||||
if err := configFuture.Error(); err != nil {
|
||||
s.logger.Printf("[ERR] consul: failed to get raft configuration: %v", err)
|
||||
return err
|
||||
}
|
||||
if m.Name == s.config.NodeName {
|
||||
if l := len(configFuture.Configuration().Servers); l < 3 {
|
||||
s.logger.Printf("[DEBUG] consul: Skipping self join check for %q since the cluster is too small", m.Name)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// See if it's already in the configuration. It's harmless to re-add it
|
||||
// but we want to avoid doing that if possible to prevent useless Raft
|
||||
// log entries. If the address is the same but the ID changed, remove the
|
||||
// old server before adding the new one.
|
||||
configFuture := s.raft.GetConfiguration()
|
||||
if err := configFuture.Error(); err != nil {
|
||||
s.logger.Printf("[ERR] consul: failed to get raft configuration: %v", err)
|
||||
addr := (&net.TCPAddr{IP: m.Addr, Port: parts.Port}).String()
|
||||
minRaftProtocol, err := ServerMinRaftProtocol(s.serfLAN.Members())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, server := range configFuture.Configuration().Servers {
|
||||
|
|
Loading…
Reference in New Issue