From 434a6f9d46aef19d50306adc6e7cba20538db989 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Fri, 3 Nov 2023 16:49:51 -0700 Subject: [PATCH] return last error --- server/download.go | 5 +++-- server/upload.go | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/server/download.go b/server/download.go index 68798afd..f9d47e49 100644 --- a/server/download.go +++ b/server/download.go @@ -149,9 +149,10 @@ func (b *blobDownload) run(ctx context.Context, requestURL *url.URL, opts *Regis i := i g.Go(func() error { + var err error for try := 0; try < maxRetries; try++ { w := io.NewOffsetWriter(file, part.StartsAt()) - err := b.downloadChunk(inner, requestURL, w, part, opts) + err = b.downloadChunk(inner, requestURL, w, part, opts) switch { case errors.Is(err, context.Canceled), errors.Is(err, syscall.ENOSPC): // return immediately if the context is canceled or the device is out of space @@ -164,7 +165,7 @@ func (b *blobDownload) run(ctx context.Context, requestURL *url.URL, opts *Regis } } - return errMaxRetriesExceeded + return fmt.Errorf("%w: %w", errMaxRetriesExceeded, err) }) } diff --git a/server/upload.go b/server/upload.go index c6e0656b..04575560 100644 --- a/server/upload.go +++ b/server/upload.go @@ -135,9 +135,10 @@ func (b *blobUpload) Run(ctx context.Context, opts *RegistryOptions) { case <-inner.Done(): case requestURL := <-b.nextURL: g.Go(func() error { + var err error for try := 0; try < maxRetries; try++ { part.ReadSeeker = io.NewSectionReader(f, part.Offset, part.Size) - err := b.uploadChunk(inner, http.MethodPatch, requestURL, part, opts) + err = b.uploadChunk(inner, http.MethodPatch, requestURL, part, opts) switch { case errors.Is(err, context.Canceled): return err @@ -151,7 +152,7 @@ func (b *blobUpload) Run(ctx context.Context, opts *RegistryOptions) { return nil } - return errMaxRetriesExceeded + return fmt.Errorf("%w: %w", errMaxRetriesExceeded, err) }) } } @@ -227,7 +228,7 @@ func (b *blobUpload) uploadChunk(ctx context.Context, method string, requestURL } for try := 0; try < maxRetries; try++ { - err := b.uploadChunk(ctx, http.MethodPut, redirectURL, part, nil) + err = b.uploadChunk(ctx, http.MethodPut, redirectURL, part, nil) switch { case errors.Is(err, context.Canceled): return err @@ -241,7 +242,7 @@ func (b *blobUpload) uploadChunk(ctx context.Context, method string, requestURL return nil } - return errMaxRetriesExceeded + return fmt.Errorf("%w: %w", errMaxRetriesExceeded, err) case resp.StatusCode == http.StatusUnauthorized: auth := resp.Header.Get("www-authenticate")