Merge branch 'master' into develop
commit
dbc84f7571
@ -0,0 +1,46 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
|
const db = require('../../database');
|
||||||
|
const batch = require('../../batch');
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'Fix user email sorted sets',
|
||||||
|
timestamp: Date.UTC(2023, 1, 4),
|
||||||
|
method: async function () {
|
||||||
|
const { progress } = this;
|
||||||
|
const bulkRemove = [];
|
||||||
|
await batch.processSortedSet('email:uid', async (data) => {
|
||||||
|
progress.incr(data.length);
|
||||||
|
const usersData = await db.getObjects(data.map(d => `user:${d.score}`));
|
||||||
|
data.forEach((emailData, index) => {
|
||||||
|
const { score: uid, value: email } = emailData;
|
||||||
|
const userData = usersData[index];
|
||||||
|
// user no longer exists or doesn't have email set in user hash
|
||||||
|
// remove the email/uid pair from email:uid, email:sorted
|
||||||
|
if (!userData || !userData.email) {
|
||||||
|
bulkRemove.push(['email:uid', email]);
|
||||||
|
bulkRemove.push(['email:sorted', `${email.toLowerCase()}:${uid}`]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// user has email but doesn't match whats stored in user hash, gh#11259
|
||||||
|
if (userData.email && userData.email.toLowerCase() !== email.toLowerCase()) {
|
||||||
|
bulkRemove.push(['email:uid', email]);
|
||||||
|
bulkRemove.push(['email:sorted', `${email.toLowerCase()}:${uid}`]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, {
|
||||||
|
batch: 500,
|
||||||
|
withScores: true,
|
||||||
|
progress: progress,
|
||||||
|
});
|
||||||
|
|
||||||
|
await batch.processArray(bulkRemove, async (bulk) => {
|
||||||
|
await db.sortedSetRemoveBulk(bulk);
|
||||||
|
}, {
|
||||||
|
batch: 500,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
Loading…
Reference in New Issue