SQLite concurrency: cache=shared, no busy_timeout, no WAL, unbounded pool — concurrent writers get SQLITE_BUSY, deliveries stick pending #304
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
From audit #303 (unfit for purpose).
SQLite opened with
cache=shared, nobusy_timeout, no WAL, unboundeddatabase/sqlpool (internal/database/database.go:140,internal/database/webhook_db_manager.go:237). The ingest handler's write transaction (internal/handlers/webhook.go:223) races engine workers writing results/status to the same per-webhook file (internal/delivery/engine.go:761,:778): under any concurrency, senders get 500s fromSQLITE_BUSY/SQLITE_LOCKEDand deliveries stickpending(write errors only logged). No test exercises concurrent writers.Done: WAL +
busy_timeout(or serialized writes), bounded pool, nocache=shared; a test with concurrent ingest + engine writers passes; failed status writes are not silently logged away.Audit #303 read
main. PR #111'snextalready landed this via #256 (WAL, busy timeout,_txlock=immediate, nocache=shared, bounded pool, verified under concurrent load). Closes on merge of #111; other #303-derived issues (#305-#310) should be re-checked againstnextbefore dispatch.