mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
server: maintain cluster members in nodes
var
This commit is contained in:
parent
5562c3b4ec
commit
7b11dc1c05
16
etcd/etcd.go
16
etcd/etcd.go
@ -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")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user