Example #1
0
        private static ShardMapManager GetSqlShardMapManager(
            string connectionString,
            SqlCredential secureCredential,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryBehavior retryBehavior,
            EventHandler <RetryingEventArgs> retryEventHandler,
            bool throwOnFailure)
        {
            Debug.Assert(connectionString != null);
            Debug.Assert(retryBehavior != null);

            SqlShardMapManagerCredentials credentials = new SqlShardMapManagerCredentials(connectionString, secureCredential);

            StoreOperationFactory storeOperationFactory = new StoreOperationFactory();

            IStoreResults result;

            TransientFaultHandling.RetryPolicy retryPolicy = new TransientFaultHandling.RetryPolicy(
                new ShardManagementTransientErrorDetectionStrategy(retryBehavior),
                RetryPolicy.DefaultRetryPolicy.GetRetryStrategy());

            EventHandler <TransientFaultHandling.RetryingEventArgs> handler = (sender, args) =>
            {
                if (retryEventHandler != null)
                {
                    retryEventHandler(sender, new RetryingEventArgs(args));
                }
            };

            try
            {
                retryPolicy.Retrying += handler;

                using (IStoreOperationGlobal op = storeOperationFactory.CreateGetShardMapManagerGlobalOperation(
                           credentials,
                           retryPolicy,
                           throwOnFailure ? "GetSqlShardMapManager" : "TryGetSqlShardMapManager",
                           throwOnFailure))
                {
                    result = op.Do();
                }
            }
            finally
            {
                retryPolicy.Retrying -= handler;
            }

            return(result.Result == StoreResult.Success ?
                   new ShardMapManager(
                       credentials,
                       new SqlStoreConnectionFactory(),
                       storeOperationFactory,
                       new CacheStore(),
                       loadPolicy,
                       RetryPolicy.DefaultRetryPolicy,
                       retryBehavior,
                       retryEventHandler) :
                   null);
        }
Example #2
0
 public static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     RetryBehavior retryBehavior)
 {
     return(CreateSqlShardMapManager(
                connectionString,
                ShardMapManagerCreateMode.KeepExisting,
                retryBehavior));
 }
Example #3
0
 public static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     RetryBehavior retryBehavior)
 {
     return(CreateSqlShardMapManager(
                connectionString,
                null,
                retryBehavior));
 }
Example #4
0
        public void Retry_properties_are_populated_from_constructor_arguments()
        {
            var retryErrorTypes = new[] { typeof(Exception) };
            var sut             = new RetryBehavior(3, TimeSpan.FromSeconds(5), retryErrorTypes);

            Assert.Equal(3, sut.TimesToRetry);
            Assert.Equal(TimeSpan.FromSeconds(5), sut.RetryDelay);
            Assert.Equal(retryErrorTypes, sut.RetryExceptionTypes);
        }
 /// <summary>
 /// Given the connection string, opens up the corresponding data source and obtains the ShardMapManager.
 /// </summary>
 /// <param name="credentials">Credentials for performing ShardMapManager operations.</param>
 /// <param name="storeConnectionFactory">Factory for store connections.</param>
 /// <param name="storeOperationFactory">Factory for store operations.</param>
 /// <param name="cacheStore">Cache store.</param>
 /// <param name="loadPolicy">Initialization policy.</param>
 /// <param name="retryPolicy">Policy for performing retries on connections to shard map manager database.</param>
 /// <param name="retryBehavior">Policy for detecting transient errors.</param>
 internal ShardMapManager(
     SqlShardMapManagerCredentials credentials,
     IStoreConnectionFactory storeConnectionFactory,
     IStoreOperationFactory storeOperationFactory,
     ICacheStore cacheStore,
     ShardMapManagerLoadPolicy loadPolicy,
     RetryPolicy retryPolicy,
     RetryBehavior retryBehavior)
     : this(credentials, storeConnectionFactory, storeOperationFactory, cacheStore, loadPolicy, retryPolicy, retryBehavior, null)
 {
 }
