// actions func apiActionGC(r *http.Request) (int, string) { r.ParseForm() keep, _ := strconv.Atoi(r.FormValue("keep")) secs, _ := strconv.Atoi(r.FormValue("secs")) conn := CreateCoordConn() defer conn.Close() lock := utils.GetCoordLock(conn, globalEnv.ProductName()) lock.Lock(fmt.Sprintf("action gc")) defer func() { err := lock.Unlock() if err != nil { log.Warning(err) } }() var err error if keep >= 0 { err = models.ActionGC(conn, globalEnv.ProductName(), models.GC_TYPE_N, keep) } else if secs > 0 { err = models.ActionGC(conn, globalEnv.ProductName(), models.GC_TYPE_SEC, secs) } if err != nil { return 500, err.Error() } return jsonRetSucc() }
func apiPromoteServer(server models.Server, param martini.Params) (int, string) { conn := CreateCoordConn() defer conn.Close() lock := utils.GetCoordLock(conn, globalEnv.ProductName()) lock.Lock(fmt.Sprintf("promote server %+v", server)) defer func() { err := lock.Unlock() if err != nil { log.Warning(err) } }() group, err := models.GetGroup(conn, globalEnv.ProductName(), server.GroupId) if err != nil { log.Warning(err) return 500, err.Error() } err = group.Promote(conn, server.Addr, globalEnv.StoreAuth()) if err != nil { log.Warning(errors.ErrorStack(err)) log.Warning(err) return 500, err.Error() } return jsonRetSucc() }
func apiSlotRangeSet(task RangeSetTask) (int, string) { conn := CreateCoordConn() defer conn.Close() lock := utils.GetCoordLock(conn, globalEnv.ProductName()) lock.Lock(fmt.Sprintf("set slot range, %+v", task)) defer func() { err := lock.Unlock() if err != nil { log.Warning(err) } }() // default set online if len(task.Status) == 0 { task.Status = string(models.SLOT_STATUS_ONLINE) } err := models.SetSlotRange(conn, globalEnv.ProductName(), task.FromSlot, task.ToSlot, task.NewGroupId, models.SlotStatus(task.Status)) if err != nil { log.Warning(err) return 500, err.Error() } return jsonRetSucc() }
// create new server group func apiAddServerGroup(newGroup models.ServerGroup) (int, string) { conn := CreateCoordConn() defer conn.Close() lock := utils.GetCoordLock(conn, globalEnv.ProductName()) lock.Lock(fmt.Sprintf("add group %+v", newGroup)) defer func() { err := lock.Unlock() if err != nil { log.Warning(err) } }() newGroup.ProductName = globalEnv.ProductName() exists, err := newGroup.Exists(conn) if err != nil { log.Warning(err) return 500, err.Error() } if exists { return 500, "group already exists" } err = newGroup.Create(conn) if err != nil { log.Warning(err) return 500, err.Error() } return jsonRetSucc() }
func (s *testModelSuite) TestForceRemoveLock(c *C) { log.Info("[TestForceRemoveLock][start]") fakeCoordConn := zkhelper.NewConn() zkLock := utils.GetCoordLock(fakeCoordConn, productName) c.Assert(zkLock, NotNil) zkLock.Lock("force remove lock") coordPath := fmt.Sprintf("/zk/reborn/db_%s/LOCK", productName) children, _, err := fakeCoordConn.Children(coordPath) c.Assert(err, IsNil) c.Assert(len(children), Not(Equals), 0) ForceRemoveLock(fakeCoordConn, productName) children, _, err = fakeCoordConn.Children(coordPath) c.Assert(err, IsNil) c.Assert(len(children), Equals, 0) fakeCoordConn.Close() log.Info("[TestForceRemoveLock][end]") }
// add redis server to exist server group func apiAddServerToGroup(server models.Server, param martini.Params) (int, string) { groupId, _ := strconv.Atoi(param["id"]) conn := CreateCoordConn() defer conn.Close() lock := utils.GetCoordLock(conn, globalEnv.ProductName()) lock.Lock(fmt.Sprintf("add server to group, %+v", server)) defer func() { err := lock.Unlock() if err != nil { log.Warning(err) } }() // check group exists first serverGroup := models.NewServerGroup(globalEnv.ProductName(), groupId) exists, err := serverGroup.Exists(conn) if err != nil { log.Warning(err) return 500, err.Error() } // create new group if not exists if !exists { if err := serverGroup.Create(conn); err != nil { return 500, err.Error() } } if err := serverGroup.AddServer(conn, &server, globalEnv.StoreAuth()); err != nil { log.Warning(errors.ErrorStack(err)) return 500, err.Error() } return jsonRetSucc() }
func apiRemoveServerGroup(param martini.Params) (int, string) { conn := CreateCoordConn() defer conn.Close() lock := utils.GetCoordLock(conn, globalEnv.ProductName()) lock.Lock(fmt.Sprintf("removing group %s", param["id"])) defer func() { err := lock.Unlock() if err != nil { log.Warning(err) } }() groupId, _ := strconv.Atoi(param["id"]) serverGroup := models.NewServerGroup(globalEnv.ProductName(), groupId) if err := serverGroup.Remove(conn); err != nil { log.Error(errors.ErrorStack(err)) return 500, err.Error() } return jsonRetSucc() }
func apiRemoveServerFromGroup(server models.Server, param martini.Params) (int, string) { groupId, _ := strconv.Atoi(param["id"]) conn := CreateCoordConn() defer conn.Close() lock := utils.GetCoordLock(conn, globalEnv.ProductName()) lock.Lock(fmt.Sprintf("removing server from group, %+v", server)) defer func() { err := lock.Unlock() if err != nil { log.Warning(err) } }() serverGroup := models.NewServerGroup(globalEnv.ProductName(), groupId) err := serverGroup.RemoveServer(conn, server.Addr) if err != nil { log.Warning(err) return 500, err.Error() } return jsonRetSucc() }