|
1 | 1 | package api |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "time" |
4 | 5 | "net/http" |
5 | 6 |
|
6 | 7 | cfg "github.com/AVENTER-UG/mesos-compose/types" |
7 | 8 | "github.com/gorilla/mux" |
8 | 9 | "github.com/sirupsen/logrus" |
| 10 | + "github.com/AVENTER-UG/util/util" |
9 | 11 | ) |
10 | 12 |
|
11 | 13 | // V0ComposeRestartService will restart a service from a specific project |
@@ -41,22 +43,49 @@ func (e *API) V0ComposeRestartService(w http.ResponseWriter, r *http.Request) { |
41 | 43 | return |
42 | 44 | } |
43 | 45 |
|
44 | | - logrus.WithField("func", "api.V0ComposeRestartService").Infof("Restart Tasks the service %s in project %s", project, servicename) |
| 46 | + logrus.WithField("func", "api.V0ComposeRestartService").Infof("Restart the service %s in project %s", project, servicename) |
45 | 47 |
|
| 48 | + // generate new task as copy of old task |
| 49 | + newTask := new(cfg.Command) |
46 | 50 | for keys.Next(e.Redis.CTX) { |
47 | 51 | key := e.Redis.GetRedisKey(keys.Val()) |
48 | 52 | task := e.Mesos.DecodeTask(key) |
49 | | - newTask := new(cfg.Command) |
50 | 53 | *newTask = *task |
51 | 54 | task.State = "__KILL" |
52 | 55 | task.Restart = "no" |
53 | 56 | e.Redis.SaveTaskRedis(task) |
54 | 57 |
|
55 | 58 | logrus.WithField("func", "api.V0ComposeRestartService").Tracef("Restart Task (%s) of service \"%s\" in project \"%s\"", task.TaskID, project, servicename) |
| 59 | + } |
| 60 | + |
| 61 | + go e.increaseAfterKill(newTask, project, servicename) |
| 62 | +} |
| 63 | + |
| 64 | +// increaseAfterKill |
| 65 | +// check every 5 seconds if all tasks of this service is killed. |
| 66 | +// if it so, start a new |
| 67 | +func (e *API) increaseAfterKill(task *cfg.Command, project, serviceName string) { |
| 68 | + done := false |
| 69 | + ticker := time.NewTicker(5 * time.Second) |
| 70 | + defer ticker.Stop() |
| 71 | + |
| 72 | + for !done { |
| 73 | + select { |
| 74 | + case <-ticker.C: |
| 75 | + if e.Redis.CountRedisKey(e.Config.PrefixTaskName + ":" + project + ":" + serviceName + ":*", "") <= 0 { |
| 76 | + done = true |
| 77 | + |
| 78 | + logrus.WithField("func", "api.increaseAfterKill").Infof("Restart Task %s", serviceName) |
56 | 79 |
|
57 | | - // generate new task as copy of old task |
58 | | - newTask.TaskID = e.IncreaseTaskCount(newTask.TaskID) |
59 | | - newTask.State = "" |
60 | | - e.Redis.SaveTaskRedis(newTask) |
| 80 | + uuid, err := util.GenUUID() |
| 81 | + if err != nil { |
| 82 | + logrus.WithField("func", "api.increaseAfterKill").Error("Error during create uuid: ", err.Error()) |
| 83 | + return |
| 84 | + } |
| 85 | + task.TaskID = e.IncreaseTaskCount(project + "_" + serviceName + "." + uuid) |
| 86 | + task.State = "" |
| 87 | + e.Redis.SaveTaskRedis(task) |
| 88 | + } |
| 89 | + } |
61 | 90 | } |
62 | 91 | } |
0 commit comments