1
0
Fork 0

Better Artifact Telemetry + Increase Upload chunk size (#535)

* Differentiate user-agents for better internal telemetry

* Bump chunk size from 4 to 8 MB

* Update User-Agent Strings
pull/536/head
Konrad Pabjan 2020-07-30 17:23:28 +02:00 committed by GitHub
parent ccad19055e
commit 3a9dc00629
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 8 deletions

View File

@ -6,7 +6,7 @@ export function getUploadFileConcurrency(): number {
// When uploading large files that can't be uploaded with a single http call, this controls // When uploading large files that can't be uploaded with a single http call, this controls
// the chunk size that is used during upload // the chunk size that is used during upload
export function getUploadChunkSize(): number { export function getUploadChunkSize(): number {
return 4 * 1024 * 1024 // 4 MB Chunks return 8 * 1024 * 1024 // 8 MB Chunks
} }
// The maximum number of retries that can be attempted before an upload or download fails // The maximum number of retries that can be attempted before an upload or download fails

View File

@ -27,7 +27,10 @@ export class DownloadHttpClient {
private statusReporter: StatusReporter private statusReporter: StatusReporter
constructor() { constructor() {
this.downloadHttpManager = new HttpManager(getDownloadFileConcurrency()) this.downloadHttpManager = new HttpManager(
getDownloadFileConcurrency(),
'@actions/artifact-download'
)
// downloads are usually significantly faster than uploads so display status information every second // downloads are usually significantly faster than uploads so display status information every second
this.statusReporter = new StatusReporter(1000) this.statusReporter = new StatusReporter(1000)
} }

View File

@ -6,12 +6,14 @@ import {createHttpClient} from './utils'
*/ */
export class HttpManager { export class HttpManager {
private clients: HttpClient[] private clients: HttpClient[]
private userAgent: string
constructor(clientCount: number) { constructor(clientCount: number, userAgent: string) {
if (clientCount < 1) { if (clientCount < 1) {
throw new Error('There must be at least one client') throw new Error('There must be at least one client')
} }
this.clients = new Array(clientCount).fill(createHttpClient()) this.userAgent = userAgent
this.clients = new Array(clientCount).fill(createHttpClient(userAgent))
} }
getClient(index: number): HttpClient { getClient(index: number): HttpClient {
@ -22,7 +24,7 @@ export class HttpManager {
// for more information see: https://github.com/actions/http-client/blob/04e5ad73cd3fd1f5610a32116b0759eddf6570d2/index.ts#L292 // for more information see: https://github.com/actions/http-client/blob/04e5ad73cd3fd1f5610a32116b0759eddf6570d2/index.ts#L292
disposeAndReplaceClient(index: number): void { disposeAndReplaceClient(index: number): void {
this.clients[index].dispose() this.clients[index].dispose()
this.clients[index] = createHttpClient() this.clients[index] = createHttpClient(this.userAgent)
} }
disposeAndReplaceAllClients(): void { disposeAndReplaceAllClients(): void {

View File

@ -42,7 +42,10 @@ export class UploadHttpClient {
private statusReporter: StatusReporter private statusReporter: StatusReporter
constructor() { constructor() {
this.uploadHttpManager = new HttpManager(getUploadFileConcurrency()) this.uploadHttpManager = new HttpManager(
getUploadFileConcurrency(),
'@actions/artifact-upload'
)
this.statusReporter = new StatusReporter(10000) this.statusReporter = new StatusReporter(10000)
} }

View File

@ -204,8 +204,8 @@ export function getUploadHeaders(
return requestOptions return requestOptions
} }
export function createHttpClient(): HttpClient { export function createHttpClient(userAgent: string): HttpClient {
return new HttpClient('actions/artifact', [ return new HttpClient(userAgent, [
new BearerCredentialHandler(getRuntimeToken()) new BearerCredentialHandler(getRuntimeToken())
]) ])
} }