From 744b771d2bcef5e0e568509cd844ea9cd5c92241 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Wed, 5 Feb 2025 02:49:46 +0000 Subject: [PATCH] support for upload retry --- .../remoteUpload/providers/b2/index.js | 62 ++++++++++++------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/packages/server/services/files/services/remoteUpload/providers/b2/index.js b/packages/server/services/files/services/remoteUpload/providers/b2/index.js index f9ba8a5b..fb0c7c0e 100644 --- a/packages/server/services/files/services/remoteUpload/providers/b2/index.js +++ b/packages/server/services/files/services/remoteUpload/providers/b2/index.js @@ -8,6 +8,7 @@ export default async function b2Upload({ metadata = {}, targetFilename, isDirectory, + retryNumber = 0 }) { if (isDirectory) { let files = await fs.promises.readdir(source) @@ -39,31 +40,48 @@ export default async function b2Upload({ } } - await global.b2Storage.authorize() + try { + await global.b2Storage.authorize() - if (!fs.existsSync(source)) { - throw new OperationError(500, "File not found") + if (!fs.existsSync(source)) { + throw new OperationError(500, "File not found") + } + + const uploadUrl = await global.b2Storage.getUploadUrl({ + bucketId: process.env.B2_BUCKET_ID, + }) + + console.debug(`Uploading object to B2 Storage >`, { + source: source, + remote: remotePath, + }) + + const data = await fs.promises.readFile(source) + + await global.b2Storage.uploadFile({ + uploadUrl: uploadUrl.data.uploadUrl, + uploadAuthToken: uploadUrl.data.authorizationToken, + fileName: remotePath, + data: data, + info: metadata + }) + } catch (error) { + console.error(error) + + if (retryNumber < 5) { + return await b2Upload({ + source, + remotePath, + metadata, + targetFilename, + isDirectory, + retryNumber: retryNumber + 1 + }) + } + + throw new OperationError(500, "B2 upload failed") } - const uploadUrl = await global.b2Storage.getUploadUrl({ - bucketId: process.env.B2_BUCKET_ID, - }) - - console.debug(`Uploading object to B2 Storage >`, { - source: source, - remote: remotePath, - }) - - const data = await fs.promises.readFile(source) - - await global.b2Storage.uploadFile({ - uploadUrl: uploadUrl.data.uploadUrl, - uploadAuthToken: uploadUrl.data.authorizationToken, - fileName: remotePath, - data: data, - info: metadata - }) - return { id: remotePath, url: `https://${process.env.B2_CDN_ENDPOINT}/${process.env.B2_BUCKET}/${remotePath}`,