I currently have a dag which follows the following pattern

short_circuit_operator -> s3_sensor -> downstream_task_1 ->
Downstream_task_2

When short circuit evaluates to false, s3_sensor is skipped, other
downstream task states remains at None and DAG Run fails.

couple of questions :

1) Which part/component of the application (scheduler/operator/?) takes
care of cascading the skipped status to downstream jobs? Short Circuit
operator only seems to update the immediate downstream jobs

2) Using CeleryExecutor seems to cause this. Are there any other logs or
processes I can run to figure out the root of the problem?

More details below

* ShortCircuitOperator Log: (The first downstream task is set to skipped,
although log shows a warning)

```
[2017-06-12 09:00:24,552] {base_task_runner.py:95} INFO - Subtask:
[2017-06-12 09:00:24,552] {python_operator.py:177} INFO - Skipping task:
on_s3_xyz
[2017-06-12 09:00:24,553] {base_task_runner.py:95} INFO - Subtask:
[2017-06-12 09:00:24,553] {python_operator.py:188} WARNING - Task
<Task(S3KeySensor): on_s3_xyz> was not part of a dag run. This should not
happen.
```

* Scheduler log (marks the Dag Run as failed)

[2017-06-13 17:57:20,983] {models.py:4184} DagFileProcessor43 INFO -
Deadlock; marking run <DagRun test_inbound @ 2017-06-05 09:00:00:
scheduled__2017-06-05T09:00:00, externally triggered: False> failed

When I check the dag run and run through the code, it looks like trigger
rule evaluates to false because upstream is "skipped"

```
Previous Dagrun State True The task did not have depends_on_past set.
Not In Retry Period True The task instance was not marked for retrying.
Trigger Rule False Task's trigger rule 'all_success' requires all upstream
tasks to have succeeded, but found 1 non-success(es).
upstream_tasks_state={'failed': 0, 'successes': 0, 'skipped': 1, 'done': 1,
'upstream_failed': 0}, upstream_task_ids=['on_s3_xyz']
```

Reply via email to