server: maintain cluster members in nodes var

This commit is contained in:
Yicheng Qin 2014-07-13 17:12:46 -07:00
parent 5562c3b4ec
commit 7b11dc1c05

View File

@ -168,21 +168,22 @@ func (s *Server) Join() {
PeerURL: s.raftPubAddr, PeerURL: s.raftPubAddr,
} }
succeed := false url := ""
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
for seed := range s.nodes { for seed := range s.nodes {
if err := s.client.AddMachine(seed, fmt.Sprint(s.id), info); err == nil { if err := s.client.AddMachine(seed, fmt.Sprint(s.id), info); err == nil {
succeed = true url = seed
break break
} else { } else {
log.Println(err) log.Println(err)
} }
} }
if succeed { if url != "" {
break break
} }
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
} }
s.nodes = map[string]bool{url: true}
s.run() s.run()
} }
@ -329,9 +330,10 @@ func (s *Server) apply(ents []raft.Entry) {
break break
} }
log.Printf("Add Node %x %v %v\n", cfg.NodeId, cfg.Addr, string(cfg.Context)) log.Printf("Add Node %x %v %v\n", cfg.NodeId, cfg.Addr, string(cfg.Context))
s.nodes[cfg.Addr] = true
p := path.Join(v2machineKVPrefix, fmt.Sprint(cfg.NodeId)) p := path.Join(v2machineKVPrefix, fmt.Sprint(cfg.NodeId))
s.Store.Set(p, false, fmt.Sprintf("raft=%v&etcd=%v", cfg.Addr, string(cfg.Context)), store.Permanent) if _, err := s.Store.Set(p, false, fmt.Sprintf("raft=%v&etcd=%v", cfg.Addr, string(cfg.Context)), store.Permanent); err == nil {
s.nodes[cfg.Addr] = true
}
case raft.RemoveNode: case raft.RemoveNode:
cfg := new(raft.Config) cfg := new(raft.Config)
if err := json.Unmarshal(ent.Data, cfg); err != nil { if err := json.Unmarshal(ent.Data, cfg); err != nil {
@ -340,7 +342,9 @@ func (s *Server) apply(ents []raft.Entry) {
} }
log.Printf("Remove Node %x\n", cfg.NodeId) log.Printf("Remove Node %x\n", cfg.NodeId)
p := path.Join(v2machineKVPrefix, fmt.Sprint(cfg.NodeId)) p := path.Join(v2machineKVPrefix, fmt.Sprint(cfg.NodeId))
s.Store.Delete(p, false, false) if _, err := s.Store.Delete(p, false, false); err == nil {
delete(s.nodes, cfg.Addr)
}
default: default:
panic("unimplemented") panic("unimplemented")
} }