From 3639bee06b1804d811e4d29ab31b2307404d9293 Mon Sep 17 00:00:00 2001 From: Daniel Oliver Date: Wed, 13 Aug 2025 13:17:00 +0100 Subject: [PATCH 1/2] Use RetryReader when reading from Azure --- pbm/storage/azure/azure.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pbm/storage/azure/azure.go b/pbm/storage/azure/azure.go index e4e3743e0..762d1388a 100644 --- a/pbm/storage/azure/azure.go +++ b/pbm/storage/azure/azure.go @@ -302,7 +302,14 @@ func (b *Blob) SourceReader(name string) (io.ReadCloser, error) { return nil, errors.Wrap(err, "download object") } - return o.Body, nil + rr := o.NewRetryReader(context.TODO(), &azblob.RetryReaderOptions{ + EarlyCloseAsError: true, + OnFailedRead: func(failureCount int32, lastError error, rnge azblob.HTTPRange, willRetry bool) { + // failureCount is reset on each call to Read(), so repeats of "attempt 1" are expected + b.log.Debug("Read from Azure failed (attempt %d): %v, retrying: %v\n", failureCount, lastError, willRetry) + }, + }) + return rr, nil } func (b *Blob) Delete(name string) error { From d2a5ed6c2db77410c68efb811747dbf6b18fa0d7 Mon Sep 17 00:00:00 2001 From: Daniel Oliver <57630918+DanielOliverRJ@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:12:29 +0100 Subject: [PATCH 2/2] Accept suggestion from Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- pbm/storage/azure/azure.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbm/storage/azure/azure.go b/pbm/storage/azure/azure.go index 762d1388a..211a3f9db 100644 --- a/pbm/storage/azure/azure.go +++ b/pbm/storage/azure/azure.go @@ -306,7 +306,7 @@ func (b *Blob) SourceReader(name string) (io.ReadCloser, error) { EarlyCloseAsError: true, OnFailedRead: func(failureCount int32, lastError error, rnge azblob.HTTPRange, willRetry bool) { // failureCount is reset on each call to Read(), so repeats of "attempt 1" are expected - b.log.Debug("Read from Azure failed (attempt %d): %v, retrying: %v\n", failureCount, lastError, willRetry) + b.log.Debug("Read from Azure failed (attempt %d): %v, retrying: %v", failureCount, lastError, willRetry) }, }) return rr, nil