Hi Daniel I agree that the TaskGroup should have the same API as a DAG object related to task dependencies, but it will not have anything related to actual execution or scheduling. I will update the AIP according to this over the weekend.
> We could even make a “DAGTemplate” object s.t. when you import the object you can import it with parameters to determine the shape of the DAG. Can you elaborate a bit more on this? Does it serve a similar purpose as a DAG factory function? On Thu, Jun 18, 2020 at 9:13 AM Daniel Imberman <daniel.imber...@gmail.com> wrote: > Hi Bin, > > Why not give the TaskGroup the same API as a DAG object (e.g. the bitwise > operator fro task dependencies). We could even make a “DAGTemplate” object > s.t. when you import the object you can import it with parameters to > determine the shape of the DAG. > > > On Wed, Jun 17, 2020 at 8:54 PM, Xinbin Huang <bin.huan...@gmail.com> > wrote: > The TaskGroup will not take schedule interval as a parameter itself, and it > depends on the DAG where it attaches to. In my opinion, the TaskGroup will > only contain a group of tasks with interdependencies, and the TaskGroup > behaves like a task. It doesn't contain any execution/scheduling logic > (i.e. schedule_interval, concurrency, max_active_runs etc.) like a DAG > does. > > > For example, there is the scenario that the schedule interval of DAG is > 1 hour and the schedule interval of TaskGroup is 20 min. > > I am curious why you ask this. Is this a use case that you want to achieve? > > Bin > > On Wed, Jun 17, 2020 at 7:59 PM 蒋晓峰 <thanosxnicho...@gmail.com> wrote: > > > Hi Bin, > > Using TaskGroup, Is the schedule interval of TaskGroup the same as the > > parent DAG? My main concern is whether the schedule interval of TaskGroup > > could be different with that of the DAG? For example, there is the > scenario > > that the schedule interval of DAG is 1 hour and the schedule interval of > > TaskGroup is 20 min. > > > > Cheers, > > Nicholas > > > > On Thu, Jun 18, 2020 at 10:30 AM Xinbin Huang <bin.huan...@gmail.com> > > wrote: > > > > > Hi Nicholas, > > > > > > I am not sure about the old behavior of SubDagOperator, maybe it will > > throw > > > an error? But in the original proposal, the subdag's schedule_interval > > will > > > be ignored. Or if we decide to use TaskGroup to replace SubDag, there > > will > > > be no subdag schedule_interval. > > > > > > Bin > > > > > > On Wed, Jun 17, 2020 at 6:21 PM 蒋晓峰 <thanosxnicho...@gmail.com> wrote: > > > > > > > Hi Bin, > > > > Thanks for your good proposal. I was confused whether the schedule > > > > interval of SubDAG is different from that of the parent DAG? I have > > > > discussed with Jiajie Zhong about the schedule interval of SubDAG. If > > the > > > > SubDagOperator has a different schedule interval, what will happen > for > > > the > > > > scheduler to schedule the parent DAG? > > > > > > > > Regards, > > > > Nicholas Jiang > > > > > > > > On Thu, Jun 18, 2020 at 8:04 AM Xinbin Huang <bin.huan...@gmail.com> > > > > wrote: > > > > > > > > > Thank you, Max, Kaxil, and everyone's feedback! > > > > > > > > > > I have rethought about the concept of subdag and task groups. I > think > > > the > > > > > better way to approach this is to entirely remove subdag and > > introduce > > > > the > > > > > concept of TaskGroup, which is a container of tasks along with > their > > > > > dependencies *without execution/scheduling logic as a DAG*. The > only > > > > > purpose of it is to group a list of tasks, but you still need to > add > > it > > > > to > > > > > a DAG for execution. > > > > > > > > > > Here is a small code snippet. > > > > > > > > > > ``` > > > > > class TaskGroup: > > > > > """ > > > > > A TaskGroup contains a group of tasks. > > > > > > > > > > If default_args is missing, it will take default args from the > > DAG. > > > > > """ > > > > > def __init__(self, group_id, default_args): > > > > > pass > > > > > > > > > > > > > > > """ > > > > > You can add tasks to a task group similar to adding tasks to a DAG > > > > > > > > > > This can be declared in a separate file from the dag file > > > > > """ > > > > > download_group = TaskGroup(group_id='download', > > > > default_args=default_args) > > > > > download_group.add_task(task1) > > > > > task2.dag = download_group > > > > > > > > > > with download_group: > > > > > task3 = DummyOperator(task_id='task3') > > > > > > > > > > [task, task2] >> task3 > > > > > > > > > > > > > > > """Add it to a DAG for execution""" > > > > > with DAG(dag_id='start_download_dag', default_args=default_args, > > > > > schedule_interval='@daily', ...) as dag: > > > > > start = DummyOperator(task_id='start') > > > > > start >> download_group > > > > > # this is equivalent to > > > > > # start >> [task, task2] >> task3 > > > > > ``` > > > > > > > > > > With this, we can still reuse a group of tasks and set dependencies > > > > between > > > > > them; it avoids the boilerplate code from using SubDagOperator, and > > we > > > > can > > > > > declare dependencies as `task >> task_group >> task`. > > > > > > > > > > User migration wise, we can introduce it before Airflow 2.0 and > allow > > > > > gradual transition. Then we can decide if we still want to keep the > > > > > SubDagOperator or simply remove it. > > > > > > > > > > Any thoughts? > > > > > > > > > > Cheers, > > > > > Bin > > > > > > > > > > > > > > > On Wed, Jun 17, 2020 at 7:37 AM Maxime Beauchemin < > > > > > maximebeauche...@gmail.com> wrote: > > > > > > > > > > > +1, proposal looks good. > > > > > > > > > > > > The original intention was really to have tasks groups and a > > > > zoom-in/out > > > > > in > > > > > > the UI. The original reasoning was to reuse the DAG object since > it > > > is > > > > a > > > > > > group of tasks, but as highlighted here it does create underlying > > > > > > confusions since a DAG is much more than just a group of tasks. > > > > > > > > > > > > Max > > > > > > > > > > > > On Mon, Jun 15, 2020 at 2:43 AM Poornima Joshi < > > > > > joshipoornim...@gmail.com> > > > > > > wrote: > > > > > > > > > > > > > Thank you for your email. > > > > > > > > > > > > > > On Sat, Jun 13, 2020 at 12:18 AM Xinbin Huang < > > > bin.huan...@gmail.com > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > - *Unpack SubDags during dag parsing*: This rewrites the > > > > > > > > *DagBag.bag_dag* > > > > > > > > > > method to unpack subdag while parsing, and it will give a > > > > flat > > > > > > > > > > structure at > > > > > > > > > > the task level > > > > > > > > > > > > > > > > > > The serialized_dag representation already does this I > think. > > At > > > > > least > > > > > > > if > > > > > > > > > I've understood your idea here correctly. > > > > > > > > > > > > > > > > I am not sure about serialized_dag representation, but at > least > > > it > > > > > will > > > > > > > > still keep the subdag entry in the DAG table? In my proposal > as > > > > also > > > > > in > > > > > > > the > > > > > > > > draft PR, the idea is to *extract the tasks from the subdag > and > > > add > > > > > > them > > > > > > > > back to the root_dag. *So the runtime DAG graph will look > > exactly > > > > the > > > > > > > > same as without subdag but with metadata attached to those > > > > sections. > > > > > > > These > > > > > > > > metadata will be later on used to render in the UI. So after > > > > parsing > > > > > ( > > > > > > > > *DagBag.process_file()*), it will just output the *root_dag > > > > *instead > > > > > of > > > > > > > *root_dag + > > > > > > > > subdag + subdag + nested subdag* etc. > > > > > > > > > > > > > > > > - e.g. section-1-* will have metadata > > current_group=section-1, > > > > > > > > parent_group=<the-root-dag-id> (welcome for naming > > > suggestions), > > > > > the > > > > > > > > reason for parent_group is that we can have nested group and > > > > still > > > > > > be > > > > > > > > able to capture the dependency. > > > > > > > > > > > > > > > > Runtime DAG: > > > > > > > > [image: image.png] > > > > > > > > > > > > > > > > While at the UI, what we see would be something like this by > > > > > utilizing > > > > > > > the > > > > > > > > metadata, and then we can expand or zoom into in some way. > > > > > > > > [image: image.png] > > > > > > > > > > > > > > > > The benefits I can see is that: > > > > > > > > 1. We don't need to deal with the extra complexity of SubDag > > for > > > > > > > execution > > > > > > > > and scheduling. It will be the same as not using SubDag. > > > > > > > > 2. Still have the benefits of modularized and reusable dag > code > > > and > > > > > > > > declare dependencies between them. And with the new > > > SubDagOperator > > > > > (see > > > > > > > AIP > > > > > > > > or draft PR), we can use the same dag_factory function for > > > > > generating 1 > > > > > > > > dag, a lot of dynamic dags, or used for SubDag (in this case, > > it > > > > will > > > > > > > just > > > > > > > > extract all underlying tasks and append to the root dag). > > > > > > > > > > > > > > > > - Then it gets to the idea of replacing subdag with a > > simpler > > > > > > concept > > > > > > > > by Ash: the proposed change basically drains out the > > contents > > > > of > > > > > a > > > > > > > SubDag > > > > > > > > and becomes more like > > > > ExtractSubdagTasksAndAppendToRootdagOperator > > > > > > > (forgive > > > > > > > > me about the crazy name..). In this case, it is still > > > necessary > > > > to > > > > > > > keep the > > > > > > > > concept of subdag as it is nothing more than a name? > > > > > > > > > > > > > > > > That's why the TaskGroup idea comes up. Thanks Chris Palmer > for > > > > > helping > > > > > > > > conceptualize the functionality of TaskGroup, I will just > paste > > > it > > > > > > here. > > > > > > > > > > > > > > > > > - Tasks can be added to a TaskGroup > > > > > > > > > - You *can* have dependencies between Tasks in the same > > > > TaskGroup, > > > > > > but > > > > > > > > > *cannot* have dependencies between a Task in a TaskGroup > > and > > > > > > either a > > > > > > > > > Task in a different TaskGroup or a Task not in any group > > > > > > > > > - You *can* have dependencies between a TaskGroup and > > either > > > > > other > > > > > > > > > TaskGroups or Tasks not in any group > > > > > > > > > - The UI will by default render a TaskGroup as a single > > > > "object", > > > > > > but > > > > > > > > > which you expand or zoom into in some way > > > > > > > > > - You'd need some way to determine what the "status" of a > > > > > TaskGroup > > > > > > > was > > > > > > > > > at least for UI display purposes > > > > > > > > > > > > > > > > I agree with Chris: > > > > > > > > - From the backend's view (scheduler & executor), I think > > > TaskGroup > > > > > > > should > > > > > > > > be ignored during execution. (unless we decide to implement > > some > > > > > > metadata > > > > > > > > operations that allows start/stop a group of tasks etc.) > > > > > > > > - From the UI's View, it should be able to pick up the > > individual > > > > > > tasks' > > > > > > > > status and then determine the TaskGroup's status > > > > > > > > > > > > > > > > Bin > > > > > > > > > > > > > > > > On Fri, Jun 12, 2020 at 10:28 AM Daniel Imberman < > > > > > > > > daniel.imber...@gmail.com> wrote: > > > > > > > > > > > > > > > >> I hadn’t thought about using the `>>` operator to tie dags > > > > together > > > > > > but > > > > > > > I > > > > > > > >> think that sounds pretty great! I wonder if we could > > essentially > > > > > write > > > > > > > in > > > > > > > >> the ability to set dependencies to all starter-tasks for > that > > > DAG. > > > > > > > >> > > > > > > > >> I’m personally ok with SubDag being a mostly UI concept. It > > > > doesn’t > > > > > > need > > > > > > > >> to execute separately, you’re just adding more tasks to the > > > queue > > > > > that > > > > > > > will > > > > > > > >> be executed when there are resources available. > > > > > > > >> > > > > > > > >> via Newton Mail [ > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cloudmagic.com/k/d/mailapp?ct=dx&cv=10.0.50&pv=10.14.6&source=email_footer_2 > > > > > > > >> ] > > > > > > > >> On Fri, Jun 12, 2020 at 9:45 AM, Chris Palmer < > > > ch...@crpalmer.com > > > > > > > > > > > > wrote: > > > > > > > >> I agree that SubDAGs are an overly complex abstraction. I > > think > > > > what > > > > > > is > > > > > > > >> needed/useful is a TaskGroup concept. On a high level I > think > > > you > > > > > want > > > > > > > >> this > > > > > > > >> functionality: > > > > > > > >> > > > > > > > >> - Tasks can be added to a TaskGroup > > > > > > > >> - You *can* have dependencies between Tasks in the same > > > TaskGroup, > > > > > but > > > > > > > >> *cannot* have dependencies between a Task in a TaskGroup and > > > > either > > > > > a > > > > > > > >> Task in a different TaskGroup or a Task not in any group > > > > > > > >> - You *can* have dependencies between a TaskGroup and either > > > other > > > > > > > >> TaskGroups or Tasks not in any group > > > > > > > >> - The UI will by default render a TaskGroup as a single > > > "object", > > > > > but > > > > > > > >> which you expand or zoom into in some way > > > > > > > >> - You'd need some way to determine what the "status" of a > > > > TaskGroup > > > > > > was > > > > > > > >> at least for UI display purposes > > > > > > > >> > > > > > > > >> Not sure if it would need to be a top level object with its > > own > > > > > > database > > > > > > > >> table and model or just another attribute on tasks. I think > > you > > > > > could > > > > > > > >> build > > > > > > > >> it in a way such that from the schedulers point of view a > DAG > > > with > > > > > > > >> TaskGroups doesn't get treated any differently. So it really > > > just > > > > > > > becomes > > > > > > > >> a > > > > > > > >> shortcut for setting dependencies between sets of Tasks, and > > > > allows > > > > > > the > > > > > > > UI > > > > > > > >> to simplify the render of the DAG structure. > > > > > > > >> > > > > > > > >> Chris > > > > > > > >> > > > > > > > >> On Fri, Jun 12, 2020 at 12:12 PM Dan Davydov > > > > > > > <ddavy...@twitter.com.invalid > > > > > > > >> > > > > > > > > >> wrote: > > > > > > > >> > > > > > > > >> > Agree with James (and think it's actually the more > important > > > > issue > > > > > > to > > > > > > > >> fix), > > > > > > > >> > but I am still convinced Ash' idea is the right way > forward > > > > (just > > > > > it > > > > > > > >> might > > > > > > > >> > require a bit more work to deprecate than adding visual > > > grouping > > > > > in > > > > > > > the > > > > > > > >> > UI). > > > > > > > >> > > > > > > > > >> > There was a previous thread about this FYI with more > context > > > on > > > > > why > > > > > > > >> subdags > > > > > > > >> > are bad and potential solutions: > > > > > > > >> > > > > > https://www.mail-archive.com/dev@airflow.apache.org/msg01202.html > > > > > > . A > > > > > > > >> > solution I outline there to Jame's problem is e.g. > enabling > > > the > > > > >> > > > > > > > >> operator > > > > > > > >> > for Airflow operators to work with DAGs as well. I see > this > > > > being > > > > > > > >> separate > > > > > > > >> > from Ash' solution for DAG grouping in the UI but one of > the > > > two > > > > > > items > > > > > > > >> > required to replace all existing subdag functionality. > > > > > > > >> > > > > > > > > >> > I've been working with subdags for 3 years and they are > > > always a > > > > > > giant > > > > > > > >> pain > > > > > > > >> > to use. They are a constant source of user confusion and > > > > breakages > > > > > > > >> during > > > > > > > >> > upgrades. Would love to see them gone :). > > > > > > > >> > > > > > > > > >> > On Fri, Jun 12, 2020 at 11:11 AM James Coder < > > > > jcode...@gmail.com> > > > > > > > >> wrote: > > > > > > > >> > > > > > > > > >> > > I'm not sure I totally agree it's just a UI concept. I > use > > > the > > > > > > > subdag > > > > > > > >> > > operator to simplify dependencies too. If you have a > group > > > of > > > > > > tasks > > > > > > > >> that > > > > > > > >> > > need to finish before another group of tasks start, > using > > a > > > > > subdag > > > > > > > is > > > > > > > >> a > > > > > > > >> > > pretty quick way to set those dependencies and I think > > also > > > > make > > > > > > it > > > > > > > >> > easier > > > > > > > >> > > to follow the dag code. > > > > > > > >> > > > > > > > > > >> > > On Fri, Jun 12, 2020 at 9:53 AM Kyle Hamlin < > > > > > hamlin...@gmail.com> > > > > > > > >> wrote: > > > > > > > >> > > > > > > > > > >> > > > I second Ash’s grouping concept. > > > > > > > >> > > > > > > > > > > >> > > > On Fri, Jun 12, 2020 at 5:10 AM Ash Berlin-Taylor < > > > > > > a...@apache.org > > > > > > > > > > > > > > > >> > > wrote: > > > > > > > >> > > > > > > > > > > >> > > > > Question: > > > > > > > >> > > > > > > > > > > > >> > > > > Do we even need the SubDagOperator anymore? > > > > > > > >> > > > > > > > > > > > >> > > > > Would removing it entirely and just replacing it > with > > a > > > UI > > > > > > > >> grouping > > > > > > > >> > > > > concept be conceptually simpler, less to get wrong, > > and > > > > > closer > > > > > > > to > > > > > > > >> > what > > > > > > > >> > > > > users actually want to achieve with subdags? > > > > > > > >> > > > > > > > > > > > >> > > > > With your proposed change, tasks in subdags could > > start > > > > > > running > > > > > > > in > > > > > > > >> > > > > parallel (a good change) -- so should we not also > just > > > > > > > _enitrely_ > > > > > > > >> > > remove > > > > > > > >> > > > > the concept of a sub dag and replace it with > something > > > > > > simpler. > > > > > > > >> > > > > > > > > > > > >> > > > > Problems with subdags (I think. I haven't used them > > > > > > extensively > > > > > > > so > > > > > > > >> > may > > > > > > > >> > > > > be wrong on some of these): > > > > > > > >> > > > > - They need their own dag_id, but it has(?) to be of > > the > > > > > form > > > > > > > >> > > > > `parent_dag_id.subdag_id`. > > > > > > > >> > > > > - They need their own schedule_interval, but it has > to > > > > match > > > > > > the > > > > > > > >> > parent > > > > > > > >> > > > dag > > > > > > > >> > > > > - Sub dags can be paused on their own. (Does it make > > > sense > > > > > to > > > > > > do > > > > > > > >> > this? > > > > > > > >> > > > > Pausing just a sub dag would mean the sub dag would > > > never > > > > > > > >> execute, so > > > > > > > >> > > > > the SubDagOperator would fail too. > > > > > > > >> > > > > - You had to choose the executor to operator a > subdag > > > with > > > > > -- > > > > > > > >> always > > > > > > > >> > a > > > > > > > >> > > > > bit of a kludge. > > > > > > > >> > > > > > > > > > > > >> > > > > Thoughts? > > > > > > > >> > > > > > > > > > > > >> > > > > -ash > > > > > > > >> > > > > > > > > > > > >> > > > > On Jun 12 2020, at 12:01 pm, Ash Berlin-Taylor < > > > > > > a...@apache.org> > > > > > > > >> > wrote: > > > > > > > >> > > > > > > > > > > > >> > > > > > Workon sub-dags is much needed, I'm excited to see > > how > > > > > this > > > > > > > >> > > progresses. > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > >> - *Unpack SubDags during dag parsing*: This > > rewrites > > > > the > > > > > > > >> > > > > *DagBag.bag_dag* > > > > > > > >> > > > > >> method to unpack subdag while parsing, and it > will > > > > give a > > > > > > > flat > > > > > > > >> > > > > >> structure at > > > > > > > >> > > > > >> the task level > > > > > > > >> > > > > > > > > > > > > >> > > > > > The serialized_dag representation already does > this > > I > > > > > think. > > > > > > > At > > > > > > > >> > least > > > > > > > >> > > > if > > > > > > > >> > > > > > I've understood your idea here correctly. > > > > > > > >> > > > > > > > > > > > > >> > > > > > -ash > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > On Jun 12 2020, at 9:51 am, Xinbin Huang < > > > > > > > bin.huan...@gmail.com > > > > > > > >> > > > > > > > > >> > > > wrote: > > > > > > > >> > > > > > > > > > > > > >> > > > > >> Hi everyone, > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> Sending a message to everyone and collect > feedback > > on > > > > the > > > > > > > >> AIP-34 > > > > > > > >> > on > > > > > > > >> > > > > >> rewriting SubDagOperator. This was previously > > briefly > > > > > > > >> mentioned in > > > > > > > >> > > the > > > > > > > >> > > > > >> discussion about what needs to be done for > Airflow > > > 2.0, > > > > > and > > > > > > > >> one of > > > > > > > >> > > the > > > > > > > >> > > > > >> ideas is to make SubDagOperator attach tasks back > > to > > > > the > > > > > > root > > > > > > > >> DAG. > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> This AIP-34 focuses on solving SubDagOperator > > related > > > > > > issues > > > > > > > by > > > > > > > >> > > > > reattaching > > > > > > > >> > > > > >> all tasks back to the root dag while respecting > > > > > > dependencies > > > > > > > >> > during > > > > > > > >> > > > > >> parsing. The original grouping effect on the UI > > will > > > be > > > > > > > >> achieved > > > > > > > >> > > > through > > > > > > > >> > > > > >> grouping related tasks by metadata. > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> This also makes the dag_factory function more > > > reusable > > > > > > > because > > > > > > > >> you > > > > > > > >> > > > don't > > > > > > > >> > > > > >> need to have parent_dag_name and child_dag_name > in > > > the > > > > > > > function > > > > > > > >> > > > > signature > > > > > > > >> > > > > >> anymore. > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> Changes proposed: > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> - *Unpack SubDags during dag parsing*: This > > rewrites > > > > the > > > > > > > >> > > > > *DagBag.bag_dag* > > > > > > > >> > > > > >> method to unpack subdag while parsing, and it > will > > > > give a > > > > > > > flat > > > > > > > >> > > > > >> structure at > > > > > > > >> > > > > >> the task level > > > > > > > >> > > > > >> - *Simplify SubDagOperator*: The new > SubDagOperator > > > > acts > > > > > > > like a > > > > > > > >> > > > > >> container and most of the original methods are > > > removed. > > > > > The > > > > > > > >> > > > > >> signature is > > > > > > > >> > > > > >> also changed to *subdag_factory *with > *subdag_args > > > *and > > > > > > > >> > > > > *subdag_kwargs*. > > > > > > > >> > > > > >> This is similar to the PythonOperator signature. > > > > > > > >> > > > > >> - *Add a TaskGroup model and add current_group & > > > > > > parent_group > > > > > > > >> > > > > attributes > > > > > > > >> > > > > >> to BaseOperator*: This metadata is used to group > > > tasks > > > > > for > > > > > > > >> > > > > >> rendering at > > > > > > > >> > > > > >> UI level. It may potentially extend further to > > group > > > > > > > arbitrary > > > > > > > >> > > tasks > > > > > > > >> > > > > >> outside the context of subdag to allow > group-level > > > > > > operations > > > > > > > >> > > (i.e. > > > > > > > >> > > > > >> stop/trigger a group of task within the dag) > > > > > > > >> > > > > >> - *Webserver UI for SubDag*: Proposed UI > > modification > > > > to > > > > > > > allow > > > > > > > >> > > > > >> (un)collapse a group of tasks for a flat > structure > > to > > > > > pair > > > > > > > with > > > > > > > >> > > the > > > > > > > >> > > > > first > > > > > > > >> > > > > >> change instead of the original hierarchical > > > structure. > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> Please see related documents and PRs for details: > > > > > > > >> > > > > >> AIP: > > > > > > > >> > > > > >> > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-34+Rewrite+SubDagOperator > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> Original Issue: > > > > > > > https://github.com/apache/airflow/issues/8078 > > > > > > > >> > > > > >> Draft PR: > > > https://github.com/apache/airflow/pull/9243 > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> Please let me know if there are any aspects that > > you > > > > > > > >> > agree/disagree > > > > > > > >> > > > > >> with or > > > > > > > >> > > > > >> need more clarification (especially the third > > change > > > > > > > regarding > > > > > > > >> > > > > TaskGroup). > > > > > > > >> > > > > >> Any comments are welcome and I am looking forward > > to > > > > it! > > > > > > > >> > > > > >> > > > > > > > >> > > > > >> Cheers > > > > > > > >> > > > > >> Bin > > > > > > > >> > > > > >> > > > > > > > >> > > > > > > > > > > > >> > > > -- > > > > > > > >> > > > Kyle Hamlin > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > Thanks & Regards > > > > > > > Poornima > > > > > > > > > > > > > > > > > > > > > > > > > > >