[
https://issues.apache.org/jira/browse/AIRFLOW-4524?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16843412#comment-16843412
]
Jim Baldwin commented on AIRFLOW-4524:
--------------------------------------
In this code you can see the post variables being set:
{code:html}
<form method="POST">
<input name="csrf_token" type="hidden" value="\{{ csrf_token() }}"/>
<input name="dag_id" type="hidden">
<input name="task_id" type="hidden">
<input name="execution_date" type="hidden">
<input name="origin" type="hidden" value="\{{ request.base_url }}">
<button id="btn_run" type="button" class="btn btn-primary"
title="Runs a single task instance"
data-action="\{{ url_for('airflow.run') }}">
Run
</button>
<span class="btn-group" data-toggle="buttons">
<label
class="btn"
title="Ignores all non-critical dependencies, including task
state and task_deps">
<input type="checkbox" value="true" name="ignore_all_deps"
autocomplete="off">
Ignore All Deps</label>
<label class="btn"
title="Ignore previous success/failure">
<input type="checkbox" value="true" name="ignore_ti_state"
autocomplete="off">
Ignore Task State
</label>
<label class="btn"
title="Disregard the task-specific dependencies, e.g. status of
upstream task instances and depends_on_past">
<input type="checkbox" value="true" name="ignore_task_deps"
autocomplete="off">
Ignore Task Deps
</label>
</span>
<hr/>
<button id="btn_clear" type="button" class="btn btn-primary"
title="Clearing deletes the previous state of the task
instance, allowing it to get re-triggered by the scheduler or a backfill
command"
data-action="\{{ url_for('airflow.clear') }}"
>Clear
</button>
<span class="btn-group" data-toggle="buttons">
<label class="btn"
title="Also include past task instances when clearing this one">
<input type="checkbox" value="true" name="past"
autocomplete="off">
Past
</label>
<label class="btn"
title="Also include future task instances when clearing this
one">
<input type="checkbox" value="true" name="future"
autocomplete="off">
Future
</label>
<label class="btn"
title="Also include upstream dependencies">
<input type="checkbox" value="true" name="upstream"
autocomplete="off">
Upstream
</label>
<label class="btn active"
title="Also include downstream dependencies">
<input type="checkbox" value="true" name="downstream" checked
autocomplete="off">
Downstream
</label>
<label class="btn active">
<input type="checkbox" value="true" name="recursive" checked
autocomplete="off">
Recursive
</label>
</span>
<hr/>
<button id="btn_failed" type="button" class="btn btn-primary"
data-action="\{{ url_for('airflow.failed') }}">
Mark Failed
</button>
<span class="btn-group" data-toggle="buttons">
<label class="btn">
<input type="checkbox" value="true" name="failed_past"
autocomplete="off">
Past
</label>
<label class="btn">
<input type="checkbox" value="true" name="failed_future"
autocomplete="off">
Future
</label>
<label class="btn">
<input type="checkbox" value="true" name="failed_upstream"
autocomplete="off">
Upstream
</label>
<label class="btn">
<input type="checkbox" value="true" name="failed_downstream"
autocomplete="off">
Downstream
</label>
</span>
<hr/>
<button id="btn_success" type="button" class="btn btn-primary"
data-action="\{{ url_for('airflow.success') }}">
Mark Success
</button>
<span class="btn-group" data-toggle="buttons">
<label class="btn">
<input type="checkbox" value="true" name="success_past"
autocomplete="off">
Past
</label>
<label class="btn">
<input type="checkbox" value="true" name="success_future"
autocomplete="off">
Future
</label>
<label class="btn">
<input type="checkbox" value="true" name="success_upstream"
autocomplete="off">
Upstream
</label>
<label class="btn">
<input type="checkbox" value="true" name="success_downstream"
autocomplete="off">
Downstream
</label>
</span>
</form>{code}
In this code you can see the Flask functions for success and failed still
picking up the clear variables. This did work correctly when a get request was
being set with the same variable names passed to each function.
Now that it is pulling from the form it needs to refer to the new variable
names defined in the HTML.
{code:python}
@expose('/failed', methods=['POST'])
@login_required
@wwwutils.action_logging
@wwwutils.notify_owner
def failed(self):
dag_id = request.form.get('dag_id')
task_id = request.form.get('task_id')
origin = request.form.get('origin')
execution_date = request.form.get('execution_date')
confirmed = request.form.get('confirmed') == "true"
upstream = request.form.get('upstream') == "true"
downstream = request.form.get('downstream') == "true"
future = request.form.get('future') == "true"
past = request.form.get('past') == "true"
return self._mark_task_instance_state(dag_id, task_id, origin,
execution_date,
confirmed, upstream, downstream,
future, past, State.FAILED)
@expose('/success', methods=['POST'])
@login_required
@wwwutils.action_logging
@wwwutils.notify_owner
def success(self):
dag_id = request.form.get('dag_id')
task_id = request.form.get('task_id')
origin = request.form.get('origin')
execution_date = request.form.get('execution_date')
confirmed = request.form.get('confirmed') == "true"
upstream = request.form.get('upstream') == "true"
downstream = request.form.get('downstream') == "true"
future = request.form.get('future') == "true"
past = request.form.get('past') == "true"
return self._mark_task_instance_state(dag_id, task_id, origin,
execution_date,
confirmed, upstream, downstream,
future, past, State.SUCCESS)
{code}
> "Ignore All Deps" and "Ignore Task Deps" doesn't ignore task dependencies
> -------------------------------------------------------------------------
>
> Key: AIRFLOW-4524
> URL: https://issues.apache.org/jira/browse/AIRFLOW-4524
> Project: Apache Airflow
> Issue Type: Bug
> Components: ui
> Affects Versions: 1.10.3
> Reporter: James Meickle
> Priority: Critical
> Attachments: Screenshot 2019-05-16 09.15.00.png
>
>
> After an upgrade from Airflow 1.10.1->1.10.3, we're seeing this behavior when
> trying to "Run" a task in the UI with "Ignore All Deps" and "Ignore Task
> Deps":
> {code:java}
> "Could not queue task instance for execution, dependencies not met: Trigger
> Rule: Task's trigger rule 'all_success' requires all upstream tasks to have
> succeeded, but found 1 non-success(es). upstream_tasks_state={'successes': 1,
> 'skipped': 0, 'upstream_failed': 0, 'failed': 0, 'done': 1, 'total': 2},
> upstream_task_ids={'XXX', 'XXX'}"
> {code}
> I suspected this was due to the checkbox not getting applied so I
> investigated this in Chrome. Here's a 1.10.3 POST (broken):
> {code:java}
> dag_id: MY_DAG_ID
> task_id: MY_TASK_ID
> execution_date: 2019-05-15T00:00:00+00:00
> origin: MY_AIRFLOW_SERVER
> ignore_all_deps:
> ignore_ti_state:
> ignore_task_deps:
> ignore_all_deps: true
> ignore_task_deps: true
> downstream: true
> recursive: true
> {code}
> And here's a 1.10.1 POST (working):
> {code:java}
> task_id: MY_TASK_ID
> dag_id: MY_DAG_ID
> ignore_all_deps: true
> ignore_task_deps: true
> ignore_ti_state: false
> execution_date: 2019-05-16T11:00:00+00:00
> origin: MY_AIRFLOW_SERVER
> {code}
> It looks like the JS here is doing something wonky and sending blank values
> for unchecked boxes, as well as checkboxes that don't apply to the current
> action, which is presumably breaking parsing when the server receives a json
> object with multiple conflicting keys.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)