diff --git a/services/track-changes/app/js/PackWorker.js b/services/track-changes/app/js/PackWorker.js index 74b5368368..232d7b24ed 100644 --- a/services/track-changes/app/js/PackWorker.js +++ b/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( diff --git a/services/track-changes/app/js/mongodb.js b/services/track-changes/app/js/mongodb.js index 38ebe0462a..e0d50a165b 100644 --- a/services/track-changes/app/js/mongodb.js +++ b/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 }