Revision 6760e4ed
b/lib/jqueue.py | ||
---|---|---|
676 | 676 |
return constants.JOB_NOTCHANGED |
677 | 677 |
|
678 | 678 |
|
679 |
def _EncodeOpError(err): |
|
680 |
"""Encodes an error which occurred while processing an opcode. |
|
681 |
|
|
682 |
""" |
|
683 |
if isinstance(err, errors.GenericError): |
|
684 |
to_encode = err |
|
685 |
else: |
|
686 |
to_encode = errors.OpExecError(str(err)) |
|
687 |
|
|
688 |
return errors.EncodeException(to_encode) |
|
689 |
|
|
690 |
|
|
679 | 691 |
class _JobQueueWorker(workerpool.BaseWorker): |
680 | 692 |
"""The actual job workers. |
681 | 693 |
|
... | ... | |
764 | 776 |
try: |
765 | 777 |
logging.debug("Opcode %s/%s failed", idx + 1, count) |
766 | 778 |
op.status = constants.OP_STATUS_ERROR |
767 |
if isinstance(err, errors.GenericError): |
|
768 |
to_encode = err |
|
769 |
else: |
|
770 |
to_encode = errors.OpExecError(str(err)) |
|
771 |
op.result = errors.EncodeException(to_encode) |
|
779 |
op.result = _EncodeOpError(err) |
|
772 | 780 |
op.end_timestamp = TimeStampNow() |
773 | 781 |
logging.info("Op %s/%s: Error in opcode %s: %s", |
774 | 782 |
idx + 1, count, op_summary, err) |
775 | 783 |
|
776 | 784 |
to_encode = errors.OpExecError("Preceding opcode failed") |
777 | 785 |
job.MarkUnfinishedOps(constants.OP_STATUS_ERROR, |
778 |
errors.EncodeException(to_encode))
|
|
786 |
_EncodeOpError(to_encode))
|
|
779 | 787 |
|
780 | 788 |
# Consistency check |
781 | 789 |
assert compat.all(i.status == constants.OP_STATUS_SUCCESS |
b/test/ganeti.jqueue_unittest.py | ||
---|---|---|
220 | 220 |
["status"], None, None, 1.0) is None) |
221 | 221 |
|
222 | 222 |
|
223 |
class TestEncodeOpError(unittest.TestCase): |
|
224 |
def test(self): |
|
225 |
encerr = jqueue._EncodeOpError(errors.LockError("Test 1")) |
|
226 |
self.assert_(isinstance(encerr, tuple)) |
|
227 |
self.assertRaises(errors.LockError, errors.MaybeRaise, encerr) |
|
228 |
|
|
229 |
encerr = jqueue._EncodeOpError(errors.GenericError("Test 2")) |
|
230 |
self.assert_(isinstance(encerr, tuple)) |
|
231 |
self.assertRaises(errors.GenericError, errors.MaybeRaise, encerr) |
|
232 |
|
|
233 |
encerr = jqueue._EncodeOpError(NotImplementedError("Foo")) |
|
234 |
self.assert_(isinstance(encerr, tuple)) |
|
235 |
self.assertRaises(errors.OpExecError, errors.MaybeRaise, encerr) |
|
236 |
|
|
237 |
encerr = jqueue._EncodeOpError("Hello World") |
|
238 |
self.assert_(isinstance(encerr, tuple)) |
|
239 |
self.assertRaises(errors.OpExecError, errors.MaybeRaise, encerr) |
|
240 |
|
|
241 |
|
|
223 | 242 |
if __name__ == "__main__": |
224 | 243 |
testutils.GanetiTestProgram() |
Also available in: Unified diff