protected override void RunInternal() { AmDbOperationDetailedStatus detailedStatus = new AmDbOperationDetailedStatus(base.Database); base.DetailedStatus = detailedStatus; base.LastException = new AmDbMoveOperationSkippedException(base.Database.Name, this.MoveSkipReason); }
// Token: 0x060002F8 RID: 760 RVA: 0x00011878 File Offset: 0x0000FA78 protected override void RemountInternal(MountFlags mountFlags, DatabaseMountDialOverride mountDialoverride, AmServerName fromServer) { AmDbOperationDetailedStatus amDbOperationDetailedStatus = new AmDbOperationDetailedStatus(base.Database); this.DismountInternal(UnmountFlags.SkipCacheFlush); this.MountInternal(mountFlags, AmMountFlags.None, mountDialoverride, ref amDbOperationDetailedStatus); }
internal AmDatabaseMoveResult ConvertDetailedStatusToRpcMoveResult(AmDbOperationDetailedStatus detailedStatus) { Guid guid = detailedStatus.Database.Guid; string name = detailedStatus.Database.Name; string fromServerFqdn = string.Empty; string finalActiveServerFqdn = string.Empty; AmDbMountStatus dbMountStatusAtStart = AmDbMountStatus.Unknown; AmDbMountStatus dbMountStatusAtEnd = AmDbMountStatus.Unknown; if (detailedStatus.InitialDbState != null) { fromServerFqdn = detailedStatus.InitialDbState.ActiveServer.Fqdn; dbMountStatusAtStart = AmDbOperation.ConvertMountStatusToRpcMountStatus(detailedStatus.InitialDbState.MountStatus); } if (detailedStatus.FinalDbState != null) { finalActiveServerFqdn = detailedStatus.FinalDbState.ActiveServer.Fqdn; dbMountStatusAtEnd = AmDbOperation.ConvertMountStatusToRpcMountStatus(detailedStatus.FinalDbState.MountStatus); } Exception lastException = this.LastException; RpcErrorExceptionInfo errorInfo = AmRpcExceptionWrapper.Instance.ConvertExceptionToErrorExceptionInfo(lastException); AmDbMoveStatus dbMoveStatus = AmDbOperation.TranslateExceptionIntoMoveStatusEnum(lastException); List <AmDbRpcOperationSubStatus> attemptedServerSubStatuses = (from opSubStatus in detailedStatus.GetAllSubStatuses() select opSubStatus.ConvertToRpcSubStatus()).ToList <AmDbRpcOperationSubStatus>(); return(new AmDatabaseMoveResult(guid, name, fromServerFqdn, finalActiveServerFqdn, dbMoveStatus, dbMountStatusAtStart, dbMountStatusAtEnd, errorInfo, attemptedServerSubStatuses)); }
// Token: 0x060002A9 RID: 681 RVA: 0x0000F8DC File Offset: 0x0000DADC protected override void RunInternal() { AmDbOperationDetailedStatus mountStatus = null; Exception lastException = AmHelper.HandleKnownExceptions(delegate(object param0, EventArgs param1) { AmDbAction amDbAction = this.PrepareDbAction(this.ActionCode); amDbAction.Mount(this.StoreMountFlags, this.AmMountFlags, this.MountDialOverride, ref mountStatus); }); base.DetailedStatus = mountStatus; base.LastException = lastException; }
// Token: 0x060002C2 RID: 706 RVA: 0x0000FCD8 File Offset: 0x0000DED8 protected override void RunInternal() { AmDbOperationDetailedStatus moveStatus = null; Exception lastException = AmHelper.HandleKnownExceptions(delegate(object param0, EventArgs param1) { AmDbAction amDbAction = this.PrepareDbAction(this.Arguments.ActionCode); amDbAction.Move(this.Arguments.MountFlags, this.Arguments.DismountFlags, this.Arguments.MountDialOverride, this.Arguments.SourceServer, this.Arguments.TargetServer, this.Arguments.TryOtherHealthyServers, this.Arguments.SkipValidationChecks, this.Arguments.MoveComment, this.Arguments.ComponentName, ref moveStatus); }); base.DetailedStatus = moveStatus; base.LastException = lastException; }
internal void Move(MountFlags mountFlags, UnmountFlags dismountFlags, DatabaseMountDialOverride mountDialoverride, AmServerName fromServer, AmServerName targetServer, bool tryOtherHealthyServers, AmBcsSkipFlags skipValidationChecks, string moveComment, string componentName, ref AmDbOperationDetailedStatus moveStatus) { moveStatus = new AmDbOperationDetailedStatus(this.Database); Exception ex = null; bool flag = true; AmServerName initialSourceServer = null; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); string initialActive = string.Empty; AmDbOperationDetailedStatus tempStatus = moveStatus; try { using (AmDatabaseOperationLock.Lock(this.DatabaseGuid, AmDbLockReason.Move, null)) { ex = AmHelper.HandleKnownExceptions(delegate(object param0, EventArgs param1) { initialActive = this.GetSafeActiveServer(); ReplayCrimsonEvents.ToplevelMoveInitiated.LogGeneric(this.PrepareStartupArgs(new object[] { mountFlags, dismountFlags, mountDialoverride, AmServerName.IsNullOrEmpty(fromServer) ? initialActive : fromServer.Fqdn, targetServer, tryOtherHealthyServers, skipValidationChecks, moveComment, componentName })); initialSourceServer = this.State.ActiveServer; this.EnsureAutomaticActionIsAllowed(); this.ClearFailureAttemptIfAdminAction(this.DatabaseGuid); this.MoveInternal(mountFlags, dismountFlags, mountDialoverride, fromServer, targetServer, tryOtherHealthyServers, skipValidationChecks, componentName, ref tempStatus); }); this.WriteStateClearIfInProgressStatus(true); flag = false; } } catch (AmDbLockConflictException ex2) { ex = ex2; } finally { stopwatch.Stop(); moveStatus = tempStatus; if (flag || ex != null) { string text = (ex != null) ? ex.Message : ReplayStrings.UnknownError; ReplayCrimsonEvents.ToplevelMoveFailed.LogGeneric(this.PrepareCompletionArgs(new object[] { initialActive, stopwatch.Elapsed, text, moveComment })); if (AmServerName.IsNullOrEmpty(targetServer)) { ReplayEventLogConstants.Tuple_AmDatabaseMoveUnspecifiedServerFailed.LogEvent(null, new object[] { this.DatabaseName, initialSourceServer, text, moveComment }); } else { ReplayEventLogConstants.Tuple_AmDatabaseMoveFailed.LogEvent(null, new object[] { this.DatabaseName, initialActive, targetServer, text, moveComment }); } } else { ReplayCrimsonEvents.ToplevelMoveSuccess.LogGeneric(this.PrepareCompletionArgs(new object[] { initialActive, stopwatch.Elapsed, moveComment })); ReplayEventLogConstants.Tuple_AmDatabaseMoved.LogEvent(null, new object[] { this.DatabaseName, initialActive, moveStatus.FinalDbState.ActiveServer, moveComment }); } } if (ex != null) { throw ex; } }
internal void Mount(MountFlags storeFlags, AmMountFlags amMountFlags, DatabaseMountDialOverride mountDialoverride, ref AmDbOperationDetailedStatus mountStatus) { mountStatus = new AmDbOperationDetailedStatus(this.Database); Exception ex = null; bool flag = true; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); AmDbOperationDetailedStatus tempStatus = mountStatus; try { using (AmDatabaseOperationLock.Lock(this.DatabaseGuid, AmDbLockReason.Mount, null)) { ex = AmHelper.HandleKnownExceptions(delegate(object param0, EventArgs param1) { ReplayCrimsonEvents.ToplevelMountInitiated.LogGeneric(this.PrepareStartupArgs(new object[] { storeFlags, mountDialoverride })); this.EnsureAutomaticActionIsAllowed(); this.ClearFailureAttemptIfAdminAction(this.DatabaseGuid); if (!this.State.IsEntryExist) { this.DbTrace.Info("Mounting database for the first time!", new object[0]); } this.MountInternal(storeFlags, amMountFlags, mountDialoverride, ref tempStatus); }); mountStatus = tempStatus; this.WriteStateClearIfInProgressStatus(true); flag = false; } } catch (AmDbLockConflictException ex2) { ex = ex2; } finally { stopwatch.Stop(); if (flag || ex != null) { string text = (ex != null) ? ex.Message : ReplayStrings.UnknownError; ReplayCrimsonEvents.ToplevelMountFailed.LogGeneric(this.PrepareCompletionArgs(new object[] { stopwatch.Elapsed, text })); ReplayEventLogConstants.Tuple_AmDatabaseMountFailed.LogEvent(null, new object[] { this.DatabaseName, this.State.ActiveServer, text }); } else { ReplayCrimsonEvents.ToplevelMountSuccess.LogGeneric(this.PrepareCompletionArgs(new object[] { stopwatch.Elapsed })); ReplayEventLogConstants.Tuple_AmDatabaseMounted.LogEvent(null, new object[] { this.DatabaseName, this.State.ActiveServer }); } } if (ex != null) { throw ex; } }
protected abstract void MoveInternal(MountFlags mountFlags, UnmountFlags dismountFlags, DatabaseMountDialOverride mountDialoverride, AmServerName fromServer, AmServerName targetServer, bool tryOtherHealthyServers, AmBcsSkipFlags skipValidationChecks, string componentName, ref AmDbOperationDetailedStatus moveStatus);
protected abstract void MountInternal(MountFlags storeFlags, AmMountFlags amMountFlags, DatabaseMountDialOverride mountDialoverride, ref AmDbOperationDetailedStatus mountStatus);
protected override void MountInternal(MountFlags storeMountFlags, AmMountFlags amMountFlags, DatabaseMountDialOverride mountDialOverride, ref AmDbOperationDetailedStatus mountStatus) { Exception ex = null; int natSkippedServersCount = 0; int num = 0; bool flag = true; if (ThirdPartyManager.IsThirdPartyReplicationEnabled) { flag = false; } if (base.ActionCode.IsAdminOperation) { if (base.State.IsActiveServerValid) { flag = false; } else { AmTrace.Debug("Mount issued for the first time on this database. We will try all the available servers. (db={0})", new object[] { base.DatabaseName }); } } AmServerName amServerName = base.State.ActiveServer; if (AmServerName.IsNullOrEmpty(amServerName)) { amServerName = new AmServerName(base.Database.Server.Name); } AmBcsSkipFlags skipValidationChecks = AmBcsSkipFlags.SkipAll; if (flag) { skipValidationChecks = AmBcsSkipFlags.None; } IBestCopySelector bestCopySelector = this.ConstructBestCopySelector(flag, skipValidationChecks, null, amServerName, amServerName, mountDialOverride, null); AmDbNodeAttemptTable dbNodeAttemptTable = AmSystemManager.Instance.DbNodeAttemptTable; if (base.ActionCode.IsAdminOperation) { dbNodeAttemptTable.ClearFailedTime(base.DatabaseGuid); } AmServerName sourceServer = amServerName; AmAcllReturnStatus amAcllReturnStatus = null; AmServerName amServerName2 = bestCopySelector.FindNextBestCopy(); while (amServerName2 != null) { num++; base.DbTrace.Debug("Attempting mount on server {0}", new object[] { amServerName2 }); this.AttemptMountOnServer(amServerName2, sourceServer, storeMountFlags, amMountFlags, UnmountFlags.SkipCacheFlush, mountDialOverride, AmBcsSkipFlags.None, flag, ref natSkippedServersCount, ref amAcllReturnStatus, out ex); base.DbTrace.Debug("AttemptMountOnServer returned AcllStatus: {0}", new object[] { amAcllReturnStatus }); sourceServer = base.State.ActiveServer; if (ex == null) { break; } bestCopySelector.ErrorLogger.ReportServerFailure(amServerName2, "CopyHasBeenTriedCheck", ex.Message); if (ex is AmRoleChangedWhileOperationIsInProgressException || ex is AmMountTimeoutException) { break; } amServerName2 = bestCopySelector.FindNextBestCopy(); base.CurrentAttemptNumber++; } this.CheckActionResultsAndUpdateAdProperties(amServerName, null, bestCopySelector, ex, num, natSkippedServersCount); }
protected override void MoveInternal(MountFlags storeMountFlags, UnmountFlags dismountFlags, DatabaseMountDialOverride mountDialoverride, AmServerName fromServer, AmServerName targetServer, bool tryOtherHealthyServers, AmBcsSkipFlags skipValidationChecks, string componentName, ref AmDbOperationDetailedStatus moveStatus) { AmDbNodeAttemptTable dbNodeAttemptTable = AmSystemManager.Instance.DbNodeAttemptTable; IBestCopySelector bestCopySelector = null; Exception ex = null; bool flag = false; int num = 0; int natSkippedServersCount = 0; if (!base.State.IsEntryExist) { base.DbTrace.Error("Database was never mounted. Move is applicable only if it was mounted at least once", new object[0]); throw new AmDatabaseNeverMountedException(); } if (base.State.IsAdminDismounted) { AmTrace.Diagnostic("Moving a dismounted database {0}. The database will be moved, but won't be mounted", new object[] { base.DatabaseName }); } moveStatus.InitialDbState = base.State.Copy(); AmServerName activeServer = base.State.ActiveServer; AmAcllReturnStatus amAcllReturnStatus = null; bool flag2 = true; try { this.CheckIfMoveApplicableForDatabase(base.State.ActiveServer, fromServer, base.ActionCode); bestCopySelector = this.ConstructBestCopySelector(tryOtherHealthyServers, skipValidationChecks, null, activeServer, targetServer, mountDialoverride, componentName); if (base.ActionCode.IsAutomaticShutdownSwitchover) { base.AttemptDismount(base.State.ActiveServer, dismountFlags, true, out ex); flag = true; } AmServerName amServerName = bestCopySelector.FindNextBestCopy(); while (amServerName != null) { num++; if (!flag) { base.AttemptDismount(activeServer, dismountFlags, true, out ex); flag = true; } AmMountFlags amMountFlags = AmMountFlags.None; if (BitMasker.IsOn((int)skipValidationChecks, 4)) { amMountFlags = AmMountFlags.MoveWithSkipHealth; } this.AttemptMountOnServer(amServerName, base.State.ActiveServer, storeMountFlags, amMountFlags, dismountFlags, mountDialoverride, skipValidationChecks, tryOtherHealthyServers, ref natSkippedServersCount, ref amAcllReturnStatus, out ex); base.DbTrace.Debug("AttemptMountOnServer returned AcllStatus: {0}", new object[] { amAcllReturnStatus }); moveStatus.AddSubstatus(new AmDbOperationSubStatus(amServerName, amAcllReturnStatus, ex)); if (ex == null) { flag2 = false; break; } bestCopySelector.ErrorLogger.ReportServerFailure(amServerName, "CopyHasBeenTriedCheck", ex.Message); if (ex is AmRoleChangedWhileOperationIsInProgressException) { flag2 = false; break; } if (ex is AmMountTimeoutException) { flag2 = false; break; } amServerName = bestCopySelector.FindNextBestCopy(); base.CurrentAttemptNumber++; } } finally { moveStatus.FinalDbState = base.State.Copy(); } if (flag2) { MountStatus storeDatabaseMountStatus = AmStoreHelper.GetStoreDatabaseMountStatus(base.State.ActiveServer, base.Database.Guid); if (storeDatabaseMountStatus != base.State.MountStatus) { ReplayCrimsonEvents.MismatchErrorAfterMove.Log <string, Guid, AmServerName, MountStatus, MountStatus>(base.Database.Name, base.Database.Guid, base.State.ActiveServer, base.State.MountStatus, storeDatabaseMountStatus); if (storeDatabaseMountStatus == MountStatus.Dismounted) { base.State.MountStatus = MountStatus.Dismounted; base.WriteState(); } } } this.CheckActionResultsAndUpdateAdProperties(activeServer, targetServer, bestCopySelector, ex, num, natSkippedServersCount); }
// Token: 0x060002F7 RID: 759 RVA: 0x00011869 File Offset: 0x0000FA69 protected override void MoveInternal(MountFlags mountFlags, UnmountFlags dismountFlags, DatabaseMountDialOverride mountDialoverride, AmServerName fromServer, AmServerName targetServer, bool tryOtherHealthyServers, AmBcsSkipFlags skipValidationChecks, string componentName, ref AmDbOperationDetailedStatus moveStatus) { throw new AmDbMoveOperationNotSupportedStandaloneException(base.DatabaseName); }
// Token: 0x060002F5 RID: 757 RVA: 0x00011688 File Offset: 0x0000F888 protected override void MountInternal(MountFlags storeFlags, AmMountFlags amMountFlags, DatabaseMountDialOverride mountDialoverride, ref AmDbOperationDetailedStatus mountStatus) { Exception ex = null; bool isSuccess = false; AmServerName activeServer = base.State.ActiveServer; AmServerName serverToMount = AmServerName.LocalComputerName; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { ReplayCrimsonEvents.DirectMountInitiated.LogGeneric(base.PrepareSubactionArgs(new object[] { serverToMount, storeFlags, false, amMountFlags })); ex = AmHelper.HandleKnownExceptions(delegate(object param0, EventArgs param1) { this.ReportStatus(AmDbActionStatus.StoreMountInitiated); this.WriteStateMountStart(serverToMount); AmDbAction.MountDatabaseDirect(serverToMount, this.State.LastMountedServer, this.DatabaseGuid, storeFlags, amMountFlags, this.ActionCode); isSuccess = true; }); } finally { stopwatch.Stop(); if (isSuccess) { base.DbTrace.Debug("Database is now mounted on {0}", new object[] { serverToMount }); SharedDependencies.WritableADHelper.ResetAllowFileRestoreDsFlag(base.DatabaseGuid, activeServer, serverToMount); ReplayCrimsonEvents.DirectMountSuccess.LogGeneric(base.PrepareSubactionArgs(new object[] { serverToMount, stopwatch.Elapsed })); base.WriteStateMountSuccess(); base.ReportStatus(AmDbActionStatus.StoreMountSuccessful); } else { string text = (ex != null) ? ex.Message : ReplayStrings.UnknownError; ReplayCrimsonEvents.DirectMountFailed.LogGeneric(base.PrepareSubactionArgs(new object[] { serverToMount, stopwatch.Elapsed, text })); base.WriteStateMountFailed(true); base.ReportStatus(AmDbActionStatus.StoreMountFailed); } } AmHelper.ThrowDbActionWrapperExceptionIfNecessary(ex); }