@Fokko: If we go ahead with storing this info in Xcom, is your suggestion to use a fixed Prefix?
Cheers, Kaxil On Sat, Jan 11, 2020, 14:50 Driesprong, Fokko <fo...@driesprong.frl> wrote: > I would still be in favor of pushing this into xcom, however not > changing the behavior of the current xcom implementation. Xcom is now for > intra-communication, but it could also be inter-communication, for me it is > very closely related. So having an additional option to explicitly include > the state of the current operator. TaskReschedule, as Jarek > mentioned, would also be an option, but this is on a TaskRun level and I > believe it should be on a Task level. As mentioned earlier, Variables feels > very messy to me. This is on a global level, so then you should template > the dag_id, task_id in there? It would also create a lot of entries in the > table. > > Regarding the FTP issues. Airflow is not going to magically solve your FTP > connections. If the FTP server is down, then it is okay for the operator to > fail, and retry somewhere later and then the FTP server is hopefully back > up. If there are flakey network issues, then you should implement some > retrying mechanism. We had a similar use case when using HTTP. An Airflow > user was listing through a paged REST API. If fetching one the pages > failed, the operator would fail and it had to start all over again. Using > Tenacity this has been fixed: > > https://github.com/apache/airflow/blob/fd78c65cabae2241a4c1d3a792e00620049cbf3e/airflow/hooks/http_hook.py#L186 > > Ideally, you would like to have a path that contains the day in the FTP > path, so you know which files to copy for which day, and you can also > backfill this. This would exclude race conditions since you can do multiple > days in parallel. > > Using xcom this would also be possible. First have an operator that will > list the files on the FTP site, push this to xcom. Have another operator > that fetches the files that you already have and push this to xcom as well. > Using a Python operator you can easily do a diff, and then you know which > files to download. In this case, you should limit the active dag-runs to > one, to avoid race conditions. > > I believe that for many use cases you don't need to keep state in Airflow, > and this might be convenient, but it is just shifting the issue. If you can > fetch the issue from somewhere external, and this is the one and single > truth, then this should be the preferred solution. > > Cheers, Fokko > > Op za 11 jan. 2020 om 04:21 schreef Kaxil Naik <kaxiln...@gmail.com>: > > > Hey all, > > > > Really good document Jacob. > > > > Below are my thoughts on different topics discussed in the docs and the > > mailing list: > > > > > > *Prefix on Xcom* > > I don't think that is a good idea to mix this into Xcom. We should let > Xcom > > be used for exactly one purpose. > > > > *Storing state in Xcom between Retries* > > This is definitely going to break idempotency. When the default retries > are > > enabled this is going to create undesired effects. > > > > @Daniel Standish : I would like to more understand the needs of Stateful > > sets for sure. If you can give us more scenarios where > > you think stateful set can solve the issue, please let us know. Also, why > > do you think Variables are not the correct solution for it? > > > > I would imagine your custom operator can store some state in Variables. > For > > example, you can store a json containing the following in > > Airflow Variables: > > > > - all_files > > - files_copied > > > > The variable, in this case, would have the details it needs to resume the > > copying from where it stopped. You custom operator as a first > > the step should check the Variable (with deserialized JSON). > > > > *The new structure for storing Stateful structure for reschedules* > > This can be a new table that has a relationship with the TI table or > just a > > new column and this column can be loaded only when using > > Reschedule/async operators or sensors. > > > > Regards, > > Kaxil > > > > On Fri, Jan 10, 2020 at 11:45 PM Yingbo Wang <ybw...@gmail.com> wrote: > > > > > The updated AIP with smart sensor design and some implementation is in > > > > > > > > > https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-17+Airflow+sensor+optimization > > > Open source PR https://github.com/apache/airflow/pull/5499 > > > > > > > > > On Fri, Jan 10, 2020 at 1:44 PM Alex Guziel <alex.guz...@airbnb.com > > > .invalid> > > > wrote: > > > > > > > I feel like for this, we can incorporate the smart sensor we have > > > > implemented at Airbnb that we plan on open sourcing. > > > > > > > > The TL;DR is that it works by having the Sensor task run briefly and > > > > materialize some state into the DB which master sensor tasks poke > for. > > > This > > > > can be with custom time intervals. > > > > > > > > On Fri, Jan 10, 2020 at 1:42 PM Daniel Standish < > dpstand...@gmail.com> > > > > wrote: > > > > > > > > > I also am a big fan of adding better support for stateful tasks, > > > though I > > > > > know this is a thorny subject in airflow community. > > > > > > > > > > There are many data warehousing tasks where state makes a lot of > > sense. > > > > > While idempotence is a nice design pattern it's not the solution > for > > > > every > > > > > problem. > > > > > > > > > > XCom may not be the way, but there should be a way. Variables > work, > > > but > > > > to > > > > > me it makes sense to have a separate structure that is associated > > with > > > > the > > > > > task, or the dag, or the task instance. > > > > > > > > > > > > > > > On Fri, Jan 10, 2020 at 12:36 PM Shaw, Damian P. < > > > > > damian.sha...@credit-suisse.com> wrote: > > > > > > > > > > > FYI the design of the already discussed pull would allow state to > > be > > > > > > persisted across retries: > > > > > > > https://github.com/apache/airflow/pull/6370#issuecomment-546582724 > > > > While > > > > > > I agree in most cases you are correct I would however be greatly > > > > > > appreciated to not explicitly exclude this capability in the > design > > > of > > > > > > keeping state across reschedules. > > > > > > > > > > > > In lost of cases I already do exactly what you suggest, I scan > the > > > > state > > > > > > of the target system and resume from there. However in lengthy > > > > pipelines > > > > > > this becomes complex, for example I have a pipeline that goes > > > something > > > > > > like: FTP Download -> Decrypt File and Zip File -> Upload to > Jump > > > > Host > > > > > > and remove Zip File -> Store in S3 Bucket. > > > > > > > > > > > > The data needs to be available at the end state as soon as > possible > > > so > > > > > the > > > > > > decryption operator is a sensor that is already running and waits > > for > > > > the > > > > > > file to be available and immediately decrypts and zips the file, > > same > > > > for > > > > > > the upload operator. From inside the corporate network > environment > > > it's > > > > > not > > > > > > possible to check the state of the s3 bucket so the orriginal FTP > > > > > Download > > > > > > process can not check the state of the final final target system. > > > Even > > > > if > > > > > > it was this could lead to a race condition if the data is in > > transit. > > > > > > > > > > > > I guess in environments where you have a lot of control and > aren't > > > > > > beholden to capracious policy, audit, and regulatory requirements > > > such > > > > > > scenarios must indeed seem niche :). Anyway we have a soluton, > just > > > > > asking > > > > > > you don't go out of your way to stop users from shooting > themselves > > > in > > > > > the > > > > > > foot if they're really determined to. > > > > > > > > > > > > Damian > > > > > > > > > > > > -----Original Message----- > > > > > > From: Chris Palmer <ch...@crpalmer.com> > > > > > > Sent: Friday, January 10, 2020 13:37 > > > > > > To: dev@airflow.apache.org > > > > > > Subject: Re: [Discussion] In Prep for AIP: Stateful XComs and > Poke > > > > > > Rescheduling in Operators > > > > > > > > > > > > I agree with Jarek that maintaining state between retries is not > > the > > > > > right > > > > > > thing to do. To be honest I'm not even convinced by the need for > > > state > > > > > > between reschedules myself. > > > > > > > > > > > > While I know from past experience that FTP is a pain to deal > with, > > I > > > > > think > > > > > > that your example is a pretty niche one. Additionally, when > > thinking > > > > > about > > > > > > idempotent task design, lots of tasks utilize state that exists > in > > > > other > > > > > > systems. You should be thinking about what state you want some > > > external > > > > > > system to be in after the task has run, rather than precisely > what > > > > > actions > > > > > > you want the task to do. > > > > > > > > > > > > It's the subtle difference between: > > > > > > > > > > > > "When it runs, this task should create the required table in my > > > > database" > > > > > > (by running a simple 'CREATE TABLE foobar .....') > > > > > > > > > > > > and > > > > > > > > > > > > "After this tasks has finished, the required table should exist > in > > my > > > > > > database" (by running 'CREATE TABLE IF NOT EXISTS foobar .....') > > > > > > > > > > > > > > > > > > The first will fail if run repeatedly (without someone taking > some > > > > other > > > > > > action like deleting the table). The second can be run as many > > times > > > as > > > > > you > > > > > > want without error, but it relies on the state that is maintained > > by > > > > your > > > > > > database. > > > > > > > > > > > > In your case the external state I think you should care about is > > the > > > > file > > > > > > system you are downloading the files to, as opposed to some > > external > > > > > table > > > > > > that could get out of sync with the file system. So I would write > > the > > > > > > operator so that the first thing it does is compare the complete > > list > > > > > with > > > > > > what already exists in the destination, and then only attempt to > > > > download > > > > > > the ones that are missing. > > > > > > > > > > > > Chris > > > > > > > > > > > > On Fri, Jan 10, 2020 at 12:52 PM Jarek Potiuk < > > > > jarek.pot...@polidea.com> > > > > > > wrote: > > > > > > > > > > > > > I wonder what others think of it. > > > > > > > > > > > > > > On Fri, Jan 10, 2020 at 6:04 PM Shaw, Damian P. < > > > > > > > damian.sha...@credit-suisse.com> wrote: > > > > > > > > > > > > > > > I don't believe so, the default should be that state isn't > > > > preserved > > > > > > > > across retries, just that it's possible for the user to > enable > > it > > > > if > > > > > > > > they are willing to take on that complexity. > > > > > > > > > > > > > > > > > > > > > > We have lots of operators that do this already as if they > fail > > > part > > > > > > > > way through a job the overhead of resuming from the beginning > > > > rather > > > > > > > > than having state on their progress is too much, just > annoying > > we > > > > > > > > have to keep this state outside Airflow as it requires extra > > > > > > > > infrastructure for our > > > > > > > task > > > > > > > > scheduling. > > > > > > > > > > > > > > > > For example we have an FTP site that we need to download 250 > > > files > > > > > > > > from, the full file list is provided to the operator, the FTP > > > > > > > > connection is > > > > > > > very > > > > > > > > unreliable and the job often fails midway, on retry we don't > > want > > > > to > > > > > > > resume > > > > > > > > from the beginning of the job so we store the state of our > > > progress > > > > > > > > in a table outside Airflow. We can't split the job in to 250 > > > tasks > > > > > > > > because the FTP site only accepts 1 connection at a time so > the > > > > > > > > overhead of 250 > > > > > > > logins > > > > > > > > would add an hour to the process and it would make the > Airflow > > UI > > > > > > > > near unusable. > > > > > > > > > > > > > > > > > > > > > > I do not know all the details of course - but your case seems > to > > be > > > > > > > solvable much easier and in "Airflow" way. You can have custom > > > > > > > operator that continues running until everything is downloaded > > and > > > > > > > retries failed transfer. The state of which file is downloaded > > > should > > > > > > > be kept in memory and even if FTP operation fails, it should > > retry > > > > > > > each failed file rather than fail the whole operator. That > would > > > > keep > > > > > > > it idempotent, and keep the state in memory rather than in > > > Airflow's > > > > > > > DB or in external system. Even if you already have an operator > > that > > > > > > > transfers X files already and you do not want to change it, you > > can > > > > > > > likely wrap it/extend to keep list of files in memory and retry > > > only > > > > > > > those files that failed so far. IMHO In your solution you do > > > exactly > > > > > > > what you are not supposed to according to Airflow's design - > > unless > > > > > > > you do some extra logic and complexity your operator is not > > > > idempotent. > > > > > > > > > > > > > > For example - If you delete downloaded files for whatever > reason > > > and > > > > > > > keep the external state and run backfill, I believe what will > > > happen > > > > > > > (unless you have some extra logic) it will see (from external > > > state) > > > > > > > that the files were already downloaded and will not download > them > > > > > > > again. If you use the in-memory state, it will work as > expected - > > > > next > > > > > > > time you run it via back-fill, it will re-download all files. > > > > > > > > > > > > > > J. > > > > > > > > > > > > > > > > > > > > > > Damian > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > From: Jarek Potiuk <jarek.pot...@polidea.com> > > > > > > > > Sent: Friday, January 10, 2020 11:45 > > > > > > > > To: dev@airflow.apache.org > > > > > > > > Subject: Re: [Discussion] In Prep for AIP: Stateful XComs and > > > Poke > > > > > > > > Rescheduling in Operators > > > > > > > > > > > > > > > > Just opening the Pandora's box :). > > > > > > > > > > > > > > > > I personally think we should not keep state between retries. > It > > > > > > > > opens up possibilities to whole host of problems and edge > > cases, > > > > and > > > > > > > > allows people to solve some approaches in non-airflow'y ways > - > > > > > > > > losing some important properties (mainly idempotency). Tasks > in > > > > > > > > Airflow should be idempotent > > > > > > > and > > > > > > > > stateless from the operator's author point of view). > > > > > > > > > > > > > > > > I think there is quite a big conceptual difference between > > > keeping > > > > > > > > the reschedule state (it's just optimising of execution of > the > > > same > > > > > > > > task) and keeping state between retries. > > > > > > > > > > > > > > > > Right now when you write your operator it's simple - no state > > to > > > > > > handle. > > > > > > > > XComs (and everything else) is cleared when task is re-run. > > > > > > > > With Poke reschedule proposal - the only thing you can do is > to > > > > > > > > save/retrieve a single ID attached to the current task > > instance. > > > > > > > > This id will not be cleared on reschedule, but it will be > > cleared > > > > on > > > > > > retry. > > > > > > > > > > > > > > > > If we introduce saving state on retries, it opens up a lot of > > > > > > > > questions - should we keep all retries? or just one? What > data > > > > > > > > should we keep - > > > > > > > should > > > > > > > > we allow more structured data? What guidelines should people > > > follow > > > > > > > > when writing their operators ? And it's a totally different > > > feature > > > > > > > > that > > > > > > > should > > > > > > > > be discussed separately. > > > > > > > > > > > > > > > > J. > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Jan 10, 2020 at 5:15 PM Shaw, Damian P. < > > > > > > > > damian.sha...@credit-suisse.com> wrote: > > > > > > > > > > > > > > > > > I just wanted to add a related use case is task retries, > > there > > > > are > > > > > > > > > lots of scenarios where keeping state between the retries > as > > > well > > > > > > > > > as the reschedules would be extremely helpful, so as long > as > > > > > > > > > whatever the solution is isn't overly narrow I'd be > extremely > > > > > > appreciative. > > > > > > > > > > > > > > > > > > Damian > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > > From: Jarek Potiuk <jarek.pot...@polidea.com> > > > > > > > > > Sent: Friday, January 10, 2020 11:05 > > > > > > > > > To: dev@airflow.apache.org > > > > > > > > > Subject: Re: [Discussion] In Prep for AIP: Stateful XComs > and > > > > Poke > > > > > > > > > Rescheduling in Operators > > > > > > > > > > > > > > > > > > Also another point to discuss here. As an original author > of > > > the > > > > > > > > > idea of using prefix in xcom, I think after the > discussions I > > > > > > > > > changed my mind. I think that simply adding a field to an > > > > existing > > > > > > > > > table > > > > > > > > > (TaskReschedule?) where we could keep all the data that > need > > to > > > > be > > > > > > > > > persisted, seems to be a good idea. We do not impact > > > performance > > > > > > > > > too much (the table is already > > > > > > > > > queried) , we do not add too much complexity and we do not > > try > > > to > > > > > > > > > introduce a generic "state" storage - this would be a > > solution > > > > > > > > > dedicated to only handle rescheduling. > > > > > > > > > > > > > > > > > > On Fri, Jan 10, 2020 at 1:44 PM Driesprong, Fokko > > > > > > > > > <fo...@driesprong.frl> > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > The repoke logic as it is now implemented with the > sensor, > > is > > > > > > > > > > able to recover from an unexpected crash. After each > poke, > > it > > > > > > > > > > will just go to sleep. If the process crashes in between, > > it > > > > > > > > > > might become a zombie task in the end, but this is also > > taken > > > > > > > > > > care of by the scheduler. In this case, the scheduler > > thinks > > > > the > > > > > > > > > > task is still running, but in > > > > > > > > > reality, it crashes. > > > > > > > > > > There is a timeout that will reset the execution. > > Hopefully, > > > > > > > > > > this doesn't happen often, and should only occur when > > > something > > > > > > > > > > is off (for example a machine crashed, or a network > > > partition, > > > > > > > > > > etc). HTH > > > > > > > > > > > > > > > > > > > > Personally I don't like duplicating the same table for > > such a > > > > > > > > > > similar use case. But that's a design choice I guess. > > > > > > > > > > > > > > > > > > > > If we go for the async executor, the above might be > > > different. > > > > I > > > > > > > > > > think it is good to not include this in the discussion. > > > > > > > > > > > > > > > > > > > > Cheers, Fokko > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Op do 9 jan. 2020 om 19:33 schreef Darren Weber < > > > > > > > > > > dweber.consult...@gmail.com > > > > > > > > > > >: > > > > > > > > > > > > > > > > > > > > > Not sure whether to add to this email thread or the > > > > google-doc > > > > > > > > > > > (not sure > > > > > > > > > > if > > > > > > > > > > > that google-doc is just a meeting-notes or if it should > > > > evolve > > > > > > > > > > > into a > > > > > > > > > > spec > > > > > > > > > > > :grin:). > > > > > > > > > > > > > > > > > > > > > > Maybe a stupid suggestion, but here it is anyway: > > > > > > > > > > > > > > > > > > > > > > XCom - communication between elements of a DAG > > > > > > > > > > > > > > > > > > > > > > XState - key/value store available for each element of > a > > > DAG > > > > > > > > > > > > > > > > > > > > > > Clearly separate the behavior of a stateful resource > > > (XState) > > > > > > > > > > > from one > > > > > > > > > > that > > > > > > > > > > > is not intended to be stateful (XCom), if that makes > any > > > > sense? > > > > > > > > > > (Creating > > > > > > > > > > > a new XState feature is similar to a new db-table, I > > > guess.) > > > > > > > > > > > > > > > > > > > > > > Just to explain what I understand about the goals of > how > > > > > > > > > > > Airflow should behave when it has some ability for an > > > > operator > > > > > > > > > > > to reschedule pokes and > > > > > > > > > > the > > > > > > > > > > > scope of the changes. In the big picture, it's > important > > > > that > > > > > > > > > > > Airflow > > > > > > > > > > can > > > > > > > > > > > resurrect a DAG on a restart when some elements of the > > DAG > > > > > > > > > > > contain operators/sensors that are dependent on > external > > > > cloud > > > > > > > > > > > operations > > > > > > > > (e.g. > > > > > > > > > > AWS > > > > > > > > > > > Batch). This is feasible when Airflow can persist any > > > unique > > > > > > > > > > > job-ID defined by the external job provider (e.g. AWS > > Batch > > > > > > > > > > > "jobId") and any related identifiers for the job (e.g. > > AWS > > > > > > > > > > > Batch infrastructure ARNs for batch queue/compute-env > etc > > > and > > > > > > > > > > > all of this detail is captured in the AwsBatchOperator > > > > > already). > > > > > > > > > > > Assuming Airflow runs a DAG that spins up > > > > > > > > > > 100's > > > > > > > > > > > or 1000's of such external jobs and persists the > external > > > > > > > > > > > "jobId", when Airflow crashes or is stopped for > upgrades > > > etc. > > > > > > > > > > > and restarted, the operators that submitted the jobs > > should > > > > be > > > > > > > > > > > able to try to check on the state of those previously > > > > > > > > > > > submitted jobs. If the jobs are still running > > > > > > > > > > on > > > > > > > > > > > the external provider (e.g. AWS Batch), it should be > able > > > to > > > > > > > > > > > resume monitoring (poking) the job status without > > > > > > > > > > > re-submitting a duplicate job (also any failure to > poke a > > > job > > > > > > > > > > > should have some level of poke-retry behavior that does > > not > > > > > > > > > > > immediately fail the Airflow task that results in > somehow > > > > > > > > > > > re-submitting the same job that is already running). > So, > > > in > > > > > > > > > > > that context, what is the scope of the "reshedule-poke" > > > > > > > > > > > changes - do they > > > > > > > > > > simply > > > > > > > > > > > release a worker and so long as Airflow is "up" (has > not > > > > > > > > > > > crashed), the reschedule can resume poking, but if > > Airflow > > > > > > > > > > > crashes, the whole thing starts over again because the > > > state > > > > > > > > > > > of the task is not resilient to > > > > > > > > > > Airflow > > > > > > > > > > > crashing? Or, does the work on the "reschedule-poke" > > also > > > > > > > > > > > provide resilience when Airflow crashes? If the goal > is > > to > > > > be > > > > > > > > > > > resilient to > > > > > > > > > > Airflow > > > > > > > > > > > crashes, what is required for the "reschedule-poke" > work > > to > > > > > > > > > > > accomplish > > > > > > > > > > that > > > > > > > > > > > goal, if it doesn't already? (Would the architecture > for > > > > > > > > > > > Airflow resilience be out-of-scope in this context > > because > > > it > > > > > > > > > > > involves more complexity, like a Kafka cluster?) > > > > > > > > > > > > > > > > > > > > > > -- Darren > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Jan 8, 2020 at 2:24 AM Jarek Potiuk > > > > > > > > > > > <jarek.pot...@polidea.com> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > Commented as well. I think we are really going in a > > good > > > > > > > direction! > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Jan 8, 2020 at 9:22 AM Driesprong, Fokko > > > > > > > > > > > > <fo...@driesprong.frl > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > Thanks Jacob for building the document. I think > we're > > > on > > > > > > > > > > > > > the right > > > > > > > > > > > track. > > > > > > > > > > > > > I've added some comments and clarification to the > > > > > > > > > > > > > document, to > > > > > > > > > > validate > > > > > > > > > > > > > we're looking in the same direction. Would love to > > get > > > > > > > > > > > > > more people's opinion on this. > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers, Fokko > > > > > > > > > > > > > > > > > > > > > > > > > > Op wo 8 jan. 2020 om 03:31 schreef Jacob Ferriero > > > > > > > > > > > > > <jferri...@google.com.invalid>: > > > > > > > > > > > > > > > > > > > > > > > > > > > Image not working on dev list here is link to the > > > > github > > > > > > > > > > > > > > review > > > > > > > > > > > comment > > > > > > > > > > > > > > containing said image: > > > > > > > > > > > > > > > > > > https://github.com/apache/airflow/pull/6370#issuecomment > > > > > > > > > > > > > > -546 > > > > > > > > > > > > > > 58 > > > > > > > > > > > > > > 2724 > > > > > > > > > > . > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Jan 7, 2020 at 5:40 PM Jacob Ferriero < > > > > > > > > > > jferri...@google.com> > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > >> Hello Dev List, > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> The inspiration for this is to allow operators > to > > > > start > > > > > > > > > > > > > >> a long > > > > > > > > > > > running > > > > > > > > > > > > > >> task on an external system and reschedule pokes > > for > > > > > > > > > > > > > >> completion > > > > > > > > > > (e.g > > > > > > > > > > > > > spark > > > > > > > > > > > > > >> job on dataproc), instead of blocking a worker > > > > > > > > > > > > > >> (sketched out in > > > > > > > > > > > #6210 > > > > > > > > > > > > > >> <https://github.com/apache/airflow/pull/6210>) > to > > > > allow > > > > > > > > > > > > > >> freeing > > > > > > > > > > up > > > > > > > > > > > of > > > > > > > > > > > > > >> slots between pokes. To do this requires > > supporting > > > a > > > > > > > > > > > > > >> method for > > > > > > > > > > > > storing > > > > > > > > > > > > > >> task state between reschedules. > > > > > > > > > > > > > >> It's worth noting that a task would maintain > state > > > > only > > > > > > > > > > > > > >> during reschedules but clear state on retries. > In > > > this > > > > > > > > > > > > > >> way the task is > > > > > > > > > > > > > idempotent > > > > > > > > > > > > > >> before reaching a terminal state [SUCCES, FAIL, > > > > > > > UP_FOR_RETRY]. > > > > > > > > > > This > > > > > > > > > > > > > brings > > > > > > > > > > > > > >> up a question of the scope of commitment to > > > > idempotency > > > > > > > > > > > > > >> of > > > > > > > > > > > operators. > > > > > > > > > > > > > If it > > > > > > > > > > > > > >> is deemed acceptable for reschedules to maintain > > > some > > > > > > > > > > > > > >> state, then > > > > > > > > > > we > > > > > > > > > > > > can > > > > > > > > > > > > > >> free up workers between pokes. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Because this is very similar to the purpose of > > XCom > > > > > > > > > > > > > >> it's been > > > > > > > > > > > > postulated > > > > > > > > > > > > > >> that we should support this behavior in XCom > > rather > > > > > > > > > > > > > >> than provide a > > > > > > > > > > > new > > > > > > > > > > > > > >> model in the db for TaskState. (Though > discussion > > > here > > > > > > > > > > > > > >> on which is > > > > > > > > > > > > more > > > > > > > > > > > > > >> appropriate is more than welcome.) > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> I'd like to put forward a proposal to resurrect > > the > > > > > > > > > > > > > >> reverted > > > > > > > > > > > > > >> #6370 < > > https://github.com/apache/airflow/pull/6370> > > > > in > > > > > > > > > > > > > >> order to > > > > > > > > > > provide a > > > > > > > > > > > > > >> modification to the lifetime of XComs under > > certain > > > > > > > > conditions. > > > > > > > > > > The > > > > > > > > > > > > > diagram > > > > > > > > > > > > > >> below helps illustrate the change originally > > > proposed > > > > > > > > > > > > > >> in > > > > > > > > #6370. > > > > > > > > > > > There > > > > > > > > > > > > > was > > > > > > > > > > > > > >> concern about changing existing behavior > > > (potentially > > > > > > > > > > > > > >> breaking) > > > > > > > > > > and > > > > > > > > > > > > the > > > > > > > > > > > > > >> fact that this makes operators stateful. Per the > > > > review > > > > > > > > > > > > > >> comments > > > > > > > > > > and > > > > > > > > > > > > an > > > > > > > > > > > > > >> informal discussion (meetings notes < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://docs.google.com/document/d/1uuNCPAcwnn0smcDUJPDFMMjrK-z6 > > > > > > > > > > Z0os > > > > > > > > > > es > > > > > > > > > > PG7jVZ3oU/edit# > > > > > > > > > > > > > > > > > > > > > > > > > > > >> and #sig-async-operators) I'd like to modify the > > > > > > > > > > > > > >> approach > > > > > > > > > > > > > >> #6370 to > > > > > > > > > > > > only > > > > > > > > > > > > > >> skip clearing of XCom if the Xom key is prefixed > > > with > > > > > > > > > > > > > >> `airflow.models.xcom.DO_NOT_CLEAR_PREFIX = > > > > > > > > > > > > > >> "_STATEFUL_"` or > > > > > > > > > > similar. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> [image: image.png] > > > > > > > > > > > > > >> -- > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> *Jacob Ferriero* > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Strategic Cloud Engineer: Data Engineering > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> jferri...@google.com > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> 617-714-2509 <(617)%20714-2509> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > > > > > > > > > > > > > > *Jacob Ferriero* > > > > > > > > > > > > > > > > > > > > > > > > > > > > Strategic Cloud Engineer: Data Engineering > > > > > > > > > > > > > > > > > > > > > > > > > > > > jferri...@google.com > > > > > > > > > > > > > > > > > > > > > > > > > > > > 617-714-2509 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > > > > > > > > > > Jarek Potiuk > > > > > > > > > > > > Polidea <https://www.polidea.com/> | Principal > > Software > > > > > > > > > > > > Engineer > > > > > > > > > > > > > > > > > > > > > > > > M: +48 660 796 129 <+48660796129> > > > > > > > > > > > > [image: Polidea] <https://www.polidea.com/> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > Darren L. Weber, Ph.D. > > > > > > > > > > > http://psdlw.users.sourceforge.net/ > > > > > > > > > > > http://psdlw.users.sourceforge.net/wordpress/ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > > > > Jarek Potiuk > > > > > > > > > Polidea <https://www.polidea.com/> | Principal Software > > > Engineer > > > > > > > > > > > > > > > > > > M: +48 660 796 129 <+48660796129> > > > > > > > > > [image: Polidea] <https://www.polidea.com/> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ================================================================== > > > > > > > > > ==== > > > > > > > > > ========= > > > > > > > > > > > > > > > > > > Please access the attached hyperlink for an important > > > electronic > > > > > > > > > communications disclaimer: > > > > > > > > > > > http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html > > > > > > > > > > > > > ================================================================== > > > > > > > > > ==== > > > > > > > > > ========= > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > > Jarek Potiuk > > > > > > > > Polidea <https://www.polidea.com/> | Principal Software > > Engineer > > > > > > > > > > > > > > > > M: +48 660 796 129 <+48660796129> > > > > > > > > [image: Polidea] <https://www.polidea.com/> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ====================================================================== > > > > > > > ========= > > > > > > > > > > > > > > > > Please access the attached hyperlink for an important > > electronic > > > > > > > > communications disclaimer: > > > > > > > > > http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html > > > > > > > > > > > > > > > > > > > > ====================================================================== > > > > > > > ========= > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > Jarek Potiuk > > > > > > > Polidea <https://www.polidea.com/> | Principal Software > Engineer > > > > > > > > > > > > > > M: +48 660 796 129 <+48660796129> > > > > > > > [image: Polidea] <https://www.polidea.com/> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > =============================================================================== > > > > > > > > > > > > Please access the attached hyperlink for an important electronic > > > > > > communications disclaimer: > > > > > > http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html > > > > > > > > > > > > > > > > > > > > > =============================================================================== > > > > > > > > > > > > > > > > > > > > > > > > > > >