Example #6
0
        public void Failing_operations_are_retried_a_specific_number_of_times()
        {
            var operation = new FakeOperation {
                ThrowOnExecute = new Exception(), ErrorCount = 2
            };
            var sut = new RetryBehavior(1, TimeSpan.Zero);

            sut.AttachTo(operation);

            Assert.Throws <Exception>(() => sut.Execute());
        }
Example #7
0
 /// <summary>
 /// Gets <see cref="ShardMapManager"/> from persisted state in a SQL Server database.
 /// </summary>
 /// <param name="connectionString">Connection parameters used for performing operations against shard map manager database(s).</param>
 /// <param name="loadPolicy">Initialization policy.</param>
 /// <param name="retryBehavior">Behavior for detecting transient exceptions in the store.</param>
 /// <returns>
 /// A shard map manager object used for performing management and read operations for
 /// shard maps, shards and shard mappings.
 /// </returns>
 public static ShardMapManager GetSqlShardMapManager(
     string connectionString,
     ShardMapManagerLoadPolicy loadPolicy,
     RetryBehavior retryBehavior)
 {
     return(GetSqlShardMapManager(
                connectionString,
                loadPolicy,
                retryBehavior,
                null));
 }
Example #8
0
        public void When_retry_exception_types_are_specified_errors_of_sub_types_will_be_retried()
        {
            var operation = new FakeOperation {
                ThrowOnExecute = new ArgumentNullException(), ErrorCount = 1
            };
            var sut = new RetryBehavior(1, TimeSpan.Zero, typeof(ArgumentException));

            sut.AttachTo(operation);

            sut.Execute();
        }
Example #9
0
        public void Failing_operations_are_retried()
        {
            var operation = new FakeOperation {
                ThrowOnExecute = new Exception(), ErrorCount = 1
            };
            var sut = new RetryBehavior(1, TimeSpan.Zero);

            sut.AttachTo(operation);

            sut.Execute();
        }
Example #10
0
        public void You_cannot_retry_an_operation_where_a_non_idempotent_child_operation_has_executed()
        {
            var operation = new FakeOperation(new IdempotentOperation(), new FakeOperation {
                ThrowOnExecute = new Exception(), ErrorCount = 1
            });
            var sut = new RetryBehavior(1, TimeSpan.Zero);

            sut.AttachTo(operation);

            Assert.Throws <Exception>(() => sut.Execute());
        }
Example #11
0
        public void When_retry_exception_types_are_specified_errors_of_different_types_will_not_be_retried()
        {
            var operation = new FakeOperation {
                ThrowOnExecute = new NullReferenceException(), ErrorCount = 1
            };
            var sut = new RetryBehavior(1, TimeSpan.Zero, typeof(InsufficientMemoryException));

            sut.AttachTo(operation);

            Assert.Throws <NullReferenceException>(() => sut.Execute());
        }
Example #12
0
 /// <summary>
 /// Gets <see cref="ShardMapManager"/> from persisted state in a SQL Server database.
 /// </summary>
 /// <param name="connectionInfo">Connection parameters used for performing operations against shard map manager database(s).</param>
 /// <param name="loadPolicy">Initialization policy.</param>
 /// <param name="retryBehavior">Behavior for detecting transient exceptions in the store.</param>
 /// <returns>
 /// A shard map manager object used for performing management and read operations for
 /// shard maps, shards and shard mappings.
 /// </returns>
 public static ShardMapManager GetSqlShardMapManager(
     SqlConnectionInfo connectionInfo,
     ShardMapManagerLoadPolicy loadPolicy,
     RetryBehavior retryBehavior)
 {
     return(GetSqlShardMapManager(
                connectionInfo,
                loadPolicy,
                retryBehavior,
                null));
 }
Example #13
0
 public static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     ShardMapManagerCreateMode createMode,
     RetryBehavior retryBehavior)
 {
     return(CreateSqlShardMapManagerImpl(
                connectionString,
                createMode,
                retryBehavior,
                null,
                GlobalConstants.GsmVersionClient));
 }
