jroachgolf84 commented on code in PR #65314:
URL: https://github.com/apache/airflow/pull/65314#discussion_r3607294689
##########
airflow-core/src/airflow/api_fastapi/core_api/routes/public/task_instances.py:
##########
@@ -925,30 +929,48 @@ def _collect_relatives(run_id: str, direction:
Literal["upstream", "downstream"]
*((t, m) for t, m in mapped_tasks_tuples if t not in
normal_task_ids),
]
+ # Follow ExternalTaskMarker connections when explicitly requested via
include_downstream_dags, or
+ # automatically whenever downstream clearing is selected (restoring
Airflow 2 behavior)
+ include_dependent_dags = body.include_downstream_dags or downstream
+
task_instances: Sequence[TI]
- if dag_run_id is not None and not (past or future):
- # Use run_id-based clearing when we have a specific dag_run_id and not
using past/future
- task_instances = dag.clear(
- dry_run=True,
- task_ids=task_markers_to_clear,
- run_id=dag_run_id,
- session=session,
- run_on_latest_version=resolved_run_on_latest,
- only_failed=body.only_failed,
- only_running=body.only_running,
- )
- else:
- # Use date-based clearing when no dag_run_id or when past/future is
specified
- task_instances = dag.clear(
- dry_run=True,
- task_ids=task_markers_to_clear,
- start_date=body.start_date,
- end_date=body.end_date,
- session=session,
- run_on_latest_version=resolved_run_on_latest,
- only_failed=body.only_failed,
- only_running=body.only_running,
- )
+ try:
+ if dag_run_id is not None and not (past or future):
+ # Use run_id-based clearing when we have a specific dag_run_id and
not using past/future
+ task_instances = dag.clear(
+ dry_run=True,
+ task_ids=task_markers_to_clear,
+ run_id=dag_run_id,
+ session=session,
+ run_on_latest_version=resolved_run_on_latest,
+ only_failed=body.only_failed,
+ only_running=body.only_running,
+ include_dependent_dags=include_dependent_dags,
+ )
+ else:
+ # Use date-based clearing when no dag_run_id or when past/future
is specified
+ task_instances = dag.clear(
+ dry_run=True,
+ task_ids=task_markers_to_clear,
+ start_date=body.start_date,
+ end_date=body.end_date,
+ session=session,
+ run_on_latest_version=resolved_run_on_latest,
+ only_failed=body.only_failed,
+ only_running=body.only_running,
+ include_dependent_dags=include_dependent_dags,
+ )
+
+ except MaxRecursionDepthError as e:
+ raise HTTPException(status.HTTP_400_BAD_REQUEST, str(e)) from e
+
+ except DagNotFound as e:
+ raise HTTPException(status.HTTP_404_NOT_FOUND, str(e)) from e
+
+ if include_dependent_dags:
+ # Ensure proper access to downstream dags/tasks with dag.clear and
include_dependent_dags
+ editable_dag_ids =
get_auth_manager().get_authorized_dag_ids(method="PUT", user=user)
Review Comment:
Resolved in next commit.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]