diff --git a/services/document-updater/app/coffee/RealTimeRedisManager.coffee b/services/document-updater/app/coffee/RealTimeRedisManager.coffee index 197a4708c1..7da7ca1f64 100644 --- a/services/document-updater/app/coffee/RealTimeRedisManager.coffee +++ b/services/document-updater/app/coffee/RealTimeRedisManager.coffee @@ -3,11 +3,13 @@ rclient = require("redis-sharelatex").createClient(Settings.redis.realtime) Keys = Settings.redis.realtime.key_schema logger = require('logger-sharelatex') +MAX_OPS_PER_ITERATION = 8 # process a limited number of ops for safety + module.exports = RealTimeRedisManager = getPendingUpdatesForDoc : (doc_id, callback)-> multi = rclient.multi() - multi.lrange Keys.pendingUpdates({doc_id}), 0 , -1 - multi.del Keys.pendingUpdates({doc_id}) + multi.lrange Keys.pendingUpdates({doc_id}), 0, (MAX_OPS_PER_ITERATION-1) + multi.ltrim Keys.pendingUpdates({doc_id}), MAX_OPS_PER_ITERATION, -1 multi.exec (error, replys) -> return callback(error) if error? jsonUpdates = replys[0] diff --git a/services/document-updater/app/coffee/UpdateManager.coffee b/services/document-updater/app/coffee/UpdateManager.coffee index 5064725aa0..88858a0dad 100644 --- a/services/document-updater/app/coffee/UpdateManager.coffee +++ b/services/document-updater/app/coffee/UpdateManager.coffee @@ -47,6 +47,7 @@ module.exports = UpdateManager = profile = new Profiler("fetchAndApplyUpdates", {project_id, doc_id}) RealTimeRedisManager.getPendingUpdatesForDoc doc_id, (error, updates) => return callback(error) if error? + logger.log {project_id: project_id, doc_id: doc_id, count: updates.length}, "processing updates" if updates.length == 0 return callback() profile.log("getPendingUpdatesForDoc") diff --git a/services/document-updater/test/unit/coffee/RealTimeRedisManager/RealTimeRedisManagerTests.coffee b/services/document-updater/test/unit/coffee/RealTimeRedisManager/RealTimeRedisManagerTests.coffee index b6aa35ac72..a04da996dc 100644 --- a/services/document-updater/test/unit/coffee/RealTimeRedisManager/RealTimeRedisManagerTests.coffee +++ b/services/document-updater/test/unit/coffee/RealTimeRedisManager/RealTimeRedisManagerTests.coffee @@ -26,7 +26,7 @@ describe "RealTimeRedisManager", -> describe "getPendingUpdatesForDoc", -> beforeEach -> @rclient.lrange = sinon.stub() - @rclient.del = sinon.stub() + @rclient.ltrim = sinon.stub() describe "successfully", -> beforeEach -> @@ -40,12 +40,12 @@ describe "RealTimeRedisManager", -> it "should get the pending updates", -> @rclient.lrange - .calledWith("PendingUpdates:#{@doc_id}", 0, -1) + .calledWith("PendingUpdates:#{@doc_id}", 0, 7) .should.equal true it "should delete the pending updates", -> - @rclient.del - .calledWith("PendingUpdates:#{@doc_id}") + @rclient.ltrim + .calledWith("PendingUpdates:#{@doc_id}", 8, -1) .should.equal true it "should call the callback with the updates", ->