mirror of
https://github.com/zulip/zulip.git
synced 2025-11-10 00:46:03 +00:00
message delete: Select Message FOR UPDATE when archiving.
Further commits will start locking the message rows while adding related fields like reactions or submessages, to handle races caused by deleting the message itself at the same time. The message locking implemented then will create a possibility of deadlocks, where the related field transaction holds a lock on the message row, and the message-delete transaction holds a lock on the database row of the related field (which will also need to be deleted when the message is deleted), and both transactions wait for each other. To prevent such a deadlock, we lock the message itself while it is being deleted, so that the message-delete transaction will have to wait till the other transaction (which is about to delete the related field, and also holds a lock on the message row) commits. https://chat.zulip.org/#narrow/near/1185943 has more details.
This commit is contained in:
committed by
Tim Abbott
parent
1a9f385e17
commit
5f4113cf60
@@ -6156,7 +6156,7 @@ def do_delete_messages(realm: Realm, messages: Iterable[Message]) -> None:
|
||||
move_messages_to_archive(message_ids, realm=realm, chunk_size=archiving_chunk_size)
|
||||
|
||||
event["message_type"] = message_type
|
||||
send_event(realm, event, users_to_notify)
|
||||
transaction.on_commit(lambda: send_event(realm, event, users_to_notify))
|
||||
|
||||
|
||||
def do_delete_messages_by_sender(user: UserProfile) -> None:
|
||||
|
||||
Reference in New Issue
Block a user