From 8f9b7c7d7f3af702061727e299c84f445031ab56 Mon Sep 17 00:00:00 2001 From: Daz DeBoer Date: Tue, 16 Aug 2022 12:36:07 -0600 Subject: [PATCH] Add a configurable timeout for cache reads Fixes #369 --- action.yml | 4 ++++ src/cache-utils.ts | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 94488f2..f777d49 100644 --- a/action.yml +++ b/action.yml @@ -66,6 +66,10 @@ inputs: description: When 'true', the action will not attempt to restore the Gradle User Home entries from other Jobs. required: false default: false + cache-read-timeout: + description: A timeout value in seconds for cache reads. Requests taking longer that this will be aborted. + required: true + default: 600 workflow-job-context: description: Used to uniquely identify the current job invocation. Defaults to the matrix values for this job; this should not be overridden by users (INTERNAL). required: false diff --git a/src/cache-utils.ts b/src/cache-utils.ts index 4039995..b2951d7 100644 --- a/src/cache-utils.ts +++ b/src/cache-utils.ts @@ -15,6 +15,7 @@ const JOB_CONTEXT_PARAMETER = 'workflow-job-context' const CACHE_DISABLED_PARAMETER = 'cache-disabled' const CACHE_READONLY_PARAMETER = 'cache-read-only' const CACHE_WRITEONLY_PARAMETER = 'cache-write-only' +const CACHE_TIMEOUT_PARAMETER = 'cache-read-timeout' const STRICT_CACHE_MATCH_PARAMETER = 'gradle-home-cache-strict-match' const CACHE_DEBUG_VAR = 'GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED' @@ -43,6 +44,10 @@ export function isCacheDebuggingEnabled(): boolean { return process.env[CACHE_DEBUG_VAR] ? true : false } +function getCacheReadTimeoutMs(): number { + return parseInt(core.getInput(CACHE_TIMEOUT_PARAMETER)) * 1000 +} + /** * Represents a key used to restore a cache entry. * The Github Actions cache will first try for an exact match on the key. @@ -148,7 +153,9 @@ export async function restoreCache( ): Promise { listener.markRequested(cacheKey, cacheRestoreKeys) try { - const restoredEntry = await cache.restoreCache(cachePath, cacheKey, cacheRestoreKeys) + const restoredEntry = await cache.restoreCache(cachePath, cacheKey, cacheRestoreKeys, { + segmentTimeoutInMs: getCacheReadTimeoutMs() + }) if (restoredEntry !== undefined) { listener.markRestored(restoredEntry.key, restoredEntry.size) }