Procházet zdrojové kódy

Merge pull request #9582 from weseek/feat/160696-error-handling-for-data-migration

feat: Add error handling for data migration
Yuki Takei před 1 rokem
rodič
revize
e92c3e382a
1 změnil soubory, kde provedl 27 přidání a 17 odebrání
  1. 27 17
      bin/data-migrations/src/index.js

+ 27 - 17
bin/data-migrations/src/index.js

@@ -34,24 +34,34 @@ function replaceLatestRevisions(body, migrationModules) {
 var operations = [];
 var operations = [];
 pagesCollection.find({}).forEach((doc) => {
 pagesCollection.find({}).forEach((doc) => {
   if (doc.revision) {
   if (doc.revision) {
-    var revision = revisionsCollection.findOne({ _id: doc.revision });
-    var replacedBody = replaceLatestRevisions(revision.body, [...migrationModules]);
-    var operation = {
-      updateOne: {
-        filter: { _id: revision._id },
-        update: {
-          $set: { body: replacedBody },
+    try {
+      var revision = revisionsCollection.findOne({ _id: doc.revision });
+
+      if (revision == null || revision.body == null) {
+        return;
+      }
+
+      var replacedBody = replaceLatestRevisions(revision.body, [...migrationModules]);
+      var operation = {
+        updateOne: {
+          filter: { _id: revision._id },
+          update: {
+            $set: { body: replacedBody },
+          },
         },
         },
-      },
-    };
-    operations.push(operation);
-
-    // bulkWrite per 100 revisions
-    if (operations.length > (batchSize - 1)) {
-      revisionsCollection.bulkWrite(operations);
-      // sleep time can be set from env var
-      sleep(batchSizeInterval);
-      operations = [];
+      };
+      operations.push(operation);
+
+      // bulkWrite per 100 revisions
+      if (operations.length > (batchSize - 1)) {
+        revisionsCollection.bulkWrite(operations);
+        // sleep time can be set from env var
+        sleep(batchSizeInterval);
+        operations = [];
+      }
+    }
+    catch (err) {
+      print(`Error in updating revision ${doc.revision}: ${err}`);
     }
     }
   }
   }
 });
 });