diff --git a/services/document-updater/app/coffee/DocOpsManager.coffee b/services/document-updater/app/coffee/DocOpsManager.coffee index 180f1e564b..403488208d 100644 --- a/services/document-updater/app/coffee/DocOpsManager.coffee +++ b/services/document-updater/app/coffee/DocOpsManager.coffee @@ -47,7 +47,7 @@ module.exports = DocOpsManager = pushDocOp: (project_id, doc_id, op, callback = (error) ->) -> RedisManager.pushDocOp doc_id, op, (error, version) -> return callback(error) if error? - TrackChangesManager.pushUncompressedHistoryOp doc_id, op, (error) -> + TrackChangesManager.pushUncompressedHistoryOp project_id, doc_id, op, (error) -> return callback(error) if error? callback null, version diff --git a/services/document-updater/app/coffee/TrackChangesManager.coffee b/services/document-updater/app/coffee/TrackChangesManager.coffee index 9c8b514753..65b9762fe5 100644 --- a/services/document-updater/app/coffee/TrackChangesManager.coffee +++ b/services/document-updater/app/coffee/TrackChangesManager.coffee @@ -5,13 +5,13 @@ RedisManager = require "./RedisManager" crypto = require("crypto") module.exports = TrackChangesManager = - flushDocChanges: (doc_id, callback = (error) ->) -> + flushDocChanges: (project_id, doc_id, callback = (error) ->) -> if !settings.apis?.trackchanges? logger.warn doc_id: doc_id, "track changes API is not configured, so not flushing" return callback() - url = "#{settings.apis.trackchanges.url}/doc/#{doc_id}/flush" - logger.log doc_id: doc_id, url: url, "flushing doc in track changes api" + url = "#{settings.apis.trackchanges.url}/project/#{project_id}/doc/#{doc_id}/flush" + logger.log project_id: project_id, doc_id: doc_id, url: url, "flushing doc in track changes api" request.post url, (error, res, body)-> if error? return callback(error) @@ -22,7 +22,7 @@ module.exports = TrackChangesManager = return callback(error) FLUSH_EVERY_N_OPS: 50 - pushUncompressedHistoryOp: (doc_id, op, callback = (error) ->) -> + pushUncompressedHistoryOp: (project_id, doc_id, op, callback = (error) ->) -> RedisManager.getHistoryLoadManagerThreshold (error, threshold) -> return callback(error) if error? if TrackChangesManager.getLoadManagerBucket(doc_id) < threshold @@ -31,10 +31,10 @@ module.exports = TrackChangesManager = if length > 0 and length % TrackChangesManager.FLUSH_EVERY_N_OPS == 0 # Do this in the background since it uses HTTP and so may be too # slow to wait for when processing a doc update. - logger.log length: length, doc_id: doc_id, "flushing track changes api" - TrackChangesManager.flushDocChanges doc_id, (error) -> + logger.log length: length, doc_id: doc_id, project_id: project_id, "flushing track changes api" + TrackChangesManager.flushDocChanges project_id, doc_id, (error) -> if error? - logger.error err: error, doc_id: doc_id, "error flushing doc to track changes api" + logger.error err: error, doc_id: doc_id, project_id: project_id, "error flushing doc to track changes api" callback() else callback() diff --git a/services/document-updater/test/acceptance/coffee/helpers/MockTrackChangesApi.coffee b/services/document-updater/test/acceptance/coffee/helpers/MockTrackChangesApi.coffee index 2fdff0d3ca..43416e37fc 100644 --- a/services/document-updater/test/acceptance/coffee/helpers/MockTrackChangesApi.coffee +++ b/services/document-updater/test/acceptance/coffee/helpers/MockTrackChangesApi.coffee @@ -6,7 +6,7 @@ module.exports = MockTrackChangesApi = callback() run: () -> - app.post "/doc/:doc_id/flush", (req, res, next) => + app.post "/project/:project_id/doc/:doc_id/flush", (req, res, next) => @flushDoc req.params.doc_id, (error) -> if error? res.send 500 diff --git a/services/document-updater/test/unit/coffee/DocOpsManager/DocOpsManagerTests.coffee b/services/document-updater/test/unit/coffee/DocOpsManager/DocOpsManagerTests.coffee index fe13d1cd55..1680a367d2 100644 --- a/services/document-updater/test/unit/coffee/DocOpsManager/DocOpsManagerTests.coffee +++ b/services/document-updater/test/unit/coffee/DocOpsManager/DocOpsManagerTests.coffee @@ -311,7 +311,7 @@ describe "DocOpsManager", -> beforeEach -> @op = "mock-op" @RedisManager.pushDocOp = sinon.stub().callsArgWith(2, null, @version = 42) - @TrackChangesManager.pushUncompressedHistoryOp = sinon.stub().callsArg(2) + @TrackChangesManager.pushUncompressedHistoryOp = sinon.stub().callsArg(3) @DocOpsManager.pushDocOp @project_id, @doc_id, @op, @callback it "should push the op in to the docOps list", -> @@ -321,7 +321,7 @@ describe "DocOpsManager", -> it "should push the op into the pushUncompressedHistoryOp", -> @TrackChangesManager.pushUncompressedHistoryOp - .calledWith(@doc_id, @op) + .calledWith(@project_id, @doc_id, @op) .should.equal true it "should call the callback with the version", -> diff --git a/services/document-updater/test/unit/coffee/TrackChangesManager/TrackChangesManagerTests.coffee b/services/document-updater/test/unit/coffee/TrackChangesManager/TrackChangesManagerTests.coffee index dd72937c39..148eeb33bb 100644 --- a/services/document-updater/test/unit/coffee/TrackChangesManager/TrackChangesManagerTests.coffee +++ b/services/document-updater/test/unit/coffee/TrackChangesManager/TrackChangesManagerTests.coffee @@ -10,6 +10,7 @@ describe "TrackChangesManager", -> "settings-sharelatex": @Settings = {} "logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() } "./RedisManager": @RedisManager = {} + @project_id = "mock-project-id" @doc_id = "mock-doc-id" @callback = sinon.stub() @@ -21,11 +22,11 @@ describe "TrackChangesManager", -> describe "successfully", -> beforeEach -> @request.post = sinon.stub().callsArgWith(1, null, statusCode: 204) - @TrackChangesManager.flushDocChanges @doc_id, @callback + @TrackChangesManager.flushDocChanges @project_id, @doc_id, @callback it "should send a request to the track changes api", -> @request.post - .calledWith("#{@Settings.apis.trackchanges.url}/doc/#{@doc_id}/flush") + .calledWith("#{@Settings.apis.trackchanges.url}/project/#{@project_id}/doc/#{@doc_id}/flush") .should.equal true it "should return the callback", -> @@ -34,7 +35,7 @@ describe "TrackChangesManager", -> describe "when the track changes api returns an error", -> beforeEach -> @request.post = sinon.stub().callsArgWith(1, null, statusCode: 500) - @TrackChangesManager.flushDocChanges @doc_id, @callback + @TrackChangesManager.flushDocChanges @project_id, @doc_id, @callback it "should return the callback with an error", -> @callback.calledWith(new Error("track changes api return non-success code: 500")).should.equal true @@ -42,7 +43,7 @@ describe "TrackChangesManager", -> describe "pushUncompressedHistoryOp", -> beforeEach -> @op = "mock-op" - @TrackChangesManager.flushDocChanges = sinon.stub().callsArg(1) + @TrackChangesManager.flushDocChanges = sinon.stub().callsArg(2) describe "when the doc is under the load manager threshold", -> beforeEach -> @@ -52,7 +53,7 @@ describe "TrackChangesManager", -> describe "pushing the op", -> beforeEach -> @RedisManager.pushUncompressedHistoryOp = sinon.stub().callsArgWith(2, null, 1) - @TrackChangesManager.pushUncompressedHistoryOp @doc_id, @op, @callback + @TrackChangesManager.pushUncompressedHistoryOp @project_id, @doc_id, @op, @callback it "should push the op into redis", -> @RedisManager.pushUncompressedHistoryOp @@ -69,25 +70,26 @@ describe "TrackChangesManager", -> beforeEach -> @RedisManager.pushUncompressedHistoryOp = sinon.stub().callsArgWith(2, null, 2 * @TrackChangesManager.FLUSH_EVERY_N_OPS) - @TrackChangesManager.pushUncompressedHistoryOp @doc_id, @op, @callback + @TrackChangesManager.pushUncompressedHistoryOp @project_id, @doc_id, @op, @callback it "should tell the track changes api to flush", -> @TrackChangesManager.flushDocChanges - .calledWith(@doc_id) + .calledWith(@project_id, @doc_id) .should.equal true describe "when TrackChangesManager errors", -> beforeEach -> @RedisManager.pushUncompressedHistoryOp = sinon.stub().callsArgWith(2, null, 2 * @TrackChangesManager.FLUSH_EVERY_N_OPS) - @TrackChangesManager.flushDocChanges = sinon.stub().callsArgWith(1, @error = new Error("oops")) - @TrackChangesManager.pushUncompressedHistoryOp @doc_id, @op, @callback + @TrackChangesManager.flushDocChanges = sinon.stub().callsArgWith(2, @error = new Error("oops")) + @TrackChangesManager.pushUncompressedHistoryOp @project_id, @doc_id, @op, @callback it "should log out the error", -> @logger.error .calledWith( err: @error doc_id: @doc_id + project_id: @project_id "error flushing doc to track changes api" ) .should.equal true @@ -97,7 +99,7 @@ describe "TrackChangesManager", -> @RedisManager.getHistoryLoadManagerThreshold = sinon.stub().callsArgWith(0, null, 40) @TrackChangesManager.getLoadManagerBucket = sinon.stub().returns(50) @RedisManager.pushUncompressedHistoryOp = sinon.stub().callsArgWith(2, null, 1) - @TrackChangesManager.pushUncompressedHistoryOp @doc_id, @op, @callback + @TrackChangesManager.pushUncompressedHistoryOp @project_id, @doc_id, @op, @callback it "should not push the op", -> @RedisManager.pushUncompressedHistoryOp.called.should.equal false