54 lines
2.3 KiB
Markdown
54 lines
2.3 KiB
Markdown
# TASK-091-sqlite-writer-hardening
|
|
|
|
## Goal
|
|
Unificar y endurecer la politica de conexion SQLite para todas las rutas de escritura del backend que comparten la misma base de datos, reduciendo contencion evitable y haciendo el comportamiento consistente entre historico base, player-events y captura prospectiva RCON.
|
|
|
|
## Context
|
|
La repo ya tiene varias rutas de escritura sobre el mismo SQLite:
|
|
- historico base CRCON
|
|
- player-event ledger V2
|
|
- captura prospectiva RCON
|
|
- snapshots y runners asociados
|
|
|
|
Parte del storage ya usa timeout/WAL/busy_timeout, pero no toda la capa de persistencia lo hace de forma uniforme. Antes de cualquier politica de locking entre procesos, hace falta que todas las conexiones writer-capable usen una configuracion SQLite coherente.
|
|
|
|
## Scope
|
|
Backend solamente. Sin cambios en frontend.
|
|
|
|
## Steps
|
|
1. Auditar todas las funciones `_connect()` o equivalentes que abren SQLite en:
|
|
- `backend/app/historical_storage.py`
|
|
- `backend/app/player_event_storage.py`
|
|
- `backend/app/rcon_historical_storage.py`
|
|
- cualquier otro storage writer-capable relacionado
|
|
2. Crear una utilidad compartida y pequena para abrir conexiones SQLite con politica comun de escritura.
|
|
3. La politica comun debe incluir como minimo:
|
|
- `timeout` explicito
|
|
- `PRAGMA foreign_keys = ON`
|
|
- `PRAGMA journal_mode = WAL`
|
|
- `PRAGMA busy_timeout`
|
|
- `row_factory = sqlite3.Row`
|
|
4. Reusar esa utilidad en todas las capas de persistencia con escritura que comparten el mismo DB.
|
|
5. Mantener compatibilidad con la ruta actual del storage y sin cambiar contratos HTTP.
|
|
6. Actualizar README/runbook backend con una nota breve sobre la politica SQLite usada por writers.
|
|
|
|
## Constraints
|
|
- No tocar frontend.
|
|
- No cambiar la semantica funcional de los endpoints.
|
|
- No cambiar el proveedor historico por defecto.
|
|
- No meter dependencias nuevas salvo necesidad extrema.
|
|
- Mantener la utilidad pequeña y facil de leer.
|
|
|
|
## Validation
|
|
- Todas las capas writer-capable relevantes comparten la misma politica SQLite.
|
|
- `python -m compileall app` pasa.
|
|
- Las CLIs principales siguen arrancando con `--help`.
|
|
- La repo queda consistente.
|
|
|
|
## Expected Files
|
|
- `backend/app/historical_storage.py`
|
|
- `backend/app/player_event_storage.py`
|
|
- `backend/app/rcon_historical_storage.py`
|
|
- un util compartido nuevo bajo `backend/app/` si hace falta
|
|
- `backend/README.md`
|