// The executor calls this when it wants to claim a runonce // 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 handling the claim and should bail func (self *executorBBS) ClaimTask(task *models.Task, executorID string) error { originalValue := task.ToJSON() task.UpdatedAt = self.timeProvider.Time().UnixNano() task.State = models.TaskStateClaimed task.ExecutorID = executorID 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 }