From a36bdbabae63b1729154e51b6612f86e3a3448a4 Mon Sep 17 00:00:00 2001 From: Prajjwal Date: Fri, 17 May 2024 18:45:54 +0530 Subject: [PATCH] adds custom timeout --- packages/warp-cache/package.json | 2 +- .../src/internal/cacheHttpClient.ts | 3 +-- .../warp-cache/src/internal/downloadUtils.ts | 27 ++++++++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/warp-cache/package.json b/packages/warp-cache/package.json index 00ec17c1..b3d6ad3e 100644 --- a/packages/warp-cache/package.json +++ b/packages/warp-cache/package.json @@ -1,6 +1,6 @@ { "name": "github-actions.warp-cache", - "version": "1.1.10", + "version": "1.1.11", "preview": true, "description": "Github action to use WarpBuild's in-house cache offering", "keywords": [ diff --git a/packages/warp-cache/src/internal/cacheHttpClient.ts b/packages/warp-cache/src/internal/cacheHttpClient.ts index fc8c649e..f0219999 100644 --- a/packages/warp-cache/src/internal/cacheHttpClient.ts +++ b/packages/warp-cache/src/internal/cacheHttpClient.ts @@ -254,8 +254,7 @@ export async function downloadCacheSingleThread( retryOptions: { autoRetry: false, maxRetries: 1 - }, - timeout: 300 + } }) await downloadCacheGCP(storage, archiveLocation, archivePath) break diff --git a/packages/warp-cache/src/internal/downloadUtils.ts b/packages/warp-cache/src/internal/downloadUtils.ts index 5dd04210..f6c79d53 100644 --- a/packages/warp-cache/src/internal/downloadUtils.ts +++ b/packages/warp-cache/src/internal/downloadUtils.ts @@ -327,13 +327,32 @@ export async function downloadCacheGCP( archivePath: string ) { try { + const timeoutDuration = 300000 // 5 minutes + + const timeoutPromise = new Promise((_, reject) => + setTimeout(() => reject(new Error('Download timed out')), timeoutDuration) + ) + const {bucketName, objectName} = utils.retrieveGCSBucketAndObjectName(archiveLocation) - await storage.bucket(bucketName).file(objectName).download({ - destination: archivePath, - validation: 'crc32c' - }) + const downloadPromise = storage + .bucket(bucketName) + .file(objectName) + .download({ + destination: archivePath, + validation: 'crc32c' + }) + + try { + await Promise.race([downloadPromise, timeoutPromise]) + core.debug( + `Download completed for bucket: ${bucketName}, object: ${objectName}` + ) + } catch (error) { + core.debug(`Failed to download cache: ${error}`) + throw error + } } catch (error) { core.debug(`Failed to download cache: ${error}`) throw error