Updated deprecated S3 media delete command.
This commit is contained in:
parent
6fcd31f035
commit
51a364b41d
58
src/media.js
58
src/media.js
|
@ -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}`);
|
||||||
|
|
Loading…
Reference in New Issue