- allow plugins to modify the task result from the preTaskStateChange callback
- make closing a task more resilient to failure, because callback in closeTask() may raise exceptions
This commit is contained in:
parent
ca7bc0a4ae
commit
c27c9d24ef
2 changed files with 10 additions and 8 deletions
|
|
@ -1109,14 +1109,14 @@ class TaskManager(object):
|
|||
os._exit(0)
|
||||
|
||||
def runTask(self,handler):
|
||||
fail = False
|
||||
try:
|
||||
response = (handler.run(),)
|
||||
# note that we wrap response in a singleton tuple
|
||||
response = xmlrpclib.dumps(response, methodresponse=1, allow_none=1)
|
||||
self.logger.info("RESPONSE: %r" % response)
|
||||
self.session.host.closeTask(handler.id, response)
|
||||
return
|
||||
except xmlrpclib.Fault, fault:
|
||||
fail = True
|
||||
response = xmlrpclib.dumps(fault)
|
||||
tb = ''.join(traceback.format_exception(*sys.exc_info())).replace(r"\n", "\n")
|
||||
self.logger.warn("FAULT:\n%s" % tb)
|
||||
|
|
@ -1130,7 +1130,6 @@ class TaskManager(object):
|
|||
except:
|
||||
tb = ''.join(traceback.format_exception(*sys.exc_info()))
|
||||
self.logger.warn("TRACEBACK: %s" % tb)
|
||||
fail = True
|
||||
# report exception back to server
|
||||
e_class, e = sys.exc_info()[:2]
|
||||
faultCode = getattr(e_class,'faultCode',1)
|
||||
|
|
@ -1139,7 +1138,5 @@ class TaskManager(object):
|
|||
tb = str(e)
|
||||
response = xmlrpclib.dumps(xmlrpclib.Fault(faultCode, tb))
|
||||
|
||||
if fail:
|
||||
self.session.host.failTask(handler.id, response)
|
||||
else:
|
||||
self.session.host.closeTask(handler.id, response)
|
||||
# if we get here, then we're handling an exception, so fail the task
|
||||
self.session.host.failTask(handler.id, response)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue