コード例 #1
0
 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);
         }
     }
 }
コード例 #2
0
 public PoisonEventControl(PoisonControlMaster master, DatabaseInfo databaseInfo) : base(master, databaseInfo, "Event")
 {
 }