From 366eb99573b2f182f0fed2d33136ccff5fb90454 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sun, 21 Apr 2024 10:42:34 +0100 Subject: store: database: Log when aborting transactions. Otherwise this has the effect of masking the backtrace/exception. * guix/store/database.scm (call-with-transaction): Log when aborting. Change-Id: Iee31905c4688dc62ef37a85b0208fd324ee67d70 --- guix/store/database.scm | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/guix/store/database.scm b/guix/store/database.scm index 8a3436368e..b6f87d710f 100644 --- a/guix/store/database.scm +++ b/guix/store/database.scm @@ -154,9 +154,17 @@ times. This may reduce contention for the database somewhat." (sqlite-exec db (if restartable? "begin;" "begin immediate;")) (catch #t (lambda () - (let-values ((result (proc))) - (sqlite-exec db "commit;") - (apply values result))) + (with-throw-handler #t + (lambda () + (call-with-values proc + (lambda vals + (sqlite-exec db "commit;") + (apply values vals)))) + (lambda (key args) + (simple-format + (current-error-port) + "transaction aborted: ~A: ~A\n" key args) + (backtrace)))) (lambda args ;; The roll back may or may not have occurred automatically when the ;; error was generated. If it has occurred, this does nothing but signal -- cgit v1.2.3