From 98e30ca7c20ece8345d6677e280d99f6d131a361 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Thu, 8 Oct 2015 14:07:16 -0700 Subject: [PATCH] etcdserver: skip updating attr if the member does not exist --- etcdserver/cluster.go | 7 ++++--- etcdserver/server.go | 5 ++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/etcdserver/cluster.go b/etcdserver/cluster.go index 756708f8c..5dbcacba8 100644 --- a/etcdserver/cluster.go +++ b/etcdserver/cluster.go @@ -324,20 +324,21 @@ func (c *cluster) RemoveMember(id types.ID) { c.removed[id] = true } -func (c *cluster) UpdateAttributes(id types.ID, attr Attributes) { +func (c *cluster) UpdateAttributes(id types.ID, attr Attributes) bool { c.Lock() defer c.Unlock() if m, ok := c.members[id]; ok { m.Attributes = attr - return + return true } _, ok := c.removed[id] if ok { - plog.Debugf("skipped updating attributes of removed member %s", id) + plog.Warningf("skipped updating attributes of removed member %s", id) } else { plog.Panicf("error updating attributes of unknown member %s", id) } // TODO: update store in this function + return false } func (c *cluster) UpdateRaftAttributes(id types.ID, raftAttr RaftAttributes) { diff --git a/etcdserver/server.go b/etcdserver/server.go index 80f205efe..571afab13 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -851,7 +851,10 @@ func (s *EtcdServer) applyRequest(r pb.Request) Response { if err := json.Unmarshal([]byte(r.Val), &attr); err != nil { plog.Panicf("unmarshal %s should never fail: %v", r.Val, err) } - s.cluster.UpdateAttributes(id, attr) + ok := s.cluster.UpdateAttributes(id, attr) + if !ok { + return Response{} + } } if r.Path == path.Join(StoreClusterPrefix, "version") { s.cluster.SetVersion(semver.Must(semver.NewVersion(r.Val)))