Example #14
0
 internal static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     ShardMapManagerCreateMode createMode,
     RetryBehavior retryBehavior,
     EventHandler <RetryingEventArgs> retryEventHandler)
 {
     return(CreateSqlShardMapManagerImpl(
                connectionString,
                createMode,
                retryBehavior,
                retryEventHandler,
                GlobalConstants.GsmVersionClient));
 }
Example #15
0
 internal static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     ShardMapManagerCreateMode createMode,
     RetryBehavior retryBehavior,
     EventHandler <RetryingEventArgs> retryEventHandler)
 {
     return(CreateSqlShardMapManager(
                connectionString,
                null,
                createMode,
                retryBehavior,
                retryEventHandler));
 }
Example #16
0
 public static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     SqlCredential secureCredential,
     ShardMapManagerCreateMode createMode,
     RetryBehavior retryBehavior)
 {
     return(CreateSqlShardMapManager(
                new SqlConnectionInfo(
                    connectionString,
                    secureCredential),
                createMode,
                retryBehavior));
 }
Example #17
0
 public static bool TryGetSqlShardMapManager(
     string connectionString,
     ShardMapManagerLoadPolicy loadPolicy,
     RetryBehavior retryBehavior,
     out ShardMapManager shardMapManager)
 {
     return(TryGetSqlShardMapManager(
                connectionString,
                null,
                loadPolicy,
                retryBehavior,
                out shardMapManager));
 }
Example #18
0
 /// <summary>
 /// Gets <see cref="ShardMapManager"/> from persisted state in a SQL Server database.
 /// </summary>
 /// <param name="connectionString">Connection parameters used for performing operations against shard map manager database(s).</param>
 /// <param name="secureCredential">Secure credential used for performing operations against shard map manager database(s).</param>
 /// <param name="loadPolicy">Initialization policy.</param>
 /// <param name="retryBehavior">Behavior for detecting transient exceptions in the store.</param>
 /// <returns>
 /// A shard map manager object used for performing management and read operations for
 /// shard maps, shards and shard mappings.
 /// </returns>
 public static ShardMapManager GetSqlShardMapManager(
     string connectionString,
     SqlCredential secureCredential,
     ShardMapManagerLoadPolicy loadPolicy,
     RetryBehavior retryBehavior)
 {
     return(GetSqlShardMapManager(
                new SqlConnectionInfo(
                    connectionString,
                    secureCredential),
                loadPolicy,
                retryBehavior));
 }
Example #19
0
        public void Retried_operations_are_logged(Exception error, FakeWorkflowLogger log)
        {
            var sut = new RetryBehavior(2, TimeSpan.Zero).AttachTo(new FakeOperation {
                ThrowOnExecute = error, ErrorCount = 2
            });

            sut.Initialize(new FakeWorkflowConfiguration {
                Logger = log
            });

            sut.Execute();

            Assert.Equal(2, log.AppliedBehaviors.Count);
            Assert.Equal("Operation retried", log.AppliedBehaviors[0].Description);
        }
Example #20
0
 public static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     SqlCredential secureCredential,
     ShardMapManagerCreateMode createMode,
     RetryBehavior retryBehavior)
 {
     return(CreateSqlShardMapManagerImpl(
                new SqlConnectionInfo(
                    connectionString,
                    secureCredential),
                createMode,
                retryBehavior,
                null,
                GlobalConstants.GsmVersionClient));
 }
Example #21
0
        public void Retries_are_delayed_the_specified_duration()
        {
            var operation = new FakeOperation {
                ThrowOnExecute = new Exception(), ErrorCount = 1
            };
            var sut = new RetryBehavior(1, TimeSpan.FromSeconds(5));

            sut.AttachTo(operation);
            var before = Time.OffsetUtcNow;

            sut.Execute();

            var duration = Time.OffsetUtcNow - before;

            Assert.Equal(TimeSpan.FromSeconds(5), duration);
        }
