WritersRetryPolicy
using kCura.WinEDDS;
using kCura.WinEDDS.Exceptions;
using Polly;
using System;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Metadata
{
public class WritersRetryPolicy : IWritersRetryPolicy
{
private readonly int _numberOfRetries;
private readonly int _waitTimeBetweenRetryAttempts;
public const string CONTEXT_LAST_ARTIFACT_ID_KEY = "LastArtifactId";
public WritersRetryPolicy(IExportConfig exportConfig)
{
_numberOfRetries = exportConfig.ExportIOErrorNumberOfRetries;
_waitTimeBetweenRetryAttempts = exportConfig.ExportIOErrorWaitTime;
}
public Policy CreateRetryPolicy(Action<Exception, TimeSpan, int, Context> onRetry)
{
return RetrySyntax.WaitAndRetry(Policy.Handle<ExportBaseException>(), _numberOfRetries, (Func<int, TimeSpan>)SleepDurationProvider, onRetry);
}
private TimeSpan SleepDurationProvider(int retryAttempt)
{
if (retryAttempt > 1)
return TimeSpan.FromSeconds((double)_waitTimeBetweenRetryAttempts);
return TimeSpan.Zero;
}
}
}