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

   ### Under which category would you file this issue?
   
   Providers
   
   ### Apache Airflow version
   
   3.2.2
   
   ### What happened and how to reproduce it?
   
   ## Summary
   When trying to edit and save Airflow variables using the Web UI, the save 
operation fails with an HTTP 500 Internal Server Error. The native CLI works 
perfectly, indicating a strict mismatch between the frontend UI payload and the 
Airflow 3 backend API schemas.
   
   ## Root Cause Analysis
   1. **Frontend Payload:** The UI transmits `"team_name": ""` in the JSON 
request body when saving a variable.
   2. **Backend Datamodel:** In Airflow 3, the `VariableBody` schema explicitly 
defines `team_name` as an optional string property. 
   3. **The Crash:** When multi-team features are disabled in the backend 
environment, passing an empty string (`""`) instead of `null` triggers an 
internal exception. 
   4. **Middleware Masking:** This exception is intercepted by the 
`refresh_token.py` authentication middleware, which fails to return a clean 
validation response and instead throws an unhandled `RuntimeError: No response 
returned`, masking the underlying failure as a generic 500 error.
   
   ## Steps to Reproduce
   1. Navigate to the Airflow Web UI -> Variables list.
   2. Click **Edit** on an existing variable which is created before the 
version upgrade, modify the value, and click **Save**.
   3. Inspect the outbound browser network request to verify the payload 
