Node also should be removed from groups when it deleted by someone manually. Fix #32

pull/45/head
Doflatango 2017-10-18 17:48:39 +08:00
parent 3a9c5c1d2e
commit 25f10aeb42
1 changed files with 30 additions and 0 deletions

View File

@ -191,5 +191,35 @@ func (n *Node) DeleteNode(ctx *Context) {
return
}
// remove node from group
var errmsg = "failed to remove node %s from groups, please remove it manually: %s"
resp, err = cronsun.DefalutClient.Get(conf.Config.Group, v3.WithPrefix())
if err != nil {
outJSONWithCode(ctx.W, http.StatusInternalServerError, fmt.Sprintf(errmsg, ip, err.Error()))
return
}
for i := range resp.Kvs {
g := cronsun.Group{}
err = json.Unmarshal(resp.Kvs[i].Value, &g)
if err != nil {
outJSONWithCode(ctx.W, http.StatusInternalServerError, fmt.Sprintf(errmsg, ip, err.Error()))
return
}
var nids = make([]string, 0, len(g.NodeIDs))
for _, nid := range g.NodeIDs {
if nid != ip {
nids = append(nids, nid)
}
}
g.NodeIDs = nids
if _, err = g.Put(resp.Kvs[i].ModRevision); err != nil {
outJSONWithCode(ctx.W, http.StatusInternalServerError, fmt.Sprintf(errmsg, ip, err.Error()))
return
}
}
outJSONWithCode(ctx.W, http.StatusNoContent, nil)
}