Merge pull request #25486 from overleaf/bg-add-logging-when-projects-are-expired

add logging when projects are expired

GitOrigin-RevId: 5107f9f3d2f35aac1ee3f02a9a92c5f625d47f7a
This commit is contained in:
Brian Gough
2025-06-06 08:05:33 +00:00
committed by Copybot
parent cc5b0fed07
commit aee99a16de
@@ -106,8 +106,24 @@ async function expireDeletedProjectsAfterDuration() {
deletedProject => deletedProject.deleterData.deletedProjectId
)
)
for (const projectId of projectIds) {
await expireDeletedProject(projectId)
logger.info(
{ projectCount: projectIds.length },
'expiring batch of deleted projects'
)
try {
for (const projectId of projectIds) {
await expireDeletedProject(projectId)
}
logger.info(
{ projectCount: projectIds.length },
'batch of deleted projects expired successfully'
)
} catch (error) {
logger.warn(
{ error },
'something went wrong expiring batch of deleted projects'
)
throw error
}
}
@@ -276,12 +292,15 @@ async function deleteProject(projectId, options = {}) {
)
await Project.deleteOne({ _id: projectId }).exec()
logger.info(
{ projectId, userId: project.owner_ref },
'successfully deleted project'
)
} catch (err) {
logger.warn({ err }, 'problem deleting project')
throw err
}
logger.debug({ projectId }, 'successfully deleted project')
}
async function undeleteProject(projectId, options = {}) {
@@ -335,16 +354,22 @@ async function undeleteProject(projectId, options = {}) {
async function expireDeletedProject(projectId) {
try {
logger.info({ projectId }, 'expiring deleted project')
const activeProject = await Project.findById(projectId).exec()
if (activeProject) {
// That project is active. The deleted project record might be there
// because of an incomplete delete or undelete operation. Clean it up and
// return.
logger.info(
{ projectId },
'deleted project record found but project is active'
)
await DeletedProject.deleteOne({
'deleterData.deletedProjectId': projectId,
})
return
}
const deletedProject = await DeletedProject.findOne({
'deleterData.deletedProjectId': projectId,
}).exec()
@@ -360,12 +385,14 @@ async function expireDeletedProject(projectId) {
)
return
}
const userId = deleteProject.deletedProjectOwnerId
const historyId =
deletedProject.project.overleaf &&
deletedProject.project.overleaf.history &&
deletedProject.project.overleaf.history.id
logger.info({ projectId, userId }, 'destroying expired project data')
await Promise.all([
DocstoreManager.promises.destroyProject(deletedProject.project._id),
HistoryManager.promises.deleteProject(
@@ -378,6 +405,10 @@ async function expireDeletedProject(projectId) {
Modules.promises.hooks.fire('projectExpired', deletedProject.project._id),
])
logger.info(
{ projectId, userId },
'redacting PII from the deleted project record'
)
await DeletedProject.updateOne(
{
_id: deletedProject._id,
@@ -389,6 +420,7 @@ async function expireDeletedProject(projectId) {
},
}
).exec()
logger.info({ projectId, userId }, 'expired deleted project successfully')
} catch (error) {
logger.warn({ projectId, error }, 'error expiring deleted project')
throw error