etcdserver: generate id when new cluster

This commit is contained in:
Yicheng Qin 2014-10-23 11:50:15 -07:00
parent d2c4e981ed
commit 3d243baacd
3 changed files with 5 additions and 11 deletions

View File

@ -71,6 +71,7 @@ func NewClusterFromString(name string, cluster string) (*Cluster, error) {
}
c.members[m.ID] = m
}
c.genID()
return c, nil
}
@ -89,6 +90,7 @@ func NewClusterFromMemberInfos(name string, infos []MemberInfo) (*Cluster, error
}
c.members[m.ID] = m
}
c.genID()
return c, nil
}
@ -202,13 +204,12 @@ func (c Cluster) String() string {
return strings.Join(sl, ",")
}
func (c *Cluster) GenID(salt []byte) {
func (c *Cluster) genID() {
mIDs := c.MemberIDs()
b := make([]byte, 8*len(mIDs))
for i, id := range mIDs {
binary.BigEndian.PutUint64(b[8*i:], id)
}
b = append(b, salt...)
hash := sha1.Sum(b)
c.id = binary.BigEndian.Uint64(hash[:8])
}

View File

@ -286,7 +286,7 @@ func TestClusterGenID(t *testing.T) {
newTestMember(2, nil, "", nil),
})
cs.GenID(nil)
cs.genID()
if cs.ID() == 0 {
t.Fatalf("cluster.ID = %v, want not 0", cs.ID())
}
@ -294,13 +294,7 @@ func TestClusterGenID(t *testing.T) {
cs.SetStore(&storeRecorder{})
cs.AddMember(newTestMemberp(3, nil, "", nil))
cs.GenID(nil)
if cs.ID() == previd {
t.Fatalf("cluster.ID = %v, want not %v", cs.ID(), previd)
}
previd = cs.ID()
cs.GenID([]byte("http://discovery.etcd.io/12345678"))
cs.genID()
if cs.ID() == previd {
t.Fatalf("cluster.ID = %v, want not %v", cs.ID(), previd)
}

View File

@ -647,7 +647,6 @@ func startNode(cfg *ServerConfig) (id uint64, n raft.Node, w *wal.WAL) {
// TODO: remove the discoveryURL when it becomes part of the source for
// generating nodeID.
member := cfg.Cluster.MemberByName(cfg.Name)
cfg.Cluster.GenID([]byte(cfg.DiscoveryURL))
metadata := pbutil.MustMarshal(&pb.Metadata{NodeID: member.ID, ClusterID: cfg.Cluster.ID()})
if w, err = wal.Create(cfg.WALDir(), metadata); err != nil {
log.Fatal(err)