Esempio n. 1
0
        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());
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 /// <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);
     }
 }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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"
     };
 }
Esempio n. 8
0
        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);
            }
        }
Esempio n. 9
0
        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"
                    };
 }
Esempio n. 11
0
        /// <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);
            }
        }
Esempio n. 12
0
        /// <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);
        }
Esempio n. 14
0
        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() } }
             }
         }
     };
 }
Esempio n. 16
0
        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();
 }