diff --git a/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/TaskStateRepository.java b/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/TaskStateRepository.java index 25be7c1..d2fe45d 100644 --- a/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/TaskStateRepository.java +++ b/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/TaskStateRepository.java @@ -1,6 +1,8 @@ package place.sita.magicscheduler.scheduler; import org.jooq.DSLContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Repository; import place.sita.labelle.core.persistence.ex.UnexpectedDatabaseReplyException; import place.sita.labelle.jooq.enums.TaskExecutionResult; @@ -16,6 +18,8 @@ @Repository public class TaskStateRepository { + private static final Logger log = LoggerFactory.getLogger(TaskStateRepository.class); + private final DSLContext dslContext; public TaskStateRepository(DSLContext dslContext) { @@ -33,6 +37,18 @@ public void assignState(UUID id, TaskStatus status) { .where(TASK.ID.eq(id)) .execute(); if (u != 1) { + boolean exists = dslContext + .fetchExists(TASK, TASK.ID.eq(id)); + if (exists) { + TaskStatus currentStatus = dslContext + .select(TASK.STATUS) + .from(TASK) + .where(TASK.ID.eq(id)) + .fetchOne(TASK.STATUS); + log.error("Failed to update task status for task {} with status {} to status {}", id, currentStatus, status); + } else { + log.error("Failed to update task status for task {} to status {} - it does not exist", id, status); + } throw new UnexpectedDatabaseReplyException(); } } diff --git a/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/environment/SchedulerAwareTaskExecutionEnvironment.java b/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/environment/SchedulerAwareTaskExecutionEnvironment.java index aea4f72..dfe7de8 100644 --- a/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/environment/SchedulerAwareTaskExecutionEnvironment.java +++ b/magic-scheduler/src/main/java/place/sita/magicscheduler/scheduler/environment/SchedulerAwareTaskExecutionEnvironment.java @@ -1,5 +1,6 @@ package place.sita.magicscheduler.scheduler.environment; +import org.jooq.DSLContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -13,6 +14,8 @@ import java.time.Instant; import java.util.UUID; +import static place.sita.labelle.jooq.Tables.TASK; + @Component public class SchedulerAwareTaskExecutionEnvironment { private static final Logger log = LoggerFactory.getLogger(SchedulerAwareTaskExecutionEnvironment.class); @@ -24,6 +27,7 @@ public class SchedulerAwareTaskExecutionEnvironment { private final PlatformTransactionManager platformTransactionManager; private final ExecutionResultsSubmitter executionResultsSubmitter; private final TaskExecutionEnvironment taskExecutionEnvironment; + private final DSLContext dslContext; public SchedulerAwareTaskExecutionEnvironment( InternalTaskSubmitter internalTaskSubmitter, @@ -31,16 +35,23 @@ public SchedulerAwareTaskExecutionEnvironment( SoftToHardFailPolicy softToHardFailPolicy, PlatformTransactionManager platformTransactionManager, ExecutionResultsSubmitter executionResultsSubmitter, - TaskExecutionEnvironment taskExecutionEnvironment) { + TaskExecutionEnvironment taskExecutionEnvironment, + DSLContext dslContext) { this.internalTaskSubmitter = internalTaskSubmitter; this.taskStateRepository = taskStateRepository; this.softToHardFailPolicy = softToHardFailPolicy; this.platformTransactionManager = platformTransactionManager; this.executionResultsSubmitter = executionResultsSubmitter; this.taskExecutionEnvironment = taskExecutionEnvironment; + this.dslContext = dslContext; } public ApiTaskExecutionResult executeTask(UUID taskId, TaskType type, ParameterT parameter, int failsSoFar) { + boolean exists = dslContext + .fetchExists(TASK, TASK.ID.eq(taskId)); + if (!exists) { + log.error("Task {} does not exist in the database", taskId); + } taskStateRepository.assignState(taskId, TaskStatus.IN_PROGRESS); Instant start = Instant.now();