[document-updater] remove_deleted_docs: add option to run on single doc (#31595)

* [document-updater] remove_deleted_docs: use promisified RedisManager

* [document-updater] remove_deleted_docs: log all getDoc details

* [document-updater] remove_deleted_docs: add option to run on single doc

GitOrigin-RevId: e2b73defd1d99d14578ce573d0e05c31073ab739
This commit is contained in:
Jakob Ackermann
2026-02-17 14:46:46 +01:00
committed by Copybot
parent 97c4c550d7
commit 5b5e5a3d51

View File

@@ -7,11 +7,6 @@ const keys = Settings.redis.documentupdater.key_schema
const ProjectFlusher = require('../app/js/ProjectFlusher') const ProjectFlusher = require('../app/js/ProjectFlusher')
const RedisManager = require('../app/js/RedisManager') const RedisManager = require('../app/js/RedisManager')
const { mongoClient, db, ObjectId } = require('../app/js/mongodb') const { mongoClient, db, ObjectId } = require('../app/js/mongodb')
const util = require('node:util')
const getDoc = util.promisify((projectId, docId, cb) =>
RedisManager.getDoc(projectId, docId, (err, ...args) => cb(err, args))
)
const removeDocFromMemory = util.promisify(RedisManager.removeDocFromMemory)
const summary = { totalDocs: 0, deletedDocs: 0, skippedDocs: 0 } const summary = { totalDocs: 0, deletedDocs: 0, skippedDocs: 0 }
@@ -33,8 +28,8 @@ async function removeDeletedDocs(dockeys, options) {
async function removeDeletedDoc(docId, options) { async function removeDeletedDoc(docId, options) {
const projectId = await rclient.get(keys.projectKey({ doc_id: docId })) const projectId = await rclient.get(keys.projectKey({ doc_id: docId }))
const [ const {
docLines, lines: docLines,
version, version,
ranges, ranges,
pathname, pathname,
@@ -42,7 +37,9 @@ async function removeDeletedDoc(docId, options) {
unflushedTime, unflushedTime,
lastUpdatedAt, lastUpdatedAt,
lastUpdatedBy, lastUpdatedBy,
] = await getDoc(projectId, docId) historyRangesSupport,
resolvedCommentIds,
} = await RedisManager.promises.getDoc(projectId, docId)
const project = await db.projects.findOne({ _id: new ObjectId(projectId) }) const project = await db.projects.findOne({ _id: new ObjectId(projectId) })
@@ -64,6 +61,8 @@ async function removeDeletedDoc(docId, options) {
unflushedTime, unflushedTime,
lastUpdatedAt, lastUpdatedAt,
lastUpdatedBy, lastUpdatedBy,
historyRangesSupport,
resolvedCommentIds,
}, },
'refusing to delete doc, project contains docId' 'refusing to delete doc, project contains docId'
) )
@@ -82,6 +81,8 @@ async function removeDeletedDoc(docId, options) {
unflushedTime, unflushedTime,
lastUpdatedAt, lastUpdatedAt,
lastUpdatedBy, lastUpdatedBy,
historyRangesSupport,
resolvedCommentIds,
}, },
'refusing to delete doc, project still exists' 'refusing to delete doc, project still exists'
) )
@@ -105,6 +106,8 @@ async function removeDeletedDoc(docId, options) {
unflushedTime, unflushedTime,
lastUpdatedAt, lastUpdatedAt,
lastUpdatedBy, lastUpdatedBy,
historyRangesSupport,
resolvedCommentIds,
status, status,
summary, summary,
}, },
@@ -112,7 +115,6 @@ async function removeDeletedDoc(docId, options) {
) )
return return
} }
removeDocFromMemory(projectId, docId)
logger.info( logger.info(
{ {
projectId, projectId,
@@ -125,11 +127,14 @@ async function removeDeletedDoc(docId, options) {
unflushedTime, unflushedTime,
lastUpdatedAt, lastUpdatedAt,
lastUpdatedBy, lastUpdatedBy,
historyRangesSupport,
resolvedCommentIds,
status, status,
summary, summary,
}, },
'removed doc from redis' 'removing doc from redis'
) )
await RedisManager.promises.removeDocFromMemory(projectId, docId)
} }
async function findAndProcessDocs(options) { async function findAndProcessDocs(options) {
@@ -148,8 +153,26 @@ async function findAndProcessDocs(options) {
} while (cursor !== '0') } while (cursor !== '0')
} }
findAndProcessDocs({ limit: 1000, dryRun: process.env.DRY_RUN !== 'false' }) async function main() {
.then(result => { const options = {
limit: 1000,
dryRun: process.env.DRY_RUN !== 'false',
}
if (process.argv.length > 2) {
const docId = process.argv[process.argv.length - 1]
if (!ObjectId.isValid(docId)) {
throw new Error(
'bad docId: usage: $ node scripts/remove_deleted_docs.js [DOC_ID]'
)
}
await removeDeletedDoc(docId, options)
} else {
await findAndProcessDocs(options)
}
}
main()
.then(() => {
rclient.quit() rclient.quit()
mongoClient.close() mongoClient.close()
console.log('DONE') console.log('DONE')