diff --git a/lib/jqueue.py b/lib/jqueue.py index ca75552fdfe22f4a2dfdee25a1ab65768b53b8d4..633315a7264e8e5b27a8ef29d4d906163c235703 100644 --- a/lib/jqueue.py +++ b/lib/jqueue.py @@ -757,6 +757,11 @@ class _JobQueueWorker(workerpool.BaseWorker): if idx == count - 1: job.lock_status = None job.end_timestamp = TimeStampNow() + + # Consistency check + assert compat.all(i.status == constants.OP_STATUS_SUCCESS + for i in job.ops) + queue.UpdateJobUnlocked(job) finally: queue.release() @@ -780,6 +785,17 @@ class _JobQueueWorker(workerpool.BaseWorker): op.end_timestamp = TimeStampNow() logging.info("Op %s/%s: Error in opcode %s: %s", idx + 1, count, op_summary, err) + + to_encode = errors.OpExecError("Preceding opcode failed") + job.MarkUnfinishedOps(constants.OP_STATUS_ERROR, + errors.EncodeException(to_encode)) + + # Consistency check + assert compat.all(i.status == constants.OP_STATUS_SUCCESS + for i in job.ops[:idx]) + assert compat.all(i.status == constants.OP_STATUS_ERROR and + errors.GetEncodedError(i.result) + for i in job.ops[idx:]) finally: job.lock_status = None job.end_timestamp = TimeStampNow()