func (s *Scheduler) onTaskStarted(id string, status *mesos.TaskStatus) { if s.cluster.Exists(id) { task := s.cluster.Get(id) task.Data().State = TaskStateRunning } else { Logger.Infof("Got %s for unknown/stopped task, killing task %s", pretty.Status(status), status.GetTaskId().GetValue()) } }
func (s *Scheduler) StatusUpdate(driver scheduler.SchedulerDriver, status *mesos.TaskStatus) { Logger.Infof("[StatusUpdate] %s", pretty.Status(status)) id := s.idFromTaskId(status.GetTaskId().GetValue()) switch status.GetState() { case mesos.TaskState_TASK_RUNNING: s.onTaskStarted(id, status) case mesos.TaskState_TASK_LOST, mesos.TaskState_TASK_FAILED, mesos.TaskState_TASK_ERROR: s.onTaskFailed(id, status) case mesos.TaskState_TASK_FINISHED, mesos.TaskState_TASK_KILLED: s.onTaskFinished(id, status) default: Logger.Warnf("Got unexpected task state %s for task %s", pretty.Status(status), id) } s.cluster.Save() }
func (s *Scheduler) onTaskFailed(id string, status *mesos.TaskStatus) { if s.cluster.Exists(id) { task := s.cluster.Get(id) if task.Data().State != TaskStateInactive { task.Data().State = TaskStateStopped } } else { Logger.Infof("Got %s for unknown/stopped task %s", pretty.Status(status), status.GetTaskId().GetValue()) } }
func (s *Scheduler) StatusUpdate(driver scheduler.SchedulerDriver, status *mesos.TaskStatus) { Logger.Infof("[StatusUpdate] %s", pretty.Status(status)) slave := s.slaveFromTaskId(status.GetTaskId().GetValue()) if status.GetState() == mesos.TaskState_TASK_FAILED || status.GetState() == mesos.TaskState_TASK_KILLED || status.GetState() == mesos.TaskState_TASK_LOST || status.GetState() == mesos.TaskState_TASK_ERROR || status.GetState() == mesos.TaskState_TASK_FINISHED { s.cluster.Remove(slave) } }
func (s *StackDeployScheduler) StatusUpdate(driver scheduler.SchedulerDriver, status *mesos.TaskStatus) { Logger.Info("[StatusUpdate] %s", pretty.Status(status)) if status.GetState() == mesos.TaskState_TASK_FINISHED { driver.ReviveOffers() } for _, runner := range MesosTaskRunners { if runner.StatusUpdate(driver, status) { return } } Logger.Warn("Received status update that was not handled by any Mesos Task Runner: %s", pretty.Status(status)) }
func (ctx *RunOnceApplicationContext) StatusUpdate(driver scheduler.SchedulerDriver, status *mesos.TaskStatus) bool { ctx.lock.Lock() defer ctx.lock.Unlock() hostname := hostnameFromTaskID(status.GetTaskId().GetValue()) ctx.updateTaskState(status) switch status.GetState() { case mesos.TaskState_TASK_RUNNING: log.Infof("Task %s received status update in state %s", status.GetTaskId().GetValue(), status.GetState().String()) case mesos.TaskState_TASK_LOST, mesos.TaskState_TASK_FAILED, mesos.TaskState_TASK_ERROR: //TODO also kill all other running tasks sometime? ctx.StatusChan <- framework.NewApplicationRunStatus(ctx.Application, fmt.Errorf("Application %s failed to run on host %s with status %s: %s", ctx.Application.ID, hostname, status.GetState().String(), status.GetMessage())) return true case mesos.TaskState_TASK_FINISHED, mesos.TaskState_TASK_KILLED: if ctx.allTasksFinished() { ctx.StatusChan <- framework.NewApplicationRunStatus(ctx.Application, nil) return true } default: log.Warningf("Got unexpected task state %s", pretty.Status(status)) } return false }
func (s *Scheduler) onTaskFinished(id string, status *mesos.TaskStatus) { if !s.cluster.Exists(id) { Logger.Infof("Got %s for unknown/stopped task %s", pretty.Status(status), status.GetTaskId().GetValue()) } }