|
@@ -47,6 +47,7 @@ IGNORED = states.IGNORED
|
|
|
RETRY = states.RETRY
|
|
|
FAILURE = states.FAILURE
|
|
|
EXCEPTION_STATES = states.EXCEPTION_STATES
|
|
|
+IGNORE_STATES = frozenset([IGNORED, RETRY])
|
|
|
|
|
|
#: set by :func:`setup_worker_optimizations`
|
|
|
_tasks = None
|
|
@@ -142,7 +143,8 @@ class TraceInfo(object):
|
|
|
|
|
|
|
|
|
def build_tracer(name, task, loader=None, hostname=None, store_errors=True,
|
|
|
- Info=TraceInfo, eager=False, propagate=False):
|
|
|
+ Info=TraceInfo, eager=False, propagate=False,
|
|
|
+ IGNORE_STATES=IGNORE_STATES):
|
|
|
"""Builts a function that tracing the tasks execution; catches all
|
|
|
exceptions, and saves the state and result of the task execution
|
|
|
to the result backend.
|
|
@@ -227,7 +229,8 @@ def build_tracer(name, task, loader=None, hostname=None, store_errors=True,
|
|
|
state = SUCCESS
|
|
|
except Ignore, exc:
|
|
|
I, R = Info(IGNORED, exc), ExceptionInfo(internal=True)
|
|
|
- except RetryTaskError, exc:
|
|
|
+ state, retval = I.state, I.retval
|
|
|
+ except RetryTaskError, exc:
|
|
|
I = Info(RETRY, exc)
|
|
|
state, retval = I.state, I.retval
|
|
|
R = I.handle_error_state(task, eager=eager)
|
|
@@ -264,14 +267,15 @@ def build_tracer(name, task, loader=None, hostname=None, store_errors=True,
|
|
|
send_success(sender=task, result=retval)
|
|
|
|
|
|
# -* POST *-
|
|
|
- if task_request.chord:
|
|
|
- on_chord_part_return(task)
|
|
|
- if task_after_return:
|
|
|
- task_after_return(state, retval, uuid, args, kwargs, None)
|
|
|
- if postrun_receivers:
|
|
|
- send_postrun(sender=task, task_id=uuid, task=task,
|
|
|
- args=args, kwargs=kwargs,
|
|
|
- retval=retval, state=state)
|
|
|
+ if state not in IGNORE_STATES:
|
|
|
+ if task_request.chord:
|
|
|
+ on_chord_part_return(task)
|
|
|
+ if task_after_return:
|
|
|
+ task_after_return(state, retval, uuid, args, kwargs, None)
|
|
|
+ if postrun_receivers:
|
|
|
+ send_postrun(sender=task, task_id=uuid, task=task,
|
|
|
+ args=args, kwargs=kwargs,
|
|
|
+ retval=retval, state=state)
|
|
|
finally:
|
|
|
pop_task()
|
|
|
pop_request()
|