Merge pull request #16186 from overleaf/mj-mongo-object-id

[web] Use constructor for ObjectId

GitOrigin-RevId: 9eb8b377ea599605b72af237d1ab12f4d8287162
This commit is contained in:
Mathias Jakobsen
2023-12-19 09:04:02 +00:00
committed by Copybot
parent 0ac514f81b
commit c371732e6e
100 changed files with 423 additions and 368 deletions
+1 -1
View File
@@ -168,7 +168,7 @@ async function processUsers(userIds) {
const limit = pLimit(CONCURRENCY)
const results = await Promise.allSettled(
userIds.map(userId => limit(() => _handleUser(ObjectId(userId))))
userIds.map(userId => limit(() => _handleUser(new ObjectId(userId))))
)
results.forEach((result, idx) => {
if (result.status !== 'fulfilled') {
@@ -29,7 +29,7 @@ async function main(options) {
_.defaults(options, {
dryRun: process.env.DRY_RUN === 'true',
cacheSize: parseInt(process.env.CACHE_SIZE, 10) || 100,
firstProjectId: ObjectId(process.env.FIRST_PROJECT_ID),
firstProjectId: new ObjectId(process.env.FIRST_PROJECT_ID),
incrementByS: parseInt(process.env.INCREMENT_BY_S, 10) || ONE_WEEK_IN_S,
batchSize: parseInt(process.env.BATCH_SIZE, 10) || 1000,
stopAtS: parseInt(process.env.STOP_AT_S, 10) || NOW_IN_S,
+1 -1
View File
@@ -100,7 +100,7 @@ async function countDocsSizes(docs) {
for (const docId of ids) {
const result = await db.docs.aggregate([
{
$match: { _id: ObjectId(docId) },
$match: { _id: new ObjectId(docId) },
},
{
$project: {
@@ -48,8 +48,8 @@ rl.on('line', async line => {
projectId = projectId.replace(/^ObjectId\(/, '').replace(/\)$/, '')
try {
docId = ObjectId(docId).toString()
projectId = ObjectId(projectId).toString()
docId = new ObjectId(docId).toString()
projectId = new ObjectId(projectId).toString()
} catch (err) {
console.error(`Invalid id: ${docId}, ${projectId}`)
return
@@ -114,14 +114,14 @@ async function projectIdExists(projectId) {
async function findProject(projectId) {
return db.projects.findOne(
{ _id: ObjectId(projectId) },
{ _id: new ObjectId(projectId) },
{ projection: { _id: 1 } }
)
}
async function findDeletedProject(projectId) {
return db.deletedProjects.findOne(
{ 'project._id': ObjectId(projectId) },
{ 'project._id': new ObjectId(projectId) },
{ projection: { _id: 1 } }
)
}
@@ -43,7 +43,7 @@ async function main() {
}
async function getProjects() {
const projectIds = OPTIONS.projectIds.map(id => ObjectId(id))
const projectIds = OPTIONS.projectIds.map(id => new ObjectId(id))
const projects = await db.projects
.find(
{ _id: { $in: projectIds } },
@@ -38,7 +38,7 @@ async function processBatch(rooms) {
}
const projectIds = Array.from(
new Set(rooms.map(room => room.project_id.toString()))
).map(ObjectId)
).map(id => new ObjectId(id))
console.log(
`Checking projects (${projectIds.length})`,
JSON.stringify(projectIds)
@@ -20,7 +20,7 @@ if (!process.env.BATCH_LAST_ID) {
console.error('Set BATCH_LAST_ID and re-run.')
process.exit(1)
}
const BATCH_LAST_ID = ObjectId(process.env.BATCH_LAST_ID)
const BATCH_LAST_ID = new ObjectId(process.env.BATCH_LAST_ID)
const INCREMENT_BY_S = parseInt(process.env.INCREMENT_BY_S, 10) || ONE_WEEK_IN_S
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE, 10) || 1000
const READ_CONCURRENCY_SECONDARY =
@@ -66,7 +66,7 @@ async function main() {
if (docs.length) {
const projectIds = Array.from(
new Set(docs.map(doc => doc.project_id.toString()))
).map(ObjectId)
).map(id => new ObjectId(id))
console.log('Checking projects', JSON.stringify(projectIds))
const { nProjectsWithOrphanedDocs, nDeletedDocs } = await processBatch(
projectIds
@@ -59,8 +59,8 @@ async function processBatch(entries) {
prefixes.push(prefix)
projectIdToPrefix.set(projectId, prefixes)
}
const projectIds = Array.from(projectIdToPrefix.keys()).map(id =>
ObjectId(id)
const projectIds = Array.from(projectIdToPrefix.keys()).map(
id => new ObjectId(id)
)
const projectsWithOrphanedArchive = await getHardDeletedProjectIds({
projectIds,
+2 -2
View File
@@ -8,7 +8,7 @@ const { ObjectId } = require('mongodb')
const run = async () => {
for (const id of ids) {
console.log('id', id)
const subscription = await Subscription.findOne({ _id: ObjectId(id) })
const subscription = await Subscription.findOne({ _id: new ObjectId(id) })
await SubscriptionUpdater.promises.deleteSubscription(
subscription,
deleterData
@@ -33,7 +33,7 @@ const setup = () => {
process.exit(1)
}
deleterData = { id: ObjectId(deleterId) }
deleterData = { id: new ObjectId(deleterId) }
}
setup()
@@ -45,7 +45,7 @@ function parseArgs() {
process.exit(1)
}
const [projectId, mongoPath] = args
return { projectId: ObjectId(projectId), mongoPath }
return { projectId: new ObjectId(projectId), mongoPath }
}
function isRootFolder(path) {
@@ -86,7 +86,7 @@ async function fixRootFolder(projectId) {
$set: {
rootFolder: [
{
_id: ObjectId(),
_id: new ObjectId(),
name: 'rootFolder',
folders: [],
docs: [],
@@ -127,7 +127,7 @@ async function fixArray(projectId, path) {
async function fixFolderId(projectId, path) {
const result = await db.projects.updateOne(
{ _id: projectId, [path]: { $exists: false } },
{ $set: { [path]: ObjectId() } }
{ $set: { [path]: new ObjectId() } }
)
return result.modifiedCount
}
+2 -2
View File
@@ -75,8 +75,8 @@ async function processDoc(projectId, docId) {
if (opts.commit) {
const fileRef = await sendDocToFilestore(projectId, doc)
await ProjectEntityMongoUpdateHandler.promises.replaceDocWithFile(
ObjectId(projectId),
ObjectId(docId),
new ObjectId(projectId),
new ObjectId(docId),
fileRef
)
await deleteDocFromMongo(projectId, doc)
+1 -1
View File
@@ -28,7 +28,7 @@ async function main() {
if (!DRY_RUN) {
console.log(`updating doc ${DOC_ID} in mongo for project ${PROJECT_ID}`)
const result = await db.docs.updateOne(
{ _id: ObjectId(DOC_ID), project_id: ObjectId(PROJECT_ID) },
{ _id: new ObjectId(DOC_ID), project_id: new ObjectId(PROJECT_ID) },
{
$set: { lines, version, ranges },
$inc: { rev: 1 }, // maintain same behaviour as Docstore upsertIntoDocCollection
@@ -22,9 +22,9 @@ function refreshGlobalOptionsForBatchedUpdate(options = {}) {
BATCH_SIZE = parseInt(options.BATCH_SIZE, 10) || 1000
VERBOSE_LOGGING = options.VERBOSE_LOGGING === 'true'
if (options.BATCH_LAST_ID) {
BATCH_RANGE_START = ObjectId(options.BATCH_LAST_ID)
BATCH_RANGE_START = new ObjectId(options.BATCH_LAST_ID)
} else if (options.BATCH_RANGE_START) {
BATCH_RANGE_START = ObjectId(options.BATCH_RANGE_START)
BATCH_RANGE_START = new ObjectId(options.BATCH_RANGE_START)
} else {
if (BATCH_DESCENDING) {
BATCH_RANGE_START = ID_EDGE_FUTURE
@@ -35,7 +35,7 @@ function refreshGlobalOptionsForBatchedUpdate(options = {}) {
BATCH_MAX_TIME_SPAN_IN_MS =
parseInt(options.BATCH_MAX_TIME_SPAN_IN_MS, 10) || ONE_MONTH_IN_MS
if (options.BATCH_RANGE_END) {
BATCH_RANGE_END = ObjectId(options.BATCH_RANGE_END)
BATCH_RANGE_END = new ObjectId(options.BATCH_RANGE_END)
} else {
if (BATCH_DESCENDING) {
BATCH_RANGE_END = ID_EDGE_PAST
+1 -1
View File
@@ -3,7 +3,7 @@ const minimist = require('minimist')
const argv = minimist(process.argv.slice(2))
const commit = argv.commit !== undefined
const projectIds = argv._.map(x => {
return ObjectId(x)
return new ObjectId(x)
})
if (!commit) {
@@ -44,8 +44,8 @@ async function main() {
await waitForDb()
const targetSubscription = await getSubscription(ObjectId(target))
const sourceSubscription = await getSubscription(ObjectId(source))
const targetSubscription = await getSubscription(new ObjectId(target))
const sourceSubscription = await getSubscription(new ObjectId(source))
if (!targetSubscription) {
throw new Error('couldnt find target (to) subscription')
+2 -2
View File
@@ -25,7 +25,7 @@ async function main(options) {
if (options.projectId) {
console.log('migrating projectId=' + options.projectId)
const project = await db.projects.findOne(
{ _id: ObjectId(options.projectId) },
{ _id: new ObjectId(options.projectId) },
{ _id: 1, auditLog: 1 }
)
if (!project || !project.auditLog) {
@@ -36,7 +36,7 @@ async function main(options) {
} else if (options.userId) {
console.log('migrating userId=' + options.userId)
const user = await db.users.findOne(
{ _id: ObjectId(options.userId) },
{ _id: new ObjectId(options.userId) },
{ _id: 1, auditLog: 1 }
)
if (!user || !user.auditLog) {
@@ -61,7 +61,7 @@ async function upsertApplication(opts) {
defaults.redirectUris = []
}
if (opts.mongoId != null) {
defaults._id = ObjectId(opts.mongoId)
defaults._id = new ObjectId(opts.mongoId)
}
await db.oauthApplications.updateOne(
@@ -53,7 +53,7 @@ async function main() {
async function processDoc(docId) {
// check if the doc is in mongo.. if so ignore it
const docCount = await db.docs.find({ _id: ObjectId(docId) }).count()
const docCount = await db.docs.find({ _id: new ObjectId(docId) }).count()
if (docCount > 0) {
logger.debug({ docId }, 'doc is present in mongo - no recovery needed')
return
@@ -70,7 +70,7 @@ async function processDoc(docId) {
return
}
// check that the project is in mongo, if not delete the doc
const project = await db.projects.findOne({ _id: ObjectId(projectId) })
const project = await db.projects.findOne({ _id: new ObjectId(projectId) })
if (!project) {
logger.warn(
{ docId },
+2 -2
View File
@@ -39,7 +39,7 @@ function parseProjectIds(projectIds) {
for (const projectId of projectIds) {
let oid
try {
oid = ObjectId(projectId)
oid = new ObjectId(projectId)
} catch (err) {
console.error(`Invalid project id: ${projectId}`)
process.exit(1)
@@ -51,7 +51,7 @@ function parseProjectIds(projectIds) {
async function updateImage(image, projectIds) {
const res = await Project.updateMany(
{ _id: { $in: projectIds.map(ObjectId) } },
{ _id: { $in: projectIds.map(id => new ObjectId(id)) } },
{ $set: { imageName: `quay.io/sharelatex/${image}` } }
).exec()
console.log(`Found ${res.matchedCount} out of ${projectIds.length} projects`)
+1 -1
View File
@@ -363,7 +363,7 @@ async function uploadFile(projectId) {
async function upload(abortSignal, deleteFile = true) {
const size = userSize.get()
const buffer = Buffer.alloc(size, crypto.randomUUID())
const fileId = ObjectId()
const fileId = new ObjectId()
const url = `${settings.apis.filestore.url}/project/${projectId}/file/${fileId}`
const md5 = computeMD5Hash(buffer)
const response = await fetch(url, {