Skip to content

Commit 3f61d7d

Browse files
authored
Use Polly instead of AnyRetry (#3)
1 parent 9dd8488 commit 3f61d7d

File tree

2 files changed

+15
-23
lines changed

2 files changed

+15
-23
lines changed

visual-dotnet/SauceLabs.Visual/SauceLabs.Visual.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
2929
</PropertyGroup>
3030
<ItemGroup>
31-
<PackageReference Include="AnyRetry" Version="1.0.31" />
31+
<PackageReference Include="Polly" Version="8.3.1" />
3232
<PackageReference Include="GraphQL.Client" Version="6.0.2" />
3333
<PackageReference Include="GraphQL.Client.Abstractions" Version="6.0.2" />
3434
<PackageReference Include="GraphQL.Client.Serializer.Newtonsoft" Version="6.0.2" />

visual-dotnet/SauceLabs.Visual/VisualClient.cs

+14-22
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading.Tasks;
5-
using AnyRetry;
6-
using AnyRetry.Math;
75
using OpenQA.Selenium;
6+
using Polly;
7+
using Polly.Retry;
88
using SauceLabs.Visual.GraphQL;
99
using SauceLabs.Visual.Models;
1010
using SauceLabs.Visual.Utils;
@@ -24,6 +24,7 @@ public class VisualClient : IDisposable
2424
public VisualBuild Build { get; }
2525
private readonly bool _externalBuild;
2626
public bool CaptureDom { get; set; } = false;
27+
private ResiliencePipeline _retryPipeline;
2728

2829
/// <summary>
2930
/// Creates a new instance of <c>VisualClient</c>
@@ -56,6 +57,16 @@ public VisualClient(WebDriver wd, Region region, string username, string accessK
5657
var createBuildResponse = CreateBuild(buildOptions).Result;
5758
Build = new VisualBuild(createBuildResponse.Id, createBuildResponse.Url);
5859
_externalBuild = false;
60+
61+
_retryPipeline = new ResiliencePipelineBuilder()
62+
.AddRetry(new RetryStrategyOptions()
63+
{
64+
Name = "VisualRetryPolicy",
65+
Delay = TimeSpan.FromSeconds(1),
66+
MaxRetryAttempts = 10
67+
})
68+
.AddTimeout(TimeSpan.FromSeconds(15))
69+
.Build();
5970
}
6071

6172
/// <summary>
@@ -133,26 +144,7 @@ public void Dispose()
133144
/// <exception cref="VisualClientException"></exception>
134145
public async Task<Dictionary<DiffStatus, int>> VisualResults()
135146
{
136-
var policyOptions = new RetryPolicyOptions
137-
{
138-
EasingFunction = EasingFunction.ExponentialEaseOut,
139-
MaxRetryInterval = TimeSpan.FromSeconds(5),
140-
MaxRetrySteps = 10
141-
};
142-
var result = await Retry.Do(async () => await FetchVisualResults(Build.Id),
143-
retryInterval: TimeSpan.FromMilliseconds(100),
144-
retryLimit: 10,
145-
retryPolicy: RetryPolicy.ExponentialBackoff,
146-
retryPolicyOptions: policyOptions,
147-
onFailure: null,
148-
mustReturnTrueBeforeFail: null,
149-
exceptionTypes: typeof(VisualClientException)
150-
);
151-
if (result == null)
152-
{
153-
throw new VisualClientException("diff results were not available in time");
154-
}
155-
return result;
147+
return await _retryPipeline.ExecuteAsync(async token => await FetchVisualResults(Build.Id));
156148
}
157149

158150
private async Task<Dictionary<DiffStatus, int>> FetchVisualResults(string buildId)

0 commit comments

Comments
 (0)