Changeset 17825 for branches/3040_VectorBasedGP/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs
- Timestamp:
- 01/27/21 14:10:56 (4 years ago)
- Location:
- branches/3040_VectorBasedGP
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3040_VectorBasedGP
- Property svn:mergeinfo changed
-
branches/3040_VectorBasedGP/HeuristicLab.Services.Hive
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Services.Hive merged: 17574-17575
- Property svn:mergeinfo changed
-
branches/3040_VectorBasedGP/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs
r17180 r17825 28 28 public class EventManager : IEventManager { 29 29 private const string SlaveTimeout = "Slave timed out."; 30 private static readonly TaskState[] CompletedStates = { TaskState.Finished, TaskState.Aborted, TaskState.Failed }; 31 30 32 private IPersistenceManager PersistenceManager { 31 33 get { return ServiceLocator.Instance.PersistenceManager; } … … 33 35 34 36 public void Cleanup() { 37 Console.WriteLine("started cleanup"); 35 38 var pm = PersistenceManager; 36 39 37 pm.UseTransaction(() => { 38 FinishJobDeletion(pm); 39 pm.SubmitChanges(); 40 }); 40 // preemptiv delete obsolete entities 41 // speeds up job deletion 42 BatchDelete((p, s) => p.StateLogDao.DeleteObsolete(s), 100, 100, true, pm, "DeleteObsoleteStateLogs"); 43 BatchDelete((p, s) => p.TaskDataDao.DeleteObsolete(s), 100, 20, true, pm, "DeleteObsoleteTaskData"); 44 BatchDelete((p, s) => p.TaskDao.DeleteObsolete(s), 100, 20, false, pm, "DeleteObsoleteTasks"); 45 BatchDelete((p, s) => p.JobDao.DeleteByState(JobState.DeletionPending, s), 100, 20, true, pm, "DeleteObsoleteJobs"); 41 46 42 pm.UseTransaction(() => { 43 SetTimeoutSlavesOffline(pm); 44 SetTimeoutTasksWaiting(pm); 45 DeleteObsoleteSlaves(pm); 46 pm.SubmitChanges(); 47 }); 47 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: SetTimeoutSlavesOffline"); 48 Console.WriteLine("5"); 49 pm.UseTransactionAndSubmit(() => { SetTimeoutSlavesOffline(pm); }); 50 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: SetTimeoutTasksWaiting"); 51 Console.WriteLine("6"); 52 pm.UseTransactionAndSubmit(() => { SetTimeoutTasksWaiting(pm); }); 53 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: DeleteObsoleteSlaves"); 54 Console.WriteLine("7"); 55 pm.UseTransactionAndSubmit(() => { DeleteObsoleteSlaves(pm); }); 56 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: AbortObsoleteTasks"); 57 Console.WriteLine("8"); 58 pm.UseTransactionAndSubmit(() => { AbortObsoleteTasks(pm); }); 59 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: FinishParentTasks"); 60 Console.WriteLine("9"); 61 pm.UseTransactionAndSubmit(() => { FinishParentTasks(pm); }); 62 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log("HiveJanitor: DONE"); 63 Console.WriteLine("10"); 64 } 48 65 49 pm.UseTransaction(() => { 50 FinishParentTasks(pm); 51 pm.SubmitChanges(); 52 }); 66 private void BatchDelete( 67 Func<IPersistenceManager, int, int> deletionFunc, 68 int batchSize, 69 int maxCalls, 70 bool limitIsBatchSize, 71 IPersistenceManager pm, 72 string logMessage 73 ) { 74 int totalDeleted = 0; 75 while (maxCalls > 0) { 76 maxCalls--; 77 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log($"HiveJanitor: {logMessage}"); 78 Console.WriteLine($"HiveJanitor: {logMessage}"); 79 var deleted = pm.UseTransactionAndSubmit(() => { return deletionFunc(pm, batchSize); }); 80 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log($"HiveJanitor: {logMessage} DONE (deleted {deleted}, {maxCalls} calls left)"); 81 Console.WriteLine($"HiveJanitor: {logMessage} DONE (deleted {deleted}, {maxCalls} calls left)"); 82 totalDeleted += deleted; 83 if (limitIsBatchSize && deleted < batchSize || deleted <= 0) return; 84 } 85 LogFactory.GetLogger(typeof(HiveJanitor).Namespace).Log($"HiveJanitor: Possible rows left to delete (total deleted: {totalDeleted})."); 86 Console.WriteLine($"HiveJanitor: Possible rows left to delete (total deleted: {totalDeleted})."); 53 87 } 54 88 … … 136 170 } 137 171 } 172 173 /// <summary> 174 /// Aborts tasks whose jobs have already been marked for deletion 175 /// </summary> 176 /// <param name="pm"></param> 177 private void AbortObsoleteTasks(IPersistenceManager pm) { 178 var jobDao = pm.JobDao; 179 var taskDao = pm.TaskDao; 180 181 var obsoleteTasks = (from jobId in jobDao.GetJobIdsByState(JobState.StatisticsPending) 182 join task in taskDao.GetAll() on jobId equals task.JobId 183 where !CompletedStates.Contains(task.State) && task.Command == null 184 select task).ToList(); 185 186 foreach (var t in obsoleteTasks) { 187 t.State = TaskState.Aborted; 188 } 189 } 138 190 } 139 191 }
Note: See TracChangeset
for help on using the changeset viewer.