From 78c5baafab88848f3643f6ded10a07c7b092287c Mon Sep 17 00:00:00 2001 From: Sankalp Kotewar <98868223+kotewar@users.noreply.github.com> Date: Thu, 18 Aug 2022 05:32:49 +0000 Subject: [PATCH] Updated cache download to segment download --- README.md | 5 +++++ RELEASES.md | 2 +- __tests__/options.test.ts | 2 +- src/options.ts | 13 +++++++------ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 541b115..58f959e 100644 --- a/README.md +++ b/README.md @@ -42,3 +42,8 @@ const restoreKeys = [ const cacheKey = await cache.restoreCache(paths, key, restoreKeys) ``` +##### Cache segment restore timeout + +Starting `v3.0.5` of `actions/toolkit`, in case any issue occurs while downloading the cache, the download will be aborted by default within 1 hour if any `segment` doesn't download completely. A `segment` is limited to size of `1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner. So for any cache that exceeds the size of one segment, multiple segments will be downloaded in sequence to complete the download. + +To customise the `segment` download timeout, an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MINS` needs to be set with the timeout minutes. This way the download wouldn't get stuck forever and proceed to next step in the workflow without any problem. diff --git a/RELEASES.md b/RELEASES.md index 8ffe364..f654b0a 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -83,4 +83,4 @@ - Bug fixes for download stuck issue [#810](https://github.com/actions/cache/issues/810). ### 3.0.4 -- Allowing users to provide a custom timeout as input for aborting cache download using an environment variable `CACHE_DOWNLOAD_TIMEOUT_MINS`. Default is 1 hour. \ No newline at end of file +- Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `CACHE_DOWNLOAD_TIMEOUT_MINS`. Default is 1 hour. \ No newline at end of file diff --git a/__tests__/options.test.ts b/__tests__/options.test.ts index e2cdf46..83d9b22 100644 --- a/__tests__/options.test.ts +++ b/__tests__/options.test.ts @@ -63,7 +63,7 @@ test('getDownloadOptions overrides download timeout minutes', async () => { timeoutInMs: 20000, segmentTimeoutInMs: 3600000 } - process.env.CACHE_DOWNLOAD_TIMEOUT_MINS = '10' + process.env.SEGMENT_DOWNLOAD_TIMEOUT_MINS = '10' const actualOptions = getDownloadOptions(expectedOptions) expect(actualOptions.useAzureSdk).toEqual(expectedOptions.useAzureSdk) diff --git a/src/options.ts b/src/options.ts index d3f716b..652899a 100644 --- a/src/options.ts +++ b/src/options.ts @@ -112,20 +112,21 @@ export function getDownloadOptions(copy?: DownloadOptions): DownloadOptions { result.segmentTimeoutInMs = copy.segmentTimeoutInMs } } - const customDownloadTimeoutMins = process.env['CACHE_DOWNLOAD_TIMEOUT_MINS'] + const segmentDownloadTimeoutMins = + process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS'] if ( - customDownloadTimeoutMins && - !isNaN(Number(customDownloadTimeoutMins)) && - isFinite(Number(customDownloadTimeoutMins)) + segmentDownloadTimeoutMins && + !isNaN(Number(segmentDownloadTimeoutMins)) && + isFinite(Number(segmentDownloadTimeoutMins)) ) { - result.segmentTimeoutInMs = Number(customDownloadTimeoutMins) * 60 * 1000 + result.segmentTimeoutInMs = Number(segmentDownloadTimeoutMins) * 60 * 1000 } core.debug(`Use Azure SDK: ${result.useAzureSdk}`) core.debug(`Download concurrency: ${result.downloadConcurrency}`) core.debug(`Request timeout (ms): ${result.timeoutInMs}`) core.debug( - `Cache download timeout mins env var: ${process.env['CACHE_DOWNLOAD_TIMEOUT_MINS']}` + `Cache segment download timeout mins env var: ${process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS']}` ) core.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`)