From 99e9f561eeec162dc732182d488d9c6ce0fa0242 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 23 Sep 2014 10:31:03 -0700 Subject: [PATCH] etcdserver: add Peers.Addrs --- etcdserver/etcdhttp/peers.go | 13 +++++++++++++ etcdserver/etcdhttp/peers_test.go | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/etcdserver/etcdhttp/peers.go b/etcdserver/etcdhttp/peers.go index 8f9e32fd2..dbe1b4cff 100644 --- a/etcdserver/etcdhttp/peers.go +++ b/etcdserver/etcdhttp/peers.go @@ -85,6 +85,19 @@ func (ps Peers) Endpoints() []string { return endpoints } +// Addrs returns a list of all peer addresses. The returned list is sorted +// in ascending lexicographical order. +func (ps Peers) Addrs() []string { + addrs := make([]string, 0) + for _, paddrs := range ps { + for _, paddr := range paddrs { + addrs = append(addrs, paddr) + } + } + sort.Strings(addrs) + return addrs +} + func Sender(t *http.Transport, p Peers) func(msgs []raftpb.Message) { c := &http.Client{Transport: t} diff --git a/etcdserver/etcdhttp/peers_test.go b/etcdserver/etcdhttp/peers_test.go index 0719e1082..c4f7f04ff 100644 --- a/etcdserver/etcdhttp/peers_test.go +++ b/etcdserver/etcdhttp/peers_test.go @@ -16,24 +16,28 @@ func TestPeers(t *testing.T) { in string wids []int64 wep []string + waddrs []string wstring string }{ { "1=1.1.1.1", []int64{1}, []string{"http://1.1.1.1"}, + []string{"1.1.1.1"}, "1=1.1.1.1", }, { "2=2.2.2.2", []int64{2}, []string{"http://2.2.2.2"}, + []string{"2.2.2.2"}, "2=2.2.2.2", }, { "1=1.1.1.1&1=1.1.1.2&2=2.2.2.2", []int64{1, 2}, []string{"http://1.1.1.1", "http://1.1.1.2", "http://2.2.2.2"}, + []string{"1.1.1.1", "1.1.1.2", "2.2.2.2"}, "1=1.1.1.1&1=1.1.1.2&2=2.2.2.2", }, { @@ -41,6 +45,7 @@ func TestPeers(t *testing.T) { []int64{1, 2, 3, 4}, []string{"http://1.1.1.1", "http://1.1.1.2", "http://2.2.2.2", "http://3.3.3.3", "http://4.4.4.4"}, + []string{"1.1.1.1", "1.1.1.2", "2.2.2.2", "3.3.3.3", "4.4.4.4"}, "1=1.1.1.1&1=1.1.1.2&2=2.2.2.2&3=3.3.3.3&4=4.4.4.4", }, } @@ -59,6 +64,10 @@ func TestPeers(t *testing.T) { if !reflect.DeepEqual(ep, tt.wep) { t.Errorf("#%d: Endpoints=%#v, want %#v", i, ep, tt.wep) } + addrs := p.Addrs() + if !reflect.DeepEqual(addrs, tt.waddrs) { + t.Errorf("#%d: addrs=%#v, want %#v", i, ep, tt.waddrs) + } s := p.String() if s != tt.wstring { t.Errorf("#%d: string=%q, want %q", i, s, tt.wstring)