// Token: 0x0600054C RID: 1356 RVA: 0x00013FAC File Offset: 0x000121AC
        public static DataStoreSettings GetStoreConfig()
        {
            IActiveManagerSettings settings          = DxStoreSetting.Instance.GetSettings();
            DxStoreMode            dxStoreRunMode    = settings.DxStoreRunMode;
            DataStoreSettings      dataStoreSettings = new DataStoreSettings();

            if (dxStoreRunMode == DxStoreMode.Shadow)
            {
                dataStoreSettings.Primary = StoreKind.Clusdb;
                dataStoreSettings.Shadow  = StoreKind.DxStore;
                dataStoreSettings.IsCompositeModeEnabled = true;
            }
            else if (dxStoreRunMode == DxStoreMode.Primary)
            {
                dataStoreSettings.Primary = StoreKind.DxStore;
                dataStoreSettings.Shadow  = StoreKind.None;
                dataStoreSettings.IsCompositeModeEnabled = true;
            }
            else
            {
                dataStoreSettings.Primary = StoreKind.Clusdb;
                dataStoreSettings.Shadow  = StoreKind.None;
                dataStoreSettings.IsCompositeModeEnabled = false;
            }
            return(dataStoreSettings);
        }
Esempio n. 2
0
            public override CommonSettings UpdateDefaultCommonSettings(CommonSettings input)
            {
                IActiveManagerSettings settings = DxStoreSetting.Instance.GetSettings();

                input.IsUseHttpTransportForInstanceCommunication  = settings.DxStoreIsUseHttpForInstanceCommunication;
                input.IsUseHttpTransportForClientCommunication    = settings.DxStoreIsUseHttpForClientCommunication;
                input.IsUseBinarySerializerForClientCommunication = settings.DxStoreIsUseBinarySerializerForClientCommunication;
                input.IsUseEncryption = settings.DxStoreIsEncryptionEnabled;
                return(input);
            }
        // Token: 0x06000ED9 RID: 3801 RVA: 0x0003F5F4 File Offset: 0x0003D7F4
        public override TopologyInfo GetLocalServerTopology(bool isForceRefresh = false)
        {
            TopologyInfo           topologyInfo = null;
            IActiveManagerSettings settings     = DxStoreSetting.Instance.GetSettings();
            bool flag = settings.DxStoreRunMode != DxStoreMode.Disabled;

            if (isForceRefresh)
            {
                Dependencies.ADConfig.Refresh("Distributed store requesting for AD config refresh since members seem to have changed");
            }
            IADServer localServer = Dependencies.ADConfig.GetLocalServer();

            if (localServer != null)
            {
                topologyInfo = new TopologyInfo();
                if (flag && localServer.DatabaseAvailabilityGroup != null)
                {
                    IADDatabaseAvailabilityGroup localDag = Dependencies.ADConfig.GetLocalDag();
                    if (localDag != null)
                    {
                        topologyInfo.IsConfigured = true;
                        topologyInfo.Name         = localDag.Name;
                        if (this.fixedMemberServersMap.Count == 0)
                        {
                            SortedDictionary <string, string> fixedDagMembers = this.GetFixedDagMembers();
                            if (fixedDagMembers != null && fixedDagMembers.Count > 0)
                            {
                                this.fixedMemberServersMap = fixedDagMembers;
                                this.eventLogger.Log(DxEventSeverity.Info, 0, "Found fixed dag members {0}", new object[]
                                {
                                    string.Join(";", fixedDagMembers.Values)
                                });
                            }
                        }
                        if (this.fixedMemberServersMap.Count > 0)
                        {
                            topologyInfo.Members = this.fixedMemberServersMap.Keys.ToArray <string>();
                        }
                        else if (localDag.Servers != null)
                        {
                            topologyInfo.Members = (from s in localDag.Servers
                                                    select s.Name).ToArray <string>();
                        }
                        topologyInfo.IsAllMembersVersionCompatible = this.versionChecker.CheckVersionCompatibility();
                    }
                }
            }
            return(topologyInfo);
        }
 // Token: 0x06000ED2 RID: 3794 RVA: 0x0003F3F0 File Offset: 0x0003D5F0
 private void StartInternal()
 {
     lock (this.locker)
     {
         DistributedStore.Instance.StartProcessRestartTimer();
         IActiveManagerSettings settings = DxStoreSetting.Instance.GetSettings();
         if (settings.DxStoreRunMode != DxStoreMode.Disabled)
         {
             this.EventLogger    = new DistributedStoreEventLogger(false);
             this.ConfigProvider = new DistributedStoreTopologyProvider(this.EventLogger, null, false);
             this.Manager        = new DxStoreManager(this.ConfigProvider, this.EventLogger);
             this.Manager.Start();
         }
     }
 }