Example #22
0
        internal static ShardMapManager GetSqlShardMapManager(
            string connectionString,
            SqlCredential secureCredential,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryBehavior retryBehavior,
            EventHandler <RetryingEventArgs> retryEventHandler)
        {
            ExceptionUtils.DisallowNullArgument(connectionString, "connectionString");
            ExceptionUtils.DisallowNullArgument(retryBehavior, "retryBehavior");

            using (ActivityIdScope activityIdScope = new ActivityIdScope(Guid.NewGuid()))
            {
                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "GetSqlShardMapManager",
                    "Start; ");

                Stopwatch stopwatch = Stopwatch.StartNew();

                ShardMapManager shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                    connectionString,
                    secureCredential,
                    loadPolicy,
                    retryBehavior,
                    retryEventHandler,
                    true);

                stopwatch.Stop();

                Debug.Assert(shardMapManager != null);

                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "GetSqlShardMapManager",
                    "Complete; Duration: {0}",
                    stopwatch.Elapsed);

                return(shardMapManager);
            }
        }
Example #23
0
        public static bool TryGetSqlShardMapManager(
            string connectionString,
            SqlCredential secureCredential,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryBehavior retryBehavior,
            out ShardMapManager shardMapManager)
        {
            ExceptionUtils.DisallowNullArgument(connectionString, "connectionString");
            ExceptionUtils.DisallowNullArgument(retryBehavior, "retryBehavior");

            using (ActivityIdScope activityIdScope = new ActivityIdScope(Guid.NewGuid()))
            {
                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "TryGetSqlShardMapManager",
                    "Start; ");

                Stopwatch stopwatch = Stopwatch.StartNew();

                shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                    new SqlConnectionInfo(
                        connectionString,
                        secureCredential),
                    loadPolicy,
                    retryBehavior,
                    null,
                    false);

                stopwatch.Stop();

                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "TryGetSqlShardMapManager",
                    "Complete; Duration: {0}",
                    stopwatch.Elapsed);

                return(shardMapManager != null);
            }
        }
        /// <summary>
        /// Given the connection string, opens up the corresponding data source and obtains the ShardMapManager.
        /// </summary>
        /// <param name="credentials">Credentials for performing ShardMapManager operations.</param>
        /// <param name="storeConnectionFactory">Factory for store connections.</param>
        /// <param name="storeOperationFactory">Factory for store operations.</param>
        /// <param name="cacheStore">Cache store.</param>
        /// <param name="loadPolicy">Initialization policy.</param>
        /// <param name="retryPolicy">Policy for performing retries on connections to shard map manager database.</param>
        /// <param name="retryBehavior">Policy for detecting transient errors.</param>
        /// <param name="retryEventHandler">Event handler for store operation retry events.</param>
        internal ShardMapManager(
            SqlShardMapManagerCredentials credentials,
            IStoreConnectionFactory storeConnectionFactory,
            IStoreOperationFactory storeOperationFactory,
            ICacheStore cacheStore,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryPolicy retryPolicy,
            RetryBehavior retryBehavior,
            EventHandler <RetryingEventArgs> retryEventHandler)
        {
            Debug.Assert(credentials != null);

            this.Credentials            = credentials;
            this.StoreConnectionFactory = storeConnectionFactory;
            this.StoreOperationFactory  = storeOperationFactory;
            this.Cache = cacheStore;

            this.RetryPolicy = new TransientFaultHandling.RetryPolicy(
                new ShardManagementTransientErrorDetectionStrategy(retryBehavior),
                retryPolicy.GetRetryStrategy());

            // Register for TfhImpl.RetryPolicy.Retrying event.
            this.RetryPolicy.Retrying += this.ShardMapManagerRetryingEventHandler;

            // Add user specified event handler.
            if (retryEventHandler != null)
            {
                this.ShardMapManagerRetrying += retryEventHandler;
            }

            if (loadPolicy == ShardMapManagerLoadPolicy.Eager)
            {
                // We eagerly load everything from ShardMapManager. In case of lazy
                // loading policy, we will add things to local caches based on cache
                // misses on lookups.
                this.LoadFromStore();
            }
        }
        internal static bool TryGetSqlShardMapManager(
            string connectionString,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryBehavior retryBehavior,
            EventHandler<RetryingEventArgs> retryEventHandler,
            out ShardMapManager shardMapManager)
        {
            ExceptionUtils.DisallowNullArgument(connectionString, "connectionString");
            ExceptionUtils.DisallowNullArgument(retryBehavior, "retryBehavior");

            using (ActivityIdScope activityIdScope = new ActivityIdScope(Guid.NewGuid()))
            {
                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "TryGetSqlShardMapManager",
                    "Start; ");

                Stopwatch stopwatch = Stopwatch.StartNew();

                shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                    connectionString,
                    loadPolicy,
                    retryBehavior,
                    retryEventHandler,
                    false);

                stopwatch.Stop();

                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "TryGetSqlShardMapManager",
                    "Complete; Duration: {0}",
                    stopwatch.Elapsed);

                return shardMapManager != null;
            }
        }
        private static ShardMapManager GetSqlShardMapManager(
            string connectionString,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryBehavior retryBehavior,
            EventHandler<RetryingEventArgs> retryEventHandler,
            bool throwOnFailure)
        {
            Debug.Assert(connectionString != null);
            Debug.Assert(retryBehavior != null);

            SqlShardMapManagerCredentials credentials = new SqlShardMapManagerCredentials(connectionString);

            StoreOperationFactory storeOperationFactory = new StoreOperationFactory();

            IStoreResults result;

            TransientFaultHandling.RetryPolicy retryPolicy = new TransientFaultHandling.RetryPolicy(
                    new ShardManagementTransientErrorDetectionStrategy(retryBehavior),
                    RetryPolicy.DefaultRetryPolicy.GetRetryStrategy());

            EventHandler<TransientFaultHandling.RetryingEventArgs> handler = (sender, args) =>
            {
                if (retryEventHandler != null)
                {
                    retryEventHandler(sender, new RetryingEventArgs(args));
                }
            };

            try
            {
                retryPolicy.Retrying += handler;

                using (IStoreOperationGlobal op = storeOperationFactory.CreateGetShardMapManagerGlobalOperation(
                    credentials,
                    retryPolicy,
                    throwOnFailure ? "GetSqlShardMapManager" : "TryGetSqlShardMapManager",
                    throwOnFailure))
                {
                    result = op.Do();
                }
            }
            finally
            {
                retryPolicy.Retrying -= handler;
            }

            return result.Result == StoreResult.Success ?
                new ShardMapManager(
                    credentials,
                    new SqlStoreConnectionFactory(),
                    storeOperationFactory,
                    new CacheStore(),
                    loadPolicy,
                    RetryPolicy.DefaultRetryPolicy,
                    retryBehavior,
                    retryEventHandler) :
                null;
        }
        internal static ShardMapManager GetSqlShardMapManager(
            string connectionString,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryBehavior retryBehavior,
            EventHandler<RetryingEventArgs> retryEventHandler)
        {
            ExceptionUtils.DisallowNullArgument(connectionString, "connectionString");
            ExceptionUtils.DisallowNullArgument(retryBehavior, "retryBehavior");

            using (ActivityIdScope activityIdScope = new ActivityIdScope(Guid.NewGuid()))
            {
                DateTime getStartTime = DateTime.UtcNow;
                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "GetSqlShardMapManager",
                    "Start; ");

                ShardMapManager shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                    connectionString,
                    loadPolicy,
                    retryBehavior,
                    retryEventHandler,
                    true);

                Debug.Assert(shardMapManager != null);

                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "GetSqlShardMapManager",
                    "Complete; Duration: {0}",
                    DateTime.UtcNow - getStartTime);

                return shardMapManager;
            }
        }
 /// <summary>
 /// Gets <see cref="ShardMapManager"/> from persisted state in a SQL Server database.
 /// </summary>
 /// <param name="connectionString">Connection parameters used for performing operations against shard map manager database(s).</param>
 /// <param name="loadPolicy">Initialization policy.</param>
 /// <param name="retryBehavior">Behavior for detecting transient exceptions in the store.</param>
 /// <returns>
 /// A shard map manager object used for performing management and read operations for
 /// shard maps, shards and shard mappings.
 /// </returns>
 public static ShardMapManager GetSqlShardMapManager(
     string connectionString,
     ShardMapManagerLoadPolicy loadPolicy,
     RetryBehavior retryBehavior)
 {
     return GetSqlShardMapManager(
         connectionString,
         loadPolicy,
         retryBehavior,
         null);
 }
        public static bool TryGetSqlShardMapManager(
            string connectionString,
            ShardMapManagerLoadPolicy loadPolicy,
            RetryBehavior retryBehavior,
            out ShardMapManager shardMapManager)
        {
            ExceptionUtils.DisallowNullArgument(connectionString, "connectionString");
            ExceptionUtils.DisallowNullArgument(retryBehavior, "retryBehavior");

            using (ActivityIdScope activityIdScope = new ActivityIdScope(Guid.NewGuid()))
            {
                DateTime getStartTime = DateTime.UtcNow;
                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "TryGetSqlShardMapManager",
                    "Start; ");

                shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
                    connectionString,
                    loadPolicy,
                    retryBehavior,
                    null,
                    false);

                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "TryGetSqlShardMapManager",
                    "Complete; Duration: {0}",
                    DateTime.UtcNow - getStartTime);

                return shardMapManager != null;
            }
        }
