perf: 1s TTL cache for /health DB probe and /config state reads
Locust hit /health and /config on every @task(3), so each request was firing repo.get_total_logs() and two repo.get_state() calls against aiosqlite — filling the driver queue for data that changes on the order of seconds, not milliseconds. Both caches follow the shape already used by the existing Docker cache: - asyncio.Lock with double-checked TTL so concurrent callers collapse into one DB hit per 1s window. - _reset_* helpers called from tests/api/conftest.py::setup_db so the module-level cache can't leak across tests. tests/test_health_config_cache.py asserts 50 concurrent callers produce exactly 1 repo call, and the cache expires after TTL.
This commit is contained in:
@@ -53,6 +53,12 @@ async def setup_db(monkeypatch) -> AsyncGenerator[None, None]:
|
||||
monkeypatch.setattr(repo, "engine", engine)
|
||||
monkeypatch.setattr(repo, "session_factory", session_factory)
|
||||
|
||||
# Reset per-request TTL caches so they don't leak across tests
|
||||
from decnet.web.router.health import api_get_health as _h
|
||||
from decnet.web.router.config import api_get_config as _c
|
||||
_h._reset_db_cache()
|
||||
_c._reset_state_cache()
|
||||
|
||||
# Create schema
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(SQLModel.metadata.create_all)
|
||||
|
||||
Reference in New Issue
Block a user