AOSSIE-Org / AOSSIE-Org/PictoPy

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

Đang mở
#1,033 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
283
Fork
679
Merge trung bình
7 ngày 2 giờ
Pull request đã merge (30 ngày)
3

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.