From 1811ac2145f5ca611b9c08b407da8752ea2a54de Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Fri, 22 May 2015 15:27:15 +0100 Subject: [PATCH] added support for cleaning old expired ops in packs --- .../app/coffee/PackManager.coffee | 31 +++++++++++++++++++ services/track-changes/pack.coffee | 5 ++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/services/track-changes/app/coffee/PackManager.coffee b/services/track-changes/app/coffee/PackManager.coffee index 51ccecbc8e..c41a1e6bd8 100644 --- a/services/track-changes/app/coffee/PackManager.coffee +++ b/services/track-changes/app/coffee/PackManager.coffee @@ -339,3 +339,34 @@ module.exports = PackManager = ), result) else callback(err, result) + + deleteExpiredPackOps: (docs, callback) -> + now = Date.now() + toRemove = [] + toUpdate = [] + docs.forEach (d,i) -> + if d.pack? + newPack = d.pack.filter (op) -> + if op.expiresAt? then op.expiresAt > now else true + if newPack.length == 0 + toRemove.push d + else if newPack.length < d.pack.length + # adjust the pack properties + d.pack = newPack + first = d.pack[0] + last = d.pack[d.pack.length - 1] + d.v_end = last.v + d.meta.start_ts = first.meta.start_ts + d.meta.end_ts = last.meta.end_ts + toUpdate.push d + if toRemove.length or toUpdate.length + bulk = db.docHistory.initializeOrderedBulkOp() + toRemove.forEach (pack) -> + console.log "would remove", pack + #bulk.find({_id:pack._id}).removeOne() + toUpdate.forEach (pack) -> + console.log "would update", pack + #bulk.find({_id:pack._id}).updateOne(pack); + bulk.execute callback + else + callback() diff --git a/services/track-changes/pack.coffee b/services/track-changes/pack.coffee index d32b36ad9d..a9fb76f23a 100644 --- a/services/track-changes/pack.coffee +++ b/services/track-changes/pack.coffee @@ -45,7 +45,10 @@ getDocHistory = (doc_id, callback) -> util.log "checking history for #{doc_id}" PackManager.checkHistory docs, (err) -> return callback(err) if err? - callback err, docs + callback(err, docs) + #PackManager.deleteExpiredPackOps docs, (err) -> + # return callback(err) if err? + # callback err, docs safeInsert = (packObj, callback) -> if shutdownRequested