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

Merge pull request #98 from overleaf/jpa-hotfix-pack-worker

[PackWorker] fixes for the native mongo driver
Jakob Ackermann 6 лет назад
Родитель
Сommit
3da2e0370a

+ 18 - 6
services/track-changes/app/js/PackWorker.js

@@ -15,10 +15,11 @@
  */
 let LIMIT, pending
 let project_id, doc_id
+const { callbackify } = require('util')
 const Settings = require('settings-sharelatex')
 const async = require('async')
 const _ = require('underscore')
-const { db, ObjectId } = require('./mongodb')
+const { db, ObjectId, waitForDb, closeDb } = require('./mongodb')
 const fs = require('fs')
 const Metrics = require('metrics-sharelatex')
 Metrics.initialize('track-changes')
@@ -84,7 +85,7 @@ const finish = function () {
     clearTimeout(shutDownTimer)
   }
   logger.log('closing db')
-  return db.close(function () {
+  callbackify(closeDb)(function () {
     logger.log('closing LockManager Redis Connection')
     return LockManager.close(function () {
       logger.log(
@@ -160,10 +161,21 @@ const ObjectIdFromDate = function (date) {
 // find packs to be marked as finalised:true, those which have a newer pack present
 // then only consider finalised:true packs for archiving
 
-if (pending != null) {
-  logger.log(`got ${pending.length} entries from ${source}`)
-  processUpdates(pending)
-} else {
+waitForDb()
+  .then(() => {
+    if (pending != null) {
+      logger.log(`got ${pending.length} entries from ${source}`)
+      processUpdates(pending)
+    } else {
+      processFromOneWeekAgo()
+    }
+  })
+  .catch((err) => {
+    logger.fatal({ err }, 'cannot connect to mongo, exiting')
+    process.exit(1)
+  })
+
+function processFromOneWeekAgo() {
   const oneWeekAgo = new Date(Date.now() - 7 * DAYS)
   db.docHistory
     .find(

+ 12 - 0
services/track-changes/app/js/mongodb.js

@@ -23,8 +23,20 @@ async function setupDb() {
   db.projectHistoryMetaData = internalDb.collection('projectHistoryMetaData')
 }
 
+async function closeDb() {
+  let client
+  try {
+    client = await clientPromise
+  } catch (e) {
+    // there is nothing to close
+    return
+  }
+  return client.close()
+}
+
 module.exports = {
   db,
   ObjectId,
+  closeDb,
   waitForDb
 }