diff --git a/rbmd/http.go b/rbmd/http.go index cca4620..348852e 100644 --- a/rbmd/http.go +++ b/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 diff --git a/rbmd/leader.go b/rbmd/leader.go index 519b18e..f082e98 100644 --- a/rbmd/leader.go +++ b/rbmd/leader.go @@ -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 diff --git a/rbmd/requests.go b/rbmd/requests.go index b6b8317..5cb5560 100644 --- a/rbmd/requests.go +++ b/rbmd/requests.go @@ -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 { diff --git a/rbmd/sys.go b/rbmd/sys.go index aaa3536..dd311ef 100644 --- a/rbmd/sys.go +++ b/rbmd/sys.go @@ -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