*: create ID type
This creates a simple ID type (wrapped around uint64) to provide for standard serialization/deserialization to a string (i.e. base 16 encoded). This replaces strutil so now that package is removed.
This commit is contained in:
@ -40,21 +40,21 @@ const (
|
||||
)
|
||||
|
||||
type ClusterInfo interface {
|
||||
ID() uint64
|
||||
ID() types.ID
|
||||
ClientURLs() []string
|
||||
// Members returns a slice of members sorted by their ID
|
||||
Members() []*Member
|
||||
Member(id uint64) *Member
|
||||
Member(id types.ID) *Member
|
||||
}
|
||||
|
||||
// Cluster is a list of Members that belong to the same raft cluster
|
||||
type Cluster struct {
|
||||
id uint64
|
||||
id types.ID
|
||||
token string
|
||||
members map[uint64]*Member
|
||||
members map[types.ID]*Member
|
||||
// removed contains the ids of removed members in the cluster.
|
||||
// removed id cannot be reused.
|
||||
removed map[uint64]bool
|
||||
removed map[types.ID]bool
|
||||
store store.Store
|
||||
}
|
||||
|
||||
@ -119,7 +119,7 @@ func NewClusterFromStore(token string, st store.Store) *Cluster {
|
||||
return c
|
||||
}
|
||||
|
||||
func NewClusterFromMembers(token string, id uint64, membs []*Member) *Cluster {
|
||||
func NewClusterFromMembers(token string, id types.ID, membs []*Member) *Cluster {
|
||||
c := newCluster(token)
|
||||
c.id = id
|
||||
for _, m := range membs {
|
||||
@ -131,12 +131,12 @@ func NewClusterFromMembers(token string, id uint64, membs []*Member) *Cluster {
|
||||
func newCluster(token string) *Cluster {
|
||||
return &Cluster{
|
||||
token: token,
|
||||
members: make(map[uint64]*Member),
|
||||
removed: make(map[uint64]bool),
|
||||
members: make(map[types.ID]*Member),
|
||||
removed: make(map[types.ID]bool),
|
||||
}
|
||||
}
|
||||
|
||||
func (c Cluster) ID() uint64 { return c.id }
|
||||
func (c Cluster) ID() types.ID { return c.id }
|
||||
|
||||
func (c Cluster) Members() []*Member {
|
||||
var sms SortableMemberSlice
|
||||
@ -153,7 +153,7 @@ func (s SortableMemberSlice) Len() int { return len(s) }
|
||||
func (s SortableMemberSlice) Less(i, j int) bool { return s[i].ID < s[j].ID }
|
||||
func (s SortableMemberSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
||||
|
||||
func (c *Cluster) Member(id uint64) *Member {
|
||||
func (c *Cluster) Member(id types.ID) *Member {
|
||||
return c.members[id]
|
||||
}
|
||||
|
||||
@ -172,16 +172,16 @@ func (c *Cluster) MemberByName(name string) *Member {
|
||||
return memb
|
||||
}
|
||||
|
||||
func (c Cluster) MemberIDs() []uint64 {
|
||||
var ids []uint64
|
||||
func (c Cluster) MemberIDs() []types.ID {
|
||||
var ids []types.ID
|
||||
for _, m := range c.members {
|
||||
ids = append(ids, m.ID)
|
||||
}
|
||||
sort.Sort(types.Uint64Slice(ids))
|
||||
sort.Sort(types.IDSlice(ids))
|
||||
return ids
|
||||
}
|
||||
|
||||
func (c *Cluster) IsIDRemoved(id uint64) bool {
|
||||
func (c *Cluster) IsIDRemoved(id types.ID) bool {
|
||||
return c.removed[id]
|
||||
}
|
||||
|
||||
@ -244,7 +244,7 @@ func (c *Cluster) ValidateAndAssignIDs(membs []*Member) error {
|
||||
}
|
||||
omembs[i].ID = membs[i].ID
|
||||
}
|
||||
c.members = make(map[uint64]*Member)
|
||||
c.members = make(map[types.ID]*Member)
|
||||
for _, m := range omembs {
|
||||
c.members[m.ID] = m
|
||||
}
|
||||
@ -255,13 +255,13 @@ 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)
|
||||
binary.BigEndian.PutUint64(b[8*i:], uint64(id))
|
||||
}
|
||||
hash := sha1.Sum(b)
|
||||
c.id = binary.BigEndian.Uint64(hash[:8])
|
||||
c.id = types.ID(binary.BigEndian.Uint64(hash[:8]))
|
||||
}
|
||||
|
||||
func (c *Cluster) SetID(id uint64) { c.id = id }
|
||||
func (c *Cluster) SetID(id types.ID) { c.id = id }
|
||||
|
||||
func (c *Cluster) SetStore(st store.Store) { c.store = st }
|
||||
|
||||
@ -289,7 +289,7 @@ func (c *Cluster) AddMember(m *Member) {
|
||||
|
||||
// RemoveMember removes a member from the store.
|
||||
// The given id MUST exist, or the function panics.
|
||||
func (c *Cluster) RemoveMember(id uint64) {
|
||||
func (c *Cluster) RemoveMember(id types.ID) {
|
||||
if _, err := c.store.Delete(memberStoreKey(id), true, true); err != nil {
|
||||
log.Panicf("delete peer should never fail: %v", err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user