[web] remove deledFiles collection (#25750)
* [history-v1] remove processing of deleted files when back-filling hashes * [web] remove deledFiles collection GitOrigin-RevId: 7c080e564f7d7acb33ebe7ebe012f415a847d0df
This commit is contained in:
@@ -324,19 +324,6 @@ async function undeleteProject(projectId, options = {}) {
|
||||
})
|
||||
restored.deletedDocs = []
|
||||
}
|
||||
if (restored.deletedFiles && restored.deletedFiles.length > 0) {
|
||||
filterDuplicateDeletedFilesInPlace(restored)
|
||||
const deletedFiles = restored.deletedFiles.map(file => {
|
||||
// break free from the model
|
||||
file = file.toObject()
|
||||
|
||||
// add projectId
|
||||
file.projectId = projectId
|
||||
return file
|
||||
})
|
||||
await db.deletedFiles.insertMany(deletedFiles)
|
||||
restored.deletedFiles = []
|
||||
}
|
||||
|
||||
// we can't use Mongoose to re-insert the project, as it won't
|
||||
// create a new document with an _id already specified. We need to
|
||||
@@ -388,7 +375,6 @@ async function expireDeletedProject(projectId) {
|
||||
),
|
||||
FilestoreHandler.promises.deleteProject(deletedProject.project._id),
|
||||
ChatApiHandler.promises.destroyProject(deletedProject.project._id),
|
||||
hardDeleteDeletedFiles(deletedProject.project._id),
|
||||
ProjectAuditLogEntry.deleteMany({ projectId }),
|
||||
Modules.promises.hooks.fire('projectExpired', deletedProject.project._id),
|
||||
])
|
||||
@@ -409,31 +395,3 @@ async function expireDeletedProject(projectId) {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
function filterDuplicateDeletedFilesInPlace(project) {
|
||||
const fileIds = new Set()
|
||||
project.deletedFiles = project.deletedFiles.filter(file => {
|
||||
const id = file._id.toString()
|
||||
if (fileIds.has(id)) return false
|
||||
fileIds.add(id)
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
let deletedFilesProjectIdIndexExist
|
||||
async function doesDeletedFilesProjectIdIndexExist() {
|
||||
if (typeof deletedFilesProjectIdIndexExist !== 'boolean') {
|
||||
// Resolve this about once. No need for locking or retry handling.
|
||||
deletedFilesProjectIdIndexExist =
|
||||
await db.deletedFiles.indexExists('projectId_1')
|
||||
}
|
||||
return deletedFilesProjectIdIndexExist
|
||||
}
|
||||
|
||||
async function hardDeleteDeletedFiles(projectId) {
|
||||
if (!(await doesDeletedFilesProjectIdIndexExist())) {
|
||||
// Running the deletion command w/o index would kill mongo performance
|
||||
return
|
||||
}
|
||||
return db.deletedFiles.deleteMany({ projectId })
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ const ProjectGetter = require('./ProjectGetter')
|
||||
const ProjectLocator = require('./ProjectLocator')
|
||||
const FolderStructureBuilder = require('./FolderStructureBuilder')
|
||||
const SafePath = require('./SafePath')
|
||||
const { DeletedFile } = require('../../models/DeletedFile')
|
||||
const { iterablePaths } = require('./IterablePath')
|
||||
|
||||
const LOCK_NAMESPACE = 'mongoTransaction'
|
||||
@@ -72,7 +71,6 @@ module.exports = {
|
||||
'changes',
|
||||
]),
|
||||
createNewFolderStructure: callbackify(wrapWithLock(createNewFolderStructure)),
|
||||
_insertDeletedFileReference: callbackify(_insertDeletedFileReference),
|
||||
_putElement: callbackifyMultiResult(_putElement, ['result', 'project']),
|
||||
_confirmFolder,
|
||||
promises: {
|
||||
@@ -87,7 +85,6 @@ module.exports = {
|
||||
deleteEntity: wrapWithLock(deleteEntity),
|
||||
renameEntity: wrapWithLock(renameEntity),
|
||||
createNewFolderStructure: wrapWithLock(createNewFolderStructure),
|
||||
_insertDeletedFileReference,
|
||||
_putElement,
|
||||
},
|
||||
}
|
||||
@@ -162,7 +159,6 @@ async function replaceFileWithNew(projectId, fileId, newFileRef, userId) {
|
||||
element_id: fileId,
|
||||
type: 'file',
|
||||
})
|
||||
await _insertDeletedFileReference(projectId, fileRef)
|
||||
const newProject = await Project.findOneAndUpdate(
|
||||
{ _id: project._id, [path.mongo]: { $exists: true } },
|
||||
{
|
||||
@@ -480,17 +476,6 @@ async function renameEntity(projectId, entityId, entityType, newName, userId) {
|
||||
}
|
||||
}
|
||||
|
||||
async function _insertDeletedFileReference(projectId, fileRef) {
|
||||
await DeletedFile.create({
|
||||
projectId,
|
||||
_id: fileRef._id,
|
||||
name: fileRef.name,
|
||||
linkedFileData: fileRef.linkedFileData,
|
||||
hash: fileRef.hash,
|
||||
deletedAt: new Date(),
|
||||
})
|
||||
}
|
||||
|
||||
async function _removeElementFromMongoArray(
|
||||
modelId,
|
||||
path,
|
||||
|
||||
@@ -1627,8 +1627,6 @@ const ProjectEntityUpdateHandler = {
|
||||
entry.path,
|
||||
userId
|
||||
)
|
||||
} else if (entry.type === 'file') {
|
||||
await ProjectEntityUpdateHandler._cleanUpFile(project, entry.entity)
|
||||
}
|
||||
}
|
||||
return subtreeListing
|
||||
@@ -1679,13 +1677,6 @@ const ProjectEntityUpdateHandler = {
|
||||
|
||||
return await DocumentUpdaterHandler.promises.deleteDoc(projectId, docId)
|
||||
},
|
||||
|
||||
async _cleanUpFile(project, file) {
|
||||
return await ProjectEntityMongoUpdateHandler.promises._insertDeletedFileReference(
|
||||
project._id,
|
||||
file
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,7 +33,6 @@ addConnectionDrainer('mongodb', async () => {
|
||||
const internalDb = mongoClient.db()
|
||||
const db = {
|
||||
contacts: internalDb.collection('contacts'),
|
||||
deletedFiles: internalDb.collection('deletedFiles'),
|
||||
deletedProjects: internalDb.collection('deletedProjects'),
|
||||
deletedSubscriptions: internalDb.collection('deletedSubscriptions'),
|
||||
deletedUsers: internalDb.collection('deletedUsers'),
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
const mongoose = require('../infrastructure/Mongoose')
|
||||
const { Schema } = mongoose
|
||||
|
||||
const DeletedFileSchema = new Schema(
|
||||
{
|
||||
name: String,
|
||||
projectId: Schema.ObjectId,
|
||||
created: {
|
||||
type: Date,
|
||||
},
|
||||
linkedFileData: { type: Schema.Types.Mixed },
|
||||
hash: {
|
||||
type: String,
|
||||
},
|
||||
deletedAt: { type: Date },
|
||||
},
|
||||
{ collection: 'deletedFiles', minimize: false }
|
||||
)
|
||||
|
||||
exports.DeletedFile = mongoose.model('DeletedFile', DeletedFileSchema)
|
||||
exports.DeletedFileSchema = DeletedFileSchema
|
||||
@@ -12,18 +12,6 @@ const DeletedDocSchema = new Schema({
|
||||
deletedAt: { type: Date },
|
||||
})
|
||||
|
||||
const DeletedFileSchema = new Schema({
|
||||
name: String,
|
||||
created: {
|
||||
type: Date,
|
||||
},
|
||||
linkedFileData: { type: Schema.Types.Mixed },
|
||||
hash: {
|
||||
type: String,
|
||||
},
|
||||
deletedAt: { type: Date },
|
||||
})
|
||||
|
||||
const ProjectSchema = new Schema(
|
||||
{
|
||||
name: { type: String, default: 'new project' },
|
||||
@@ -54,7 +42,6 @@ const ProjectSchema = new Schema(
|
||||
archived: { type: Schema.Types.Mixed },
|
||||
trashed: [{ type: ObjectId, ref: 'User' }],
|
||||
deletedDocs: [DeletedDocSchema],
|
||||
deletedFiles: [DeletedFileSchema],
|
||||
imageName: { type: String },
|
||||
brandVariationId: { type: String },
|
||||
track_changes: { type: Object },
|
||||
|
||||
Reference in New Issue
Block a user