Browse Source

Merge pull request #1706 from xiang90/fix_sender_hub_add

etcdserver: do not add/remove/update local member to/from sender hub
Xiang Li 11 years ago
parent
commit
4adbd821a3
1 changed files with 18 additions and 6 deletions
  1. 18 6
      etcdserver/server.go

+ 18 - 6
etcdserver/server.go

@@ -684,13 +684,21 @@ func (s *EtcdServer) applyConfChange(cc raftpb.ConfChange) error {
 			log.Panicf("nodeID should always be equal to member ID")
 			log.Panicf("nodeID should always be equal to member ID")
 		}
 		}
 		s.Cluster.AddMember(m)
 		s.Cluster.AddMember(m)
-		s.sender.Add(m)
-		log.Printf("etcdserver: added member %s %v to cluster %s", types.ID(cc.NodeID), m.PeerURLs, s.Cluster.ID())
+		if m.ID == s.id {
+			log.Printf("etcdserver: added local member %s %v to cluster %s", m.ID, m.PeerURLs, s.Cluster.ID())
+		} else {
+			s.sender.Add(m)
+			log.Printf("etcdserver: added member %s %v to cluster %s", m.ID, m.PeerURLs, s.Cluster.ID())
+		}
 	case raftpb.ConfChangeRemoveNode:
 	case raftpb.ConfChangeRemoveNode:
 		id := types.ID(cc.NodeID)
 		id := types.ID(cc.NodeID)
 		s.Cluster.RemoveMember(id)
 		s.Cluster.RemoveMember(id)
-		s.sender.Remove(id)
-		log.Printf("etcdserver: removed member %s from cluster %s", id, s.Cluster.ID())
+		if id == s.id {
+			log.Printf("etcdserver: removed local member %s from cluster %s", id, s.Cluster.ID())
+		} else {
+			s.sender.Remove(id)
+			log.Printf("etcdserver: removed member %s from cluster %s", id, s.Cluster.ID())
+		}
 	case raftpb.ConfChangeUpdateNode:
 	case raftpb.ConfChangeUpdateNode:
 		m := new(Member)
 		m := new(Member)
 		if err := json.Unmarshal(cc.Context, m); err != nil {
 		if err := json.Unmarshal(cc.Context, m); err != nil {
@@ -700,8 +708,12 @@ func (s *EtcdServer) applyConfChange(cc raftpb.ConfChange) error {
 			log.Panicf("nodeID should always be equal to member ID")
 			log.Panicf("nodeID should always be equal to member ID")
 		}
 		}
 		s.Cluster.UpdateMember(m)
 		s.Cluster.UpdateMember(m)
-		s.sender.Update(m)
-		log.Printf("etcdserver: update member %s %v in cluster %s", m.ID, m.PeerURLs, s.Cluster.ID())
+		if m.ID == s.id {
+			log.Printf("etcdserver: update local member %s %v in cluster %s", m.ID, m.PeerURLs, s.Cluster.ID())
+		} else {
+			s.sender.Update(m)
+			log.Printf("etcdserver: update member %s %v in cluster %s", m.ID, m.PeerURLs, s.Cluster.ID())
+		}
 	}
 	}
 	return nil
 	return nil
 }
 }