contains `"team_name": ""`.
   
   ## Relevant Logs (API Server)
   ```text
   2026-06-22T15:04:14.575405Z [error    ] Exception in ASGI application
    [uvicorn.error] loc=httptools_impl.py:426
     + Exception Group Traceback (most recent call last):
     |   File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", 
line 81, in collapse_excgroups
     |     yield
     |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
192, in __call__
     |     async with anyio.create_task_group() as task_group:
     |                ^^^^^^^^^^^^^^^^^^^^^^^^^
     |   File 
"/usr/local/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 
811, in __aexit__
     |     raise BaseExceptionGroup(
     | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
     +-+---------------- 1 ----------------
       | Traceback (most recent call last):
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py",
 line 421, in run_asgi
       |     result = await app(  # type: ignore[func-returns-value]
       |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/fastapi/applications.py", 
line 1159, in __call__
       |     await super().__call__(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/applications.py", line 90, 
in __call__
       |     await self.middleware_stack(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
186, in __call__
       |     raise exc
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
164, in __call__
       |     await self.app(scope, receive, _send)
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/common/http_access_log.py",
 line 83, in __call__
       |     await self.app(scope, receive, capture_send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
29, in __call__
       |     await responder(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
130, in __call__
       |     await super().__call__(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
46, in __call__
       |     await self.app(scope, receive, self.send_with_compression)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
191, in __call__
       |     with recv_stream, send_stream, collapse_excgroups():
       |                                    ^^^^^^^^^^^^^^^^^^^^
       |   File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
       |     self.gen.throw(value)
       |   File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", 
line 87, in collapse_excgroups
       |     raise exc
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
193, in __call__
       |     response = await self.dispatch_func(request, call_next)
       |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/auth/middlewares/refresh_token.py",
 line 61, in dispatch
       |     response = await call_next(request)
       |                ^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
169, in call_next
       |     raise RuntimeError("No response returned.")
       | RuntimeError: No response returned.
       +------------------------------------
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File 
"/home/airflow/.local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py",
 line 421, in run_asgi
       result = await app(  # type: ignore[func-returns-value]
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.12/site-packages/fastapi/applications.py", 
line 1159, in __call__
       await super().__call__(scope, receive, send)
     File "/usr/local/lib/python3.12/site-packages/starlette/applications.py", 
line 90, in __call__
       await self.middleware_stack(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
186, in __call__
       raise exc
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
164, in __call__
       await self.app(scope, receive, _send)
     File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/common/http_access_log.py",
 line 83, in __call__
       await self.app(scope, receive, capture_send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
29, in __call__
       await responder(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
130, in __call__
       await super().__call__(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
46, in __call__
       await self.app(scope, receive, self.send_with_compression)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
191, in __call__
       with recv_stream, send_stream, collapse_excgroups():
                                      ^^^^^^^^^^^^^^^^^^^^
     File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
       self.gen.throw(value)
     File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", line 
87, in collapse_excgroups
       raise exc
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
193, in __call__
       response = await self.dispatch_func(request, call_next)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/auth/middlewares/refresh_token.py",
 line 61, in dispatch
       response = await call_next(request)
                  ^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
169, in call_next
       raise RuntimeError("No response returned.")
   RuntimeError: No response returned.
   2026-06-22T15:04:15.616257Z [error    ] Exception in ASGI application
    [uvicorn.error] loc=httptools_impl.py:426
     + Exception Group Traceback (most recent call last):
     |   File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", 
line 81, in collapse_excgroups
     |     yield
     |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
192, in __call__
     |     async with anyio.create_task_group() as task_group:
     |                ^^^^^^^^^^^^^^^^^^^^^^^^^
     |   File 
"/usr/local/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 
811, in __aexit__
     |     raise BaseExceptionGroup(
     | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
     +-+---------------- 1 ----------------
       | Traceback (most recent call last):
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py",
 line 421, in run_asgi
       |     result = await app(  # type: ignore[func-returns-value]
       |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/fastapi/applications.py", 
line 1159, in __call__
       |     await super().__call__(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/applications.py", line 90, 
in __call__
       |     await self.middleware_stack(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
186, in __call__
       |     raise exc
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
164, in __call__
       |     await self.app(scope, receive, _send)
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/common/http_access_log.py",
 line 83, in __call__
       |     await self.app(scope, receive, capture_send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
29, in __call__
       |     await responder(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
130, in __call__
       |     await super().__call__(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
46, in __call__
       |     await self.app(scope, receive, self.send_with_compression)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
191, in __call__
       |     with recv_stream, send_stream, collapse_excgroups():
       |                                    ^^^^^^^^^^^^^^^^^^^^
       |   File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
       |     self.gen.throw(value)
       |   File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", 
line 87, in collapse_excgroups
       |     raise exc
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
193, in __call__
       |     response = await self.dispatch_func(request, call_next)
       |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/auth/middlewares/refresh_token.py",
 line 61, in dispatch
       |     response = await call_next(request)
       |                ^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
169, in call_next
       |     raise RuntimeError("No response returned.")
       | RuntimeError: No response returned.
       +------------------------------------
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File 
"/home/airflow/.local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py",
 line 421, in run_asgi
       result = await app(  # type: ignore[func-returns-value]
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.12/site-packages/fastapi/applications.py", 
line 1159, in __call__
       await super().__call__(scope, receive, send)
     File "/usr/local/lib/python3.12/site-packages/starlette/applications.py", 
line 90, in __call__
       await self.middleware_stack(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
186, in __call__
       raise exc
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
164, in __call__
       await self.app(scope, receive, _send)
     File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/common/http_access_log.py",
 line 83, in __call__
       await self.app(scope, receive, capture_send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
29, in __call__
       await responder(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
130, in __call__
       await super().__call__(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
46, in __call__
       await self.app(scope, receive, self.send_with_compression)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
191, in __call__
       with recv_stream, send_stream, collapse_excgroups():
                                      ^^^^^^^^^^^^^^^^^^^^
     File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
       self.gen.throw(value)
     File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", line 
87, in collapse_excgroups
       raise exc
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
193, in __call__
       response = await self.dispatch_func(request, call_next)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/auth/middlewares/refresh_token.py",
 line 61, in dispatch
       response = await call_next(request)
                  ^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
169, in call_next
       raise RuntimeError("No response returned.")
   RuntimeError: No response returned.
   2026-06-22T15:04:17.648490Z [error    ] Exception in ASGI application
    [uvicorn.error] loc=httptools_impl.py:426
     + Exception Group Traceback (most recent call last):
     |   File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", 
line 81, in collapse_excgroups
     |     yield
     |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
192, in __call__
     |     async with anyio.create_task_group() as task_group:
     |                ^^^^^^^^^^^^^^^^^^^^^^^^^
     |   File 
"/usr/local/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 
811, in __aexit__
     |     raise BaseExceptionGroup(
     | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
     +-+---------------- 1 ----------------
       | Traceback (most recent call last):
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py",
 line 421, in run_asgi
       |     result = await app(  # type: ignore[func-returns-value]
       |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/fastapi/applications.py", 
line 1159, in __call__
       |     await super().__call__(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/applications.py", line 90, 
in __call__
       |     await self.middleware_stack(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
186, in __call__
       |     raise exc
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
164, in __call__
       |     await self.app(scope, receive, _send)
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/common/http_access_log.py",
 line 83, in __call__
       |     await self.app(scope, receive, capture_send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
29, in __call__
       |     await responder(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
130, in __call__
       |     await super().__call__(scope, receive, send)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
46, in __call__
       |     await self.app(scope, receive, self.send_with_compression)
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
191, in __call__
       |     with recv_stream, send_stream, collapse_excgroups():
       |                                    ^^^^^^^^^^^^^^^^^^^^
       |   File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
       |     self.gen.throw(value)
       |   File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", 
line 87, in collapse_excgroups
       |     raise exc
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
193, in __call__
       |     response = await self.dispatch_func(request, call_next)
       |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/auth/middlewares/refresh_token.py",
 line 61, in dispatch
       |     response = await call_next(request)
       |                ^^^^^^^^^^^^^^^^^^^^^^^^
       |   File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
169, in call_next
       |     raise RuntimeError("No response returned.")
       | RuntimeError: No response returned.
       +------------------------------------
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File 
"/home/airflow/.local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py",
 line 421, in run_asgi
       result = await app(  # type: ignore[func-returns-value]
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.12/site-packages/fastapi/applications.py", 
line 1159, in __call__
       await super().__call__(scope, receive, send)
     File "/usr/local/lib/python3.12/site-packages/starlette/applications.py", 
line 90, in __call__
       await self.middleware_stack(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
186, in __call__
       raise exc
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 
164, in __call__
       await self.app(scope, receive, _send)
     File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/common/http_access_log.py",
 line 83, in __call__
       await self.app(scope, receive, capture_send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
29, in __call__
       await responder(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
130, in __call__
       await super().__call__(scope, receive, send)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 
46, in __call__
       await self.app(scope, receive, self.send_with_compression)
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
191, in __call__
       with recv_stream, send_stream, collapse_excgroups():
                                      ^^^^^^^^^^^^^^^^^^^^
     File "/usr/local/lib/python3.12/contextlib.py", line 158, in __exit__
       self.gen.throw(value)
     File "/usr/local/lib/python3.12/site-packages/starlette/_utils.py", line 
87, in collapse_excgroups
       raise exc
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
193, in __call__
       response = await self.dispatch_func(request, call_next)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_fastapi/auth/middlewares/refresh_token.py",
 line 61, in dispatch
       response = await call_next(request)
                  ^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/usr/local/lib/python3.12/site-packages/starlette/middleware/base.py", line 
169, in call_next
       raise RuntimeError("No response returned.")
   RuntimeError: No response returned.
   
   ### What you think should happen instead?
   
   _No response_
   
   ### Operating System
   
   _No response_
   
   ### Deployment
   
   None
   
   ### Apache Airflow Provider(s)
   
   _No response_
   
   ### Versions of Apache Airflow Providers
   
   _No response_
   
   ### Official Helm Chart version
   
   Not Applicable
   
   ### Kubernetes Version
   
   _No response_
   
   ### Helm Chart configuration
   
   _No response_
   
   ### Docker Image customizations
   
   _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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to