From 3ab9e3d055eb877ce727b0c998c59c9f4865b7eb Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Thu, 28 Jul 2022 15:39:05 +0100 Subject: [PATCH] Merge pull request #9010 from overleaf/jpa-ignore-404 [web] do not consider a 404 on the main pdf url as pdf caching failure GitOrigin-RevId: 2d57ee92b79227baa58f2e71edbcf63a4848435d --- .../pdf-preview/util/pdf-caching-transport.js | 13 ++++++++++++- .../js/features/pdf-preview/util/pdf-caching.js | 16 ++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js b/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js index 5e6ccb8159..f347bde51d 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-caching-transport.js @@ -59,6 +59,15 @@ export function generatePdfCachingTransportFactory(PDFJS) { abortSignal, }) .catch(err => { + if ( + err.message === 'non successful response status: 404' && + OError.getFullInfo(err).url === this.url + ) { + // Do not consider a 404 on the main pdf url as pdf caching failure. + // Still, bail out during the initial launch phase. + failedOnce = true + throw new PDFJS.MissingPDFException() + } metrics.failedCount++ failedOnce = true if (!enablePdfCaching) { @@ -75,7 +84,9 @@ export function generatePdfCachingTransportFactory(PDFJS) { .catch(err => { err = OError.tag(err, 'fatal pdf download error', errorInfo) console.error(err) - captureException(err, { tags: { fromPdfCaching: true } }) + if (!(err instanceof PDFJS.MissingPDFException)) { + captureException(err, { tags: { fromPdfCaching: true } }) + } this.reject(err) }) } diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js b/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js index e28a254b9c..7dd6e83431 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-caching.js @@ -274,12 +274,16 @@ function checkChunkResponse(response) { * @param {AbortSignal} abortSignal */ export async function fallbackRequest({ url, start, end, abortSignal }) { - const response = await fetch(url, { - headers: { Range: `bytes=${start}-${end - 1}` }, - signal: abortSignal, - }) - checkChunkResponse(response) - return response.arrayBuffer() + try { + const response = await fetch(url, { + headers: { Range: `bytes=${start}-${end - 1}` }, + signal: abortSignal, + }) + checkChunkResponse(response) + return await response.arrayBuffer() + } catch (e) { + throw OError.tag(e, 'fallback request failed', { url, start, end }) + } } /**