Add retry logic to RegistryServiceClient network calls
- Dominant language
- C#
- Stars
- 181
- Forks
- 67
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 10
Description
A recent exception occurred when attempting to get digest values of images from the [RegistryServiceClient](https://github.com/dotnet/docker-tools/blob/main/src/Microsoft.DotNet.ImageBuilder/src/RegistryServiceClient.cs) class:
```
Unhandled exception: System.Net.Http.HttpRequestException: Response status code does not indicate success: 503 (Service Unavailable).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at Microsoft.DotNet.ImageBuilder.RegistryHttpClient.RegistryOAuthDelegatingHandler.GetOAuthTokenAsync(HttpResponseMessage response, HttpRequestMessage unauthorizedRequest, CancellationToken cancellationToken) in /image-builder/src/RegistryHttpClient.cs:line 95
at Microsoft.DotNet.ImageBuilder.RegistryHttpClient.RegistryOAuthDelegatingHandler.GetAuthenticatedRequestAsync(HttpResponseMessage response, HttpRequestMessage request, CancellationToken cancellationToken) in /image-builder/src/RegistryHttpClient.cs:line 61
at Microsoft.DotNet.ImageBuilder.RegistryHttpClient.RegistryOAuthDelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /image-builder/src/RegistryHttpClient.cs:line 50
at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at Microsoft.DotNet.ImageBuilder.RegistryServiceClient.SendRequestAsync(HttpRequestMessage request) in /image-builder/src/RegistryServiceClient.cs:line 76
at Microsoft.DotNet.ImageBuilder.RegistryServiceClient.GetManifestAsync(String repo, String tagOrDigest) in /image-builder/src/RegistryServiceClient.cs:line 50
at Microsoft.DotNet.ImageBuilder.ManifestServiceExtensions.GetManifestDigestShaAsync(IManifestService manifestService, String tag, IRegistryCredentialsHost credsHost, Boolean isDryRun) in /image-builder/src/ManifestServiceExtensions.cs:line 43
at Microsoft.DotNet.ImageBuilder.DockerService.GetImageDigestAsync(String image, IRegistryCredentialsHost credsHost, Boolean isDryRun) in /image-builder/src/DockerService.cs:line 38
at Microsoft.DotNet.ImageBuilder.LockHelper.<>c__DisplayClass3_0`2.<b__0>d.MoveNext() in /image-builder/src/LockHelper.cs:line 80
```
This is one of those intermittent issues that can be mitigated with a retry. The class should be updated to compensate for network errors as mentioned in https://github.com/dotnet/docker-tools/issues/837.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.