func (db *SQLDB) completeTask(logger lager.Logger, task *models.Task, failed bool, failureReason, result string, tx *sql.Tx) error { now := db.clock.Now().UnixNano() _, err := db.update(logger, tx, tasksTable, SQLAttributes{ "failed": failed, "failure_reason": failureReason, "result": result, "state": models.Task_Completed, "first_completed_at": now, "updated_at": now, "cell_id": "", }, "guid = ?", task.TaskGuid, ) if err != nil { logger.Error("failed-updating-tasks", err) return db.convertSQLError(err) } task.State = models.Task_Completed task.UpdatedAt = now task.FirstCompletedAt = now task.Failed = failed task.FailureReason = failureReason task.Result = result task.CellId = "" return nil }
func (db *ETCDDB) markTaskCompleted(task *models.Task, failed bool, failureReason, result string) { now := db.clock.Now().UnixNano() task.CellId = "" task.UpdatedAt = now task.FirstCompletedAt = now task.State = models.Task_Completed task.Failed = failed task.FailureReason = failureReason task.Result = result }
}) }) }) Context("when the task does not exist", func() { It("returns an error", func() { started, err := sqlDB.StartTask(logger, "invalid-guid", "cell-id") Expect(err).To(Equal(models.ErrResourceNotFound)) Expect(started).To(BeFalse()) }) }) Context("when the task is already completed", func() { BeforeEach(func() { expectedTask = model_helpers.NewValidTask("task-other-guid") expectedTask.State = models.Task_Completed expectedTask.CellId = "completed-guid" insertTask(db, serializer, expectedTask, false) }) It("returns an invalid state transition", func() { started, err := sqlDB.StartTask(logger, "task-other-guid", "completed-guid") modelErr := models.ConvertError(err) Expect(modelErr).NotTo(BeNil()) Expect(modelErr.Type).To(Equal(models.Error_InvalidStateTransition)) Expect(started).To(BeFalse()) task, err := sqlDB.TaskByGuid(logger, expectedTask.TaskGuid) Expect(err).NotTo(HaveOccurred()) Expect(task).To(BeEquivalentTo(beforeTask)) })
func demoteToCompleted(task *models.Task) *models.Task { task.State = models.Task_Completed return task }