Skip to content

Commit

Permalink
fix: upgrade script, get rid of nested processSortedSet
Browse files Browse the repository at this point in the history
  • Loading branch information
barisusakli committed Aug 20, 2023
1 parent 38149a5 commit 78a7cfe
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 66 deletions.
58 changes: 29 additions & 29 deletions src/upgrades/3.3.0/chat_message_mids.js
Expand Up @@ -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 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,
const allRoomIds = await db.getSortedSetRange(`chat:rooms`, 0, -1);

progress.total = allRoomIds.length;

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);
},
Expand Down
71 changes: 34 additions & 37 deletions src/upgrades/3.3.0/chat_room_refactor.js
Expand Up @@ -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);
}
});
messageData = messageData.filter(Boolean);
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 }]
);
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,
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;
});
// 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);
}, {
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);
}
}
}, {
Expand Down

0 comments on commit 78a7cfe

Please sign in to comment.