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); }
public static ShardMapManager CreateSqlShardMapManager( string connectionString, RetryBehavior retryBehavior) { return(CreateSqlShardMapManager( connectionString, ShardMapManagerCreateMode.KeepExisting, retryBehavior)); }
public static ShardMapManager CreateSqlShardMapManager( string connectionString, RetryBehavior retryBehavior) { return(CreateSqlShardMapManager( connectionString, null, retryBehavior)); }
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) { }
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()); }
/// <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 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(); }
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(); }
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()); }
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()); }
/// <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)); }
public static ShardMapManager CreateSqlShardMapManager( string connectionString, ShardMapManagerCreateMode createMode, RetryBehavior retryBehavior) { return(CreateSqlShardMapManagerImpl( connectionString, createMode, retryBehavior, null, GlobalConstants.GsmVersionClient)); }
internal static ShardMapManager CreateSqlShardMapManager( string connectionString, ShardMapManagerCreateMode createMode, RetryBehavior retryBehavior, EventHandler <RetryingEventArgs> retryEventHandler) { return(CreateSqlShardMapManagerImpl( connectionString, createMode, retryBehavior, retryEventHandler, GlobalConstants.GsmVersionClient)); }
internal static ShardMapManager CreateSqlShardMapManager( string connectionString, ShardMapManagerCreateMode createMode, RetryBehavior retryBehavior, EventHandler <RetryingEventArgs> retryEventHandler) { return(CreateSqlShardMapManager( connectionString, null, createMode, retryBehavior, retryEventHandler)); }
public static ShardMapManager CreateSqlShardMapManager( string connectionString, SqlCredential secureCredential, ShardMapManagerCreateMode createMode, RetryBehavior retryBehavior) { return(CreateSqlShardMapManager( new SqlConnectionInfo( connectionString, secureCredential), createMode, retryBehavior)); }
public static bool TryGetSqlShardMapManager( string connectionString, ShardMapManagerLoadPolicy loadPolicy, RetryBehavior retryBehavior, out ShardMapManager shardMapManager) { return(TryGetSqlShardMapManager( connectionString, null, loadPolicy, retryBehavior, out 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="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)); }
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); }
public static ShardMapManager CreateSqlShardMapManager( string connectionString, SqlCredential secureCredential, ShardMapManagerCreateMode createMode, RetryBehavior retryBehavior) { return(CreateSqlShardMapManagerImpl( new SqlConnectionInfo( connectionString, secureCredential), createMode, retryBehavior, null, GlobalConstants.GsmVersionClient)); }
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); }
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); } }
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; } }
/// <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; }
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; }
/// <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()); }
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); } }
public void The_behavior_has_work_recovery_level_precedence() { var sut = new RetryBehavior(1, TimeSpan.Zero); Assert.Equal(BehaviorPrecedence.WorkRecovery, sut.Precedence); }