From c413a5509313b6c9800d60ecf926a368f141d42b Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Wed, 11 Oct 2023 13:49:01 -0700 Subject: [PATCH] download: handle inner errors --- server/download.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/server/download.go b/server/download.go index 531219fd..0c3beb7e 100644 --- a/server/download.go +++ b/server/download.go @@ -31,11 +31,13 @@ type blobDownload struct { Total int64 Completed atomic.Int64 - done bool Parts []*blobDownloadPart context.CancelFunc + + done bool + err error references atomic.Int32 } @@ -125,7 +127,11 @@ func (b *blobDownload) Prepare(ctx context.Context, requestURL *url.URL, opts *R return nil } -func (b *blobDownload) Run(ctx context.Context, requestURL *url.URL, opts *RegistryOptions) (err error) { +func (b *blobDownload) Run(ctx context.Context, requestURL *url.URL, opts *RegistryOptions) { + b.err = b.run(ctx, requestURL, opts) +} + +func (b *blobDownload) run(ctx context.Context, requestURL *url.URL, opts *RegistryOptions) error { defer blobDownloadManager.Delete(b.Digest) ctx, b.CancelFunc = context.WithCancel(ctx) @@ -285,8 +291,8 @@ func (b *blobDownload) Wait(ctx context.Context, fn func(api.ProgressResponse)) Completed: b.Completed.Load(), }) - if b.done { - return nil + if b.done || b.err != nil { + return b.err } } }