FIX: Check mount before map image
This commit is contained in:
parent
ba1773ef58
commit
f84c3194af
36
rbmd/http.go
36
rbmd/http.go
|
@ -4,6 +4,7 @@ import (
|
|||
"encoding/json"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"time"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
|
@ -175,30 +176,49 @@ func (wr Writer) WriteStatusWs(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
c, err := wr.Upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("[Ws ERROR] Upgrade: ", err)
|
||||
defer c.Close()
|
||||
log.Error("[Ws] Upgrade: ", err.Error())
|
||||
c.Close()
|
||||
return
|
||||
}
|
||||
|
||||
mt, _, err := c.ReadMessage()
|
||||
if err != nil {
|
||||
log.Print("[Ws ERROR] Read error: ", err)
|
||||
log.Error("[Ws] Read error: ", err.Error())
|
||||
// break
|
||||
defer c.Close()
|
||||
c.Close()
|
||||
return
|
||||
}
|
||||
|
||||
// go func(c *websocket.Conn, mt int) {
|
||||
// Write first state message after upgrade
|
||||
err = c.WriteMessage(mt, wr.z.GetState())
|
||||
if err != nil {
|
||||
log.Error("[Ws] Write err: ", err.Error())
|
||||
c.Close()
|
||||
return
|
||||
}
|
||||
|
||||
// Add watcher to cluster log
|
||||
// logPath := strings.Join([]string{wr.z.Path, "log", "quorum"}, "/")
|
||||
// log.Info(logPath)
|
||||
// _, _, ch, err := wr.z.Conn.ChildrenW(logPath)
|
||||
// if err != nil {
|
||||
// log.Error("Cant add watcher", err.Error())
|
||||
// c.Close()
|
||||
// return
|
||||
// }
|
||||
|
||||
for {
|
||||
// log.Info("Run sockets loop")
|
||||
// st := <-ch
|
||||
// log.Info("got zk event ", st.Server)
|
||||
time.Sleep(time.Second * 5)
|
||||
err = c.WriteMessage(mt, wr.z.GetState())
|
||||
if err != nil {
|
||||
log.Print("[Ws ERROR] Write err: ", err)
|
||||
log.Error("[Ws] Write err: ", err.Error())
|
||||
defer c.Close()
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Duration(1) * time.Second)
|
||||
}
|
||||
// }(c, mt)
|
||||
}
|
||||
|
||||
//ServeWebSockets start websockets server
|
||||
|
|
|
@ -235,8 +235,7 @@ func (z ZooNode) DestroyNode(fqdn string) ([]string, string) {
|
|||
return childrens, strings.Join(message, "")
|
||||
}
|
||||
|
||||
//CheckMounts ...
|
||||
// Check mounts on down node
|
||||
// CheckMounts on down node
|
||||
func CheckMounts(nodeStat []byte) (bool, []string) {
|
||||
var node Node
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ func (z ZooNode) RequestWatch(fqdn string) {
|
|||
|
||||
if z.GetQuorumHealth() != "alive." && child != "resolve" {
|
||||
z.RMR(p)
|
||||
z.Answer(fqdn, child, []byte(""), "FAIL: cluster not alive")
|
||||
z.Answer(fqdn, child, []byte(""), "FAIL: cluster not alive.")
|
||||
break
|
||||
}
|
||||
|
||||
|
@ -49,21 +49,21 @@ func (z ZooNode) RequestWatch(fqdn string) {
|
|||
m, err := z.CheckMounted(r)
|
||||
if err != nil {
|
||||
z.RMR(p)
|
||||
z.Answer(fqdn, child, []byte(""), "FAIL")
|
||||
log.Print("[ERROR] Mapping error: ", err.Error())
|
||||
z.Answer(fqdn, child, []byte(err.Error()), "FAIL")
|
||||
log.Error("[ERROR] Mapping error: ", err.Error())
|
||||
break
|
||||
}
|
||||
if !m {
|
||||
z.RMR(p)
|
||||
z.Answer(fqdn, child, []byte("Already mounted"), "FAIL")
|
||||
log.Print("[ERROR] Mapping error: ", err.Error())
|
||||
break
|
||||
log.Error("[ERROR] Mapping error: Already mounted")
|
||||
return
|
||||
}
|
||||
std, err := r.MapDevice()
|
||||
if err != nil {
|
||||
z.RMR(p)
|
||||
z.Answer(fqdn, child, std, "FAIL")
|
||||
log.Print("[ERROR] Mapping error: ", string(std), err.Error())
|
||||
log.Error("[ERROR] Mapping error: ", string(std), err.Error())
|
||||
break
|
||||
}
|
||||
err = r.MountFS(string(std))
|
||||
|
@ -168,15 +168,15 @@ func (z ZooNode) Answer(fqdn string, req string, stderr []byte, t string) {
|
|||
answer := MountState{t, string(stderr)}
|
||||
answerJSON, err := json.Marshal(answer)
|
||||
if err != nil {
|
||||
log.Print("[ERROR] ", err)
|
||||
log.Error(err.Error())
|
||||
}
|
||||
|
||||
_, err = z.Conn.Create(answerPath, answerJSON, 0, zk.WorldACL(zk.PermAll))
|
||||
if err != nil {
|
||||
log.Print("[zk ERROR] ", err)
|
||||
log.Error("[zk] ", err.Error())
|
||||
_, err := z.Conn.Set(answerPath, answerJSON, -1)
|
||||
if err != nil {
|
||||
log.Print("[zk ERROR] ", err)
|
||||
log.Error("[zk] ", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -223,11 +223,11 @@ func (z ZooNode) UmountRequest(r RBDDevice) error {
|
|||
//WatchAnswer watch for answer
|
||||
func (z ZooNode) WatchAnswer(fqdn string, t string) MountState {
|
||||
answersPath := strings.Join([]string{z.Path, "cluster", fqdn, "answers"}, "/")
|
||||
log.Print("[DEBUG] ", answersPath)
|
||||
log.Debug(answersPath)
|
||||
_, _, ch, err := z.Conn.ChildrenW(answersPath)
|
||||
if err != nil {
|
||||
log.Print("[zk ERROR] 107 ", err)
|
||||
return MountState{"FAIL", "Zk error"}
|
||||
log.Error("[zk] ", err.Error())
|
||||
return MountState{"FAIL", "Zk error " + err.Error()}
|
||||
}
|
||||
|
||||
var ms MountState
|
||||
|
@ -280,8 +280,8 @@ func (z ZooNode) CheckMounted(r RBDDevice) (bool, error) {
|
|||
}
|
||||
|
||||
for _, node := range nodes {
|
||||
statePath := strings.Join([]string{z.Path, "cluster", node, "state"}, "/")
|
||||
var nodeState Node
|
||||
statePath := strings.Join([]string{z.Path, "cluster", node, "state"}, "/")
|
||||
|
||||
state, _, err := z.Conn.Get(statePath)
|
||||
if err != nil {
|
||||
|
|
|
@ -92,7 +92,10 @@ func GetRBDPool(device string) (string, string) {
|
|||
log.Fatal("[ERROR] Read failure ", err)
|
||||
}
|
||||
|
||||
return string(pool), string(image)
|
||||
p := strings.Trim(string(pool), "\n")
|
||||
i := strings.Trim(string(image), "\n")
|
||||
|
||||
return p, i
|
||||
}
|
||||
|
||||
//GetMyIPs Exclude 127.0.0.1
|
||||
|
@ -188,7 +191,7 @@ func (r RBDDevice) MapDevice() ([]byte, error) {
|
|||
o := stdout.String()
|
||||
|
||||
if strings.HasSuffix(o, "\n") {
|
||||
o = o[:len(o)-2]
|
||||
o = o[:len(o)-1]
|
||||
}
|
||||
|
||||
return []byte(o), nil
|
||||
|
|
Loading…
Reference in New Issue
Block a user