Updated deprecated S3 media delete command.

This commit is contained in:
DebaucheryLibrarian 2025-03-04 04:05:43 +01:00
parent 6fcd31f035
commit 51a364b41d
1 changed files with 34 additions and 24 deletions

View File

@ -17,7 +17,7 @@ const { format } = require('date-fns');
const taskQueue = require('promise-task-queue'); const taskQueue = require('promise-task-queue');
const { Upload } = require('@aws-sdk/lib-storage'); const { Upload } = require('@aws-sdk/lib-storage');
const { S3Client } = require('@aws-sdk/client-s3'); const { S3Client, DeleteObjectsCommand } = require('@aws-sdk/client-s3');
const logger = require('./logger')(__filename); const logger = require('./logger')(__filename);
const argv = require('./argv'); const argv = require('./argv');
@ -1000,32 +1000,41 @@ async function associateAvatars(profiles) {
} }
async function deleteS3Objects(allMedia) { async function deleteS3Objects(allMedia) {
const statuses = await chunk(allMedia).reduce(async (chain, media) => { try {
const acc = await chain; const statuses = await chunk(allMedia).reduce(async (chain, media) => {
const acc = await chain;
const objects = media const objects = media
.map((item) => [ .map((item) => [
{ Key: item.path }, { Key: item.path },
{ Key: item.thumbnail }, { Key: item.thumbnail },
{ Key: item.lazy }, { Key: item.lazy },
]) ])
.flat() .flat()
.filter((item) => item.Key); .filter((item) => item.Key);
const status = await s3.deleteObjects({ const deleteCommand = new DeleteObjectsCommand({
Bucket: config.s3.bucket, Bucket: config.s3.bucket,
Delete: { Delete: {
Objects: objects, Objects: objects,
Quiet: false, Quiet: false,
}, },
});
const status = await s3.send(deleteCommand);
logger.info(`Removed ${status.Deleted.length} media files from S3 bucket '${config.s3.bucket}', ${status.Errors.length} errors`);
return acc.concat(status);
}, Promise.resolve()).catch((error) => {
console.log(error);
}); });
logger.info(`Removed ${status.Deleted.length} media files from S3 bucket '${config.s3.bucket}', ${status.Errors.length} errors`); return statuses;
} catch (error) {
return acc.concat(status); console.log(error);
}); throw error;
}
return statuses;
} }
async function flushOrphanedMedia(stage = 1) { async function flushOrphanedMedia(stage = 1) {
@ -1060,7 +1069,8 @@ async function flushOrphanedMedia(stage = 1) {
) )
.whereRaw('associations.media_id = media.id'), .whereRaw('associations.media_id = media.id'),
) )
.limit(config.media.flushWindow); // .limit(config.media.flushWindow);
.limit(1);
// .delete(); // .delete();
logger.info(`Found ${orphanedMedia.length} orphaned media entries in stage ${stage}`); logger.info(`Found ${orphanedMedia.length} orphaned media entries in stage ${stage}`);