Improve message migration error handling
This commit is contained in:
parent
1620ccf3ab
commit
aac94b0217
5 changed files with 163 additions and 33 deletions
|
@ -438,6 +438,7 @@ export const DataWriter: ServerWritableInterface = {
|
|||
|
||||
saveMessage,
|
||||
saveMessages,
|
||||
saveMessagesIndividually,
|
||||
removeMessage,
|
||||
removeMessages,
|
||||
markReactionAsRead,
|
||||
|
@ -2208,6 +2209,7 @@ export function saveMessage(
|
|||
ourAci: AciString;
|
||||
}
|
||||
): string {
|
||||
// NB: `saveMessagesIndividually` relies on `saveMessage` being atomic
|
||||
const { alreadyInTransaction, forceSave, jobToInsert, ourAci } = options;
|
||||
|
||||
if (!alreadyInTransaction) {
|
||||
|
@ -2435,6 +2437,31 @@ function saveMessages(
|
|||
})();
|
||||
}
|
||||
|
||||
function saveMessagesIndividually(
|
||||
db: WritableDB,
|
||||
arrayOfMessages: ReadonlyArray<ReadonlyDeep<MessageType>>,
|
||||
options: { forceSave?: boolean; ourAci: AciString }
|
||||
): { failedIndices: Array<number> } {
|
||||
return db.transaction(() => {
|
||||
const failedIndices: Array<number> = [];
|
||||
arrayOfMessages.forEach((message, index) => {
|
||||
try {
|
||||
saveMessage(db, message, {
|
||||
...options,
|
||||
alreadyInTransaction: true,
|
||||
});
|
||||
} catch (e) {
|
||||
logger.error(
|
||||
'saveMessagesIndividually: failed to save message',
|
||||
Errors.toLogFormat(e)
|
||||
);
|
||||
failedIndices.push(index);
|
||||
}
|
||||
});
|
||||
return { failedIndices };
|
||||
})();
|
||||
}
|
||||
|
||||
function removeMessage(db: WritableDB, id: string): void {
|
||||
db.prepare<Query>('DELETE FROM messages WHERE id = $id;').run({ id });
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue