Browse Source

server: not add node that has been in the cluster

Yicheng Qin 11 years ago
parent
commit
f911196e5f
2 changed files with 7 additions and 7 deletions
  1. 6 4
      etcd/participant.go
  2. 1 3
      etcd/peer_hub.go

+ 6 - 4
etcd/participant.go

@@ -352,15 +352,17 @@ func (p *participant) apply(ents []raft.Entry) {
 				log.Printf("id=%x participant.cluster.addNode unmarshalErr=\"%v\"\n", p.id, err)
 				break
 			}
+			pp := path.Join(v2machineKVPrefix, fmt.Sprint(cfg.NodeId))
+			if ev, _ := p.Store.Get(pp, false, false); ev != nil {
+				log.Printf("id=%x participant.cluster.addNode err=existed value=%q", p.id, *ev.Node.Value)
+				break
+			}
 			peer, err := p.peerHub.add(cfg.NodeId, cfg.Addr)
 			if err != nil {
 				log.Printf("id=%x participant.cluster.addNode peerAddErr=\"%v\"\n", p.id, err)
 				break
 			}
-			if p.id != cfg.NodeId {
-				peer.participate()
-			}
-			pp := path.Join(v2machineKVPrefix, fmt.Sprint(cfg.NodeId))
+			peer.participate()
 			p.Store.Set(pp, false, fmt.Sprintf("raft=%v&etcd=%v", cfg.Addr, string(cfg.Context)), store.Permanent)
 			if p.id == cfg.NodeId {
 				p.raftPubAddr = cfg.Addr

+ 1 - 3
etcd/peer_hub.go

@@ -109,9 +109,7 @@ func (h *peerHub) add(id int64, rawurl string) (*peer, error) {
 	if h.stopped {
 		return nil, fmt.Errorf("peerHub stopped")
 	}
-	if _, ok := h.peers[id]; !ok {
-		h.peers[id] = newPeer(u.String(), h.c)
-	}
+	h.peers[id] = newPeer(u.String(), h.c)
 	return h.peers[id], nil
 }