From 0fd24b5133f74473efc912b2d13ce3b28434117e Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Fri, 30 Jul 2021 16:13:48 +0100 Subject: [PATCH] peek at docs without fetching from mongo --- services/document-updater/app.js | 1 + .../document-updater/app/js/HttpController.js | 18 ++++++++++++++++++ .../js/HttpController/HttpControllerTests.js | 1 + 3 files changed, 20 insertions(+) diff --git a/services/document-updater/app.js b/services/document-updater/app.js index c724b74d33..61f254d7f2 100644 --- a/services/document-updater/app.js +++ b/services/document-updater/app.js @@ -53,6 +53,7 @@ app.param('doc_id', (req, res, next, docId) => { }) app.get('/project/:project_id/doc/:doc_id', HttpController.getDoc) +app.get('/project/:project_id/doc/:doc_id/peek', HttpController.peekDoc) // temporarily keep the GET method for backwards compatibility app.get('/project/:project_id/doc', HttpController.getProjectDocsAndFlushIfOld) // will migrate to the POST method of get_and_flush_if_old instead diff --git a/services/document-updater/app/js/HttpController.js b/services/document-updater/app/js/HttpController.js index 6bffb6ec4a..4ea7a00d4c 100644 --- a/services/document-updater/app/js/HttpController.js +++ b/services/document-updater/app/js/HttpController.js @@ -1,6 +1,7 @@ const DocumentManager = require('./DocumentManager') const HistoryManager = require('./HistoryManager') const ProjectManager = require('./ProjectManager') +const RedisManager = require('./RedisManager') const Errors = require('./Errors') const logger = require('logger-sharelatex') const Settings = require('@overleaf/settings') @@ -11,6 +12,7 @@ const async = require('async') module.exports = { getDoc, + peekDoc, getProjectDocsAndFlushIfOld, clearProjectState, setDoc, @@ -65,6 +67,22 @@ function getDoc(req, res, next) { ) } +// return the doc from redis if present, but don't load it from mongo +function peekDoc(req, res, next) { + const docId = req.params.doc_id + const projectId = req.params.project_id + logger.log({ projectId, docId }, 'peeking at doc via http') + RedisManager.getDoc(projectId, docId, function (error, lines, version) { + if (error) { + return next(error) + } + if (lines == null || version == null) { + return next(new Errors.NotFoundError('document not found')) + } + res.json({ id: docId, lines, version }) + }) +} + function _getTotalSizeOfLines(lines) { let size = 0 for (const line of lines) { diff --git a/services/document-updater/test/unit/js/HttpController/HttpControllerTests.js b/services/document-updater/test/unit/js/HttpController/HttpControllerTests.js index 3a926d5e0c..7bea76edd0 100644 --- a/services/document-updater/test/unit/js/HttpController/HttpControllerTests.js +++ b/services/document-updater/test/unit/js/HttpController/HttpControllerTests.js @@ -14,6 +14,7 @@ describe('HttpController', function () { './ProjectManager': (this.ProjectManager = {}), './ProjectFlusher': { flushAllProjects() {} }, './DeleteQueueManager': (this.DeleteQueueManager = {}), + './RedisManager': (this.RedisManager = {}), './Metrics': (this.Metrics = {}), './Errors': Errors, },