in src/buildstream/_scheduler/queues/queue.py [0:0]
def _job_done(self, job, element, status, result):
# Now release the resources we reserved
#
self._resources.release(self.resources)
# Update values that need to be synchronized in the main task
# before calling any queue implementation
self._update_workspaces(element)
# Give the result of the job to the Queue implementor,
# and determine if it should be considered as processed
# or skipped.
try:
self.done(job, element, result, status)
except BstError as e:
# Report error and mark as failed
#
self._message(element, MessageType.ERROR, "Post processing error", detail=str(e))
self._task_group.add_failed_task(element._get_full_name())
# Treat this as a task error as it's related to a task
# even though it did not occur in the task context
#
# This just allows us stronger testing capability
#
set_last_task_error(e.domain, e.reason)
except Exception: # pylint: disable=broad-except
# Report unhandled exceptions and mark as failed
#
self._message(
element, MessageType.BUG, "Unhandled exception in post processing", detail=traceback.format_exc()
)
self._task_group.add_failed_task(element._get_full_name())
else:
# All elements get placed on the done queue for later processing.
self._done_queue.append(element)
# These lists are for bookkeeping purposes for the UI and logging.
if status == JobStatus.SKIPPED or job.get_terminated():
self._task_group.add_skipped_task()
elif status == JobStatus.OK:
self._task_group.add_processed_task()
else:
self._task_group.add_failed_task(element._get_full_name())