func (s *TestSuite) TestFailBeginMaintenanceTwice(c *C) { clearTestMaintenance() _, _ = inst.ReadTopologyInstance(&masterKey) _, err := inst.BeginMaintenance(&masterKey, "unittest", "TestFailBeginMaintenanceTwice") c.Assert(err, IsNil) _, err = inst.BeginMaintenance(&masterKey, "unittest", "TestFailBeginMaintenanceTwice") c.Assert(err, Not(IsNil)) }
func (s *TestSuite) TestBeginEndMaintenance(c *C) { clearTestMaintenance() _, _ = inst.ReadTopologyInstance(&masterKey) k, err := inst.BeginMaintenance(&masterKey, "unittest", "TestBeginEndMaintenance") c.Assert(err, IsNil) err = inst.EndMaintenance(k) c.Assert(err, IsNil) }
func (s *TestSuite) TestFailMoveBelowUponMaintenance(c *C) { clearTestMaintenance() _, _ = inst.ReadTopologyInstance(&slave1Key) k, err := inst.BeginMaintenance(&slave1Key, "unittest", "TestBeginEndMaintenance") c.Assert(err, IsNil) _, err = inst.MoveBelow(&slave1Key, &slave2Key) c.Assert(err, Not(IsNil)) err = inst.EndMaintenance(k) c.Assert(err, IsNil) }
// BeginMaintenance begins maintenance mode for given instance func (this *HttpAPI) BeginMaintenance(params martini.Params, r render.Render) { instanceKey, err := this.getInstanceKey(params["host"], params["port"]) if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: err.Error()}) return } key, err := inst.BeginMaintenance(&instanceKey, params["owner"], params["reason"]) if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: err.Error(), Details: key}) return } r.JSON(200, &APIResponse{Code: OK, Message: fmt.Sprintf("Maintenance begun: %+v", instanceKey)}) }
// Cli initiates a command line interface, executing requested command. func Cli(command string, instance string, sibling string, owner string, reason string) { instanceKey, err := inst.ParseInstanceKey(instance) if err != nil { instanceKey = nil } siblingKey, err := inst.ParseInstanceKey(sibling) if err != nil { siblingKey = nil } if len(owner) == 0 { // get os username as owner usr, err := user.Current() if err != nil { log.Fatale(err) } owner = usr.Username } if len(command) == 0 { log.Fatal("expected command (-c) (discover|forget|continuous|move-up|move-below|begin-maintenance|end-maintenance|clusters|topology|resolve)") } switch command { case "move-up": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } _, err := inst.MoveUp(instanceKey) if err != nil { log.Errore(err) } } case "move-below": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } if siblingKey == nil { log.Fatal("Cannot deduce sibling:", sibling) } _, err := inst.MoveBelow(instanceKey, siblingKey) if err != nil { log.Errore(err) } } case "discover": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } orchestrator.StartDiscovery(*instanceKey) } case "forget": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } inst.ForgetInstance(instanceKey) } case "begin-maintenance": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } if owner == "" { log.Fatal("--owner option required") } if reason == "" { log.Fatal("--reason option required") } maintenanceKey, err := inst.BeginMaintenance(instanceKey, owner, reason) if err == nil { log.Infof("Maintenance key: %+v", maintenanceKey) } if err != nil { log.Errore(err) } } case "end-maintenance": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } err := inst.EndMaintenanceByInstanceKey(instanceKey) if err != nil { log.Errore(err) } } case "clusters": { clusters, err := inst.ReadClusters() if err != nil { log.Errore(err) } else { fmt.Println(strings.Join(clusters, "\n")) } } case "topology": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } output, err := inst.AsciiTopology(instance) if err != nil { log.Errore(err) } else { fmt.Println(output) } } case "continuous": { orchestrator.ContinuousDiscovery() } case "resolve": { if instanceKey == nil { log.Fatal("Cannot deduce instance:", instance) } if conn, err := net.Dial("tcp", instanceKey.DisplayString()); err == nil { conn.Close() } else { log.Fatale(err) } fmt.Println(instanceKey.DisplayString()) } default: log.Fatal("Unknown command:", command) } }