// The executor calls this when it is about to run the runonce in the claimed container // stagerBBS will retry this repeatedly if it gets a StoreTimeout error (up to N seconds?) // If this fails, the executor should assume that someone else is running and should clean up and bail func (self *executorBBS) StartTask(task *models.Task, containerHandle string) error { originalValue := task.ToJSON() task.UpdatedAt = self.timeProvider.Time().UnixNano() task.State = models.TaskStateRunning task.ContainerHandle = containerHandle return retryIndefinitelyOnStoreTimeout(func() error { return self.store.CompareAndSwap(storeadapter.StoreNode{ Key: taskSchemaPath(task), Value: originalValue, }, storeadapter.StoreNode{ Key: taskSchemaPath(task), Value: task.ToJSON(), }) }) }
func demoteToPending(task models.Task) models.Task { task.State = models.TaskStatePending task.ExecutorID = "" task.ContainerHandle = "" return task }