dstandish commented on code in PR #39259:
URL: https://github.com/apache/airflow/pull/39259#discussion_r1580450719


##########
airflow/models/taskinstance.py:
##########
@@ -3167,6 +3188,8 @@ def render_templates(
         # MappedOperator is useless for template rendering, and we need to be
         # able to access the unmapped task instead.
         original_task.render_template_fields(context, jinja_env)
+        if isinstance(self.task, MappedOperator):
+            self.task = context["ti"].task

Review Comment:
   that make sense @uranusjr ?
   
   so with normal task, `self.task` is the task that is created locally, and 
there is no need to override it from the one in context dict.  and if you _did_ 
that then you'd take a task object that isn't quite complete, essentially 
because we don't have proper serialization of Task since there's no real Task 
entity and no TaskPydantic.  But generally it's not a problem because most of 
the time we don't need to serialize a task object.
   
   in the mappedoperator case though, as we saw last night, the "unmap" 
operation mutates the ti in the context dict.
   
   if searching for alternatives, we could look at not relying on the context 
dict for this "unmapping".  e.g. we could forword the "original" ti object to 
the thing doing the unmapping so we don't need to mutate what's in context.
   
   another option would be, upon receiving a fresh context dict over RPC, we 
could replace the TIs in the context with the local TIPydantic object -- or 
something to this effect.  then perhaps we could keep the context["ti"] 
mutation approach for unmapping.



-- 
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]

Reply via email to