mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 09:09:36 +02:00
[monorepo] enable mongo notablescan for all services but web (#29497)
* [migrations] make old migrations compatible with --notablescan in mongo Re-running the migration for db.users.emails.reversedHostname on all Server Pro/CE users will not be harmfull. * [monorepo] enable mongo notablescan for all services but web GitOrigin-RevId: e2a710c9de08de9ac2aa9df1f3082d5f1c33ea05
This commit is contained in:
@@ -6,6 +6,10 @@ const tags = ['server-ce', 'server-pro']
|
||||
|
||||
const migrate = async client => {
|
||||
const { db } = client
|
||||
const totalProjects = await db.projects.estimatedDocumentCount()
|
||||
if (totalProjects === 0) return
|
||||
|
||||
// Does not use an index.
|
||||
const count = await db.projects.countDocuments({
|
||||
'overleaf.history.display': { $ne: true },
|
||||
})
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
const tags = ['server-ce', 'server-pro']
|
||||
|
||||
const migrate = async client => {
|
||||
const { db } = client
|
||||
|
||||
const adminsWithEmails = await db.users
|
||||
.find(
|
||||
{
|
||||
isAdmin: true,
|
||||
emails: { $exists: true },
|
||||
},
|
||||
{ _id: 1, emails: 1 }
|
||||
)
|
||||
.toArray()
|
||||
|
||||
for (const { _id, emails } of adminsWithEmails) {
|
||||
let shouldUpdateEmails = false
|
||||
for (const emailObj of emails) {
|
||||
if (!emailObj.reversedHostname) {
|
||||
shouldUpdateEmails = true
|
||||
emailObj.reversedHostname = emailObj.email
|
||||
.split('@')[1]
|
||||
.split('')
|
||||
.reverse()
|
||||
.join('')
|
||||
}
|
||||
}
|
||||
if (shouldUpdateEmails) {
|
||||
await db.users.updateOne({ _id }, { $set: { emails } })
|
||||
}
|
||||
}
|
||||
|
||||
const adminsNoEmails = await db.users
|
||||
.find(
|
||||
{
|
||||
isAdmin: true,
|
||||
emails: { $exists: false },
|
||||
},
|
||||
{ _id: 1, email: 1 }
|
||||
)
|
||||
.toArray()
|
||||
|
||||
for (const { _id, email } of adminsNoEmails) {
|
||||
const reversedHostname = email.split('@')[1].split('').reverse().join('')
|
||||
await db.users.updateOne(
|
||||
{ _id },
|
||||
{
|
||||
emails: [
|
||||
{
|
||||
email,
|
||||
reversedHostname,
|
||||
createdAt: new Date(),
|
||||
},
|
||||
],
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const rollback = async () => {}
|
||||
|
||||
export default {
|
||||
tags,
|
||||
migrate,
|
||||
rollback,
|
||||
}
|
||||
40
tools/migrations/20240713110905_emails_reversed_hostname.mjs
Normal file
40
tools/migrations/20240713110905_emails_reversed_hostname.mjs
Normal file
@@ -0,0 +1,40 @@
|
||||
const tags = ['server-ce', 'server-pro']
|
||||
|
||||
function fixEmails(user) {
|
||||
let emails = user.emails
|
||||
if (!emails || emails.length === 0) {
|
||||
emails = [{ email: user.email, createdAt: new Date() }]
|
||||
}
|
||||
for (let i = 0; i < emails.length; i++) {
|
||||
const reversedHostname = emails[i].email
|
||||
.split('@')[1]
|
||||
.split('')
|
||||
.reverse()
|
||||
.join('')
|
||||
if (emails[i].reversedHostname !== reversedHostname) {
|
||||
emails = emails.slice()
|
||||
emails[i].reversedHostname = reversedHostname
|
||||
}
|
||||
}
|
||||
return emails
|
||||
}
|
||||
|
||||
const migrate = async client => {
|
||||
const { db } = client
|
||||
|
||||
const cursor = db.users.find({}, { projection: { email: 1, emails: 1 } })
|
||||
for await (const user of cursor) {
|
||||
const emails = fixEmails(user)
|
||||
if (user.emails !== emails) {
|
||||
await db.users.updateOne({ _id: user._id }, { $set: { emails } })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const rollback = async () => {}
|
||||
|
||||
export default {
|
||||
tags,
|
||||
migrate,
|
||||
rollback,
|
||||
}
|
||||
Reference in New Issue
Block a user