Merge pull request #2856 from xiang90/mrefactor

etcdserver: refactore member.go
release-2.1
Xiang Li 2015-05-26 14:37:37 -07:00
commit 3028edd7dc
4 changed files with 24 additions and 22 deletions

View File

@ -109,12 +109,12 @@ func (c *cluster) ID() types.ID { return c.id }
func (c *cluster) Members() []*Member {
c.Lock()
defer c.Unlock()
var sms SortableMemberSlice
var ms MembersByID
for _, m := range c.members {
sms = append(sms, m.Clone())
ms = append(ms, m.Clone())
}
sort.Sort(sms)
return []*Member(sms)
sort.Sort(ms)
return []*Member(ms)
}
func (c *cluster) Member(id types.ID) *Member {
@ -409,8 +409,8 @@ func ValidateClusterAndAssignIDs(local *cluster, existing *cluster) error {
if len(ems) != len(lms) {
return fmt.Errorf("member count is unequal")
}
sort.Sort(SortableMemberSliceByPeerURLs(ems))
sort.Sort(SortableMemberSliceByPeerURLs(lms))
sort.Sort(MembersByPeerURLs(ems))
sort.Sort(MembersByPeerURLs(lms))
for i := range ems {
if !reflect.DeepEqual(ems[i].PeerURLs, lms[i].PeerURLs) {

View File

@ -39,12 +39,12 @@ type fakeCluster struct {
func (c *fakeCluster) ID() types.ID { return types.ID(c.id) }
func (c *fakeCluster) ClientURLs() []string { return c.clientURLs }
func (c *fakeCluster) Members() []*etcdserver.Member {
var sms etcdserver.SortableMemberSlice
var ms etcdserver.MembersByID
for _, m := range c.members {
sms = append(sms, m)
ms = append(ms, m)
}
sort.Sort(sms)
return []*etcdserver.Member(sms)
sort.Sort(ms)
return []*etcdserver.Member(ms)
}
func (c *fakeCluster) Member(id types.ID) *etcdserver.Member { return c.members[uint64(id)] }
func (c *fakeCluster) IsIDRemoved(id types.ID) bool { return false }

View File

@ -29,6 +29,11 @@ import (
"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.
type RaftAttributes struct {
// TODO(philips): ensure these are URLs
@ -150,17 +155,17 @@ func nodeToMember(n *store.NodeExtern) (*Member, error) {
}
// implement sort by ID interface
type SortableMemberSlice []*Member
type MembersByID []*Member
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 (ms MembersByID) Len() int { return len(ms) }
func (ms MembersByID) Less(i, j int) bool { return ms[i].ID < ms[j].ID }
func (ms MembersByID) Swap(i, j int) { ms[i], ms[j] = ms[j], ms[i] }
// implement sort by peer urls interface
type SortableMemberSliceByPeerURLs []*Member
type MembersByPeerURLs []*Member
func (p SortableMemberSliceByPeerURLs) Len() int { return len(p) }
func (p SortableMemberSliceByPeerURLs) Less(i, j int) bool {
return p[i].PeerURLs[0] < p[j].PeerURLs[0]
func (ms MembersByPeerURLs) Len() int { return len(ms) }
func (ms MembersByPeerURLs) Less(i, j int) bool {
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] }

View File

@ -66,9 +66,6 @@ const (
)
var (
storeMembersPrefix = path.Join(StoreClusterPrefix, "members")
storeRemovedMembersPrefix = path.Join(StoreClusterPrefix, "removed_members")
storeMemberAttributeRegexp = regexp.MustCompile(path.Join(storeMembersPrefix, "[[:xdigit:]]{1,16}", attributesSuffix))
)