diff --git a/packages/flamenco/flamenco/eve_settings.py b/packages/flamenco/flamenco/eve_settings.py index b7b637ff98ed85a7c0304ed5cabded9dc6d27641..0a457fb3046017744b4d52e8b9a9d1f4300fce35 100644 --- a/packages/flamenco/flamenco/eve_settings.py +++ b/packages/flamenco/flamenco/eve_settings.py @@ -221,6 +221,10 @@ tasks_schema = { 'default': 'queued' }, 'priority': { + 'type': 'integer', + 'default': 0 + }, + 'job_priority': { 'type': 'integer', 'min': 1, 'max': 100, diff --git a/packages/flamenco/flamenco/jobs/routes.py b/packages/flamenco/flamenco/jobs/routes.py index f4da8bd7141f96429e14237c2946df3e7f27accb..de4cadb7f43bb18b87c283a4cca939a6e292ce3d 100644 --- a/packages/flamenco/flamenco/jobs/routes.py +++ b/packages/flamenco/flamenco/jobs/routes.py @@ -91,7 +91,7 @@ def view_job_depsgraph(project, job_id): tid_to_idx = {task['_id']: tidx for tidx, task in enumerate(tasks._items)} - for task in tasks._items: + for task in sorted(tasks._items, key=lambda task: task['priority']): task_id = tid_to_idx[task['_id']] nodes.append({ 'id': task_id, diff --git a/packages/flamenco/flamenco/tasks/__init__.py b/packages/flamenco/flamenco/tasks/__init__.py index 81049d11a475b463136759b36a33db15b8a894d8..4c8333d6a4ddd9610e26fa44d6afa43ae6c0793b 100644 --- a/packages/flamenco/flamenco/tasks/__init__.py +++ b/packages/flamenco/flamenco/tasks/__init__.py @@ -27,7 +27,7 @@ REQUEABLE_TASK_STATES = {'completed', 'canceled', 'failed'} class TaskManager(object): _log = attrs_extra.log('%s.TaskManager' % __name__) - def api_create_task(self, job, commands, name, parents=None): + def api_create_task(self, job, commands, name, parents=None, priority=50): """Creates a task in MongoDB for the given job, executing commands. Returns the ObjectId of the created task. @@ -43,7 +43,8 @@ class TaskManager(object): 'status': 'queued', 'job_type': job['job_type'], 'commands': [cmd.to_dict() for cmd in commands], - 'priority': job['priority'], + 'job_priority': job['priority'], + 'priority': priority, 'project': job['project'], } # Insertion of None parents is not supported @@ -68,7 +69,12 @@ class TaskManager(object): payload = { 'where': { 'job': unicode(job_id), - }} + }, + 'sorted': [ + ('priority', -1), + ('_id', 1), + ], + } if status: payload['where']['status'] = status tasks = Task.all(payload, api=api)