diff --git a/src/upgrades/3.3.0/chat_message_mids.js b/src/upgrades/3.3.0/chat_message_mids.js index 5f97a85121..daecba307c 100644 --- a/src/upgrades/3.3.0/chat_message_mids.js +++ b/src/upgrades/3.3.0/chat_message_mids.js @@ -11,36 +11,36 @@ module.exports = { method: async function () { const { progress } = this; - progress.total = await db.sortedSetCard(`chat:rooms`); - await batch.processSortedSet(`chat:rooms`, async (roomIds) => { - progress.incr(roomIds.length); - for (const roomId of roomIds) { - await batch.processSortedSet(`chat:room:${roomId}:mids`, async (mids) => { - let messageData = await db.getObjects(mids.map(mid => `message:${mid}`)); - messageData.forEach((m, idx) => { - if (m) { - m.mid = parseInt(mids[idx], 10); - } - }); - messageData = messageData.filter(Boolean); + const allRoomIds = await db.getSortedSetRange(`chat:rooms`, 0, -1); - const bulkSet = messageData.map( - msg => [`message:${msg.mid}`, { mid: msg.mid }] - ); + progress.total = allRoomIds.length; - await db.setObjectBulk(bulkSet); - await db.sortedSetAdd( - 'messages:mid', - messageData.map(msg => msg.timestamp), - messageData.map(msg => msg.mid) - ); - }, { - batch: 500, + for (const roomId of allRoomIds) { + await batch.processSortedSet(`chat:room:${roomId}:mids`, async (mids) => { + let messageData = await db.getObjects(mids.map(mid => `message:${mid}`)); + messageData.forEach((m, idx) => { + if (m) { + m.mid = parseInt(mids[idx], 10); + } }); - } - }, { - batch: 500, - }); + messageData = messageData.filter(Boolean); + + const bulkSet = messageData.map( + msg => [`message:${msg.mid}`, { mid: msg.mid }] + ); + + await db.setObjectBulk(bulkSet); + await db.sortedSetAdd( + 'messages:mid', + messageData.map(msg => msg.timestamp), + messageData.map(msg => msg.mid) + ); + }, { + batch: 500, + }); + progress.incr(1); + } + const count = await db.sortedSetCard(`messages:mid`); await db.setObjectField('global', 'messageCount', count); }, diff --git a/src/upgrades/3.3.0/chat_room_refactor.js b/src/upgrades/3.3.0/chat_room_refactor.js index fbf54418c3..8ae39ee1dc 100644 --- a/src/upgrades/3.3.0/chat_room_refactor.js +++ b/src/upgrades/3.3.0/chat_room_refactor.js @@ -38,47 +38,44 @@ module.exports = { if (roomData) { const midsSeen = {}; const { roomId } = roomData; - await batch.processSortedSet(`chat:room:${roomId}:uids`, async (uids) => { - for (const uid of uids) { - await batch.processSortedSet(`uid:${uid}:chat:room:${roomId}:mids`, async (mids) => { - const uniqMids = mids.filter(mid => !midsSeen.hasOwnProperty(mid)); - if (!uniqMids.length) { - return; + const uids = await db.getSortedSetRange(`chat:room:${roomId}:uids`, 0, -1); + for (const uid of uids) { + await batch.processSortedSet(`uid:${uid}:chat:room:${roomId}:mids`, async (mids) => { + const uniqMids = mids.filter(mid => !midsSeen.hasOwnProperty(mid)); + if (!uniqMids.length) { + return; + } + + let messageData = await db.getObjects(uniqMids.map(mid => `message:${mid}`)); + messageData.forEach((m, idx) => { + if (m) { + m.mid = parseInt(uniqMids[idx], 10); } - - let messageData = await db.getObjects(uniqMids.map(mid => `message:${mid}`)); - messageData.forEach((m, idx) => { - if (m) { - m.mid = parseInt(uniqMids[idx], 10); - } - }); - messageData = messageData.filter(Boolean); - - const bulkSet = messageData.map( - msg => [`message:${msg.mid}`, { roomId: roomId }] - ); - - await db.setObjectBulk(bulkSet); - await db.sortedSetAdd( - `chat:room:${roomId}:mids`, - messageData.map(m => m.timestamp), - messageData.map(m => m.mid), - ); - uniqMids.forEach((mid) => { - midsSeen[mid] = 1; - }); - }, { - batch: 500, }); - // eslint-disable-next-line no-await-in-loop - await db.deleteAll(`uid:${uid}:chat:room:${roomId}:mids`); - } - progress.incr(uids.length); - }, { - batch: 500, - }); - const userCount = await db.sortedSetCard(`chat:room:${roomId}:uids`); - await db.setObjectField(`chat:room:${roomId}`, 'userCount', userCount); + messageData = messageData.filter(Boolean); + + const bulkSet = messageData.map( + msg => [`message:${msg.mid}`, { roomId: roomId }] + ); + + await db.setObjectBulk(bulkSet); + await db.sortedSetAdd( + `chat:room:${roomId}:mids`, + messageData.map(m => m.timestamp), + messageData.map(m => m.mid), + ); + uniqMids.forEach((mid) => { + midsSeen[mid] = 1; + }); + }, { + batch: 500, + }); + // eslint-disable-next-line no-await-in-loop + await db.deleteAll(`uid:${uid}:chat:room:${roomId}:mids`); + progress.incr(1); + } + + await db.setObjectField(`chat:room:${roomId}`, 'userCount', uids.length); } } }, {