From b9b0596d8307e5f576cd2b49133ba39b3fb550cf Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Tue, 27 Jun 2017 16:58:20 +0100 Subject: [PATCH] optimistically load all docs --- .../docstore/app/coffee/DocManager.coffee | 31 +++++++++++++------ .../test/unit/coffee/DocManagerTests.coffee | 23 ++++++++++++++ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/services/docstore/app/coffee/DocManager.coffee b/services/docstore/app/coffee/DocManager.coffee index d9f0bd6747..45d2158dbf 100644 --- a/services/docstore/app/coffee/DocManager.coffee +++ b/services/docstore/app/coffee/DocManager.coffee @@ -55,17 +55,28 @@ module.exports = DocManager = return callback(err) callback(err, doc) - getAllNonDeletedDocs: (project_id, filter, callback = (error, docs) ->) -> - DocArchive.unArchiveAllDocs project_id, (error) -> - if error? + _getAllDocs: (project_id, filter, callback = (error, docs) ->) -> + MongoManager.getProjectsDocs project_id, {include_deleted: false}, filter, (error, docs) -> + if err? return callback(error) - MongoManager.getProjectsDocs project_id, {include_deleted: false}, filter, (error, docs) -> - if err? - return callback(error) - else if !docs? - return callback new Errors.NotFoundError("No docs for project #{project_id}") - else - return callback(null, docs) + else if !docs? + return callback new Errors.NotFoundError("No docs for project #{project_id}") + else + callback(null, docs) + + getAllNonDeletedDocs: (project_id, filter, callback = (error, docs) ->) -> + DocManager._getAllDocs project_id, filter, (error, docs) -> + return callback(error) if error? + # check if any docs have been archived + docsInS3 = (doc for doc in docs when doc?.inS3) + if docsInS3.length > 0 + DocArchive.unArchiveAllDocs project_id, (error) -> + if error? + logger.err err:error, project_id:project_id, "error unarchiving docs" + return callback(error) + DocManager._getAllDocs project_id, filter, callback + else + return callback(null, docs) updateDoc: (project_id, doc_id, lines, version, ranges, callback = (error, modified, rev) ->) -> if !lines? or !version? or !ranges? diff --git a/services/docstore/test/unit/coffee/DocManagerTests.coffee b/services/docstore/test/unit/coffee/DocManagerTests.coffee index 082badd0f3..00cf54f04e 100644 --- a/services/docstore/test/unit/coffee/DocManagerTests.coffee +++ b/services/docstore/test/unit/coffee/DocManagerTests.coffee @@ -215,6 +215,29 @@ describe "DocManager", -> .calledWith(new Errors.NotFoundError("No docs for project #{@project_id}")) .should.equal true + describe "when there are some archived docs for the project", -> + beforeEach -> + @stubs = [{ _id: @doc_id, project_id: @project_id, inS3:true }] + @docs = [{ _id: @doc_id, project_id: @project_id, lines: ["mock-lines"] }] + @MongoManager.getProjectsDocs = sinon.stub() + .callsArgWith(3, null, @stubs) # first call + .callsArgWith(3, null, @docs) # second call (after unarchiving) + @DocArchiveManager.unArchiveAllDocs = sinon.stub().callsArgWith(1, null) + @DocManager.getAllNonDeletedDocs @project_id, @filter, @callback + + it "should get the project from the database", -> + @MongoManager.getProjectsDocs + .calledWith(@project_id, {include_deleted: false}, @filter) + .should.equal true + + it "should unarchive the documents", -> + @DocArchiveManager.unArchiveAllDocs + .calledWith(@project_id) + .should.equal true + + it "should return the docs", -> + @callback.calledWith(null, @docs).should.equal true + describe "deleteDoc", -> describe "when the doc exists", -> beforeEach ->