From 52d6b710bd1f2a327e7ad3dd4b243dd725441cee Mon Sep 17 00:00:00 2001 From: Hayden Faulds Date: Wed, 28 Feb 2018 17:31:43 +0000 Subject: [PATCH] add ability to resync project structure --- services/document-updater/app.coffee | 3 ++- .../app/coffee/HistoryManager.coffee | 12 ++++++++++++ .../app/coffee/HttpController.coffee | 8 ++++++++ .../document-updater/app/coffee/RedisManager.coffee | 8 ++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/services/document-updater/app.coffee b/services/document-updater/app.coffee index 7c8792aa29..2408b164f0 100644 --- a/services/document-updater/app.coffee +++ b/services/document-updater/app.coffee @@ -47,7 +47,8 @@ app.post '/project/:project_id/doc/:doc_id', HttpCont app.post '/project/:project_id/doc/:doc_id/flush', HttpController.flushDocIfLoaded app.delete '/project/:project_id/doc/:doc_id', HttpController.flushAndDeleteDoc app.delete '/project/:project_id', HttpController.deleteProject -app.post '/project/:project_id', HttpController.updateProject +app.post '/project/:project_id', HttpController.updateProject +app.post '/project/:project_id/resync', HttpController.resyncProject app.post '/project/:project_id/flush', HttpController.flushProject app.post '/project/:project_id/doc/:doc_id/change/:change_id/accept', HttpController.acceptChanges app.post '/project/:project_id/doc/:doc_id/change/accept', HttpController.acceptChanges diff --git a/services/document-updater/app/coffee/HistoryManager.coffee b/services/document-updater/app/coffee/HistoryManager.coffee index 3ccc42e97f..15b44475a2 100644 --- a/services/document-updater/app/coffee/HistoryManager.coffee +++ b/services/document-updater/app/coffee/HistoryManager.coffee @@ -2,6 +2,7 @@ Settings = require "settings-sharelatex" request = require "request" logger = require "logger-sharelatex" HistoryRedisManager = require "./HistoryRedisManager" +RedisManager = require "./RedisManager" module.exports = HistoryManager = flushDocChangesAsync: (project_id, doc_id) -> @@ -61,3 +62,14 @@ module.exports = HistoryManager = prevBlock = Math.floor(previousLength / threshold) newBlock = Math.floor(length / threshold) return newBlock != prevBlock + + resyncProject: (project_id, docs, files, callback) -> + RedisManager.resyncProjectStructure project_id, docs, files, (error) -> + return callback(error) if error? + callback null + + #jobs = _.union + #_.map docs, (doc) -> RedisManager.resyncDoc project_id, doc + #_.map files, (files) -> RedisManager.resyncFile project_id, file + + #async.series jobs, callback diff --git a/services/document-updater/app/coffee/HttpController.coffee b/services/document-updater/app/coffee/HttpController.coffee index 650ee07ae2..3793146f38 100644 --- a/services/document-updater/app/coffee/HttpController.coffee +++ b/services/document-updater/app/coffee/HttpController.coffee @@ -169,3 +169,11 @@ module.exports = HttpController = return next(error) if error? logger.log project_id: project_id, "updated project via http" res.send 204 # No Content + + resyncProject: (req, res, next = (error) ->) -> + project_id = req.params.project_id + {docs, files} = req.body + + HistoryManager.resyncProject project_id, docs, files, (error) -> + return next(error) if error? + res.send 204 diff --git a/services/document-updater/app/coffee/RedisManager.coffee b/services/document-updater/app/coffee/RedisManager.coffee index cd12b497a1..3de65ef768 100644 --- a/services/document-updater/app/coffee/RedisManager.coffee +++ b/services/document-updater/app/coffee/RedisManager.coffee @@ -321,6 +321,14 @@ module.exports = RedisManager = getDocIdsInProject: (project_id, callback = (error, doc_ids) ->) -> rclient.smembers keys.docsInProject(project_id: project_id), callback + resyncProjectStructure: (project_id, docs, files, callback) -> + update = + projectStructure: { docs, files } + meta: + ts: new Date() + jsonUpdate = JSON.stringify update + rclient.rpush projectHistoryKeys.projectHistoryOps({project_id}), jsonUpdate, callback + _serializeRanges: (ranges, callback = (error, serializedRanges) ->) -> jsonRanges = JSON.stringify(ranges) if jsonRanges? and jsonRanges.length > MAX_RANGES_SIZE