Exit as interrupted when Ctrl-C lands during a local index write (closes #301)
check / check (push) Canceled after 0s

Once the run's context is cancelled, database/sql rolls an open
transaction back itself, so the rollback in WithTx returned
sql.ErrTxDone. WithTx treated any rollback error as fatal and called
os.Exit(1): an interrupted backup printed "FATAL: failed to rollback
transaction", exited 1 instead of 130 and skipped its deferred cleanup.

WithTx now ignores sql.ErrTxDone from the rollback and returns the
body's error. A rollback that really fails is returned together with
the body's error instead of ending the process. On a panic the
rollback error is dropped and the panic carries on.

Model: opus-5-5
This commit is contained in:
2026-10-13 05:23:05 +00:00
parent 167c0a0746
commit b07dc44905
3 changed files with 80 additions and 9 deletions
+10
View File
@@ -22,6 +22,16 @@ the tag exists and is exercised; what is left is merging `next` to
# Completed Steps
- 2026-10-13: Made Ctrl-C or SIGTERM during a local index write end the
command as interrupted
([issue #301](https://git.eeqj.de/sneak/vaultik/issues/301)). Once the
run is cancelled, `database/sql` rolls an open transaction back itself,
so the rollback in `WithTx` failed with `sql.ErrTxDone` and the process
exited 1 with `FATAL: failed to rollback transaction`, skipping the
interrupted exit and message. That result is no longer an error, and a
rollback that does fail is returned with the transaction's error
instead of ending the process.
- 2026-10-13: Made `snapshot remove` fail for a snapshot that does not
exist ([issue #293](https://git.eeqj.de/sneak/vaultik/issues/293)).
The command never checked the ID: it reported the snapshot removed