Example #30
0
 /// <summary>
 /// Creates a new instance of transient error detection strategy for Shard map manager.
 /// </summary>
 /// <param name="retryBehavior">Behavior for detecting transient errors.</param>
 internal MultiShardQueryTransientErrorDetectionStrategy(RetryBehavior retryBehavior)
 {
     _standardDetectionStrategy = new TransientFaultHandling.SqlDatabaseTransientErrorDetectionStrategy();
     _transientFaultDetector    = retryBehavior.TransientErrorDetector;
 }
Example #31
0
        private static ShardMapManager CreateSqlShardMapManagerImpl(
            string connectionString,
            ShardMapManagerCreateMode createMode,
            RetryBehavior retryBehavior,
            EventHandler <RetryingEventArgs> retryEventHandler,
            Version targetVersion)
        {
            ExceptionUtils.DisallowNullArgument(connectionString, "connectionString");
            ExceptionUtils.DisallowNullArgument(retryBehavior, "retryBehavior");

            if (createMode != ShardMapManagerCreateMode.KeepExisting &&
                createMode != ShardMapManagerCreateMode.ReplaceExisting)
            {
                throw new ArgumentException(
                          StringUtils.FormatInvariant(
                              Errors._General_InvalidArgumentValue,
                              createMode,
                              "createMode"),
                          "createMode");
            }

            using (ActivityIdScope activityIdScope = new ActivityIdScope(Guid.NewGuid()))
            {
                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "CreateSqlShardMapManager",
                    "Start; ");

                Stopwatch stopwatch = Stopwatch.StartNew();

                SqlShardMapManagerCredentials credentials = new SqlShardMapManagerCredentials(connectionString);

                TransientFaultHandling.RetryPolicy retryPolicy = new TransientFaultHandling.RetryPolicy(
                    new ShardManagementTransientErrorDetectionStrategy(retryBehavior),
                    RetryPolicy.DefaultRetryPolicy.GetRetryStrategy());

                EventHandler <TransientFaultHandling.RetryingEventArgs> handler = (sender, args) =>
                {
                    if (retryEventHandler != null)
                    {
                        retryEventHandler(sender, new RetryingEventArgs(args));
                    }
                };

                try
                {
                    retryPolicy.Retrying += handler;

                    // specifying targetVersion as GlobalConstants.GsmVersionClient to deploy latest store by default.
                    using (IStoreOperationGlobal op = new StoreOperationFactory().CreateCreateShardMapManagerGlobalOperation(
                               credentials,
                               retryPolicy,
                               "CreateSqlShardMapManager",
                               createMode,
                               targetVersion))
                    {
                        op.Do();
                    }

                    stopwatch.Stop();

                    Tracer.TraceInfo(
                        TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                        "CreateSqlShardMapManager",
                        "Complete; Duration: {0}",
                        stopwatch.Elapsed);
                }
                finally
                {
                    retryPolicy.Retrying -= handler;
                }

                return(new ShardMapManager(
                           credentials,
                           new SqlStoreConnectionFactory(),
                           new StoreOperationFactory(),
                           new CacheStore(),
                           ShardMapManagerLoadPolicy.Lazy,
                           RetryPolicy.DefaultRetryPolicy,
                           retryBehavior,
                           retryEventHandler));
            }
        }
 public static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     ShardMapManagerCreateMode createMode,
     RetryBehavior retryBehavior)
 {
     return CreateSqlShardMapManagerImpl(
         connectionString,
         createMode,
         retryBehavior,
         null,
         GlobalConstants.GsmVersionClient);
 }
 public static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     RetryBehavior retryBehavior)
 {
     return CreateSqlShardMapManager(
         connectionString,
         ShardMapManagerCreateMode.KeepExisting,
         retryBehavior);
 }
 /// <summary>
 /// Creates a new instance of transient error detection strategy for Shard map manager.
 /// </summary>
 /// <param name="retryBehavior">User specified retry behavior.</param>
 internal ShardManagementTransientErrorDetectionStrategy(RetryBehavior retryBehavior)
 {
     _transientFaultDetector = retryBehavior.TransientErrorDetector;
 }
