Skip to content

HITL: Getting 409 in API server #55054

@vatsrahul1001

Description

@vatsrahul1001

Apache Airflow version

main (development)

If "Other Airflow 2 version" selected, which one?

No response

What happened?

If a HITL operator has a execution_timeout and default set and around same time we provided input from UI we will get 409 and task will fail

[2025-08-29, 11:35:54] ERROR - Trigger failed: Traceback (most recent call last): File "/opt/airflow/airflow-core/src/airflow/jobs/triggerer_job_runner.py", line 993, in cleanup_finished_triggers result = details["task"].result() File "/opt/airflow/airflow-core/src/airflow/jobs/triggerer_job_runner.py", line 1102, in run_trigger async for event in trigger.run(): File "/opt/airflow/providers/standard/src/airflow/providers/standard/triggers/hitl.py", line 110, in run await sync_to_async(update_hitl_detail_response)( File "/usr/local/lib/python3.10/site-packages/asgiref/sync.py", line 439, in __call__ ret = await asyncio.shield(exec_coro) File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/usr/local/lib/python3.10/site-packages/asgiref/sync.py", line 493, in thread_handler return func(*args, **kwargs) File "/opt/airflow/task-sdk/src/airflow/sdk/execution_time/hitl.py", line 66, in update_hitl_detail_response response = SUPERVISOR_COMMS.send( File "/opt/airflow/airflow-core/src/airflow/jobs/triggerer_job_runner.py", line 770, in send return async_to_sync(self.asend)(msg) File "/usr/local/lib/python3.10/site-packages/asgiref/sync.py", line 262, in __call__ return call_result.result() File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 451, in result return self.__get_result() File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result raise self._exception File "/usr/local/lib/python3.10/site-packages/asgiref/sync.py", line 302, in main_wrap result = await awaitable File "/opt/airflow/airflow-core/src/airflow/jobs/triggerer_job_runner.py", line 796, in asend return await self._aget_response(frame.id) File "/opt/airflow/airflow-core/src/airflow/jobs/triggerer_job_runner.py", line 787, in _aget_response return self._from_frame(frame) File "/opt/airflow/task-sdk/src/airflow/sdk/execution_time/comms.py", line 258, in _from_frame raise AirflowRuntimeError(error=err) airflow.sdk.exceptions.AirflowRuntimeError: API_SERVER_ERROR: {'status_code': 409, 'message': 'Human-in-the-loop detail for Task Instance with id 0198f46d-61bd-715d-9d0e-0199d9408c32 already exists.', 'detail': {'detail': 'Human-in-the-loop detail for Task Instance with id 0198f46d-61bd-715d-9d0e-0199d9408c32 already exists.'}}

What you think should happen instead?

We should block input from UI maybe

How to reproduce

Use example_hitl_operator example DAG and perform action from UI around execution_timeout

Operating System

linux

Versions of Apache Airflow Providers

No response

Deployment

Official Apache Airflow Helm Chart

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions