amoghrajesh commented on code in PR #67902:
URL: https://github.com/apache/airflow/pull/67902#discussion_r3350494620


##########
airflow-core/src/airflow/models/asset_store.py:
##########
@@ -52,3 +63,9 @@ class AssetStoreModel(Base):
             ondelete="CASCADE",
         ),
     )
+
+    @property
+    def last_updated_by_kind_enum(self) -> AssetStoreWriterKind | None:

Review Comment:
   Handled in 7250b423f3



##########
airflow-core/src/airflow/api_fastapi/execution_api/routes/asset_store.py:
##########
@@ -35,15 +35,39 @@
 from fastapi import HTTPException, Query, status
 from sqlalchemy import select
 
-from airflow._shared.state import AssetScope
+from airflow._shared.state import AssetScope, AssetStoreWriterKind
 from airflow.api_fastapi.common.db.common import SessionDep
 from airflow.api_fastapi.execution_api.datamodels.asset_store import (
     AssetStorePutBody,
     AssetStoreResponse,
 )
-from airflow.api_fastapi.execution_api.security import ExecutionAPIRoute
+from airflow.api_fastapi.execution_api.datamodels.token import TIToken
+from airflow.api_fastapi.execution_api.security import CurrentTIToken, 
ExecutionAPIRoute
 from airflow.models.asset import AssetModel
+from airflow.models.taskinstance import TaskInstance
 from airflow.state import get_state_backend
+from airflow.state.metastore import MetastoreStoreBackend
+
+_TIWriterFields = tuple[str, str, str, int]
+
+
+def _fetch_ti_writer_fields(token: TIToken, session: SessionDep) -> 
_TIWriterFields:
+    """Return (dag_id, run_id, task_id, map_index) for the TI identified by 
the token."""
+    row = session.execute(
+        select(
+            TaskInstance.dag_id,
+            TaskInstance.run_id,
+            TaskInstance.task_id,
+            TaskInstance.map_index,
+        ).where(TaskInstance.id == token.id)
+    ).one_or_none()
+    if row is None:
+        raise HTTPException(
+            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,

Review Comment:
   Handled in 7250b423f3



##########
airflow-core/src/airflow/state/metastore.py:
##########
@@ -279,18 +279,68 @@ def _get_asset_store(self, scope: AssetScope, key: str, 
*, session: Session) ->
         )
         return row.value if row is not None else None
 
-    def _set_asset_store(self, scope: AssetScope, key: str, value: str, *, 
session: Session) -> None:
+    def _set_asset_store(
+        self,
+        scope: AssetScope,
+        key: str,
+        value: str,
+        *,
+        kind: AssetStoreWriterKind | None = None,
+        dag_id: str | None = None,
+        run_id: str | None = None,
+        task_id: str | None = None,
+        map_index: int | None = None,
+        session: Session,
+    ) -> None:
         now = timezone.utcnow()
-        values = dict(asset_id=scope.asset_id, key=key, value=value, 
updated_at=now)
+        kind_str = kind.value if kind is not None else None
+        writer_info = dict(
+            last_updated_by_kind=kind_str,
+            last_updated_by_dag_id=dag_id,
+            last_updated_by_run_id=run_id,
+            last_updated_by_task_id=task_id,
+            last_updated_by_map_index=map_index,
+        )
+        values = dict(asset_id=scope.asset_id, key=key, value=value, 
updated_at=now, **writer_info)
         stmt = _build_upsert_stmt(
             get_dialect_name(session),
             AssetStoreModel,
             ["asset_id", "key"],
             values,
-            dict(value=value, updated_at=now),
+            dict(value=value, updated_at=now, **writer_info),

Review Comment:
   Handled in 7250b423f3



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