Example #35
0
 /// <summary>
 /// The retry policy to use when executing commands against sql databases
 /// </summary>
 /// <param name="retryPolicyPerShard">An instance of the <see cref="RetryPolicy"/> class</param>
 /// <param name="retryBehavior">Behavior to use for detecting transient faults.</param>
 /// <returns>An instance of the <see cref="RetryPolicy"/> class</returns>
 internal static TransientFaultHandling.RetryPolicy GetSqlCommandRetryPolicy(RetryPolicy retryPolicyPerShard, RetryBehavior retryBehavior)
 {
     return(new TransientFaultHandling.RetryPolicy(
                new MultiShardQueryTransientErrorDetectionStrategy(retryBehavior),
                retryPolicyPerShard.GetRetryStrategy()));
 }
 /// <summary>
 /// The retry policy to use when executing commands against sql databases
 /// </summary>
 /// <param name="retryPolicyPerShard">An instance of the <see cref="RetryPolicy"/> class</param>
 /// <param name="retryBehavior">Behavior to use for detecting transient faults.</param>
 /// <returns>An instance of the <see cref="RetryPolicy"/> class</returns>
 internal static TransientFaultHandling.RetryPolicy GetSqlCommandRetryPolicy(RetryPolicy retryPolicyPerShard, RetryBehavior retryBehavior)
 {
     return new TransientFaultHandling.RetryPolicy(
         new MultiShardQueryTransientErrorDetectionStrategy(retryBehavior),
         retryPolicyPerShard.GetRetryStrategy());
 }
 /// <summary>
 /// Creates a new instance of transient error detection strategy for Shard map manager.
 /// </summary>
 /// <param name="retryBehavior">User specified retry behavior.</param>
 internal ShardManagementTransientErrorDetectionStrategy(RetryBehavior retryBehavior)
 {
     _transientFaultDetector = retryBehavior.TransientErrorDetector;
 }
 internal static ShardMapManager CreateSqlShardMapManager(
     string connectionString,
     ShardMapManagerCreateMode createMode,
     RetryBehavior retryBehavior,
     EventHandler<RetryingEventArgs> retryEventHandler)
 {
     return CreateSqlShardMapManagerImpl(
         connectionString,
         createMode,
         retryBehavior,
         retryEventHandler,
         GlobalConstants.GsmVersionClient);
 }
        private static ShardMapManager CreateSqlShardMapManagerImpl(
            string connectionString,
            ShardMapManagerCreateMode createMode,
            RetryBehavior retryBehavior,
            EventHandler<RetryingEventArgs> retryEventHandler,
            Version targetVersion)
        {
            ExceptionUtils.DisallowNullArgument(connectionString, "connectionString");
            ExceptionUtils.DisallowNullArgument(retryBehavior, "retryBehavior");

            if (createMode != ShardMapManagerCreateMode.KeepExisting &&
                createMode != ShardMapManagerCreateMode.ReplaceExisting)
            {
                throw new ArgumentException(
                    StringUtils.FormatInvariant(
                        Errors._General_InvalidArgumentValue,
                        createMode,
                        "createMode"),
                    "createMode");
            }

            using (ActivityIdScope activityIdScope = new ActivityIdScope(Guid.NewGuid()))
            {
                DateTime getStartTime = DateTime.UtcNow;
                Tracer.TraceInfo(
                    TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                    "CreateSqlShardMapManager",
                    "Start; ");

                SqlShardMapManagerCredentials credentials = new SqlShardMapManagerCredentials(connectionString);

                TransientFaultHandling.RetryPolicy retryPolicy = new TransientFaultHandling.RetryPolicy(
                        new ShardManagementTransientErrorDetectionStrategy(retryBehavior),
                        RetryPolicy.DefaultRetryPolicy.GetRetryStrategy());

                EventHandler<TransientFaultHandling.RetryingEventArgs> handler = (sender, args) =>
                {
                    if (retryEventHandler != null)
                    {
                        retryEventHandler(sender, new RetryingEventArgs(args));
                    }
                };

                try
                {
                    retryPolicy.Retrying += handler;

                    // specifying targetVersion as GlobalConstants.GsmVersionClient to deploy latest store by default.
                    using (IStoreOperationGlobal op = new StoreOperationFactory().CreateCreateShardMapManagerGlobalOperation(
                        credentials,
                        retryPolicy,
                        "CreateSqlShardMapManager",
                        createMode,
                        targetVersion))
                    {
                        op.Do();
                    }

                    Tracer.TraceInfo(
                        TraceSourceConstants.ComponentNames.ShardMapManagerFactory,
                        "CreateSqlShardMapManager",
                        "Complete; Duration: {0}",
                        DateTime.UtcNow - getStartTime);
                }
                finally
                {
                    retryPolicy.Retrying -= handler;
                }

                return new ShardMapManager(
                    credentials,
                    new SqlStoreConnectionFactory(),
                    new StoreOperationFactory(),
                    new CacheStore(),
                    ShardMapManagerLoadPolicy.Lazy,
                    RetryPolicy.DefaultRetryPolicy,
                    retryBehavior,
                    retryEventHandler);
            }
        }
 /// <summary>
 /// Creates a new instance of transient error detection strategy for Shard map manager.
 /// </summary>
 /// <param name="retryBehavior">Behavior for detecting transient errors.</param>
 internal MultiShardQueryTransientErrorDetectionStrategy(RetryBehavior retryBehavior)
 {
     _standardDetectionStrategy = new TransientFaultHandling.SqlDatabaseTransientErrorDetectionStrategy();
     _transientFaultDetector = retryBehavior.TransientErrorDetector;
 }
Example #41
0
        public void The_behavior_has_work_recovery_level_precedence()
        {
            var sut = new RetryBehavior(1, TimeSpan.Zero);

            Assert.Equal(BehaviorPrecedence.WorkRecovery, sut.Precedence);
        }