// Token: 0x06000625 RID: 1573 RVA: 0x0001E5D4 File Offset: 0x0001C7D4 internal static AmFailoverEntry ReadFromPersistentStore(AmServerName serverName) { AmFailoverEntry amFailoverEntry = null; using (AmPersistentClusdbState amPersistentClusdbState = new AmPersistentClusdbState(AmSystemManager.Instance.Config.DagConfig.Cluster, AmFailoverEntry.GetPersistentStateKeyName(serverName))) { bool flag = false; string text = amPersistentClusdbState.ReadProperty <string>("TimeCreated", out flag); if (string.IsNullOrEmpty(text)) { text = ExDateTime.MinValue.ToString("o"); } if (flag) { amFailoverEntry = new AmFailoverEntry(); bool flag2; string value = amPersistentClusdbState.ReadProperty <string>("ReasonCode", out flag2); if (string.IsNullOrEmpty(value)) { value = AmDbActionReason.NodeDown.ToString(); } AmDbActionReason reasonCode; EnumUtility.TryParse <AmDbActionReason>(value, out reasonCode, AmDbActionReason.NodeDown, true); amFailoverEntry.ServerName = serverName; amFailoverEntry.TimeCreated = ExDateTime.Parse(ExTimeZone.CurrentTimeZone, text); amFailoverEntry.ReasonCode = reasonCode; amFailoverEntry.Delay = TimeSpan.FromSeconds((double)RegistryParameters.TransientFailoverSuppressionDelayInSec); } } return(amFailoverEntry); }
// Token: 0x06000631 RID: 1585 RVA: 0x0001E938 File Offset: 0x0001CB38 internal void Initialize() { AmConfig config = AmSystemManager.Instance.Config; if (config.IsPAM) { lock (this.m_locker) { AmServerName[] memberServers = config.DagConfig.MemberServers; foreach (AmServerName amServerName in memberServers) { AmFailoverEntry amFailoverEntry = AmFailoverEntry.ReadFromPersistentStoreBestEffort(amServerName); if (amFailoverEntry != null) { if (!config.DagConfig.IsNodePubliclyUp(amServerName)) { this.AddEntry(amFailoverEntry); } else { AmTrace.Debug("Skipped adding server to deferred failover. Removing from persistent store (server: {0})", new object[] { amServerName }); amFailoverEntry.DeleteFromPersistentStoreBestEffort(); } } } } } }
// Token: 0x0600063A RID: 1594 RVA: 0x0001EE10 File Offset: 0x0001D010 internal void InitiateFailoverIfRequired(object stateInfo) { AmServerName amServerName = (AmServerName)stateInfo; lock (this.m_locker) { if (AmSystemManager.Instance.Config.IsPAM) { AmFailoverEntry amFailoverEntry = null; if (this.EntryMap.TryGetValue(amServerName, out amFailoverEntry)) { AmNodeState nodeState = AmSystemManager.Instance.Config.DagConfig.GetNodeState(amFailoverEntry.ServerName); if (nodeState != AmNodeState.Up) { AmEvtNodeDownForLongTime amEvtNodeDownForLongTime = new AmEvtNodeDownForLongTime(amFailoverEntry.ServerName); amEvtNodeDownForLongTime.Notify(); } else { ReplayCrimsonEvents.DelayedFailoverSkippedSinceNodeIsUp.Log <AmServerName>(amServerName); } } this.RemoveEntryInternal(amServerName, true); } } }
// Token: 0x06000636 RID: 1590 RVA: 0x0001EBB4 File Offset: 0x0001CDB4 private bool AddEntry(AmFailoverEntry failoverEntry) { bool result = false; if (AmSystemManager.Instance.Config.IsPAM) { failoverEntry.Timer = new Timer(new TimerCallback(this.InitiateFailoverIfRequired), failoverEntry.ServerName, TimeSpan.FromMilliseconds(-1.0), TimeSpan.FromMilliseconds(-1.0)); lock (this.m_locker) { if (!this.IsEntryExist(failoverEntry.ServerName)) { result = true; ReplayCrimsonEvents.AddedDelayedFailoverEntry.Log <AmServerName, AmDbActionReason, ExDateTime, TimeSpan>(failoverEntry.ServerName, failoverEntry.ReasonCode, failoverEntry.TimeCreated, failoverEntry.Delay); this.EntryMap[failoverEntry.ServerName] = failoverEntry; failoverEntry.WriteToPersistentStoreBestEffort(); failoverEntry.Timer.Change(failoverEntry.Delay, TimeSpan.FromMilliseconds(-1.0)); } else { ReplayCrimsonEvents.EntryAlredayExistForDelayedFailover.Log <AmServerName, ExDateTime>(failoverEntry.ServerName, failoverEntry.TimeCreated + failoverEntry.Delay); } } } return(result); }
// Token: 0x06000633 RID: 1587 RVA: 0x0001EAD0 File Offset: 0x0001CCD0 internal bool IsEntryExist(AmServerName serverName) { bool result = false; lock (this.m_locker) { AmFailoverEntry amFailoverEntry = null; result = this.EntryMap.TryGetValue(serverName, out amFailoverEntry); } return(result); }
// Token: 0x06000624 RID: 1572 RVA: 0x0001E57C File Offset: 0x0001C77C internal static AmFailoverEntry ReadFromPersistentStoreBestEffort(AmServerName serverName) { AmFailoverEntry entry = null; Exception ex = AmHelper.HandleKnownExceptions(delegate(object param0, EventArgs param1) { entry = AmFailoverEntry.ReadFromPersistentStore(serverName); }); if (ex != null) { ReplayCrimsonEvents.TransientFailoverSuppressionPersistentStoreFailure.Log <string, AmServerName, string>("Read", serverName, ex.Message); } return(entry); }
// Token: 0x06000632 RID: 1586 RVA: 0x0001E9F8 File Offset: 0x0001CBF8 internal List <AmDeferredRecoveryEntry> GetEntriesForTask() { List <AmDeferredRecoveryEntry> list = new List <AmDeferredRecoveryEntry>(); lock (this.m_locker) { Dictionary <AmServerName, AmFailoverEntry> entryMap = AmSystemManager.Instance.TransientFailoverSuppressor.EntryMap; foreach (KeyValuePair <AmServerName, AmFailoverEntry> keyValuePair in entryMap) { AmFailoverEntry value = keyValuePair.Value; string recoveryDueTimeInUtc = (value.TimeCreated + value.Delay).ToString("o"); string fqdn = value.ServerName.Fqdn; AmDeferredRecoveryEntry item = new AmDeferredRecoveryEntry(fqdn, recoveryDueTimeInUtc); list.Add(item); } } return(list); }
// Token: 0x06000637 RID: 1591 RVA: 0x0001ECCC File Offset: 0x0001CECC private bool RemoveEntryInternal(AmServerName serverName, bool isRemoveFromClusdb) { bool result = false; AmFailoverEntry amFailoverEntry = null; if (this.EntryMap.TryGetValue(serverName, out amFailoverEntry)) { result = true; this.EntryMap.Remove(serverName); if (amFailoverEntry.Timer != null) { amFailoverEntry.Timer.Dispose(); } if (isRemoveFromClusdb) { amFailoverEntry.DeleteFromPersistentStoreBestEffort(); } } return(result); }
// Token: 0x06000629 RID: 1577 RVA: 0x0001E7E4 File Offset: 0x0001C9E4 internal void DeleteFromPersistentStore() { using (AmPersistentClusdbState amPersistentClusdbState = new AmPersistentClusdbState(AmSystemManager.Instance.Config.DagConfig.Cluster, AmFailoverEntry.GetPersistentStateKeyName(this.ServerName))) { amPersistentClusdbState.DeleteProperty("TimeCreated"); amPersistentClusdbState.DeleteProperty("ReasonCode"); } }
// Token: 0x06000627 RID: 1575 RVA: 0x0001E700 File Offset: 0x0001C900 internal void WriteToPersistentStore() { AmConfig config = AmSystemManager.Instance.Config; if (config != null && config.DagConfig != null) { using (AmPersistentClusdbState amPersistentClusdbState = new AmPersistentClusdbState(config.DagConfig.Cluster, AmFailoverEntry.GetPersistentStateKeyName(this.ServerName))) { amPersistentClusdbState.WriteProperty <string>("ReasonCode", this.ReasonCode.ToString()); amPersistentClusdbState.WriteProperty <string>("TimeCreated", this.TimeCreated.ToString("o")); return; } } throw new AmServiceShuttingDownException(); }