commit
3028edd7dc
|
@ -109,12 +109,12 @@ func (c *cluster) ID() types.ID { return c.id }
|
||||||
func (c *cluster) Members() []*Member {
|
func (c *cluster) Members() []*Member {
|
||||||
c.Lock()
|
c.Lock()
|
||||||
defer c.Unlock()
|
defer c.Unlock()
|
||||||
var sms SortableMemberSlice
|
var ms MembersByID
|
||||||
for _, m := range c.members {
|
for _, m := range c.members {
|
||||||
sms = append(sms, m.Clone())
|
ms = append(ms, m.Clone())
|
||||||
}
|
}
|
||||||
sort.Sort(sms)
|
sort.Sort(ms)
|
||||||
return []*Member(sms)
|
return []*Member(ms)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cluster) Member(id types.ID) *Member {
|
func (c *cluster) Member(id types.ID) *Member {
|
||||||
|
@ -409,8 +409,8 @@ func ValidateClusterAndAssignIDs(local *cluster, existing *cluster) error {
|
||||||
if len(ems) != len(lms) {
|
if len(ems) != len(lms) {
|
||||||
return fmt.Errorf("member count is unequal")
|
return fmt.Errorf("member count is unequal")
|
||||||
}
|
}
|
||||||
sort.Sort(SortableMemberSliceByPeerURLs(ems))
|
sort.Sort(MembersByPeerURLs(ems))
|
||||||
sort.Sort(SortableMemberSliceByPeerURLs(lms))
|
sort.Sort(MembersByPeerURLs(lms))
|
||||||
|
|
||||||
for i := range ems {
|
for i := range ems {
|
||||||
if !reflect.DeepEqual(ems[i].PeerURLs, lms[i].PeerURLs) {
|
if !reflect.DeepEqual(ems[i].PeerURLs, lms[i].PeerURLs) {
|
||||||
|
|
|
@ -39,12 +39,12 @@ type fakeCluster struct {
|
||||||
func (c *fakeCluster) ID() types.ID { return types.ID(c.id) }
|
func (c *fakeCluster) ID() types.ID { return types.ID(c.id) }
|
||||||
func (c *fakeCluster) ClientURLs() []string { return c.clientURLs }
|
func (c *fakeCluster) ClientURLs() []string { return c.clientURLs }
|
||||||
func (c *fakeCluster) Members() []*etcdserver.Member {
|
func (c *fakeCluster) Members() []*etcdserver.Member {
|
||||||
var sms etcdserver.SortableMemberSlice
|
var ms etcdserver.MembersByID
|
||||||
for _, m := range c.members {
|
for _, m := range c.members {
|
||||||
sms = append(sms, m)
|
ms = append(ms, m)
|
||||||
}
|
}
|
||||||
sort.Sort(sms)
|
sort.Sort(ms)
|
||||||
return []*etcdserver.Member(sms)
|
return []*etcdserver.Member(ms)
|
||||||
}
|
}
|
||||||
func (c *fakeCluster) Member(id types.ID) *etcdserver.Member { return c.members[uint64(id)] }
|
func (c *fakeCluster) Member(id types.ID) *etcdserver.Member { return c.members[uint64(id)] }
|
||||||
func (c *fakeCluster) IsIDRemoved(id types.ID) bool { return false }
|
func (c *fakeCluster) IsIDRemoved(id types.ID) bool { return false }
|
||||||
|
|
|
@ -29,6 +29,11 @@ import (
|
||||||
"github.com/coreos/etcd/store"
|
"github.com/coreos/etcd/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
storeMembersPrefix = path.Join(StoreClusterPrefix, "members")
|
||||||
|
storeRemovedMembersPrefix = path.Join(StoreClusterPrefix, "removed_members")
|
||||||
|
)
|
||||||
|
|
||||||
// RaftAttributes represents the raft related attributes of an etcd member.
|
// RaftAttributes represents the raft related attributes of an etcd member.
|
||||||
type RaftAttributes struct {
|
type RaftAttributes struct {
|
||||||
// TODO(philips): ensure these are URLs
|
// TODO(philips): ensure these are URLs
|
||||||
|
@ -150,17 +155,17 @@ func nodeToMember(n *store.NodeExtern) (*Member, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// implement sort by ID interface
|
// implement sort by ID interface
|
||||||
type SortableMemberSlice []*Member
|
type MembersByID []*Member
|
||||||
|
|
||||||
func (s SortableMemberSlice) Len() int { return len(s) }
|
func (ms MembersByID) Len() int { return len(ms) }
|
||||||
func (s SortableMemberSlice) Less(i, j int) bool { return s[i].ID < s[j].ID }
|
func (ms MembersByID) Less(i, j int) bool { return ms[i].ID < ms[j].ID }
|
||||||
func (s SortableMemberSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
func (ms MembersByID) Swap(i, j int) { ms[i], ms[j] = ms[j], ms[i] }
|
||||||
|
|
||||||
// implement sort by peer urls interface
|
// implement sort by peer urls interface
|
||||||
type SortableMemberSliceByPeerURLs []*Member
|
type MembersByPeerURLs []*Member
|
||||||
|
|
||||||
func (p SortableMemberSliceByPeerURLs) Len() int { return len(p) }
|
func (ms MembersByPeerURLs) Len() int { return len(ms) }
|
||||||
func (p SortableMemberSliceByPeerURLs) Less(i, j int) bool {
|
func (ms MembersByPeerURLs) Less(i, j int) bool {
|
||||||
return p[i].PeerURLs[0] < p[j].PeerURLs[0]
|
return ms[i].PeerURLs[0] < ms[j].PeerURLs[0]
|
||||||
}
|
}
|
||||||
func (p SortableMemberSliceByPeerURLs) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
func (ms MembersByPeerURLs) Swap(i, j int) { ms[i], ms[j] = ms[j], ms[i] }
|
||||||
|
|
|
@ -66,9 +66,6 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
storeMembersPrefix = path.Join(StoreClusterPrefix, "members")
|
|
||||||
storeRemovedMembersPrefix = path.Join(StoreClusterPrefix, "removed_members")
|
|
||||||
|
|
||||||
storeMemberAttributeRegexp = regexp.MustCompile(path.Join(storeMembersPrefix, "[[:xdigit:]]{1,16}", attributesSuffix))
|
storeMemberAttributeRegexp = regexp.MustCompile(path.Join(storeMembersPrefix, "[[:xdigit:]]{1,16}", attributesSuffix))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue