func NewMember(name string, peerURLs types.URLs, clusterName string) *member { m := &member{ raftAttributes: raftAttributes{PeerURLs: peerURLs.StringSlice()}, attributes: attributes{Name: name}, } var b []byte sort.Strings(m.PeerURLs) for _, p := range m.PeerURLs { b = append(b, []byte(p)...) } b = append(b, []byte(clusterName)...) hash := sha1.Sum(b) m.ID = types.ID(binary.BigEndian.Uint64(hash[:8])) return m }
// newMember creates a Member without an ID and generates one based on the // name, peer URLs. This is used for bootstrapping. func newMember(name string, peerURLs types.URLs, now *time.Time) *Member { m := &Member{Name: name, PeerURLs: peerURLs.StringSlice()} b := []byte(m.Name) for _, p := range m.PeerURLs { b = append(b, []byte(p)...) } if now != nil { b = append(b, []byte(fmt.Sprintf("%d", now.Unix()))...) } hash := sha1.Sum(b) m.ID = int64(binary.BigEndian.Uint64(hash[:8])) if m.ID < 0 { m.ID = m.ID * -1 } return m }
// newMember creates a Member without an ID and generates one based on the // name, peer URLs. This is used for bootstrapping/adding new member. func NewMember(name string, peerURLs types.URLs, clusterName string, now *time.Time) *Member { m := &Member{ RaftAttributes: RaftAttributes{PeerURLs: peerURLs.StringSlice()}, Attributes: Attributes{Name: name}, } var b []byte sort.Strings(m.PeerURLs) for _, p := range m.PeerURLs { b = append(b, []byte(p)...) } b = append(b, []byte(clusterName)...) if now != nil { b = append(b, []byte(fmt.Sprintf("%d", now.Unix()))...) } hash := sha1.Sum(b) m.ID = binary.BigEndian.Uint64(hash[:8]) return m }