From aefcf3c8bc52b1d80e37a54ad0e7ae496aa7310f Mon Sep 17 00:00:00 2001 From: Miguel Serrano Date: Thu, 29 Sep 2022 19:57:12 +0200 Subject: [PATCH] Merge pull request #9795 from overleaf/msm-audit-log-migration-fix [web/scripts] Fix audit log migration script GitOrigin-RevId: 55c90520240bef92a4be1925809cac178c8b3ee9 --- services/web/scripts/migrate_audit_logs.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/services/web/scripts/migrate_audit_logs.js b/services/web/scripts/migrate_audit_logs.js index 4b205b6bac..0ce621558d 100644 --- a/services/web/scripts/migrate_audit_logs.js +++ b/services/web/scripts/migrate_audit_logs.js @@ -44,6 +44,18 @@ async function main(options) { }, { _id: 1, auditLog: 1 } ) + + // most projects are processed after its owner has been processed, but only those + // users with an existing `auditLog` have been taken into consideration, leaving + // some projects orphan. This batched update processes all remaining projects. + await batchedUpdate( + 'projects', + { auditLog: { $exists: true } }, + async (x, projects) => { + await processProjectsBatch(projects, options) + }, + { _id: 1, auditLog: 1 } + ) } } @@ -70,6 +82,16 @@ async function processUser(user, options) { projects.forEach(project => processProject(project, options)) } +async function processProjectsBatch(projects, options) { + await promiseMapWithLimit( + options.writeConcurrency, + projects, + async project => { + await processProject(project, options) + } + ) +} + async function processProject(project, options) { const entries = project.auditLog.map(log => ({ ...log,