github.com/Iqoqo/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  }