Avoid deadlock when processing deletes and edits concurrently
Co-authored-by: trevor-signal <131492920+trevor-signal@users.noreply.github.com>
This commit is contained in:
parent
1c247b36ea
commit
71f2cf1d25
2 changed files with 28 additions and 5 deletions
|
@ -8766,8 +8766,9 @@ function saveEditedMessages(
|
|||
alreadyInTransaction: true,
|
||||
});
|
||||
|
||||
for (const { conversationId, messageId, readStatus, sentAt } of history) {
|
||||
const [query, params] = sql`
|
||||
try {
|
||||
for (const { conversationId, messageId, readStatus, sentAt } of history) {
|
||||
const [query, params] = sql`
|
||||
INSERT INTO edited_messages (
|
||||
conversationId,
|
||||
messageId,
|
||||
|
@ -8781,7 +8782,29 @@ function saveEditedMessages(
|
|||
);
|
||||
`;
|
||||
|
||||
db.prepare(query).run(params);
|
||||
db.prepare(query).run(params);
|
||||
}
|
||||
} catch (e) {
|
||||
const [messageExistsQuery, messageExistsParams] = sql`
|
||||
SELECT EXISTS(
|
||||
SELECT 1 FROM messages
|
||||
WHERE messages.id = ${mainMessage.id}
|
||||
);
|
||||
`;
|
||||
const messageExists = db
|
||||
.prepare(messageExistsQuery, {
|
||||
pluck: true,
|
||||
})
|
||||
.get<number>(messageExistsParams);
|
||||
|
||||
if (messageExists !== 1) {
|
||||
logger.warn(
|
||||
'saveEditedMessages: save failed because message does not exist'
|
||||
);
|
||||
} else {
|
||||
// Some other, unknown error
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue