Просмотр исходного кода

Merge pull request #10971 from overleaf/em-flush-docupdater-on-rename

Flush project in docupdater after a rename

GitOrigin-RevId: f08e722e9eb65e281965fe2603f8e97024edb8e9
Eric Mc Sween 3 лет назад
Родитель
Сommit
bde79780a7

+ 88 - 74
services/web/app/src/Features/Project/ProjectEntityUpdateHandler.js

@@ -1246,44 +1246,51 @@ const ProjectEntityUpdateHandler = {
       return callback(new Error('No entityType set'))
     }
     entityType = entityType.toLowerCase()
-    ProjectEntityMongoUpdateHandler.moveEntity(
-      projectId,
-      entityId,
-      destFolderId,
-      entityType,
-      (err, project, startPath, endPath, rev, changes) => {
-        if (err != null) {
-          return callback(err)
-        }
-        const projectHistoryId =
-          project.overleaf &&
-          project.overleaf.history &&
-          project.overleaf.history.id
-        // do not wait
-        TpdsUpdateSender.promises
-          .moveEntity({
-            projectId,
-            projectName: project.name,
-            startPath,
-            endPath,
-            rev,
-            entityId,
-            entityType,
-            folderId: destFolderId,
-          })
-          .catch(err => {
-            logger.error({ err }, 'error sending tpds update')
-          })
-        DocumentUpdaterHandler.updateProjectStructure(
-          projectId,
-          projectHistoryId,
-          userId,
-          changes,
-          source,
-          callback
-        )
+    DocumentUpdaterHandler.flushProjectToMongo(projectId, err => {
+      if (err) {
+        return callback(err)
       }
-    )
+      ProjectEntityMongoUpdateHandler.moveEntity(
+        projectId,
+        entityId,
+        destFolderId,
+        entityType,
+        (err, project, startPath, endPath, rev, changes) => {
+          if (err != null) {
+            return callback(err)
+          }
+          const projectHistoryId =
+            project.overleaf &&
+            project.overleaf.history &&
+            project.overleaf.history.id
+          TpdsUpdateSender.moveEntity(
+            {
+              projectId,
+              projectName: project.name,
+              startPath,
+              endPath,
+              rev,
+              entityId,
+              entityType,
+              folderId: destFolderId,
+            },
+            err => {
+              if (err) {
+                logger.error({ err }, 'error sending tpds update')
+              }
+              DocumentUpdaterHandler.updateProjectStructure(
+                projectId,
+                projectHistoryId,
+                userId,
+                changes,
+                source,
+                callback
+              )
+            }
+          )
+        }
+      )
+    })
   }),
 
   renameEntity: wrapWithLock(function (
@@ -1305,44 +1312,51 @@ const ProjectEntityUpdateHandler = {
     }
     entityType = entityType.toLowerCase()
 
-    ProjectEntityMongoUpdateHandler.renameEntity(
-      projectId,
-      entityId,
-      entityType,
-      newName,
-      (err, project, startPath, endPath, rev, changes) => {
-        if (err != null) {
-          return callback(err)
-        }
-        const projectHistoryId =
-          project.overleaf &&
-          project.overleaf.history &&
-          project.overleaf.history.id
-        // do not wait
-        TpdsUpdateSender.promises
-          .moveEntity({
-            projectId,
-            projectName: project.name,
-            startPath,
-            endPath,
-            rev,
-            entityId,
-            entityType,
-            folderId: null, // this means the folder has not changed
-          })
-          .catch(err => {
-            logger.error({ err }, 'error sending tpds update')
-          })
-        DocumentUpdaterHandler.updateProjectStructure(
-          projectId,
-          projectHistoryId,
-          userId,
-          changes,
-          source,
-          callback
-        )
+    DocumentUpdaterHandler.flushProjectToMongo(projectId, err => {
+      if (err) {
+        return callback(err)
       }
-    )
+      ProjectEntityMongoUpdateHandler.renameEntity(
+        projectId,
+        entityId,
+        entityType,
+        newName,
+        (err, project, startPath, endPath, rev, changes) => {
+          if (err != null) {
+            return callback(err)
+          }
+          const projectHistoryId =
+            project.overleaf &&
+            project.overleaf.history &&
+            project.overleaf.history.id
+          TpdsUpdateSender.moveEntity(
+            {
+              projectId,
+              projectName: project.name,
+              startPath,
+              endPath,
+              rev,
+              entityId,
+              entityType,
+              folderId: null, // this means the folder has not changed
+            },
+            err => {
+              if (err) {
+                logger.error({ err }, 'error sending tpds update')
+              }
+              DocumentUpdaterHandler.updateProjectStructure(
+                projectId,
+                projectHistoryId,
+                userId,
+                changes,
+                source,
+                callback
+              )
+            }
+          )
+        }
+      )
+    })
   }),
 
   // This doesn't directly update project structure but we need to take the lock

+ 12 - 10
services/web/test/unit/src/Project/ProjectEntityUpdateHandlerTests.js

@@ -76,6 +76,7 @@ describe('ProjectEntityUpdateHandler', function () {
     }
     this.DocumentUpdaterHandler = {
       flushDocToMongo: sinon.stub().yields(),
+      flushProjectToMongo: sinon.stub().yields(),
       updateProjectStructure: sinon.stub().yields(),
       setDocument: sinon.stub(),
       resyncProjectHistory: sinon.stub().yields(),
@@ -128,10 +129,7 @@ describe('ProjectEntityUpdateHandler', function () {
       addFile: sinon.stub().yields(),
       addDoc: sinon.stub(),
       deleteEntity: sinon.stub().yields(),
-      moveEntity: sinon.stub(),
-      promises: {
-        moveEntity: sinon.stub().resolves(),
-      },
+      moveEntity: sinon.stub().yields(),
     }
     this.FileStoreHandler = {
       copyFile: sinon.stub(),
@@ -1786,7 +1784,7 @@ describe('ProjectEntityUpdateHandler', function () {
     })
 
     it('notifies tpds', function () {
-      this.TpdsUpdateSender.promises.moveEntity
+      this.TpdsUpdateSender.moveEntity
         .calledWith({
           projectId,
           projectName: this.project_name,
@@ -1807,8 +1805,7 @@ describe('ProjectEntityUpdateHandler', function () {
           projectHistoryId,
           userId,
           this.changes,
-          this.source,
-          this.callback
+          this.source
         )
         .should.equal(true)
     })
@@ -1850,7 +1847,7 @@ describe('ProjectEntityUpdateHandler', function () {
       })
 
       it('notifies tpds', function () {
-        this.TpdsUpdateSender.promises.moveEntity
+        this.TpdsUpdateSender.moveEntity
           .calledWith({
             projectId,
             projectName: this.project_name,
@@ -1864,6 +1861,12 @@ describe('ProjectEntityUpdateHandler', function () {
           .should.equal(true)
       })
 
+      it('flushes the project in doc updater', function () {
+        this.DocumentUpdaterHandler.flushProjectToMongo.should.have.been.calledWith(
+          projectId
+        )
+      })
+
       it('sends the changes in project structure to the doc updater', function () {
         this.DocumentUpdaterHandler.updateProjectStructure
           .calledWith(
@@ -1871,8 +1874,7 @@ describe('ProjectEntityUpdateHandler', function () {
             projectHistoryId,
             userId,
             this.changes,
-            this.source,
-            this.callback
+            this.source
           )
           .should.equal(true)
       })