From 14c7d5e4d91899d16b420cf15e6587dba0a20ebb Mon Sep 17 00:00:00 2001 From: bmc-msft <41130664+bmc-msft@users.noreply.github.com> Date: Thu, 11 Mar 2021 17:24:43 -0500 Subject: [PATCH] mark dependant tasks failed upon failure (#650) Fix #644 --- .../__app__/onefuzzlib/tasks/main.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/api-service/__app__/onefuzzlib/tasks/main.py b/src/api-service/__app__/onefuzzlib/tasks/main.py index 2a04f3da2..bf3f8fb36 100644 --- a/src/api-service/__app__/onefuzzlib/tasks/main.py +++ b/src/api-service/__app__/onefuzzlib/tasks/main.py @@ -204,7 +204,9 @@ class Task(BASE_TASK, ORMMixin): ) ) - def mark_failed(self, error: Error) -> None: + def mark_failed( + self, error: Error, tasks_in_job: Optional[List["Task"]] = None + ) -> None: if self.state in [TaskState.stopped, TaskState.stopping]: logging.debug( "ignoring post-task stop failures for %s:%s", self.job_id, self.task_id @@ -224,6 +226,25 @@ class Task(BASE_TASK, ORMMixin): ) ) + self.mark_dependants_failed(tasks_in_job=tasks_in_job) + + def mark_dependants_failed( + self, tasks_in_job: Optional[List["Task"]] = None + ) -> None: + if tasks_in_job is None: + tasks_in_job = Task.search(query={"job_id": [self.job_id]}) + + for task in tasks_in_job: + if task.config.prereq_tasks: + if self.task_id in task.config.prereq_tasks: + task.mark_failed( + Error( + code=ErrorCode.TASK_FAILED, + errors=["prerequisite task failed"], + ), + tasks_in_job, + ) + def get_pool(self) -> Optional[Pool]: if self.config.pool: pool = Pool.get_by_name(self.config.pool.pool_name)