You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by je...@apache.org on 2021/11/03 21:30:04 UTC

[airflow] 05/17: Add Note to SLA regarding schedule_interval (#19173)

This is an automated email from the ASF dual-hosted git repository.

jedcunningham pushed a commit to branch v2-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 9a60e6244d497de37e002817b8b0f05bd5249c11
Author: john-jac <75...@users.noreply.github.com>
AuthorDate: Tue Nov 2 15:50:46 2021 -0700

    Add Note to SLA regarding schedule_interval (#19173)
    
    This document entry is intended to make explicit the requirement that SLAs will only be triggered for tasks in that are part of a scheduled DAG run.
    
    Manually triggering DAGs with schedule_interval of None causes the error
    ```
      File "/home/airflow/.local/lib/python3.6/site-packages/airflow/dag_processing/processor.py", line 411, in manage_slas
        while dttm < timezone.utcnow():
    TypeError: '<' not supported between instances of 'NoneType' and 'datetime.datetime'
    ```
    
    And manually triggering DAGs with a valid schedule_interval do not produce tasks that can invoke an SLA Miss.  Only scheduled DAGs will check tasks for SLA misses.
    
    (cherry picked from commit b18b2e502509fd492f65e18871b4db20f9e6cc4d)
---
 airflow/dag_processing/processor.py    | 25 +++++++++++++++----------
 docs/apache-airflow/concepts/tasks.rst |  4 ++++
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/airflow/dag_processing/processor.py b/airflow/dag_processing/processor.py
index dd7937f..c9a9d08 100644
--- a/airflow/dag_processing/processor.py
+++ b/airflow/dag_processing/processor.py
@@ -414,16 +414,21 @@ class DagFileProcessor(LoggingMixin):
 
             sla_misses = []
             next_info = dag.next_dagrun_info(dag.get_run_data_interval(ti.dag_run), restricted=False)
-            while next_info.logical_date < ts:
-                next_info = dag.next_dagrun_info(next_info.data_interval, restricted=False)
-                if next_info.logical_date + task.sla < ts:
-                    sla_miss = SlaMiss(
-                        task_id=ti.task_id,
-                        dag_id=ti.dag_id,
-                        execution_date=next_info.logical_date,
-                        timestamp=ts,
-                    )
-                    sla_misses.append(sla_miss)
+            if next_info is None:
+                self.log.info("Skipping SLA check for %s because task does not have scheduled date", ti)
+            else:
+                while next_info.logical_date < ts:
+                    next_info = dag.next_dagrun_info(next_info.data_interval, restricted=False)
+                    if next_info is None:
+                        break
+                    if next_info.logical_date + task.sla < ts:
+                        sla_miss = SlaMiss(
+                            task_id=ti.task_id,
+                            dag_id=ti.dag_id,
+                            execution_date=next_info.logical_date,
+                            timestamp=ts,
+                        )
+                        sla_misses.append(sla_miss)
             if sla_misses:
                 session.add_all(sla_misses)
         session.commit()
diff --git a/docs/apache-airflow/concepts/tasks.rst b/docs/apache-airflow/concepts/tasks.rst
index efc7090..0f30dd1 100644
--- a/docs/apache-airflow/concepts/tasks.rst
+++ b/docs/apache-airflow/concepts/tasks.rst
@@ -163,6 +163,10 @@ If you want to disable SLA checking entirely, you can set ``check_slas = False``
 
 To read more about configuring the emails, see :doc:`/howto/email-config`.
 
+.. note::
+
+    Only scheduled tasks will be checked against SLA. For example, manually triggered tasks will not invoke an SLA miss. For more information on ``schedule_interval`` values see :doc:`DAG Run </dag-run>`.
+
 .. _concepts:sla_miss_callback:
 
 sla_miss_callback