diff --git a/src/deploy-cromwell-on-azure/Deployer.cs b/src/deploy-cromwell-on-azure/Deployer.cs index 00298aaa..db5f38b3 100644 --- a/src/deploy-cromwell-on-azure/Deployer.cs +++ b/src/deploy-cromwell-on-azure/Deployer.cs @@ -98,6 +98,10 @@ private static bool AsyncRetryExceptionPolicy(Exception ex) return !dontRetry; } + private static readonly AsyncRetryPolicy acrGetDigestRetryPolicy = Policy + .Handle(azureException => (int)HttpStatusCode.NotFound == azureException.Status) + .WaitAndRetryAsync(30, retryAttempt => TimeSpan.FromSeconds(10)); + private static readonly AsyncRetryPolicy generalRetryPolicy = Policy .Handle() .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(1)); @@ -1286,9 +1290,9 @@ private async Task BuildPushAcrAsync(Dictionary settings, string return build; })); - var tesDigest = (await (client ??= GetClient()).GetArtifact("cromwellonazure/tes", build.Tag.ToString()).GetManifestPropertiesAsync(cts.Token)).Value.Digest; + var tesDigest = (await acrGetDigestRetryPolicy.ExecuteAsync(token => (client ??= GetClient()).GetArtifact("cromwellonazure/tes", build.Tag.ToString()).GetManifestPropertiesAsync(token), cts.Token)).Value.Digest; settings["ActualTesImageName"] = $"{acr.Data.LoginServer}/cromwellonazure/tes@{tesDigest}"; - var triggerserviceDigest = (await (client ??= GetClient()).GetArtifact("cromwellonazure/triggerservice", build.Tag.ToString()).GetManifestPropertiesAsync(cts.Token)).Value.Digest; + var triggerserviceDigest = (await acrGetDigestRetryPolicy.ExecuteAsync(token => (client ??= GetClient()).GetArtifact("cromwellonazure/triggerservice", build.Tag.ToString()).GetManifestPropertiesAsync(token), cts.Token)).Value.Digest; settings["ActualTriggerServiceImageName"] = $"{acr.Data.LoginServer}/cromwellonazure/triggerservice@{triggerserviceDigest}"; } @@ -1318,7 +1322,7 @@ private async Task BuildPushAcrAsync(Dictionary settings, string var name = targetTag[..targetTag.IndexOf(':')]; var tag = targetTag[(targetTag.IndexOf(':') + 1)..]; - var digest = (await (client ??= GetClient()).GetArtifact(name, tag).GetManifestPropertiesAsync(cts.Token)).Value.Digest; + var digest = (await acrGetDigestRetryPolicy.ExecuteAsync(token => (client ??= GetClient()).GetArtifact(name, tag).GetManifestPropertiesAsync(token), cts.Token)).Value.Digest; settings["ActualCromwellImageName"] = $"{acr.Data.LoginServer}/{name}@{digest}"; }