mark dependant tasks failed upon failure (#650)

Fix #644
This commit is contained in:
bmc-msft 2021-03-11 17:24:43 -05:00 committed by GitHub
parent 09c6f9263f
commit 14c7d5e4d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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]: if self.state in [TaskState.stopped, TaskState.stopping]:
logging.debug( logging.debug(
"ignoring post-task stop failures for %s:%s", self.job_id, self.task_id "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]: def get_pool(self) -> Optional[Pool]:
if self.config.pool: if self.config.pool:
pool = Pool.get_by_name(self.config.pool.pool_name) pool = Pool.get_by_name(self.config.pool.pool_name)