From 8e22074b9f76e38f1ed9db1c9967075f77bea674 Mon Sep 17 00:00:00 2001 From: gnuxie Date: Sun, 2 Feb 2025 16:31:04 +0000 Subject: [PATCH] Fix lack of error handling in parts of backing store. Errors propagating here could cause the bot to have only partially synced by propagating all the way up to the sync response handling in the bot-sdk. https://github.com/the-draupnir-project/Draupnir/issues/691. --- .../SqliteRoomStateBackingStore.ts | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/backingstore/better-sqlite3/SqliteRoomStateBackingStore.ts b/src/backingstore/better-sqlite3/SqliteRoomStateBackingStore.ts index 8770fc93..8585157c 100644 --- a/src/backingstore/better-sqlite3/SqliteRoomStateBackingStore.ts +++ b/src/backingstore/better-sqlite3/SqliteRoomStateBackingStore.ts @@ -67,7 +67,7 @@ export class SqliteRoomStateBackingStore this.ensureSchema(); } - public handleRevision( + private updateBackingStore( revision: RoomStateRevision, changes: StateChange[] ): void { @@ -102,9 +102,37 @@ export class SqliteRoomStateBackingStore }); const roomInfo = this.getRoomMeta(revision.room.toRoomIDOrAlias()); if (roomInfo === undefined) { - doCompleteWriteback(); + try { + doCompleteWriteback(); + } catch (e) { + log.error( + `Unable to create initial room state for ${revision.room.toPermalink()} into the room state backing store`, + e + ); + } } else { - replace(changes.map((change) => change.state)); + try { + replace(changes.map((change) => change.state)); + } catch (e) { + log.error( + `Unable to update the room state for ${revision.room.toPermalink()} as a result of ${changes.length} changes`, + e + ); + } + } + } + + public handleRevision( + revision: RoomStateRevision, + changes: StateChange[] + ): void { + try { + this.updateBackingStore(revision, changes); + } catch (e) { + log.error( + `Unable to update the backing store for revision of the room ${revision.room.toPermalink()}`, + e + ); } }