download: handle inner errors

This commit is contained in:
Michael Yang 2023-10-11 13:49:01 -07:00
parent 630bb75d2a
commit c413a55093

View file

@ -31,11 +31,13 @@ type blobDownload struct {
Total int64 Total int64
Completed atomic.Int64 Completed atomic.Int64
done bool
Parts []*blobDownloadPart Parts []*blobDownloadPart
context.CancelFunc context.CancelFunc
done bool
err error
references atomic.Int32 references atomic.Int32
} }
@ -125,7 +127,11 @@ func (b *blobDownload) Prepare(ctx context.Context, requestURL *url.URL, opts *R
return nil 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) defer blobDownloadManager.Delete(b.Digest)
ctx, b.CancelFunc = context.WithCancel(ctx) 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(), Completed: b.Completed.Load(),
}) })
if b.done { if b.done || b.err != nil {
return nil return b.err
} }
} }
} }