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

Cleanup the created PageOpration document when the main operation throws

Taichi Masuyama 3 лет назад
Родитель
Сommit
6a97c0e553
1 измененных файлов с 83 добавлено и 6 удалено
  1. 83 6
      packages/app/src/server/service/page.ts

+ 83 - 6
packages/app/src/server/service/page.ts

@@ -401,7 +401,19 @@ class PageService {
       logger.error('Failed to create PageOperation document.', err);
       logger.error('Failed to create PageOperation document.', err);
       throw err;
       throw err;
     }
     }
-    const renamedPage = await this.renameMainOperation(page, newPagePath, user, options, pageOp._id);
+
+    let renamedPage: PageDocument | null = null;
+    try {
+      renamedPage = await this.renameMainOperation(page, newPagePath, user, options, pageOp._id);
+    }
+    catch (err) {
+      logger.err('Error occurred while running renameMainOperation', err);
+
+      // cleanup
+      await PageOperation.deleteOne({ _id: pageOp._id });
+
+      throw err;
+    }
 
 
     return renamedPage;
     return renamedPage;
   }
   }
@@ -996,7 +1008,20 @@ class PageService {
         logger.error('Failed to create PageOperation document.', err);
         logger.error('Failed to create PageOperation document.', err);
         throw err;
         throw err;
       }
       }
-      this.duplicateRecursivelyMainOperation(page, newPagePath, user, pageOp._id);
+
+      (async() => {
+        try {
+          await this.duplicateRecursivelyMainOperation(page, newPagePath, user, pageOp._id);
+        }
+        catch (err) {
+          logger.error('Error occurred while running duplicateRecursivelyMainOperation.', err);
+
+          // cleanup
+          await PageOperation.deleteOne({ _id: pageOp._id });
+
+          throw err;
+        }
+      })();
     }
     }
 
 
     const result = serializePageSecurely(duplicatedTarget);
     const result = serializePageSecurely(duplicatedTarget);
@@ -1387,7 +1412,19 @@ class PageService {
       /*
       /*
        * Resumable Operation
        * Resumable Operation
        */
        */
-      this.deleteRecursivelyMainOperation(page, user, pageOp._id);
+      (async() => {
+        try {
+          await this.deleteRecursivelyMainOperation(page, user, pageOp._id);
+        }
+        catch (err) {
+          logger.error('Error occurred while running deleteRecursivelyMainOperation.', err);
+
+          // cleanup
+          await PageOperation.deleteOne({ _id: pageOp._id });
+
+          throw err;
+        }
+      })();
     }
     }
 
 
     return deletedPage;
     return deletedPage;
@@ -1703,7 +1740,19 @@ class PageService {
       /*
       /*
        * Main Operation
        * Main Operation
        */
        */
-      this.deleteCompletelyRecursivelyMainOperation(page, user, options, pageOp._id);
+      (async() => {
+        try {
+          await this.deleteCompletelyRecursivelyMainOperation(page, user, options, pageOp._id);
+        }
+        catch (err) {
+          logger.error('Error occurred while running deleteCompletelyRecursivelyMainOperation.', err);
+
+          // cleanup
+          await PageOperation.deleteOne({ _id: pageOp._id });
+
+          throw err;
+        }
+      })();
     }
     }
 
 
     return;
     return;
@@ -1911,7 +1960,19 @@ class PageService {
       /*
       /*
        * Resumable Operation
        * Resumable Operation
        */
        */
-      this.revertRecursivelyMainOperation(page, user, options, pageOp._id);
+      (async() => {
+        try {
+          await this.revertRecursivelyMainOperation(page, user, options, pageOp._id);
+        }
+        catch (err) {
+          logger.error('Error occurred while running revertRecursivelyMainOperation.', err);
+
+          // cleanup
+          await PageOperation.deleteOne({ _id: pageOp._id });
+
+          throw err;
+        }
+      })();
     }
     }
 
 
     return updatedPage;
     return updatedPage;
@@ -2295,7 +2356,19 @@ class PageService {
       throw err;
       throw err;
     }
     }
 
 
-    this.normalizeParentRecursivelyMainOperation(page, user, pageOp._id);
+    (async() => {
+      try {
+        await this.normalizeParentRecursivelyMainOperation(page, user, pageOp._id);
+      }
+      catch (err) {
+        logger.error('Error occurred while running normalizeParentRecursivelyMainOperation.', err);
+
+        // cleanup
+        await PageOperation.deleteOne({ _id: pageOp._id });
+
+        throw err;
+      }
+    })();
   }
   }
 
 
   async normalizeParentByPageIdsRecursively(pageIds: ObjectIdLike[], user): Promise<void> {
   async normalizeParentByPageIdsRecursively(pageIds: ObjectIdLike[], user): Promise<void> {
@@ -2481,6 +2554,10 @@ class PageService {
       catch (err) {
       catch (err) {
         errorPagePaths.push(page.path);
         errorPagePaths.push(page.path);
         logger.err('Failed to run normalizeParentRecursivelyMainOperation.', err);
         logger.err('Failed to run normalizeParentRecursivelyMainOperation.', err);
+
+        // cleanup
+        await PageOperation.deleteOne({ _id: pageOp._id });
+
         throw err;
         throw err;
       }
       }
     }
     }