From 6377624d25fa9ae5ced47bd31628d34757fc724a Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Thu, 19 Mar 2026 08:10:30 +0100 Subject: [PATCH] [clsi] ignore download errors for binary files in compile from history (#32263) GitOrigin-RevId: 3c1940b2d56701ec4b07d1457ee1af2de317a047 --- services/clsi/app/js/HistoryResourceWriter.js | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/services/clsi/app/js/HistoryResourceWriter.js b/services/clsi/app/js/HistoryResourceWriter.js index 3fb68dd5d1..50ae0831d7 100644 --- a/services/clsi/app/js/HistoryResourceWriter.js +++ b/services/clsi/app/js/HistoryResourceWriter.js @@ -22,6 +22,7 @@ import UrlCache from './UrlCache.js' import OError from '@overleaf/o-error' import ClsiMetrics from './Metrics.js' import { promiseMapSettledWithLimit } from '@overleaf/promise-utils' +import Metrics from '@overleaf/metrics' const gzip = promisify(zlib.gzip) const gunzip = promisify(zlib.gunzip) @@ -482,19 +483,28 @@ export async function syncResourcesToDisk( if (!hash) { throw new OError('unexpected file without content and hash', { path }) } - const fallbackURL = null // no fallback - const lastModified = new Date(0) // content is static if (!createCacheFolder) { createCacheFolder = UrlCache.promises.createProjectDir(projectId) } await createCacheFolder - await UrlCache.promises.downloadUrlToFile( - projectId, - blobStore.getBlobURL(hash).href, - fallbackURL, - Path.join(compileDir, path), - lastModified - ) + const url = blobStore.getBlobURL(hash).href + try { + const fallbackURL = null // no fallback + const lastModified = new Date(0) // content is static + await UrlCache.promises.downloadUrlToFile( + projectId, + url, + fallbackURL, + Path.join(compileDir, path), + lastModified + ) + } catch (err) { + logger.err( + { err, projectId, path, resourceUrl: url }, + 'error downloading file for resources' + ) + Metrics.inc('download-failed') + } } } )