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