1
0
Fork 0

changes to multipart download for s3

pull/1935/head
Prajjwal 2024-06-04 11:04:28 +05:30
parent d78ac4e851
commit 86e2ed1cf5
3 changed files with 29 additions and 41 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "github-actions.warp-cache", "name": "github-actions.warp-cache",
"version": "1.1.15", "version": "1.1.16",
"preview": true, "preview": true,
"description": "Github action to use WarpBuild's in-house cache offering", "description": "Github action to use WarpBuild's in-house cache offering",
"keywords": [ "keywords": [

View File

@ -136,25 +136,6 @@ export async function restoreCache(
return cacheKey return cacheKey
} }
try {
let readStream: NodeJS.ReadableStream | undefined
let downloadCommandPipe = getDownloadCommandPipeForWget(
cacheEntry?.s3?.pre_signed_url
)
await extractStreamingTar(
readStream,
archivePath,
compressionMethod,
downloadCommandPipe
)
} catch (error) {
core.debug(`Failed to download cache: ${error}`)
core.info(
`Streaming download failed. Likely a cloud provider issue. Retrying with multipart download`
)
// Wait 1 second
await new Promise(resolve => setTimeout(resolve, 1000))
try { try {
await cacheHttpClient.downloadCache( await cacheHttpClient.downloadCache(
cacheEntry.provider, cacheEntry.provider,
@ -178,7 +159,6 @@ export async function restoreCache(
) )
await extractTar(archivePath, compressionMethod) await extractTar(archivePath, compressionMethod)
}
core.info('Cache restored successfully') core.info('Cache restored successfully')
break break

View File

@ -9,6 +9,7 @@ import * as crypto from 'crypto'
import * as utils from './cacheUtils' import * as utils from './cacheUtils'
import {CompressionMethod} from './constants' import {CompressionMethod} from './constants'
import os from 'os'
import { import {
InternalCacheOptions, InternalCacheOptions,
ITypedResponseWithError, ITypedResponseWithError,
@ -211,7 +212,14 @@ export async function downloadCache(
): Promise<void> { ): Promise<void> {
switch (provider) { switch (provider) {
case 's3': case 's3':
await downloadCacheMultiConnection(archiveLocation, archivePath, 8) {
const numberOfConnections = 2 + os.cpus().length
await downloadCacheMultiConnection(
archiveLocation,
archivePath,
Math.min(numberOfConnections, 30)
)
}
break break
case 'gcs': { case 'gcs': {
if (!gcsToken) { if (!gcsToken) {