From 771ff4589d6cd8a60d0b7ac1659980b1db03be3a Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Fri, 5 Dec 2014 00:18:40 -0800 Subject: [PATCH] etcdserver: not add self into sendhub when new server --- etcdserver/sendhub.go | 6 +----- etcdserver/sendhub_test.go | 35 ++++++----------------------------- etcdserver/server.go | 13 +++++++++++++ 3 files changed, 20 insertions(+), 34 deletions(-) diff --git a/etcdserver/sendhub.go b/etcdserver/sendhub.go index 870e41398..a34befdd4 100644 --- a/etcdserver/sendhub.go +++ b/etcdserver/sendhub.go @@ -56,7 +56,7 @@ type sendHub struct { // to other members. The returned sendHub will update the given ServerStats and // LeaderStats appropriately. func newSendHub(t http.RoundTripper, cl ClusterInfo, p rafthttp.Processor, ss *stats.ServerStats, ls *stats.LeaderStats) *sendHub { - h := &sendHub{ + return &sendHub{ tr: t, cl: cl, p: p, @@ -65,10 +65,6 @@ func newSendHub(t http.RoundTripper, cl ClusterInfo, p rafthttp.Processor, ss *s senders: make(map[types.ID]rafthttp.Sender), shouldstop: make(chan struct{}, 1), } - for _, m := range cl.Members() { - h.Add(m) - } - return h } func (h *sendHub) Sender(id types.ID) rafthttp.Sender { return h.senders[id] } diff --git a/etcdserver/sendhub_test.go b/etcdserver/sendhub_test.go index 0b56d8c36..427d2030c 100644 --- a/etcdserver/sendhub_test.go +++ b/etcdserver/sendhub_test.go @@ -27,27 +27,6 @@ import ( "github.com/coreos/etcd/raft/raftpb" ) -func TestSendHubInitSenders(t *testing.T) { - membs := []*Member{ - newTestMember(1, []string{"http://a"}, "", nil), - newTestMember(2, []string{"http://b"}, "", nil), - newTestMember(3, []string{"http://c"}, "", nil), - } - cl := newTestCluster(membs) - ls := stats.NewLeaderStats("") - h := newSendHub(nil, cl, nil, nil, ls) - - ids := cl.MemberIDs() - if len(h.senders) != len(ids) { - t.Errorf("len(ids) = %d, want %d", len(h.senders), len(ids)) - } - for _, id := range ids { - if _, ok := h.senders[id]; !ok { - t.Errorf("senders[%s] is nil, want exists", id) - } - } -} - func TestSendHubAdd(t *testing.T) { cl := newTestCluster(nil) ls := stats.NewLeaderStats("") @@ -71,12 +50,11 @@ func TestSendHubAdd(t *testing.T) { } func TestSendHubRemove(t *testing.T) { - membs := []*Member{ - newTestMember(1, []string{"http://a"}, "", nil), - } - cl := newTestCluster(membs) + cl := newTestCluster(nil) ls := stats.NewLeaderStats("") h := newSendHub(nil, cl, nil, nil, ls) + m := newTestMember(1, []string{"http://a"}, "", nil) + h.Add(m) h.Remove(types.ID(1)) if _, ok := h.senders[types.ID(1)]; ok { @@ -85,13 +63,12 @@ func TestSendHubRemove(t *testing.T) { } func TestSendHubShouldStop(t *testing.T) { - membs := []*Member{ - newTestMember(1, []string{"http://a"}, "", nil), - } tr := newRespRoundTripper(http.StatusForbidden, nil) - cl := newTestCluster(membs) + cl := newTestCluster(nil) ls := stats.NewLeaderStats("") h := newSendHub(tr, cl, nil, nil, ls) + m := newTestMember(1, []string{"http://a"}, "", nil) + h.Add(m) shouldstop := h.ShouldStopNotify() select { diff --git a/etcdserver/server.go b/etcdserver/server.go index 66cf31516..9269bfbce 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -315,6 +315,9 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) { snapCount: cfg.SnapCount, } srv.sendhub = newSendHub(cfg.Transport, cfg.Cluster, srv, sstats, lstats) + for _, m := range getOtherMembers(cfg.Cluster, cfg.Name) { + srv.sendhub.Add(m) + } return srv, nil } @@ -964,6 +967,16 @@ func startNode(cfg *ServerConfig, ids []types.ID) (id types.ID, n raft.Node, s * return } +func getOtherMembers(cl ClusterInfo, self string) []*Member { + var ms []*Member + for _, m := range cl.Members() { + if m.Name != self { + ms = append(ms, m) + } + } + return ms +} + // getOtherPeerURLs returns peer urls of other members in the cluster. The // returned list is sorted in ascending lexicographical order. func getOtherPeerURLs(cl ClusterInfo, self string) []string {