feat: upgrade script to clean up leftover :thumb zsets
parent
0f788b8eaa
commit
0ac2843587
@ -0,0 +1,51 @@
|
||||
'use strict';
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs').promises;
|
||||
const nconf = require('nconf');
|
||||
|
||||
const db = require('../../database');
|
||||
const batch = require('../../batch');
|
||||
const file = require('../../file');
|
||||
|
||||
module.exports = {
|
||||
name: 'Clean up leftover topic thumb sorted sets and files for since-purged topics',
|
||||
timestamp: Date.UTC(2022, 1, 7),
|
||||
method: async function () {
|
||||
const { progress } = this;
|
||||
const nextTid = await db.getObjectField('global', 'nextTid');
|
||||
const tids = [];
|
||||
for (let x = 1; x < nextTid; x++) {
|
||||
tids.push(x);
|
||||
}
|
||||
|
||||
const purgedTids = (await db.isSortedSetMembers('topics:tid', tids))
|
||||
.map((exists, idx) => (exists ? false : tids[idx]))
|
||||
.filter(Boolean);
|
||||
|
||||
const affectedTids = (await db.exists(purgedTids.map(tid => `topic:${tid}:thumbs`)))
|
||||
.map((exists, idx) => (exists ? purgedTids[idx] : false))
|
||||
.filter(Boolean);
|
||||
|
||||
progress.total = affectedTids.length;
|
||||
|
||||
await batch.processArray(affectedTids, async (tids) => {
|
||||
await Promise.all(tids.map(async (tid) => {
|
||||
const relativePaths = await db.getSortedSetMembers(`topic:${tid}:thumbs`);
|
||||
const absolutePaths = relativePaths.map(relativePath => path.join(nconf.get('upload_path'), relativePath));
|
||||
|
||||
await Promise.all(absolutePaths.map(async (absolutePath) => {
|
||||
const exists = await file.exists(absolutePath);
|
||||
if (exists) {
|
||||
await fs.unlink(absolutePath);
|
||||
}
|
||||
}));
|
||||
await db.delete(`topic:${tid}:thumbs`);
|
||||
progress.incr();
|
||||
}));
|
||||
}, {
|
||||
progress,
|
||||
batch: 100,
|
||||
});
|
||||
},
|
||||
};
|
Loading…
Reference in New Issue