Bläddra i källkod

Merge pull request #24539 from overleaf/td-inactive-project-index-2

Update inactive project deactivation index, second attempt

GitOrigin-RevId: adc16761b001b2aa919b5a61cdbd468b7ad4e26d
Tim Down 1 år sedan
förälder
incheckning
2d4b5e51f1

+ 0 - 3
services/web/app/src/Features/InactiveData/InactiveProjectManager.js

@@ -5,7 +5,6 @@ const DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandle
 const ProjectGetter = require('../Project/ProjectGetter')
 const ProjectUpdateHandler = require('../Project/ProjectUpdateHandler')
 const { Project } = require('../../models/Project')
-const { ObjectId } = require('mongodb-legacy')
 const Modules = require('../../infrastructure/Modules')
 const { READ_PREFERENCE_SECONDARY } = require('../../infrastructure/mongodb')
 const { callbackifyAll } = require('@overleaf/promise-utils')
@@ -62,8 +61,6 @@ const InactiveProjectManager = {
       projects = await Project.find({
         lastOpened: { $not: { $gt: oldProjectDate } },
       })
-        .where('_id')
-        .lt(ObjectId.createFromTime(oldProjectDate / 1000))
         .where('active')
         .equals(true)
         .select('_id')

+ 64 - 0
services/web/migrations/20250320161029_update_inactive_project_index.mjs

@@ -0,0 +1,64 @@
+/* eslint-disable no-unused-vars */
+
+import Helpers from './lib/helpers.mjs'
+
+const tags = ['server-ce', 'server-pro', 'saas']
+
+const oldIndex = {
+  key: {
+    lastOpened: 1,
+  },
+  name: 'lastOpened_1',
+}
+
+const newIndex = {
+  key: {
+    lastOpened: 1,
+  },
+  name: 'active_true_lastOpened_1',
+  partialFilterExpression: { active: true },
+}
+
+const tmpIndex = {
+  key: { lastOpened: 1, dummyField: 1 },
+  name: 'lastOpened_tmp',
+}
+
+const migrate = async client => {
+  const { db } = client
+
+  // Create a temporary index so that projects are not left unindexed while we
+  // drop the index and recreate it.
+  await Helpers.addIndexesToCollection(db.projects, [tmpIndex])
+
+  // Drop and recreate the index with different options
+  await Helpers.dropIndexesFromCollection(db.projects, [oldIndex])
+  await Helpers.addIndexesToCollection(db.projects, [newIndex])
+
+  // Drop the temporary index
+  await Helpers.dropIndexesFromCollection(db.projects, [tmpIndex])
+}
+
+const rollback = async client => {
+  const { db } = client
+
+  try {
+    // Create a temporary index so that projects are not left unindexed while we
+    // drop the index and recreate it.
+    await Helpers.addIndexesToCollection(db.projects, [tmpIndex])
+
+    // Drop and recreate the index with different options
+    await Helpers.dropIndexesFromCollection(db.projects, [newIndex])
+    await Helpers.addIndexesToCollection(db.projects, [oldIndex])
+
+    // Drop the temporary index
+    await Helpers.dropIndexesFromCollection(db.projects, [tmpIndex])
+  } catch (err) {
+    console.error('Something went wrong rolling back the migrations', err)
+  }
+}
+export default {
+  tags,
+  migrate,
+  rollback,
+}