Esempio n. 1
0
        // 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);
        }
Esempio n. 6
0
        // 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);
        }
Esempio n. 9
0
 // 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");
     }
 }
Esempio n. 10
0
        // 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();
        }