fix(db): close SQLite connections explicitly to suppress ResourceWarning on Python 3.13
test / integration-firecracker (pull_request) Successful in 9s
test / integration-docker (pull_request) Successful in 9s
test / unit (pull_request) Successful in 33s
lint / lint (push) Successful in 46s
test / coverage (pull_request) Has been cancelled

`sqlite3.Connection.__exit__` only commits/rolls back a transaction — it
does not close the connection. Python 3.13 (the Nix env on the KVM
runner) emits `ResourceWarning: unclosed database` for every connection
GC'd without an explicit close, producing noisy output in the coverage job.

Add `DbStore._connection()`, a `contextmanager` that calls `self._connect()`,
wraps it in the existing transaction context manager, and closes the
connection in a `finally` block. Change all `with self._connect() as conn:`
call sites in `db_store.py`, `audit_store.py`, `queue_store.py`, and
`orchestrator/registry.py` to `with self._connection() as conn:`.
`_connect()` remains as the per-subclass hook (RegistryStore overrides
it to set `busy_timeout`); `_connection()` delegates to `self._connect()` so
the override is respected.
This commit is contained in:
2026-07-18 21:17:22 +00:00
parent 319cac85b8
commit e33cccfdde
4 changed files with 27 additions and 17 deletions
+2 -2
View File
@@ -42,7 +42,7 @@ class AuditStore(DbStore):
super().__init__(db_path or host_db_path(), migrations)
def write_audit_entry(self, entry: AuditEntry) -> Path:
with self._connect() as conn:
with self._connection() as conn:
conn.execute(
"""
INSERT INTO supervise_audit_entries (
@@ -66,7 +66,7 @@ class AuditStore(DbStore):
def read_audit_entries(self, component: str, slug: str) -> list[AuditEntry]:
if not self.db_path.is_file():
return []
with self._connect() as conn:
with self._connection() as conn:
rows = conn.execute(
"""
SELECT * FROM supervise_audit_entries