From ed688cce4e1d47f9171db6bb43b91b6b714cb689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Alby?= Date: Tue, 26 Apr 2022 17:19:18 +0200 Subject: [PATCH] Merge pull request #7748 from overleaf/jpa-broad-schema [misc] handle an old project archiver key schema when deleting projects GitOrigin-RevId: 2da514c0533127f6d9f9d25cac62102c852ac2a2 --- .../delete_orphaned_project_archives.js | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/services/web/scripts/delete_orphaned_project_archives.js b/services/web/scripts/delete_orphaned_project_archives.js index 3f7892feb4..9eea5e6380 100644 --- a/services/web/scripts/delete_orphaned_project_archives.js +++ b/services/web/scripts/delete_orphaned_project_archives.js @@ -30,7 +30,7 @@ async function main() { let pageToken = '' let startOffset = START_OFFSET while (pageToken !== undefined) { - const { nextPageToken, projectIds } = await request({ + const { nextPageToken, entries } = await request({ url: `${Settings.apis.project_archiver.url}/project/list`, json: true, qs: { @@ -41,8 +41,8 @@ async function main() { pageToken = nextPageToken startOffset = undefined - hardDeleted += await processBatch(projectIds.map(id => ObjectId(id))) - processed += projectIds.length + hardDeleted += await processBatch(entries) + processed += entries.length console.log( 'processed:', processed.toString().padStart(10, '0'), @@ -51,11 +51,20 @@ async function main() { 'nextPageToken:', nextPageToken, 'START_OFFSET:', - projectIds.pop() + entries.pop()?.prefix ) } } -async function processBatch(projectIds) { +async function processBatch(entries) { + const projectIdToPrefix = new Map() + for (const { prefix, projectId } of entries) { + const prefixes = projectIdToPrefix.get(projectId) || [] + prefixes.push(prefix) + projectIdToPrefix.set(projectId, prefixes) + } + const projectIds = Array.from(projectIdToPrefix.keys()).map(id => + ObjectId(id) + ) const projectsWithOrphanedArchive = await getHardDeletedProjectIds({ projectIds, READ_CONCURRENCY_PRIMARY, @@ -64,21 +73,23 @@ async function processBatch(projectIds) { await promiseMapWithLimit( WRITE_CONCURRENCY, - projectsWithOrphanedArchive, + projectsWithOrphanedArchive.flatMap(id => + projectIdToPrefix.get(id.toString()) + ), hardDeleteProjectArchiverData ) return projectsWithOrphanedArchive.length } -async function hardDeleteProjectArchiverData(projectId) { - console.log(`Destroying hard deleted project archive for ${projectId}`) +async function hardDeleteProjectArchiverData(prefix) { + console.log(`Destroying hard deleted project archive at '${prefix}/'`) if (DRY_RUN) return const ok = await TpdsUpdateSender.promises.deleteProject({ - project_id: projectId, + project_id: encodeURIComponent(prefix), }) if (!ok) { - throw new Error(`deletion failed for ${projectId}, check logs`) + throw new Error(`deletion failed for '${prefix}/', check logs`) } }