github.imxd.top/hashicorp/consul@v1.4.5/agent/consul/segment_oss.go (about) 1 // +build !ent 2 3 package consul 4 5 import ( 6 "net" 7 "time" 8 9 "github.com/armon/go-metrics" 10 "github.com/hashicorp/consul/agent/structs" 11 "github.com/hashicorp/serf/serf" 12 ) 13 14 // LANMembersAllSegments returns members from all segments. 15 func (s *Server) LANMembersAllSegments() ([]serf.Member, error) { 16 return s.LANMembers(), nil 17 } 18 19 // LANSegmentMembers is used to return the members of the given LAN segment. 20 func (s *Server) LANSegmentMembers(segment string) ([]serf.Member, error) { 21 if segment == "" { 22 return s.LANMembers(), nil 23 } 24 25 return nil, structs.ErrSegmentsNotSupported 26 } 27 28 // LANSegmentAddr is used to return the address used for the given LAN segment. 29 func (s *Server) LANSegmentAddr(name string) string { 30 return "" 31 } 32 33 // setupSegmentRPC returns an error if any segments are defined since the OSS 34 // version of Consul doesn't support them. 35 func (s *Server) setupSegmentRPC() (map[string]net.Listener, error) { 36 if len(s.config.Segments) > 0 { 37 return nil, structs.ErrSegmentsNotSupported 38 } 39 40 return nil, nil 41 } 42 43 // setupSegments returns an error if any segments are defined since the OSS 44 // version of Consul doesn't support them. 45 func (s *Server) setupSegments(config *Config, port int, rpcListeners map[string]net.Listener) error { 46 if len(config.Segments) > 0 { 47 return structs.ErrSegmentsNotSupported 48 } 49 50 return nil 51 } 52 53 // floodSegments is a NOP in the OSS version of Consul. 54 func (s *Server) floodSegments(config *Config) { 55 } 56 57 // reconcile is used to reconcile the differences between Serf membership and 58 // what is reflected in our strongly consistent store. Mainly we need to ensure 59 // all live nodes are registered, all failed nodes are marked as such, and all 60 // left nodes are de-registered. 61 func (s *Server) reconcile() (err error) { 62 defer metrics.MeasureSince([]string{"leader", "reconcile"}, time.Now()) 63 members := s.serfLAN.Members() 64 knownMembers := make(map[string]struct{}) 65 for _, member := range members { 66 if err := s.reconcileMember(member); err != nil { 67 return err 68 } 69 knownMembers[member.Name] = struct{}{} 70 } 71 72 // Reconcile any members that have been reaped while we were not the 73 // leader. 74 return s.reconcileReaped(knownMembers) 75 }