diff --git a/domain/tasks/subtasks.py b/domain/tasks/subtasks.py index bd49a6ec6..95f9ec5bc 100644 --- a/domain/tasks/subtasks.py +++ b/domain/tasks/subtasks.py @@ -35,11 +35,14 @@ class SubTask: ) def start(self, cloud_logs_url: Optional[str] = None) -> None: - if self.status not in (SubTaskStatus.WAITING, SubTaskStatus.IN_PROGRESS): + # FAILED may restart: a failed batch is re-run by re-sending its own + # inputs, and its completion un-fails the parent Task (ADR-0055). + if self.status is SubTaskStatus.COMPLETE: raise ValueError(f"cannot start subtask in status {self.status}") if self.job_started is None: self.job_started = datetime.now(timezone.utc) self.status = SubTaskStatus.IN_PROGRESS + self.job_completed = None if cloud_logs_url is not None: self.cloud_logs_url = cloud_logs_url