private void CheckDatabaseStatus(HangDetector hangDetector) { try { long timestamp = Stopwatch.GetTimestamp(); if (ExTraceGlobals.FaultInjectionTracer.IsTraceEnabled(TraceType.FaultInjection)) { ExTraceGlobals.FaultInjectionTracer.TraceTest <long>(2370186557U, ref timestamp); } this.performanceCountersTotal.ElapsedTimeSinceLastDatabaseStatusUpdateAttempt.RawValue = timestamp; lock (this) { if (this.startState != DatabaseManager.StartState.Initialized) { ExTraceGlobals.DatabaseManagerTracer.TraceDebug <DatabaseManager>((long)this.GetHashCode(), "{0}: CheckDatabaseStatus called when not initialized.", this); return; } AIBreadcrumbs.DatabaseStatusTrail.Drop("Checking if Store is running."); if (!this.IsStoreServiceRunning()) { ExTraceGlobals.DatabaseManagerTracer.TraceDebug <DatabaseManager>((long)this.GetHashCode(), "{0}: Store is not running, cannot check status of databases. Assuming all databases are dismounted.", this); this.RemoveAllOnlineDatabases(hangDetector); return; } this.CheckForRestart(hangDetector); } base.CatchMeIfYouCan(delegate { if (this.exRpcAdmin == null) { AIBreadcrumbs.DatabaseStatusTrail.Drop("Creating ExRpcAdmin."); this.exRpcAdmin = ExRpcAdmin.Create("Client=EBA", null, null, null, null); } MdbStatus[] array = this.GetOnlineDatabases(); lock (this) { List <Guid> list = new List <Guid>(); foreach (Guid guid in this.onlineDatabases.Keys) { if (!DatabaseManager.IsOnlineDatabase(guid, array)) { list.Add(guid); } } foreach (Guid databaseGuid in list) { this.RemoveDatabase(databaseGuid, hangDetector); } foreach (MdbStatus mdbStatus in array) { if (this.isStopping) { break; } if (!this.onlineDatabases.ContainsKey(mdbStatus.MdbGuid)) { this.TracePfd("PFD AIS {0} {1}: found new online database '{2}'", new object[] { 17239, this, mdbStatus.MdbName }); AIBreadcrumbs.DatabaseStatusTrail.Drop("Adding database " + mdbStatus.MdbGuid); DatabaseInfo databaseInfo = this.TryCreateDatabaseInfo(mdbStatus); if (databaseInfo != null) { this.AttemptAddDatabase(databaseInfo); } } } } }, "DatabaseManager"); } catch (AIException ex) { ExTraceGlobals.DatabaseManagerTracer.TraceError <DatabaseManager, AIException>((long)this.GetHashCode(), "{0}: Failed to process databases. Exception={1}", this, ex); base.LogEvent(AssistantsEventLogConstants.Tuple_DatabaseManagerTransientFailure, ex.ToString(), new object[] { ex.ToString() }); if (this.exRpcAdmin != null) { this.exRpcAdmin.Dispose(); this.exRpcAdmin = null; } if (!(ex is AITransientException)) { this.RemoveAllOnlineDatabases(hangDetector); } } }
public PoisonEventControl(PoisonControlMaster master, DatabaseInfo databaseInfo) : base(master, databaseInfo, "Event") { }