vatsrahul1001 opened a new issue, #46513:
URL: https://github.com/apache/airflow/issues/46513

   ### Apache Airflow version
   
   3.0.0a1
   
   ### If "Other Airflow 2 version" selected, which one?
   
   _No response_
   
   ### What happened?
   
   I see the below issue while reading Xcom
   
   1.   `ti.xcom_pull(key=key)` used to work without task_id in AF2, however 
failing in AF3
   
   **AF2**
   
   <img width="1353" alt="Image" 
src="https://github.com/user-attachments/assets/9dc08a59-3b83-4bbf-a71c-c3b5c779f025";
 />
   
   
   **AF3**
   <img width="1462" alt="Image" 
src="https://github.com/user-attachments/assets/d7ea1fdd-5b07-4ac8-87d3-63fa728def86";
 />
   
   
   1.  xcom values are showing in ""
   **AF3**
   
![Image](https://github.com/user-attachments/assets/cd57567b-c982-4764-8f8e-6be3d5b8ad3e)
   **AF2**
   <img width="1048" alt="Image" 
src="https://github.com/user-attachments/assets/3e764713-2d9b-4d72-b6f5-719ecde95ef0";
 />
   
   ### What you think should happen instead?
   
   There is be no deviations in retriving xcom from AF2
   
   ### How to reproduce
   
   
   1. Execute below DAG
   2. Verify Xcom values are with qoutes.
   3. `val = ti.xcom_pull(key=key)` in **wait_pull** method was able to get the 
xcom value with only using key, however, in AF3 is not able to see . See xcom 
value of seperate.y task
   
   ```
   from airflow.decorators import dag, task, task_group
   from airflow.models.baseoperator import chain, cross_downstream
   from time import sleep
   from pendulum import today
   
   
   def wait_pull(**kwargs):
       ti = kwargs["ti"]
       key = ti.task_id.split(".")[-2]
       val = None
       while val is None:
           val = ti.xcom_pull(key=key)
           if not val:
               print("not yet")
           sleep(5)
       print(f"got {val}")
       return val
   
   
   def push(val, **kwargs):
       ti = kwargs["ti"]
       key = ti.task_id.split(".")[-2]
       ti.xcom_push(key=key, value=val)
   
   
   @task
   def x(**kwargs):
       push("X", **kwargs)
       return "x"
   
   
   @task
   def y(a, **kwargs):
       b = wait_pull(**kwargs)
       push(f"{b}Y", **kwargs)
       return f"{a}y"
   
   
   @task
   def z(a, **kwargs):
       b = wait_pull(**kwargs)
       push(f"{b}Z", **kwargs)
       return f"{a}z"
   
   
   @task
   def get(**kwargs):
       return wait_pull(**kwargs)
   
   
   @task
   def cat(a, b):
       if not a:
           return b
       if not b:
           return a
       return a + b
   
   
   @task
   def assert_one_of(to):
       @task
       def approved(val):
           print(val)
           assert int(val) in to
   
       return approved
   
   
   @task_group()
   def separate():
       a = x()
       y(a)
       c = z(a)
       d = get()
       return cat(c, d)
   
   
   @task_group()
   def chained_one_way():
       a = x()
       b = y(a)
       c = z(a)
       d = get()
       chain(a, b, c, d)
       return cat(c, d)
   
   
   @task_group()
   def chained_another_way():
       a = x()
       b = y(a)
       c = z(a)
       d = get()
       b >> d  # to remove race condition
       chain(a, c, b, d)
       return cat(c, d)
   
   
   @task_group()
   def crossed_one_way():
       a = x()
       b = y(a)
       c = z(a)
       d = get()
       c >> d  # to remove race condition
       cross_downstream([a, b], [c, d])
       return cat(c, d)
   
   
   @task_group()
   def crossed_another_way():
       a = x()
       b = y(a)
       c = z(a)
       d = get()
       cross_downstream([a, c], [b, d])
       return cat(c, d)
   
   
   @task
   def assert_equal(a, b):
       print(f"{a} == {b}")
       assert a == b
   
   
   @dag(
       schedule=None,
       start_date=today('UTC').add(days=-1),
       default_args={"owner": "airflow"},
       max_active_runs=1,
       catchup=False,
       tags=["core"],
   )
   def cross_chain_structure_hash():
       """
       The patterns below aren't supposed to be meaningful, it's enough that a
       change in the underlying functionality will fail this test and attract
       human attention.
       """
   
       assert_equal("xzX", separate())
       assert_equal("xzXYZ", chained_one_way())
       assert_equal("xzXZY", chained_another_way())
       assert_equal("xzXYZ", crossed_one_way())
       assert_equal("xzXZ", crossed_another_way())
   
   
   the_dag = cross_chain_structure_hash()
   ```
   
   
   ### Operating System
   
   Linux
   
   ### Versions of Apache Airflow Providers
   
   _No response_
   
   ### Deployment
   
   Other
   
   ### Deployment details
   
   _No response_
   
   ### Anything else?
   
   _No response_
   
   ### Are you willing to submit PR?
   
   - [ ] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


-- 
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: commits-unsubscr...@airflow.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to