Esempio n. 5
0
        internal void CheckDataStores()
        {
            IActiveManagerSettings settings = DxStoreSetting.Instance.GetSettings();

            if (!settings.DxStoreIsPeriodicFixupEnabled || settings.DxStoreRunMode != DxStoreMode.Shadow)
            {
                return;
            }
            DateTimeOffset            lastUpdateTime = DateTimeOffset.MinValue;
            DataStoreSnapshotAnalyzer analyzer       = new DataStoreSnapshotAnalyzer((DiffReportVerboseMode)RegistryParameters.DistributedStoreDiffReportVerboseFlags);
            string text = null;

            if (!analyzer.IsPaxosConfiguredAndLeaderExist(out text))
            {
                if (!this.isPaxosNotReadyLogged)
                {
                    DxStoreHACrimsonEvents.DataStoreValidationSkipped.Log <string, string>("Paxos either not configured or paxos leader does not exist", text);
                    this.isPaxosNotReadyLogged = true;
                }
                return;
            }
            this.isPaxosNotReadyLogged = false;
            Exception ex = Utils.RunBestEffort(delegate
            {
                lastUpdateTime = this.GetLastAnalyzeTime();
            });

            if (ex != null)
            {
                if (!this.isLastAnalyzeTimeFailureLogged)
                {
                    DxStoreHACrimsonEvents.DataStoreValidationFailed.Log <string, Exception>("GetLastAnalyzeTime", ex);
                    this.isLastAnalyzeTimeFailureLogged = true;
                }
                return;
            }
            this.isLastAnalyzeTimeFailureLogged = false;
            DateTimeOffset now            = DateTimeOffset.Now;
            DateTimeOffset dateTimeOffset = now;

            if (lastUpdateTime != DateTimeOffset.MinValue)
            {
                dateTimeOffset = lastUpdateTime.Add(TimeSpan.FromSeconds((double)RegistryParameters.DistributedStoreConsistencyVerifyIntervalInSecs));
            }
            if (dateTimeOffset > now)
            {
                if (this.lastRecordedDueTime < dateTimeOffset)
                {
                    DxStoreHACrimsonEvents.DataStoreValidationSkipped.Log <string, DateTimeOffset>("Time not elapsed", dateTimeOffset);
                    this.lastRecordedDueTime = dateTimeOffset;
                }
                return;
            }
            ex = Utils.RunBestEffort(delegate
            {
                analyzer.AnalyzeDataStores();
            });
            string timingInfoAsString = analyzer.GetTimingInfoAsString();

            if (ex != null)
            {
                DxStoreHACrimsonEvents.DataStoreValidationFailed.Log <string, Exception>(string.Format("AnalyzeDataStores() failed. Phase: {0}, Timing: {1}", analyzer.AnalysisPhase, timingInfoAsString), ex);
                return;
            }
            DataStoreDiffReport report = analyzer.Container.Report;

            DxStoreHACrimsonEvents.DataStoreValidationCompleted.Log <bool, string>(report.IsEverythingMatches, timingInfoAsString);
            analyzer.LogDiffDetailsToEventLog();
            this.SetLastAnalyzeTimeToNow();
            bool flag = false;

            if (!report.IsEverythingMatches)
            {
                if (RegistryParameters.DistributedStoreDisableDxStoreFixUp)
                {
                    DxStoreHACrimsonEvents.DataStoreValidationSkipped.Log <string, string>("Database fixup skipped since it is disabled in registry", string.Empty);
                }
                else if (report.TotalClusdbPropertiesCount > 0)
                {
                    if (!this.IsLastLogPropertiesAreTheOnlyDifference(report))
                    {
                        flag = true;
                    }
                    else
                    {
                        DxStoreHACrimsonEvents.DataStoreValidationSkipped.Log <string, string>("Database fixup skipped since last log properties are the only entries that have changed", string.Empty);
                    }
                }
                else
                {
                    DxStoreHACrimsonEvents.DataStoreValidationSkipped.Log <string, string>("Database fixup skipped since clusdb does not have single property", string.Empty);
                }
            }
            if (flag)
            {
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                ex = Utils.RunBestEffort(delegate
                {
                    analyzer.CopyClusdbSnapshotToDxStore();
                });
                long elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
                if (ex != null)
                {
                    DxStoreHACrimsonEvents.DataStoreFailedToUpdate.Log <long, Exception>(stopwatch.ElapsedMilliseconds, ex);
                    return;
                }
                DxStoreHACrimsonEvents.DataStoreSuccessfulyUpdated.Log <long, string>(stopwatch.ElapsedMilliseconds, string.Empty);
            }
        }