Revision f2921752
b/lib/cli.py | ||
---|---|---|
994 | 994 |
cl = GetClient() |
995 | 995 |
self.cl = cl |
996 | 996 |
self.verbose = verbose |
997 |
self.jobs = [] |
|
997 | 998 |
|
998 | 999 |
def QueueJob(self, name, *ops): |
999 |
"""Submit a job for execution.
|
|
1000 |
"""Record a job for later submit.
|
|
1000 | 1001 |
|
1001 | 1002 |
@type name: string |
1002 | 1003 |
@param name: a description of the job, will be used in WaitJobSet |
1003 | 1004 |
""" |
1004 |
job_id = SendJob(ops, cl=self.cl) |
|
1005 |
self.queue.append((job_id, name)) |
|
1005 |
self.queue.append((name, ops)) |
|
1006 |
|
|
1007 |
|
|
1008 |
def SubmitPending(self): |
|
1009 |
"""Submit all pending jobs. |
|
1010 |
|
|
1011 |
""" |
|
1012 |
results = self.cl.SubmitManyJobs([row[1] for row in self.queue]) |
|
1013 |
for ((status, data), (name, _)) in zip(results, self.queue): |
|
1014 |
self.jobs.append((status, data, name)) |
|
1006 | 1015 |
|
1007 | 1016 |
def GetResults(self): |
1008 | 1017 |
"""Wait for and return the results of all jobs. |
... | ... | |
1013 | 1022 |
there will be the error message |
1014 | 1023 |
|
1015 | 1024 |
""" |
1025 |
if not self.jobs: |
|
1026 |
self.SubmitPending() |
|
1016 | 1027 |
results = [] |
1017 | 1028 |
if self.verbose: |
1018 |
ToStdout("Submitted jobs %s", ", ".join(row[0] for row in self.queue)) |
|
1019 |
for jid, name in self.queue: |
|
1029 |
ok_jobs = [row[1] for row in self.jobs if row[0]] |
|
1030 |
if ok_jobs: |
|
1031 |
ToStdout("Submitted jobs %s", ", ".join(ok_jobs)) |
|
1032 |
for submit_status, jid, name in self.jobs: |
|
1033 |
if not submit_status: |
|
1034 |
ToStderr("Failed to submit job for %s: %s", name, jid) |
|
1035 |
results.append((False, jid)) |
|
1036 |
continue |
|
1020 | 1037 |
if self.verbose: |
1021 | 1038 |
ToStdout("Waiting for job %s for %s...", jid, name) |
1022 | 1039 |
try: |
... | ... | |
1041 | 1058 |
if wait: |
1042 | 1059 |
return self.GetResults() |
1043 | 1060 |
else: |
1044 |
for jid, name in self.queue: |
|
1045 |
ToStdout("%s: %s", jid, name) |
|
1061 |
if not self.jobs: |
|
1062 |
self.SubmitPending() |
|
1063 |
for status, result, name in self.jobs: |
|
1064 |
if status: |
|
1065 |
ToStdout("%s: %s", result, name) |
|
1066 |
else: |
|
1067 |
ToStderr("Failure for %s: %s", name, result) |
Also available in: Unified diff