From 16fb5dd09c562b46a6abb4fd4ddb076d01fbeca9 Mon Sep 17 00:00:00 2001 From: Richard R Date: Sun, 7 Jun 2026 03:40:20 -0600 Subject: [PATCH] fix(documents): improve rollback error handling in deleteOwnedDocument Enhance error handling during document deletion by ensuring that failures in restoring document ownership do not obscure the original error. Log degraded events when ownership restoration fails after a deletion error, providing additional context for debugging and monitoring. This change improves reliability and traceability of document deletion operations. --- src/lib/server/documents/delete-owned.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/lib/server/documents/delete-owned.ts b/src/lib/server/documents/delete-owned.ts index 302a15c..0aac757 100644 --- a/src/lib/server/documents/delete-owned.ts +++ b/src/lib/server/documents/delete-owned.ts @@ -7,6 +7,8 @@ import { } from '@/lib/server/documents/previews'; import { deleteDocumentTtsSegmentCache } from '@/lib/server/tts/segments-cache'; import { withDocumentLock } from '@/lib/server/documents/document-lock'; +import { hashForLog, serverLogger } from '@/lib/server/logger'; +import { logDegraded } from '@/lib/server/errors/logging'; type DocumentRow = typeof documents.$inferSelect; @@ -66,7 +68,21 @@ export async function deleteOwnedDocument(input: { } } } catch (error) { - await restoreDocumentOwnership(conn, removed); + // Best-effort rollback; never let a restore failure mask the original error. + try { + await restoreDocumentOwnership(conn, removed); + } catch (restoreError) { + logDegraded(serverLogger, { + event: 'documents.delete_owned.restore_ownership.failed', + msg: 'Failed to restore document ownership after deletion failure', + step: 'restore_document_ownership', + context: { + documentId: input.documentId, + userIdHash: hashForLog(input.userId), + }, + error: restoreError, + }); + } throw error; }