mirror of
https://github.com/overleaf/overleaf.git
synced 2025-03-06 07:23:22 +00:00
Merge pull request #59 from sharelatex/bg-reset-project-state
add endpoint to clear project state
This commit is contained in:
commit
ad745f133d
6 changed files with 42 additions and 0 deletions
|
@ -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/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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -105,3 +105,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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue