diff --git a/lib/cli.py b/lib/cli.py index 39a080b34733db7570a8d2867937851caf911aec..698427c4822d4557d5986d1fb970c1e167c943f0 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -565,14 +565,25 @@ def PollJob(job_id, cl=None, feedback_fn=None): prev_job_info = job_info - jobs = cl.QueryJobs([job_id], ["status", "opresult"]) + jobs = cl.QueryJobs([job_id], ["status", "opstatus", "opresult"]) if not jobs: raise errors.JobLost("Job with id %s lost" % job_id) - status, result = jobs[0] + status, opstatus, result = jobs[0] if status == constants.JOB_STATUS_SUCCESS: return result else: + has_ok = False + for idx, (status, msg) in enumerate(zip(opstatus, result)): + if status == constants.OP_STATUS_SUCCESS: + has_ok = True + elif status == constants.OP_STATUS_ERROR: + if has_ok: + raise errors.OpExecError("partial failure (opcode %d): %s" % + (idx, msg)) + else: + raise errors.OpExecError(str(msg)) + # default failure mode raise errors.OpExecError(result)