From 77037ee9885a0a7e6b612e6bd1b91cafe1d760b7 Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Wed, 10 Feb 2016 14:45:47 +0000 Subject: [PATCH] improve performance for migrating large dochistory collections --- .../3_pack_docHistory_collection.coffee | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/migrations/3_pack_docHistory_collection.coffee b/migrations/3_pack_docHistory_collection.coffee index 1eaf1539a6..c5febea0c2 100644 --- a/migrations/3_pack_docHistory_collection.coffee +++ b/migrations/3_pack_docHistory_collection.coffee @@ -113,10 +113,20 @@ exports.migrate = (client, done = ->)-> console.log "completed #{count}/#{totalDocCount} processed=#{processedFraction.toFixed(2)} remaining=#{remainingFraction.toFixed(2)} elapsed=#{(t-t0)/1000} est Finish=#{estFinishTime}" interval = setInterval printProgress, 3*1000 - jobs = _.map _.filter(ids, (id) -> not finished_docs[id]), (id)-> - return (cb)-> - processNext(id, cb) - async.series jobs, (err)-> + nextId = null + + testFn = () -> + return false if needToExit + id = ids.shift() + while id? and finished_docs[id] # skip finished + id = ids.shift() + nextId = id + return nextId? + + executeFn = (cb) -> + processNext nextId, cb + + async.whilst testFn, executeFn, (err)-> if err? console.error err, "at end of jobs" else @@ -127,6 +137,10 @@ exports.migrate = (client, done = ->)-> exports.rollback = (client, done)-> done() +# process.nextTick () -> +# exports.migrate () -> +# console.log "done" + DAYS = 24 * 3600 * 1000 # one day in milliseconds # copied from track-changes/app/coffee/PackManager.coffee