public void TestDefaultRetryPolicyWithRetryableError() { RetryPolicy defaultPolicy = RetryPolicyFactory.GetDefaultSqlConnectionRetryPolicy(); RetryPolicyConfigurationSettings retryPolicySettings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(new SystemConfigurationSource()); var retryStrategyData = retryPolicySettings.RetryStrategies.Get(retryPolicySettings.DefaultSqlConnectionRetryStrategy) as FixedIntervalData; int execCount = 0; try { defaultPolicy.ExecuteAction(() => { execCount++; throw new TimeoutException("Forced Exception"); }); } catch (TimeoutException ex) { Assert.AreEqual("Forced Exception", ex.Message); } Assert.IsNotNull(retryStrategyData); Assert.AreEqual <int>(retryStrategyData.MaxRetryCount, execCount - 1, "The action was not retried using the expected amount of times"); }
/// <summary> /// Called once when the worker role is started in Azure. /// </summary> /// <returns><c>true</c> if the role should continue to run, <c>false</c> otherwise.</returns> /// <remarks> /// <para> /// If the OnStart method returns false, the role instance is immediately stopped. If the method returns true, /// Windows Azure starts the role by calling the Run method. /// </para> /// </remarks> public override bool OnStart() { // Set the maximum number of concurrent connections ServicePointManager.DefaultConnectionLimit = 12; // For information on handling configuration changes // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. using (var config = new SystemConfigurationSource()) { var settings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(config); // Initialize the RetryPolicyFactory with a RetryManager built from the // settings in the configuration file. RetryPolicyFactory.SetRetryManager(settings.BuildRetryManager()); } // set up a logger _log = new Lazy <ILog>(() => LogManager.GetLogger("default")); // create a unique process id for this worker. This is passed to the CopyTenant method on the // and table driver to allow for process specific functionality _uniqueProcessID = Guid.NewGuid(); return(base.OnStart()); }
private static RetryStrategyData GetRetryPolicyFromConfig(string policyName) { RetryPolicyConfigurationSettings retryPolicySettings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(new SystemConfigurationSource()); RetryStrategyData retryPolicyInfo = retryPolicySettings.RetryStrategies.Get(policyName); Assert.IsNotNull(retryPolicyInfo, String.Format("The retry policy {0} was expected in the configuration but has not been found.", policyName)); return(retryPolicyInfo); }
/// <summary> /// Creates a retry manager from the system configuration. /// </summary> /// <returns></returns> public static RetryManager CreateDefault() { using (var source = new SystemConfigurationSource()) { var settings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(source); var manager = settings.BuildRetryManager(); RetryManager.SetDefault(manager); return(manager); } }
public void ReadsFixedIntervalRetryStrategyValuesFromConfiguration() { var settings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(this.configurationSource); FixedIntervalData data = (FixedIntervalData)settings.RetryStrategies.Get("Fixed Interval Non Default"); Assert.AreEqual("Fixed Interval Non Default", data.Name); Assert.AreEqual(new TimeSpan(0, 0, 2), data.RetryInterval); Assert.AreEqual(2, data.MaxRetryCount); Assert.AreEqual(false, data.FirstFastRetry); }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var settings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(new SystemConfigurationSource()); RetryPolicyFactory.SetRetryManager(settings.BuildRetryManager()); Application.Run(new Main()); }
protected override void Arrange() { settings = new RetryPolicyConfigurationSettings() { //DefaultRetryStrategy = "defaultPolicy", //DefaultSqlConnectionRetryStrategy = "defaultSqlConnectionPolicy", //DefaultSqlCommandRetryStrategy = "defaultSqlCommandPolicy", //DefaultAzureServiceBusRetryStrategy = "defaultAzureServiceBusStoragePolicy", //DefaultAzureCachingRetryStrategy = "defaultAzureCachingStoragePolicy", //DefaultAzureStorageRetryStrategy = "defaultAzureStoragePolicy" }; }
private static void SetUpRetryPolicy() { using (var config = new SystemConfigurationSource()) { var settings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(config); // Initialize the RetryPolicyFactory with a RetryManager built from the // settings in the configuration file. var buildRetryManager = settings.BuildRetryManager(); RetryPolicyFactory.SetRetryManager(buildRetryManager); } }
public void ReadsExponentialBackoffRetryStrategyValuesFromConfiguration() { var settings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(this.configurationSource); ExponentialBackoffData data = (ExponentialBackoffData)settings.RetryStrategies.Get("Exponential Backoff Non Default"); Assert.AreEqual("Exponential Backoff Non Default", data.Name); Assert.AreEqual(new TimeSpan(0, 0, 1), data.MinBackoff); Assert.AreEqual(new TimeSpan(0, 0, 2), data.MaxBackoff); Assert.AreEqual(TimeSpan.FromMilliseconds(300), data.DeltaBackoff); Assert.AreEqual(4, data.MaxRetryCount); Assert.AreEqual(false, data.FirstFastRetry); }
protected override void Arrange() { settings = new RetryPolicyConfigurationSettings() { DefaultRetryStrategy = "defaultPolicy", DefaultSqlConnectionRetryStrategy = "defaultSqlConnectionPolicy", DefaultSqlCommandRetryStrategy = "defaultSqlCommandPolicy", DefaultAzureServiceBusRetryStrategy = "defaultAzureServiceBusStoragePolicy", DefaultAzureCachingRetryStrategy = "defaultAzureCachingStoragePolicy", DefaultAzureStorageRetryStrategy = "defaultAzureStoragePolicy" }; }
/// <summary> /// Returns the default retry policy dedicated to handling transient conditions with SQL commands. /// </summary> /// <returns>The retry policy for SQL commands, or the default <see cref="RetryPolicy.NoRetry"/> policy if no retry policy definition for SQL commands was found.</returns> public static RetryPolicy GetDefaultSqlCommandRetryPolicy() { RetryPolicyConfigurationSettings retryPolicySettings = ApplicationConfiguration.Current.GetConfigurationSection <RetryPolicyConfigurationSettings>(RetryPolicyConfigurationSettings.SectionName); if (retryPolicySettings != null) { RetryPolicy defaultPolicy = retryPolicySettings.GetRetryPolicy <SqlAzureTransientErrorDetectionStrategy>(retryPolicySettings.DefaultSqlCommandPolicy); return(defaultPolicy != null ? defaultPolicy : ((defaultPolicy = retryPolicySettings.GetRetryPolicy <SqlAzureTransientErrorDetectionStrategy>(retryPolicySettings.DefaultPolicy)) != null ? defaultPolicy : RetryPolicy.NoRetry)); } else { return(RetryPolicy.NoRetry); } }
/// <summary> /// Returns an instance of the <see cref="RetryPolicy"/> object initialized for a given policy name. /// </summary> /// <typeparam name="T">The type implementing the <see cref="ITransientErrorDetectionStrategy"/> interface which is responsible for detecting transient conditions.</typeparam> /// <param name="policyName">The name under which a retry policy definition is registered in the application configuration.</param> /// <returns>The retry policy initialized from the specified policy definition, or the default <see cref="RetryPolicy.NoRetry"/> policy if the specified policy definition was found.</returns> public static RetryPolicy GetRetryPolicy <T>(string policyName) where T : ITransientErrorDetectionStrategy, new() { Guard.ArgumentNotNullOrEmptyString(policyName, "policyName"); RetryPolicyConfigurationSettings retryPolicySettings = ApplicationConfiguration.Current.GetConfigurationSection <RetryPolicyConfigurationSettings>(RetryPolicyConfigurationSettings.SectionName); if (retryPolicySettings != null) { RetryPolicy defaultPolicy = retryPolicySettings.GetRetryPolicy <T>(policyName); return(defaultPolicy != null ? defaultPolicy : ((defaultPolicy = retryPolicySettings.GetRetryPolicy <T>(retryPolicySettings.DefaultPolicy)) != null ? defaultPolicy : RetryPolicy.NoRetry)); } else { return(RetryPolicy.NoRetry); } }
protected override void Arrange() { this.settings = new RetryPolicyConfigurationSettings() { DefaultRetryStrategy = "defaultPolicy", DefaultSqlConnectionRetryStrategy = "defaultSqlConnectionPolicy", DefaultSqlCommandRetryStrategy = "defaultSqlCommandPolicy", DefaultAzureStorageRetryStrategy = "defaultAzureStoragePolicy", DefaultAzureServiceBusRetryStrategy = "defaultAzureServiceBusStoragePolicy", DefaultAzureCachingRetryStrategy = "defaultAzureCachingStoragePolicy", RetryStrategies = { new ExponentialBackoffData() { Name = "first", MaxRetryCount = 1, MinBackoff = TimeSpan.FromMilliseconds(2), MaxBackoff = TimeSpan.FromMilliseconds(3), DeltaBackoff = TimeSpan.FromMilliseconds(4) }, new IncrementalData() { Name = "second", MaxRetryCount = 1, InitialInterval = TimeSpan.FromMilliseconds(2), RetryIncrement = TimeSpan.FromMilliseconds(3) }, new FixedIntervalData() { Name = "third", MaxRetryCount = 1, RetryInterval = TimeSpan.FromMilliseconds(2) } } }; var customRetryStrategy = new CustomRetryStrategyData( "Test custom retry strategy", "Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling.TestSupport.TestRetryStrategy, Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling.TestSupport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") { Name = "fourth", FirstFastRetry = false, }; customRetryStrategy.Attributes.Add("CustomProperty", 10.ToString()); this.settings.RetryStrategies.Add(customRetryStrategy); }
public static void Configure(IUnityContainer container) { // Get Entlib config source (Current is in Web.EnterpriseLibrary.config) IConfigurationSource source = ConfigurationSourceFactory.Create(); // Config container from Policy injection config settings var policyInjectionSettings = (PolicyInjectionSettings)source.GetSection(PolicyInjectionSettings.SectionName); policyInjectionSettings.ConfigureContainer(container); // Config retry policy var retryPolicySettings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(source); // turn off throwIfSet for unit testing RetryPolicyFactory.SetRetryManager(retryPolicySettings.BuildRetryManager(), throwIfSet: false); // get factories from config var policyFactory = new ExceptionPolicyFactory(source); var dbFactory = new DatabaseProviderFactory(source); var validationFactory = ConfigurationValidatorFactory.FromConfigurationSource(source); // Set default locator UnityServiceLocator locator = new UnityServiceLocator(container); ServiceLocator.SetLocatorProvider(() => locator); container .AddNewExtension <Interception>() // register Entlib types with appropiate factory .RegisterType <ExceptionManager>(new InjectionFactory(c => policyFactory.CreateManager())) .RegisterType <Database>(new InjectionFactory(c => dbFactory.CreateDefault())) .RegisterInstance <ValidatorFactory>(validationFactory) // use registration by convention extension for registering app types; IProfileStore, IUserRepository .RegisterTypes(AllClasses.FromAssemblies(Assembly.GetExecutingAssembly()), WithMappings.FromAllInterfacesInSameAssembly, WithName.Default, WithLifetime.ContainerControlled) // register types with interception .RegisterType <AExpense.Model.User>(new Interceptor <VirtualMethodInterceptor>(), new InterceptionBehavior <TracingBehavior>()) .RegisterType <IExpenseRepository, ExpenseRepository>(new Interceptor <VirtualMethodInterceptor>(), new InterceptionBehavior <PolicyInjectionBehavior>()); }
protected override void Arrange() { this.settings = new RetryPolicyConfigurationSettings() { //DefaultRetryStrategy = "defaultPolicy", //DefaultSqlConnectionRetryStrategy = "defaultSqlConnectionPolicy", //DefaultSqlCommandRetryStrategy = "defaultSqlCommandPolicy", //DefaultAzureStorageRetryStrategy = "defaultAzureStoragePolicy", //DefaultAzureServiceBusRetryStrategy = "defaultAzureServiceBusStoragePolicy", //DefaultAzureCachingRetryStrategy = "defaultAzureCachingStoragePolicy", RetryStrategies = { new ExponentialBackoffData() { Name = "first", MaxRetryCount = 1, MinBackoff = TimeSpan.FromMilliseconds(2), MaxBackoff = TimeSpan.FromMilliseconds(3), DeltaBackoff = TimeSpan.FromMilliseconds(4) }, new IncrementalData() { Name = "second", MaxRetryCount = 1, InitialInterval = TimeSpan.FromMilliseconds(2), RetryIncrement = TimeSpan.FromMilliseconds(3) }, new FixedIntervalData() { Name = "third", MaxRetryCount = 1, RetryInterval = TimeSpan.FromMilliseconds(2) }, new CustomRetryStrategyData( "Test custom retry strategy", "Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.TestSupport.TestRetryStrategy, Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.TestSupport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") { Name = "fourth", FirstFastRetry = false, Attributes = { { "customProperty", 10.ToString() } } } } }; }
public void TestRetryPolicyConfigurationSettings() { ApplicationConfiguration appConfig = ApplicationConfiguration.Current; Assert.IsTrue(ApplicationConfiguration.IsLoaded); RetryPolicyConfigurationSettings retryPolicySettings = appConfig.GetConfigurationSection <RetryPolicyConfigurationSettings>(RetryPolicyConfigurationSettings.SectionName); Assert.IsNotNull(retryPolicySettings, "No LoggingSettings section was found"); Assert.IsTrue(retryPolicySettings.Policies.Count > 0, "Policies collection is empty"); Assert.IsFalse(String.IsNullOrEmpty(retryPolicySettings.DefaultPolicy), "DefaultPolicy is null or empty"); Assert.IsFalse(String.IsNullOrEmpty(retryPolicySettings.DefaultSqlConnectionPolicy), "DefaultSqlConnectionPolicy is null or empty"); Assert.IsFalse(String.IsNullOrEmpty(retryPolicySettings.DefaultSqlCommandPolicy), "DefaultSqlCommandPolicy is null or empty"); Assert.IsFalse(String.IsNullOrEmpty(retryPolicySettings.DefaultStoragePolicy), "DefaultStoragePolicy is null or empty"); Assert.IsFalse(String.IsNullOrEmpty(retryPolicySettings.DefaultCommunicationPolicy), "DefaultCommunicationPolicy is null or empty"); RetryPolicy defaultPolicy = retryPolicySettings.GetRetryPolicy <SqlAzureTransientErrorDetectionStrategy>(retryPolicySettings.DefaultPolicy); Assert.IsNotNull(defaultPolicy, "No default retry policy was found"); Assert.IsTrue(retryPolicySettings.Policies.Get(retryPolicySettings.DefaultPolicy).MaxRetryCount > 0, "Policies collection is empty"); }
protected override void Arrange() { this.settings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(new SystemConfigurationSource()); }
public void Initialize() { this.configurationSource = new SystemConfigurationSource(); this.retryPolicySettings = RetryPolicyConfigurationSettings.GetRetryPolicySettings(this.configurationSource); this.retryManager = retryPolicySettings.BuildRetryManager(); }