AOSSIE-Org / AOSSIE-Org/PictoPy

BUG: Sync-microservices: Health Check Blocks Main Event Loop (Performance Risk)

Offen
#1,033 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
283
Forks
679
Ø Merge
7 T. 2 Std.
Gemergte PRs (30 T.)
3

Beschreibung

### Is there an existing issue for this?

- [x] I have searched the existing issues

### What happened?

### Description
The `/health` endpoint is defined as async, but it calls synchronous blocking database operations. This causes the entire FastAPI application to freeze for all users while the database check is performing I/O.

### How to reproduce
1. Simulate a slow database connection (e.g., lock the sqlite DB file).
2. Send a request to `GET /health`
3. Simultaneously try to hit `GET /watcher/status`
4. Observe that the status request hangs until the health check completes.

### Root cause
In `health.py`
```
@router.get("/health", response_model=HealthCheckResponse)
async def health_check():
# This function is blocking I/O!
db_status = db_check_database_connection()
return ...
```
And in `folders.py` `db_check_database_connection()` uses `sqlite3.connect()` , which is a synchronous blocking call. Using blocking code inside an async def function stops the asyncio loop.

### Video
On left = with async
On right = without async

https://github.com/user-attachments/assets/eccb75a5-f8aa-4a93-8ec0-325ead7aaac2

### Potential fix
- Simply define the route as `def health_check():` removing async, which tells FastAPI to run it in a separate thread automatically.
- Might use aiosqlite library instead

I will be happy to work on this issue

### Record

- [x] I agree to follow this project's Code of Conduct

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.