Thank you for the clarification Jarek :)

I’ve updated the AIP on the Confluence page with your suggestion - please let 
me know what you folks think!

In summary, I think it will serve as a great way to maintain some capacity to 
measure a soft-timeout within a task. Obvious pros of this approach are its 
reliability and scalability. The down side is that I think that making it work 
with Deferrable Operators in an expected way will prove to be difficult.

https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=247828059#content/view/247828059

Sent from my iPhone

> On Jul 4, 2023, at 3:51 PM, Jarek Potiuk <ja...@potiuk.com> wrote:
> 
> 
>> 
>> Which forking strategy are we exactly proposing?
> 
> The important part is that you have a separate process that will run a
> separate Python interpreter so that if the task runs a "C" code without a
> loop, the "timer" thread will be able to stop it regardless (for timeout)
> and one that can run "in-parallel" SLA. So lillely it is
> 
> local task
> | - timeout fork (kills both "chlidren" if fired)
>    | - sla timer (runs in parallel to task)
>    | - task code
> 
> 
> Then when SLA timer fires, it will just notify - but let the task_code run.
> When timeout fires it will kill both child processes.
> 
> J.
> 
> 
> 
> 
> 
>> On Wed, Jun 21, 2023 at 9:22 PM Sung Yun <sy...@cornell.edu> wrote:
>> 
>> Hi Jarek, I've been mulling over the implementation of (3) task:
>> time_limit_sla, and I have some follow up questions about the
>> implementation.
>> 
>> Which forking strategy are we exactly proposing? Currently, we invoke
>> task.execute_callable within the taskinstance, which we can effectively
>> think of as the parent process for the sake of this discussion.
>> 
>> Are we proposing:
>> Structure 1
>> parent: task.execute_callable
>> └ child 1: sla timer
>> └ child 2: execution_timeout timer
>> 
>> Or:
>> Structure 2
>> parent: looping process that parses signals from child Processes
>> └ child 1: sla timer
>> └ child 2: execution_timeout timer
>> └ child 3: task.execute_callable
>> 
>> And also, are we proposing that the callbacks be executed in the child
>> processes (when the timers complete) or in the parent process?
>> 
>> Pierre: great questions...
>> 
>>> How hard would it be to spawn them when a task run with SLA configured as
>> a
>> normal workload on the worker ?
>>> Maybe on a dedicated queue / worker ?
>> 
>> My current thought is that having a well-abstracted subclass implementation
>> of Deferrable Operator may make the most sense for now. I worry that having
>> a configuration-driven way of creating sla monitoring tasks, where they are
>> created behind the scenes, would create confusion in the user base.
>> Especially so, if there is no dedicated worker pool that will completely
>> isolate the monitoring tasks from the resource pool of normal tasks. So I'm
>> curious to hear what options we would have in setting up a dedicated worker
>> pool to compliment this idea.
>> 
>> Sung
>> 
>> On Tue, Jun 20, 2023 at 2:08 PM Pierre Jeambrun <pierrejb...@gmail.com>
>> wrote:
>> 
>>> This task_sla is more and more making me think of a ‘task’ on its own. It
>>> would need to be run in parallel, non blocking, not overlap between each
>>> other, etc…
>>> 
>>> How hard would it be to spawn them when a task run with SLA configured
>> as a
>>> normal workload on the worker ?
>>> Maybe on a dedicated queue / worker ?
>>> 
>>>> On Tue 20 Jun 2023 at 16:47, Sung Yun <sy...@cornell.edu> wrote:
>>> 
>>>> Thank you all for your continued engagement and input! It looks like
>>>> Iaroslav's layout of 3 different labels of SLA's is helping us group
>> the
>>>> implementation into different categories, so I will organize my own
>>>> responses in those logical groupings as well.
>>>> 
>>>> 1. dag_sla
>>>> 2. task_sla
>>>> 3. task: time_limit_sla
>>>> 
>>>> 1. dag_sla
>>>> I am going to lean in on Jarek's support in driving us to agree on the
>>> fact
>>>> that, dag_sla seems like the only one that can stay within the
>> scheduler
>>>> without incurring an excessive burden on the core infrastructure.
>>>> 
>>>>> So, I totally agree about dag level slas. It's very important to have
>>> it
>>>> and according to Sung Yun proposal it should be implemented not on the
>>>> scheduler job level.
>>>> 
>>>> In response to this, I want to clarify that I am specifically
>>> highlighting
>>>> that dag_sla is the only one that can be supported by the scheduler
>> job.
>>>> Dag_sla isn't a feature that exists right now, and my submission
>> proposes
>>>> exactly this!
>>>> 
>>>> 2. task_sla
>>>> I think Utkarsh's response really helped highlight another compounding
>>>> issue with SLAs in Airflow, which is that users have such varying
>>>> definition of SLAs, and what they want to do when that SLA is breached.
>>>> On a high level, task_sla relies on a relationship between the dag_run,
>>> and
>>>> a specific task within that specific dag_run: it is the time between a
>>>> dag_run's scheduled start time, and the actual start or end time of an
>>>> individual task within that run.
>>>> Hence, it is impossible for it to be computed in a distributed way that
>>>> address all of the issues highlighted in the AIP, and needs to be
>> managed
>>>> by a central process that has access to the single source of truth.
>>>> As Utkarsh suggests, I think this is perhaps doable as a separate
>>> process,
>>>> and probably would be much safer to do it within a separate process.
>>>> My only concern is that we would be introducing a separate Airflow
>>> process,
>>>> that is strictly optional, but one that requires quite a large amount
>> of
>>>> investment in designing the right abstractions to meet user
>> satisfaction
>>>> and reliability guarantees.
>>>> It will also require us to review the database's dag/dag_run/task
>> tables'
>>>> indexing model to make sure that continuous queries to the database
>> will
>>>> not overload it.
>>>> This isn't simple, because we will have to select tasks in any state
>>>> (FAILED, SUCCESS or RUNNING) that has not yet had their SLA evaluated,
>>> from
>>>> any dagRun (FAILED, SUCCESS or RUNNING), in order to make sure we don't
>>>> miss any tasks - because in this paradigm, the concept of SLA
>> triggering
>>> is
>>>> decoupled from a dagrun or task execution.
>>>> A query that selects tasks in ANY state in ANY state of dag_run is
>> bound
>>> to
>>>> be incredibly expensive - and I discuss this challenge in the
>> Confluence
>>>> AIP and the Google Doc.
>>>> This will possibly be even more difficult to achieve, because we should
>>>> have the capacity to support multiple processes since we now support
>> High
>>>> Availability in Airflow.
>>>> So although setting up a separate process decouples the SLA evaluation
>>> from
>>>> the scheduler, we need to acknowledge that we may be introducing a
>> heavy
>>>> dependency on the metadata database.
>>>> 
>>>> My suggestion to leverage the existing Triggerer process to design
>>>> monitoring Deferrable Operators to execute SLA callbacks has the
>> benefit
>>> of
>>>> reducing the load on the database while achieving similar goals,
>> because
>>> it
>>>> registers the SLA monitoring operator as a TASK to the dag_run that it
>> is
>>>> associated with, and prevents the dag_run from completing if the SLA
>> has
>>>> not yet computed. This means that our query will be strictly limited to
>>>> just the dagRuns in RUNNING state - this is a HUGE difference from
>> having
>>>> to query dagruns in all states in a separate process, because we are
>>> merely
>>>> attaching a few additional tasks to be executed into existing dag_runs.
>>>> 
>>>> In summary: I'm open to this idea, I just have not been able to think
>> of
>>> a
>>>> way to manage this without overloading the scheduler, or the database.
>>>> 
>>>> 3. task: time_limit_sla
>>>> Jarek: That sounds like a great idea that we could group into this AIP
>> -
>>> I
>>>> will make some time to add some code snippets into the AIP to make this
>>>> idea a bit clearer to everyone reading it in preparation for the vote
>>>> 
>>>> 
>>>> Sung
>>>> 
>>>> On Sun, Jun 18, 2023 at 9:38 PM utkarsh sharma <utkarshar...@gmail.com
>>> 
>>>> wrote:
>>>> 
>>>>>> 
>>>>>> This can be IMHO implemented on the task level. We currently have
>>>> timeout
>>>>>> implemented this way - whenever we start the task, we can have a
>>> signal
>>>>>> handler registered with "real" time registered that will cancel the
>>>> task.
>>>>>> But I can imagine similar approach with signal and propagate the
>>>>>> information that task exceeded the time it has been allocated but
>>> would
>>>>> not
>>>>>> stop it, just propagate the information (in a form of current way
>> we
>>> do
>>>>>> callbacks for example, or maybe (even better) only run it in the
>>>> context
>>>>> of
>>>>>> task  to signal "soft timeout" per task:
>>>>>> 
>>>>>>>            signal.signal(signal.SIGALRM, self.handle_timeout)
>>>>>>>           signal.setitimer(signal.ITIMER_REAL, self.seconds)
>>>>>> 
>>>>>> This has an advantage that it is fully distributed - i.e. we do not
>>>> need
>>>>>> anything to monitor 1000s of tasks running to decide if SLA has
>> been
>>>>>> breached. It's the task itself that will get the "soft" timeout and
>>>>>> propagate it (and then whoever receives the callback can decide
>> what
>>> to
>>>>> do
>>>>>> next - and this "callback" can happen in either the task context or
>>> it
>>>>>> could be done in a DagFileProcessor context as we do currently -
>>> though
>>>>> the
>>>>>> in-task processing seems much more distributed and scalable in
>>> nature.
>>>>>> There is one watch-out here that this is not **guaranteed** to
>> work,
>>>>> there
>>>>>> are cases, that we already saw that the SIGALRM is not going to be
>>>>> handled
>>>>>> locally, when the task uses long running C-level function that is
>> not
>>>>>> written in the way to react to signals generated in Python (thinks
>>>>>> low-level long-running Pandas c-method call that does not check
>>> signal
>>>>> in a
>>>>>> long-running-loop. That however probably could be handled by one
>> more
>>>>>> process fork and have a dedicated child process that would monitor
>>>>> running
>>>>>> tasks from a separate process - and we could actually improve both
>>>>> timeout
>>>>>> and SLA handling by introducing such extra forked process to handle
>>>>>> timeout/task level time_limit_sla, so IMHO this is an opportunity
>> to
>>>>>> improve things.
>>>>>> 
>>>>> 
>>>>> 
>>>>> Building on what Jarek mentioned, If we can enable the scheduler to
>>> emit
>>>>> events for DAGs with SLA configured in cases of
>>>>> 1. DAG starts executing
>>>>> 2. Task - start executing(for every task)
>>>>> 3. Task - stop executing(for every task)
>>>>> 4. DAG stops executing
>>>>> 
>>>>> And have a separate process(per dag run) that can keep monitoring
>> such
>>>>> events and execute a callback in the following circumstances:
>>>>> 1. DAG level SLA miss
>>>>>    - When the entire DAG didn't finish in a specific time
>>>>> 2. Task-level SLA miss
>>>>>    - Counting time from the start of the DAG to the end of a task.
>>>>>    - Start of a task to end of a task.
>>>>> 
>>>>> I think above approch should be addressing issues listed in AIP-57
>>>>> <
>>>>> 
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/display/AIRFLOW/%5BWIP%5D+AIP-57+SLA+as+a+DAG-Level+Feature
>>>>>> 
>>>>> 1. Since we have a septate process we no longer have to wait for the
>>>>> Tasks/DAG to be in the SUCCESS/SKIPPED state or any other terminal
>>> state.
>>>>> In this process, we can have a loop executing periodically in
>> intervals
>>>> of
>>>>> ex- 1sec to monitor SLA misses by monitoring events data and
>>>> task_instance
>>>>> table.
>>>>> 2. For Manually/Dataset triggered dags, we no longer have a
>> dependency
>>>> on a
>>>>> fixed schedule, everything we need to evaluate SLA miss is already
>>>> present
>>>>> in Events for that specific DAG.
>>>>> 3. This approach also enables us to run callbacks on the task level.
>>>>> 4. We can remove calls to sla_miss_callbacks every time is called
>>>>> *dag_run.update_state*
>>>>> 
>>>>> A couple of things I'm not about are -
>>>>> 1. Where to execute the callbacks. Executing a callback in the same
>>>> process
>>>>> as the monitoring process can have a downside if the callback takes
>>> much
>>>>> time to execute it will probably cause other SLA callbacks to be
>>> delayed.
>>>>> 2. Context of execution of callback, we have to maintain the same
>>> context
>>>>> in which the callback is defined.
>>>>> 
>>>>> Would love to know other people's thoughts on this :)
>>>>> 
>>>>> Thanks,
>>>>> Utkarsh Sharma
>>>>> 
>>>>> 
>>>>> On Sun, Jun 18, 2023 at 4:08 PM Iaroslav Poskriakov <
>>>>> yaroslavposkrya...@gmail.com> wrote:
>>>>> 
>>>>>> I want to say that airflow is a very popular project and the ways
>> of
>>>>>> calculating SLA are different. Because of different business cases.
>>> And
>>>>> if
>>>>>> it's possible we should make most of them from the box.
>>>>>> 
>>>>>> вс, 18 июн. 2023 г. в 13:30, Iaroslav Poskriakov <
>>>>>> yaroslavposkrya...@gmail.com>:
>>>>>> 
>>>>>>> So, I totally agree about dag level slas. It's very important to
>>> have
>>>>> it
>>>>>>> and according to Sung Yun proposal it should be implemented not
>> on
>>>> the
>>>>>>> scheduler job level.
>>>>>>> 
>>>>>>> Regarding the second way of determining SLA: <task state STARTED>
>>> -->
>>>>>>> ..<doesn't matter what happened>..  --> <task state SUCCESS>.
>>>>>>> It's very helpful in the way when we want to achieve not
>> technical
>>>> SLA
>>>>>> but
>>>>>>> business SLA for the team which is using that DAG. Because
>> between
>>>>> those
>>>>>>> two states anything could happen and at the end we might want to
>>>>>> understand
>>>>>>> high level SLA for the task. Because it doesn't matter for
>>> business I
>>>>>> guess
>>>>>>> that path of states of the task was something like: STARTED ->
>>>> RUNNING
>>>>> ->
>>>>>>> FAILED -> RUNNING -> FAILED -> RUNNING -> SUCCESS. And in case
>> when
>>>>>>> something similar is happening it can be helpful to have an
>>>> opportunity
>>>>>> of automatically
>>>>>>> recognizing  that the expected time for the task crossed the
>>> border.
>>>>>>> 
>>>>>>> I agree that for the scheduler it can be too heavy. And also for
>>> that
>>>>>>> purpose we need to have some process which is running in parallel
>>>> with
>>>>>> the
>>>>>>> task. It can be one more job for example which is running on the
>>> same
>>>>>>> machine as Scheduler, or not on the same.
>>>>>>> 
>>>>>>> 
>>>>>>> About the third part of my proposal - time for the task in the
>>>>>>> RUNNING state. I agree with you, Jarek. We can implement it on
>> the
>>>> task
>>>>>>> level. For me it seems good.
>>>>>>> 
>>>>>>> Yaro1
>>>>>>> 
>>>>>>> вс, 18 июн. 2023 г. в 08:12, Jarek Potiuk <ja...@potiuk.com>:
>>>>>>> 
>>>>>>>> I am also for DAG level SLA only (but maybe there are some
>>> twists).
>>>>>>>> 
>>>>>>>> And I hope (since Sung Yun has not given up on that) - maybe
>> that
>>> is
>>>>> the
>>>>>>>> right time that others here will chime in and maybe it will let
>>> the
>>>>> vote
>>>>>>>> go
>>>>>>>> on? I think it would be great to get the SLA feature sorted out
>> so
>>>>> that
>>>>>> we
>>>>>>>> have a chance to stop answering ("yeah, we know SLA is broken,
>> it
>>>> has
>>>>>>>> always been"). It would be nice to say "yeah the old deprecated
>>> SLA
>>>> is
>>>>>>>> broken, but we have this new mechanism(s) that replace it". The
>>> one
>>>>>>>> proposed by Sung has a good chance of being such a replacement.
>>>>>>>> 
>>>>>>>> I think having a task-level SLA managed by the Airflow framework
>>>> might
>>>>>>>> indeed be too costly and does not fit well in the current
>>>>> architecture.
>>>>>> I
>>>>>>>> think attempting to monitor how long a given task runs by the
>>>>> scheduler
>>>>>> is
>>>>>>>> simply a huge overkill. Generally speaking - scheduler (as
>>>> surprising
>>>>> it
>>>>>>>> might be for anyone) does not monitor executing tasks (at least
>>>>>>>> principally
>>>>>>>> speaking). It merely submits the tasks to execute to executor
>> and
>>>> let
>>>>>>>> executor handle all kinds of monitoring of what is being
>> executed
>>>>> when,
>>>>>>>> and
>>>>>>>> then - depending on the different types of executors there are
>>>> various
>>>>>>>> conditions when and how task is being executed, and various ways
>>> how
>>>>> you
>>>>>>>> can define different kinds of task SLAs. Or at least this is
>> how I
>>>>> think
>>>>>>>> about the distributed nature of Airflow on a "logical" level.
>> Once
>>>>> task
>>>>>> is
>>>>>>>> queued for execution, the scheduler takes its hands off and
>> turns
>>>> its
>>>>>>>> attention to tasks that are not yet scheduled and should be or
>>> tasks
>>>>>> that
>>>>>>>> are scheduled but not queued yet.
>>>>>>>> 
>>>>>>>> But maybe some of the SLA "task" expectations can be
>> implemented
>>>> in a
>>>>>>>> limited version serving very limited cases on a task level?
>>>>>>>> 
>>>>>>>> Referring to what Yaro1 wrote:
>>>>>>>> 
>>>>>>>>> 1. It doesn't matter for us how long we are spending time on
>>> some
>>>>>>>> specific
>>>>>>>> task. It's important to have an understanding of the lag between
>>>>>>>> execution_date of dag and success state for the task. We can
>> call
>>> it
>>>>>>>> dag_sla. It's similar to the current implementation of
>>> manage_slas.
>>>>>>>> 
>>>>>>>> This is basically what Sung proposes, I believe.
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> 2. It's important to have an understanding and managing how
>> long
>>>>> some
>>>>>>>> specific task is working. In my opinion working is the state
>>> between
>>>>>> task
>>>>>>>> last start_date and task first (after last start_date) SUCCESS
>>>> state.
>>>>> So
>>>>>>>> for example for the task which is placed in FAILED state we
>> still
>>>> have
>>>>>> to
>>>>>>>> check an SLA in that strategy. We can call it task_sla.
>>>>>>>> 
>>>>>>>> I am not sure if I understand it, but If I do, then this is the
>>>> "super
>>>>>>>> costly" SLA processing that we should likely avoid. I would love
>>> to
>>>>> hear
>>>>>>>> however, what are some specific use cases that we could show
>> here,
>>>>> maybe
>>>>>>>> there are other ways we can achieve similar things.
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> 3. Sometimes we need to manage time for the task in the
>> RUNNING
>>>>> state.
>>>>>>>> We
>>>>>>>> can call it time_limit_sla.
>>>>>>>> 
>>>>>>>> This can be IMHO implemented on the task level. We currently
>> have
>>>>>> timeout
>>>>>>>> implemented this way - whenever we start the task, we can have a
>>>>> signal
>>>>>>>> handler registered with "real" time registered that will cancel
>>> the
>>>>>> task.
>>>>>>>> But I can imagine similar approach with signal and propagate the
>>>>>>>> information that task exceeded the time it has been allocated
>> but
>>>>> would
>>>>>>>> not
>>>>>>>> stop it, just propagate the information (in a form of current
>> way
>>> we
>>>>> do
>>>>>>>> callbacks for example, or maybe (even better) only run it in the
>>>>> context
>>>>>>>> of
>>>>>>>> task  to signal "soft timeout" per task:
>>>>>>>> 
>>>>>>>>>            signal.signal(signal.SIGALRM, self.handle_timeout)
>>>>>>>>>           signal.setitimer(signal.ITIMER_REAL, self.seconds)
>>>>>>>> 
>>>>>>>> This has an advantage that it is fully distributed - i.e. we do
>>> not
>>>>> need
>>>>>>>> anything to monitor 1000s of tasks running to decide if SLA has
>>> been
>>>>>>>> breached. It's the task itself that will get the "soft" timeout
>>> and
>>>>>>>> propagate it (and then whoever receives the callback can decide
>>> what
>>>>> to
>>>>>> do
>>>>>>>> next - and this "callback" can happen in either the task context
>>> or
>>>> it
>>>>>>>> could be done in a DagFileProcessor context as we do currently -
>>>>> though
>>>>>>>> the
>>>>>>>> in-task processing seems much more distributed and scalable in
>>>> nature.
>>>>>>>> There is one watch-out here that this is not **guaranteed** to
>>> work,
>>>>>> there
>>>>>>>> are cases, that we already saw that the SIGALRM is not going to
>> be
>>>>>> handled
>>>>>>>> locally, when the task uses long running C-level function that
>> is
>>>> not
>>>>>>>> written in the way to react to signals generated in Python
>> (thinks
>>>>>>>> low-level long-running Pandas c-method call that does not check
>>>> signal
>>>>>> in
>>>>>>>> a
>>>>>>>> long-running-loop. That however probably could be handled by one
>>>> more
>>>>>>>> process fork and have a dedicated child process that would
>> monitor
>>>>>> running
>>>>>>>> tasks from a separate process - and we could actually improve
>> both
>>>>>> timeout
>>>>>>>> and SLA handling by introducing such extra forked process to
>>> handle
>>>>>>>> timeout/task level time_limit_sla, so IMHO this is an
>> opportunity
>>> to
>>>>>>>> improve things.
>>>>>>>> 
>>>>>>>> I would love to hear what others think about it :)? I think our
>>> SLA
>>>>> for
>>>>>>>> fixing SLA is about to run out.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> J.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Thu, Jun 15, 2023 at 4:05 PM Sung Yun <sy...@cornell.edu>
>>> wrote:
>>>>>>>> 
>>>>>>>>> Hello!
>>>>>>>>> 
>>>>>>>>> Thank you very much for the feedback on the proposal. I’ve
>> been
>>>>> hoping
>>>>>>>> to
>>>>>>>>> get some more traction on this proposal, so it’s great to hear
>>>> from
>>>>>>>> another
>>>>>>>>> user of the feature.
>>>>>>>>> 
>>>>>>>>> I understand that there’s a lot of support for keeping a
>> native
>>>> task
>>>>>>>> level
>>>>>>>>> SLA feature, and I definitely agree with that sentiment. Our
>>>>>>>> organization
>>>>>>>>> very much relies on Airflow to evaluate ‘task_sla’ in order to
>>>> keep
>>>>>>>> track
>>>>>>>>> of which tasks in each dags failed to succeed by an expected
>>> time.
>>>>>>>>> 
>>>>>>>>> In the AIP I put together on the Confluence page, and in the
>>>> Google
>>>>>>>> docs,
>>>>>>>>> I have identified why the existing implementation of the task
>>>> level
>>>>>> SLA
>>>>>>>>> feature can be problematic and is often misleading for Airflow
>>>>> users.
>>>>>>>> The
>>>>>>>>> feature is also quite costly for Airflow scheduler and
>>>>> dag_processor.
>>>>>>>>> 
>>>>>>>>> In that sense, the discussion is not about whether or not
>> these
>>>> SLA
>>>>>>>>> features are important to the users, but much more technical.
>>> Can
>>>> a
>>>>>>>>> task-level feature be supported in a first-class way as a core
>>>>> feature
>>>>>>>> of
>>>>>>>>> Airflow, or should it be implemented by the users, for example
>>> as
>>>>>>>>> independent tasks by leveraging Deferrable Operators.
>>>>>>>>> 
>>>>>>>>> My current thought is that only Dag level SLAs can be
>> supported
>>>> in a
>>>>>>>>> non-disruptive way by the scheduler, and that task level SLAs
>>>> should
>>>>>> be
>>>>>>>>> handled outside of core Airflow infrastructure code. If you
>>>> strongly
>>>>>>>>> believe otherwise, I think it would be helpful if you could
>>>> propose
>>>>> an
>>>>>>>>> alternative technical solution that solves many of the
>> existing
>>>>>>>> problems in
>>>>>>>>> the task-level SLA feature.
>>>>>>>>> 
>>>>>>>>> Sent from my iPhone
>>>>>>>>> 
>>>>>>>>>> On Jun 13, 2023, at 1:10 PM, Ярослав Поскряков <
>>>>>>>>> yaroslavposkrya...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>> Mechanism of SLA
>>>>>>>>>> 
>>>>>>>>>> Hi, I read the previous conversation regarding SLA and I
>> think
>>>>>>>> removing
>>>>>>>>> the
>>>>>>>>>> opportunity to set sla for the task level will be a big
>>> mistake.
>>>>>>>>>> So, the proposed implementation of the task level SLA will
>> not
>>>> be
>>>>>>>> working
>>>>>>>>>> correctly.
>>>>>>>>>> 
>>>>>>>>>> That's why I guess we have to think about the mechanism of
>>> using
>>>>>> SLA.
>>>>>>>>>> 
>>>>>>>>>> I guess we should check three different cases in general.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 1. It doesn't matter for us how long we are spending time on
>>>> some
>>>>>>>>> specific
>>>>>>>>>> task. It's important to have an understanding of the lag
>>> between
>>>>>>>>>> execution_date of dag and success state for the task. We can
>>>> call
>>>>> it
>>>>>>>>>> dag_sla. It's similar to the current implementation of
>>>>> manage_slas.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 2. It's important to have an understanding and managing how
>>> long
>>>>>> some
>>>>>>>>>> specific task is working. In my opinion working is the state
>>>>> between
>>>>>>>> task
>>>>>>>>>> last start_date and task first (after last start_date)
>> SUCCESS
>>>>>> state.
>>>>>>>> So
>>>>>>>>>> for example for the task which is placed in FAILED state we
>>>> still
>>>>>>>> have to
>>>>>>>>>> check an SLA in that strategy. We can call it task_sla.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 3. Sometimes we need to manage time for the task in the
>>> RUNNING
>>>>>>>> state. We
>>>>>>>>>> can call it time_limit_sla.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Those three types of SLA will cover all possible cases.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> So we will have three different strategies for SLA.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> I guess we can use for dag_sla that idea -
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> For task_sla and time_limit_sla I prefer to stay with using
>>>>>>>> SchedulerJob
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Github: Yaro1
>>>>>>>>> 
>>>>>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org
>>>>>>>>> For additional commands, e-mail: dev-h...@airflow.apache.org
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> --
>>>> Sung Yun
>>>> Cornell Tech '20
>>>> Master of Engineering in Computer Science
>>>> 
>>> 
>> 
>> 
>> --
>> Sung Yun
>> Cornell Tech '20
>> Master of Engineering in Computer Science
>> 

Reply via email to