Skip to content

Get dagStats endpoint is giving internal server error #64247

Description

@atul-astronomer

Apache Airflow version

3.2.0b2

What happened and how to reproduce it?

  1. Start airflow instance on 3.2.0b2 tag.
  2. Hit dagStats endpoint providing any existing dag with dagrun created.
  3. Notice the error in API server logs
apiserver 2026-03-26T08:22:05.994000Z [info     ] request finished               [http.access] client_addr=223.181.117.126:0 duration_us=10592 loc=http_access_log.py:98 method=GET path=/d6zsr5jn/api/v2/dagStats query='dag_ids=api_tests' request_id=64625ebe-e27b-479f-80c6-03213b859dd0 status_code=500
apiserver 2026-03-26T08:22:05.994259Z [error    ] Exception in ASGI application
apiserver  [uvicorn.error] loc=httptools_impl.py:421
apiserver   + Exception Group Traceback (most recent call last):
apiserver   |   File "/usr/local/lib/python3.14/site-packages/starlette/_utils.py", line 81, in collapse_excgroups
apiserver   |     yield
apiserver   |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 192, in __call__
apiserver   |     async with anyio.create_task_group() as task_group:
apiserver   |                ~~~~~~~~~~~~~~~~~~~~~~~^^
apiserver   |   File "/usr/local/lib/python3.14/site-packages/anyio/_backends/_asyncio.py", line 783, in __aexit__
apiserver   |     raise BaseExceptionGroup(
apiserver   |         "unhandled errors in a TaskGroup", self._exceptions
apiserver   |     ) from None
apiserver   | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
apiserver   +-+---------------- 1 ----------------
apiserver     | Traceback (most recent call last):
apiserver     |   File "/usr/local/lib/python3.14/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi
apiserver     |     result = await app(  # type: ignore[func-returns-value]
apiserver     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     |         self.scope, self.receive, self.send
apiserver     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     |     )
apiserver     |     ^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
apiserver     |     return await self.app(scope, receive, send)
apiserver     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/fastapi/applications.py", line 1159, in __call__
apiserver     |     await super().__call__(scope, receive, send)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/applications.py", line 107, in __call__
apiserver     |     await self.middleware_stack(scope, receive, send)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in __call__
apiserver     |     raise exc
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in __call__
apiserver     |     await self.app(scope, receive, _send)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/airflow/api_fastapi/common/http_access_log.py", line 83, in __call__
apiserver     |     await self.app(scope, receive, capture_send)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/gzip.py", line 29, in __call__
apiserver     |     await responder(scope, receive, send)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/gzip.py", line 130, in __call__
apiserver     |     await super().__call__(scope, receive, send)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/gzip.py", line 46, in __call__
apiserver     |     await self.app(scope, receive, self.send_with_compression)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 191, in __call__
apiserver     |     with recv_stream, send_stream, collapse_excgroups():
apiserver     |                                    ~~~~~~~~~~~~~~~~~~^^
apiserver     |   File "/usr/local/lib/python3.14/contextlib.py", line 162, in __exit__
apiserver     |     self.gen.throw(value)
apiserver     |     ~~~~~~~~~~~~~~^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
apiserver     |     raise exc
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in __call__
apiserver     |     response = await self.dispatch_func(request, call_next)
apiserver     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/airflow/api_fastapi/auth/middlewares/refresh_token.py", line 61, in dispatch
apiserver     |     response = await call_next(request)
apiserver     |                ^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
apiserver     |     raise app_exc from app_exc.__cause__ or app_exc.__context__
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
apiserver     |     await self.app(scope, receive_or_disconnect, send_no_error)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 191, in __call__
apiserver     |     with recv_stream, send_stream, collapse_excgroups():
apiserver     |                                    ~~~~~~~~~~~~~~~~~~^^
apiserver     |   File "/usr/local/lib/python3.14/contextlib.py", line 162, in __exit__
apiserver     |     self.gen.throw(value)
apiserver     |     ~~~~~~~~~~~~~~^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
apiserver     |     raise exc
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in __call__
apiserver     |     response = await self.dispatch_func(request, call_next)
apiserver     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/astronomer/runtime/plugin.py", line 90, in dispatch
apiserver     |     response = await call_next(request)
apiserver     |                ^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
apiserver     |     raise app_exc from app_exc.__cause__ or app_exc.__context__
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
apiserver     |     await self.app(scope, receive_or_disconnect, send_no_error)
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 191, in __call__
apiserver     |     with recv_stream, send_stream, collapse_excgroups():
apiserver     |                                    ~~~~~~~~~~~~~~~~~~^^
apiserver     |   File "/usr/local/lib/python3.14/contextlib.py", line 162, in __exit__
apiserver     |     self.gen.throw(value)
apiserver     |     ~~~~~~~~~~~~~~^^^^^^^
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
apiserver     |     raise exc
apiserver     |   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in __call__
apiserver     await self.app(scope, receive_or_disconnect, send_no_error)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 191, in __call__
apiserver     with recv_stream, send_stream, collapse_excgroups():
apiserver                                    ~~~~~~~~~~~~~~~~~~^^
apiserver   File "/usr/local/lib/python3.14/contextlib.py", line 162, in __exit__
apiserver     self.gen.throw(value)
apiserver     ~~~~~~~~~~~~~~^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
apiserver     raise exc
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in __call__
apiserver     response = await self.dispatch_func(request, call_next)
apiserver                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/astronomer/runtime/plugin.py", line 90, in dispatch
apiserver     response = await call_next(request)
apiserver                ^^^^^^^^^^^^^^^^^^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
apiserver     raise app_exc from app_exc.__cause__ or app_exc.__context__
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
apiserver     await self.app(scope, receive_or_disconnect, send_no_error)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 191, in __call__
apiserver     with recv_stream, send_stream, collapse_excgroups():
apiserver                                    ~~~~~~~~~~~~~~~~~~^^
apiserver   File "/usr/local/lib/python3.14/contextlib.py", line 162, in __exit__
apiserver     self.gen.throw(value)
apiserver     ~~~~~~~~~~~~~~^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/_utils.py", line 87, in collapse_excgroups
apiserver     raise exc
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in __call__
apiserver     response = await self.dispatch_func(request, call_next)
apiserver                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver   File "/usr/local/airflow/plugins/plugins/AIP_68_plugins/fastapi_root_middlewares.py", line 6, in dispatch
apiserver     response = await call_next(request)
apiserver                ^^^^^^^^^^^^^^^^^^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
apiserver     raise app_exc from app_exc.__cause__ or app_exc.__context__
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
apiserver     await self.app(scope, receive_or_disconnect, send_no_error)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
apiserver     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
apiserver     raise exc
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
apiserver     await app(scope, receive, sender)
apiserver   File "/usr/local/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
apiserver     await self.app(scope, receive, send)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/routing.py", line 716, in __call__
apiserver     await self.middleware_stack(scope, receive, send)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/routing.py", line 736, in app
apiserver     await route.handle(scope, receive, send)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/routing.py", line 290, in handle
apiserver     await self.app(scope, receive, send)
apiserver   File "/usr/local/lib/python3.14/site-packages/fastapi/routing.py", line 134, in app
apiserver     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
apiserver     raise exc
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
apiserver     await app(scope, receive, sender)
apiserver   File "/usr/local/lib/python3.14/site-packages/fastapi/routing.py", line 120, in app
apiserver     response = await f(request)
apiserver                ^^^^^^^^^^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/fastapi/routing.py", line 674, in app
apiserver     raw_response = await run_endpoint_function(
apiserver                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     ...<3 lines>...
apiserver     )
apiserver     ^
apiserver   File "/usr/local/lib/python3.14/site-packages/fastapi/routing.py", line 330, in run_endpoint_function
apiserver     return await run_in_threadpool(dependant.call, **values)
apiserver            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
apiserver     return await anyio.to_thread.run_sync(func)
apiserver            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/anyio/to_thread.py", line 63, in run_sync
apiserver     return await get_async_backend().run_sync_in_worker_thread(
apiserver            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver         func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter
apiserver         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
apiserver     )
apiserver     ^
apiserver   File "/usr/local/lib/python3.14/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread
apiserver     return await future
apiserver            ^^^^^^^^^^^^
apiserver   File "/usr/local/lib/python3.14/site-packages/anyio/_backends/_asyncio.py", line 986, in run
apiserver     result = context.run(func, *args)
apiserver   File "/usr/local/lib/python3.14/site-packages/airflow/api_fastapi/core_api/routes/public/dag_stats.py", line 91, in get_dag_stats
apiserver     DagStatsResponse(
apiserver     ~~~~~~~~~~~~~~~~^
apiserver         dag_id=dag_id,
apiserver         ^^^^^^^^^^^^^^
apiserver     ...<7 lines>...
apiserver         ],
apiserver         ^^
apiserver     )
apiserver     ^
apiserver   File "/usr/local/lib/python3.14/site-packages/pydantic/main.py", line 250, in __init__
apiserver     validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
apiserver pydantic_core._pydantic_core.ValidationError: 1 validation error for DagStatsResponse
apiserver dag_display_name
apiserver   Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]

What you think should happen instead?

No response

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    affected_version:3.2Use for reporting issues with 3.2area:APIAirflow's REST/HTTP APIarea:corekind:bugThis is a clearly a bugpriority:criticalShowstopper bug that should be patched immediately

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions