mirror of https://github.com/hashicorp/consul
Uses the Raft configuration for the self-add skip check.
parent
5f2e1c9b07
commit
3535652595
|
@ -626,11 +626,6 @@ func (s *Server) handleDeregisterMember(reason string, member serf.Member) error
|
||||||
|
|
||||||
// joinConsulServer is used to try to join another consul server
|
// joinConsulServer is used to try to join another consul server
|
||||||
func (s *Server) joinConsulServer(m serf.Member, parts *metadata.Server) error {
|
func (s *Server) joinConsulServer(m serf.Member, parts *metadata.Server) error {
|
||||||
// Do not join ourself if we are the only member
|
|
||||||
if m.Name == s.config.NodeName && len(s.serfLAN.Members()) == 1 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for possibility of multiple bootstrap nodes
|
// Check for possibility of multiple bootstrap nodes
|
||||||
if parts.Bootstrap {
|
if parts.Bootstrap {
|
||||||
members := s.serfLAN.Members()
|
members := s.serfLAN.Members()
|
||||||
|
@ -650,15 +645,25 @@ func (s *Server) joinConsulServer(m serf.Member, parts *metadata.Server) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// See if it's already in the configuration. It's harmless to re-add it
|
// Processing ourselves could result in trying to remove ourselves to
|
||||||
// but we want to avoid doing that if possible to prevent useless Raft
|
// fix up our address, which would make us step down. This is only
|
||||||
// log entries. If the address is the same but the ID changed, remove the
|
// safe to attempt if there are multiple servers available.
|
||||||
// old server before adding the new one.
|
|
||||||
configFuture := s.raft.GetConfiguration()
|
configFuture := s.raft.GetConfiguration()
|
||||||
if err := configFuture.Error(); err != nil {
|
if err := configFuture.Error(); err != nil {
|
||||||
s.logger.Printf("[ERR] consul: failed to get raft configuration: %v", err)
|
s.logger.Printf("[ERR] consul: failed to get raft configuration: %v", err)
|
||||||
return 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.
|
||||||
for _, server := range configFuture.Configuration().Servers {
|
for _, server := range configFuture.Configuration().Servers {
|
||||||
// No-op if the raft version is too low
|
// No-op if the raft version is too low
|
||||||
if server.Address == raft.ServerAddress(addr) && (minRaftProtocol < 2 || parts.RaftVersion < 3) {
|
if server.Address == raft.ServerAddress(addr) && (minRaftProtocol < 2 || parts.RaftVersion < 3) {
|
||||||
|
|
Loading…
Reference in New Issue