From f34c12fdc79fd7d152ef4f970dc32e0a49a73a2b Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Fri, 8 Sep 2017 15:50:26 +0100 Subject: [PATCH 1/2] add endpoint to clear project state --- services/document-updater/app.coffee | 1 + .../app/coffee/HttpController.coffee | 11 +++++++++++ .../app/coffee/ProjectManager.coffee | 3 +++ .../app/coffee/RedisManager.coffee | 3 +++ .../ProjectManager/getProjectDocsTests.coffee | 15 +++++++++++++++ .../coffee/RedisManager/RedisManagerTests.coffee | 9 +++++++++ 6 files changed, 42 insertions(+) diff --git a/services/document-updater/app.coffee b/services/document-updater/app.coffee index a580f8f113..ba46a933db 100644 --- a/services/document-updater/app.coffee +++ b/services/document-updater/app.coffee @@ -39,6 +39,7 @@ app.param 'doc_id', (req, res, next, doc_id) -> app.get '/project/:project_id/doc/:doc_id', HttpController.getDoc app.get '/project/:project_id/doc', HttpController.getProjectDocs +app.post '/project/:project_id/clear', HttpController.clearProjectState app.post '/project/:project_id/doc/:doc_id', HttpController.setDoc app.post '/project/:project_id/doc/:doc_id/flush', HttpController.flushDocIfLoaded app.delete '/project/:project_id/doc/:doc_id', HttpController.flushAndDeleteDoc diff --git a/services/document-updater/app/coffee/HttpController.coffee b/services/document-updater/app/coffee/HttpController.coffee index 369b429ab1..1c8e70656d 100644 --- a/services/document-updater/app/coffee/HttpController.coffee +++ b/services/document-updater/app/coffee/HttpController.coffee @@ -59,6 +59,17 @@ module.exports = HttpController = logger.log project_id: project_id, result: ("#{doc._id}:#{doc.v}" for doc in result), "got docs via http" res.send result + clearProjectState: (req, res, next = (error) ->) -> + project_id = req.params.project_id + timer = new Metrics.Timer("http.clearProjectState") + logger.log project_id: project_id, "clearing project state via http" + ProjectManager.clearProjectState project_id, (error) -> + timer.done() + if error? + return next(error) + else + res.send 200 + setDoc: (req, res, next = (error) ->) -> doc_id = req.params.doc_id project_id = req.params.project_id diff --git a/services/document-updater/app/coffee/ProjectManager.coffee b/services/document-updater/app/coffee/ProjectManager.coffee index 60446485b0..5ecd0193f2 100644 --- a/services/document-updater/app/coffee/ProjectManager.coffee +++ b/services/document-updater/app/coffee/ProjectManager.coffee @@ -96,3 +96,6 @@ module.exports = ProjectManager = async.series jobs, (error) -> return callback(error) if error? callback(null, docs) + + clearProjectState: (project_id, callback = (error) ->) -> + RedisManager.clearProjectState project_id, callback diff --git a/services/document-updater/app/coffee/RedisManager.coffee b/services/document-updater/app/coffee/RedisManager.coffee index 718eb1f5b8..b233cdf7e7 100644 --- a/services/document-updater/app/coffee/RedisManager.coffee +++ b/services/document-updater/app/coffee/RedisManager.coffee @@ -102,6 +102,9 @@ module.exports = RedisManager = logger.log project_id: project_id, newState:newState, oldState: response[0], "checking project state" callback(null, response[0] isnt newState) + clearProjectState: (project_id, callback = (error) ->) -> + rclient.del keys.projectState(project_id:project_id), callback + getDoc : (project_id, doc_id, callback = (error, lines, version, ranges) ->)-> timer = new metrics.Timer("redis.get-doc") multi = rclient.multi() diff --git a/services/document-updater/test/unit/coffee/ProjectManager/getProjectDocsTests.coffee b/services/document-updater/test/unit/coffee/ProjectManager/getProjectDocsTests.coffee index 59840b048c..a983e09d34 100644 --- a/services/document-updater/test/unit/coffee/ProjectManager/getProjectDocsTests.coffee +++ b/services/document-updater/test/unit/coffee/ProjectManager/getProjectDocsTests.coffee @@ -99,3 +99,18 @@ describe "ProjectManager - getProjectDocs", -> it "should time the execution", -> @Metrics.Timer::done.called.should.equal true + + describe "clearing the project state with clearProjectState", -> + beforeEach (done) -> + @RedisManager.clearProjectState = sinon.stub().callsArg(1) + @ProjectManager.clearProjectState @project_id, (error) => + @callback(error) + done() + + it "should clear the project state", -> + @RedisManager.clearProjectState + .calledWith(@project_id) + .should.equal true + + it "should call the callback", -> + @callback.called.should.equal true diff --git a/services/document-updater/test/unit/coffee/RedisManager/RedisManagerTests.coffee b/services/document-updater/test/unit/coffee/RedisManager/RedisManagerTests.coffee index 61598974c6..0a5149c552 100644 --- a/services/document-updater/test/unit/coffee/RedisManager/RedisManagerTests.coffee +++ b/services/document-updater/test/unit/coffee/RedisManager/RedisManagerTests.coffee @@ -581,3 +581,12 @@ describe "RedisManager", -> .calledWith("DocsIn:#{@project_id}", @doc_id) .should.equal true + describe "clearProjectState", -> + beforeEach (done) -> + @rclient.del = sinon.stub().callsArg(1) + @RedisManager.clearProjectState @project_id, done + + it "should delete the project state", -> + @rclient.del + .calledWith("ProjectState:#{@project_id}") + .should.equal true From 3842a27278e758ac70f00621a7e3127e7a46125b Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Tue, 12 Sep 2017 11:39:18 +0100 Subject: [PATCH 2/2] change .../clear endpoint to .../clearState --- services/document-updater/app.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/document-updater/app.coffee b/services/document-updater/app.coffee index ba46a933db..dccedadd92 100644 --- a/services/document-updater/app.coffee +++ b/services/document-updater/app.coffee @@ -39,7 +39,7 @@ app.param 'doc_id', (req, res, next, doc_id) -> app.get '/project/:project_id/doc/:doc_id', HttpController.getDoc app.get '/project/:project_id/doc', HttpController.getProjectDocs -app.post '/project/:project_id/clear', HttpController.clearProjectState +app.post '/project/:project_id/clearState', HttpController.clearProjectState app.post '/project/:project_id/doc/:doc_id', HttpController.setDoc app.post '/project/:project_id/doc/:doc_id/flush', HttpController.flushDocIfLoaded app.delete '/project/:project_id/doc/:doc_id', HttpController.flushAndDeleteDoc