/// <summary> /// Acquires the transaction scope. /// </summary> /// <returns>Transaction scope, operations within the scope excute atomically.</returns> private IStoreTransactionScope GetTransactionScope(StoreOperationTransactionScopeKind scopeKind) { switch (scopeKind) { case StoreOperationTransactionScopeKind.Global: return(_globalConnection.GetTransactionScope(StoreTransactionScopeKind.ReadWrite)); case StoreOperationTransactionScopeKind.LocalSource: return(_localConnectionSource.GetTransactionScope(StoreTransactionScopeKind.ReadWrite)); default: Debug.Assert(scopeKind == StoreOperationTransactionScopeKind.LocalTarget); return(_localConnectionTarget.GetTransactionScope(StoreTransactionScopeKind.ReadWrite)); } }
/// <summary> /// Terminates connection on the source shard object. /// </summary> private void KillConnectionsOnSourceShard() { SqlUtils.WithSqlExceptionHandling(() => { string sourceShardConnectionString = this.GetConnectionStringForShardLocation(_mappingSource.StoreShard.Location); SqlCredential sourceShardSecureCredential = this.GetSecureCredentialForShardLocation(_mappingSource.StoreShard.Location); IStoreResults result; using (IStoreConnection connectionForKill = this.Manager.StoreConnectionFactory.GetConnection( StoreConnectionKind.LocalSource, sourceShardConnectionString, sourceShardSecureCredential)) { connectionForKill.Open(); using (IStoreTransactionScope ts = connectionForKill.GetTransactionScope(StoreTransactionScopeKind.NonTransactional)) { result = ts.ExecuteOperation( StoreOperationRequestBuilder.SpKillSessionsForShardMappingLocal, StoreOperationRequestBuilder.KillSessionsForShardMappingLocal(_patternForKill)); } } if (result.Result != StoreResult.Success) { // Possible errors are: // StoreResult.UnableToKillSessions // StoreResult.StoreVersionMismatch // StoreResult.MissingParametersForStoredProcedure throw StoreOperationErrorHandler.OnShardMapErrorLocal( result, _shardMap, _mappingSource.StoreShard.Location, _errorCategory, StoreOperationErrorHandler.OperationNameFromStoreOperationCode(this.OperationCode), StoreOperationRequestBuilder.SpKillSessionsForShardMappingLocal); } }); }
/// <summary> /// Acquires the transaction scope. /// </summary> /// <returns>Transaction scope, operations within the scope excute atomically.</returns> private IStoreTransactionScope GetTransactionScope() { return(_localConnection.GetTransactionScope(this.ReadOnly ? StoreTransactionScopeKind.ReadOnly : StoreTransactionScopeKind.ReadWrite)); }