From fae30d3a6aa7c4b48ab56ddc0a7ea3c05bfe4e62 Mon Sep 17 00:00:00 2001 From: Brett Williams Date: Sun, 4 Jun 2023 12:04:14 -0500 Subject: [PATCH] Fix issues with stopping running job and status being reported incorrectly --- lib/render_workers/base_worker.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/render_workers/base_worker.py b/lib/render_workers/base_worker.py index fafd773..613c5ae 100644 --- a/lib/render_workers/base_worker.py +++ b/lib/render_workers/base_worker.py @@ -116,6 +116,9 @@ class BaseRenderWorker(Base): @status.getter def status(self): + if self._status in [RenderStatus.RUNNING.value, RenderStatus.NOT_STARTED.value]: + if not hasattr(self, 'errors'): + return RenderStatus.CANCELLED return string_to_status(self._status) def validate(self): @@ -152,6 +155,10 @@ class BaseRenderWorker(Base): def start(self): + if self.status not in [RenderStatus.SCHEDULED, RenderStatus.NOT_STARTED]: + logger.error(f"Trying to start job with status: {self.status}") + return + if not os.path.exists(self.input_path): self.status = RenderStatus.ERROR msg = 'Cannot find input path: {}'.format(self.input_path) @@ -246,13 +253,6 @@ class BaseRenderWorker(Base): def stop(self, is_error=False): if hasattr(self, '__process'): try: - if self.status in [RenderStatus.RUNNING, RenderStatus.NOT_STARTED, RenderStatus.SCHEDULED]: - if is_error: - err_message = self.errors[-1] if self.errors else 'Unknown error' - logger.error(f"Halting render due to error: {err_message}") - self.status = RenderStatus.ERROR - else: - self.status = RenderStatus.CANCELLED self.maximum_attempts = 0 process = psutil.Process(self.__process.pid) for proc in process.children(recursive=True): @@ -260,6 +260,13 @@ class BaseRenderWorker(Base): process.kill() except Exception as e: logger.debug(f"Error stopping the process: {e}") + if self.status in [RenderStatus.RUNNING, RenderStatus.NOT_STARTED, RenderStatus.SCHEDULED]: + if is_error: + err_message = self.errors[-1] if self.errors else 'Unknown error' + logger.error(f"Halting render due to error: {err_message}") + self.status = RenderStatus.ERROR + else: + self.status = RenderStatus.CANCELLED def percent_complete(self): return 0