Fix race condition of lastMessage set (#14041)

pull/14048/head
Rodrigo Nascimento 6 years ago committed by GitHub
parent 34e1e0c0f0
commit e4b50117d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      app/lib/server/lib/notifyUsersOnMessage.js
  2. 2
      app/models/server/models/Rooms.js
  3. 4
      app/reactions/server/setReaction.js
  4. 2
      mocha.opts

@ -92,9 +92,6 @@ export function updateUsersSubscriptions(message, room, users) {
}
}
// Update all the room activity tracker fields
// This method take so long to execute on gient rooms cuz it will trugger the cache rebuild for the releations of that room
Rooms.incMsgCountAndSetLastMessageById(message.rid, 1, message.ts, settings.get('Store_Last_Message') && message);
// Update all other subscriptions to alert their owners but witout incrementing
// the unread counter, as it is only for mentions and direct messages
// We now set alert and open properties in two separate update commands. This proved to be more efficient on MongoDB - because it uses a more efficient index.
@ -122,6 +119,9 @@ function notifyUsersOnMessage(message, room) {
return message;
}
// Update all the room activity tracker fields
Rooms.incMsgCountAndSetLastMessageById(message.rid, 1, message.ts, settings.get('Store_Last_Message') && message);
if (message.tmid) {
return message;
}

@ -438,7 +438,7 @@ export class Rooms extends Base {
}
setReactionsInLastMessage(roomId, lastMessage) {
return this.update({ _id: roomId }, { $set: { lastMessage } });
return this.update({ _id: roomId }, { $set: { 'lastMessage.reactions': lastMessage.reactions } });
}
unsetReactionsInLastMessage(roomId) {

@ -56,10 +56,10 @@ export function setReaction(room, user, message, reaction, shouldReact) {
callbacks.run('unsetReaction', message._id, reaction);
callbacks.run('afterUnsetReaction', message, { user, reaction, shouldReact });
} else {
Messages.setReactions(message._id, message.reactions);
if (isTheLastMessage(room, message)) {
Rooms.setReactionsInLastMessage(room._id, message);
}
Messages.setReactions(message._id, message.reactions);
callbacks.run('setReaction', message._id, reaction);
callbacks.run('afterSetReaction', message, { user, reaction, shouldReact });
}
@ -73,10 +73,10 @@ export function setReaction(room, user, message, reaction, shouldReact) {
};
}
message.reactions[reaction].usernames.push(user.username);
Messages.setReactions(message._id, message.reactions);
if (isTheLastMessage(room, message)) {
Rooms.setReactionsInLastMessage(room._id, message);
}
Messages.setReactions(message._id, message.reactions);
callbacks.run('setReaction', message._id, reaction);
callbacks.run('afterSetReaction', message, { user, reaction, shouldReact });
}

@ -1,3 +1,3 @@
--compilers js:babel-mocha-es6-compiler
--require babel-mocha-es6-compiler
--reporter spec
--ui bdd

Loading…
Cancel
Save