Last change
on this file since 18029 was
17574,
checked in by jkarder, 4 years ago
|
#3062: overhauled statistics generation and cleanup
- switched to a single thread for database cleanup and statistics generation (executed sequentially)
- switched to preemptive deletion of items that are in status DeletionPending (for jobs: statelogs, taskdata, tasks)
- added code that aborts tasks whose jobs have already been marked for deletion
- added method UseTransactionAndSubmit in addition to UseTransaction in PersistenceManager
- updated DAO methods and introduced more bare metal sql
- introduced DAO methods for batch deletion
- fixed usage of enum values in DAO sql queries
- deleted unnecessary triggers tr_JobDeleteCascade and tr_TaskDeleteCascade in Prepare Hive Database.sql
- changed scheduling for less interference with janitor and other heartbeats
- increased scheduling patience from 20 to 70 seconds (to wait longer to get the mutex for scheduling)
- changed signature of ITaskScheduler.Schedule
- added base class for TaskSchedulers and moved assignment of tasks to slaves into it
- changed RoundRobinTaskScheduler to use bare metal sql
- made MessageContainer a storable type (leftover)
- updated HiveJanitorServiceInstaller.nsi
|
File size:
1.3 KB
|
Rev | Line | |
---|
[17574] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using HeuristicLab.Services.Hive.DataAccess;
|
---|
| 4 | using HeuristicLab.Services.Hive.DataAccess.Interfaces;
|
---|
| 5 |
|
---|
| 6 |
|
---|
| 7 | namespace HeuristicLab.Services.Hive {
|
---|
| 8 | public abstract class TaskScheduler : ITaskScheduler {
|
---|
| 9 | protected IPersistenceManager PersistenceManager => ServiceLocator.Instance.PersistenceManager;
|
---|
| 10 |
|
---|
| 11 | public IEnumerable<Guid> Schedule(Slave slave, int count = 1) {
|
---|
| 12 | return PersistenceManager.UseTransactionAndSubmit(() => {
|
---|
| 13 | var ids = ScheduleInternal(slave, count);
|
---|
| 14 | foreach (var id in ids) AssignTask(slave, id);
|
---|
| 15 | return ids;
|
---|
| 16 | });
|
---|
| 17 | }
|
---|
| 18 |
|
---|
| 19 | protected abstract IReadOnlyList<Guid> ScheduleInternal(Slave slave, int count);
|
---|
| 20 |
|
---|
| 21 | private void AssignTask(Slave slave, Guid taskId) {
|
---|
| 22 | const TaskState transferring = TaskState.Transferring;
|
---|
| 23 | DateTime now = DateTime.Now;
|
---|
| 24 |
|
---|
| 25 | var pm = PersistenceManager;
|
---|
| 26 | var taskDao = pm.TaskDao;
|
---|
| 27 | var stateLogDao = pm.StateLogDao;
|
---|
| 28 |
|
---|
| 29 | var task = taskDao.GetById(taskId);
|
---|
| 30 | task.State = transferring;
|
---|
| 31 | task.LastHeartbeat = now;
|
---|
| 32 |
|
---|
| 33 | stateLogDao.Save(new StateLog {
|
---|
| 34 | State = transferring,
|
---|
| 35 | DateTime = now,
|
---|
| 36 | TaskId = taskId,
|
---|
| 37 | SlaveId = slave.ResourceId,
|
---|
| 38 | UserId = null,
|
---|
| 39 | Exception = null
|
---|
| 40 | });
|
---|
| 41 | }
|
---|
| 42 | }
|
---|
| 43 | }
|
---|
Note: See
TracBrowser
for help on using the repository browser.