From 42a1211ba717765bfc40adcc9e71bad266a472f7 Mon Sep 17 00:00:00 2001
From: Miguel Serrano <mserranom@users.noreply.github.com>
Date: Wed, 7 Apr 2021 18:06:41 +0200
Subject: [PATCH] Merge pull request #3888 from
 overleaf/jpa-hotfix-soft-failure-for-missing-deleted-docs

[EditorHttpController] joinProject: ignore err when fetching deletedDocs

GitOrigin-RevId: e2e2e5172de04cebb4a951739ac4222645fdd289
---
 .../Features/Editor/EditorHttpController.js   | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/services/web/app/src/Features/Editor/EditorHttpController.js b/services/web/app/src/Features/Editor/EditorHttpController.js
index 9235057dbe..6d74bffa78 100644
--- a/services/web/app/src/Features/Editor/EditorHttpController.js
+++ b/services/web/app/src/Features/Editor/EditorHttpController.js
@@ -14,6 +14,7 @@ const Errors = require('../Errors/Errors')
 const HttpErrorHandler = require('../Errors/HttpErrorHandler')
 const ProjectEntityUpdateHandler = require('../Project/ProjectEntityUpdateHandler')
 const DocstoreManager = require('../Docstore/DocstoreManager')
+const logger = require('logger-sharelatex')
 const { expressify } = require('../../util/promises')
 
 module.exports = {
@@ -100,9 +101,21 @@ async function _buildJoinProjectView(req, projectId, userId) {
   if (project == null) {
     throw new Errors.NotFoundError('project not found')
   }
-  const deletedDocsFromDocstore = await DocstoreManager.promises.getAllDeletedDocs(
-    projectId
-  )
+  let deletedDocsFromDocstore = []
+  try {
+    deletedDocsFromDocstore = await DocstoreManager.promises.getAllDeletedDocs(
+      projectId
+    )
+  } catch (err) {
+    // The query in docstore is not optimized at this time and fails for
+    // projects with many very large, deleted documents.
+    // Not serving the user with deletedDocs from docstore may cause a minor
+    //  UI issue with deleted files that are no longer available for restore.
+    logger.warn(
+      { err, projectId },
+      'soft-failure when fetching deletedDocs from docstore'
+    )
+  }
   const members = await CollaboratorsGetter.promises.getInvitedMembersWithPrivilegeLevels(
     projectId
   )