From 45c14b64afcd901570293b414e2ea6fc5a4386cc Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.dos.anjos@gmail.com> Date: Thu, 28 Apr 2016 14:21:47 +0200 Subject: [PATCH] [backend] Test and fix scheduler re-assignment --- beat/web/backend/schedule.py | 3 ++- beat/web/backend/tests.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/beat/web/backend/schedule.py b/beat/web/backend/schedule.py index 170d36e9f..bcc4f2e86 100644 --- a/beat/web/backend/schedule.py +++ b/beat/web/backend/schedule.py @@ -71,7 +71,8 @@ def _select_splits_for_queue(queue): ''' splits = JobSplit.objects.filter(job__block__queue=queue, - job__split_errors=0, status=Job.QUEUED).order_by('job__runnable_date') + worker__isnull=True, job__split_errors=0, + status=Job.QUEUED).order_by('job__runnable_date') # lists of all users currently running users = set(splits.values_list('job__block__experiment__author', flat=True)) diff --git a/beat/web/backend/tests.py b/beat/web/backend/tests.py index 936ca5c93..9379638ef 100644 --- a/beat/web/backend/tests.py +++ b/beat/web/backend/tests.py @@ -840,6 +840,25 @@ class Scheduling(BaseBackendTestCase): self.assertEqual(worker.available_cores(), qsetup.CORES) + def test_does_not_reassign(self): + + # tests if the scheduling routine never re-assigns splits which are + # already assigned. + + fullname = 'user/user/single/1/single' + xp = Experiment.objects.get(name=fullname.split(os.sep)[-1]) + + # schedules the experiment and check it + xp.schedule() + self.check_single(xp) + assigned_splits = schedule() + + self.assertEqual(len(assigned_splits), 1) + + assigned_splits = schedule() + self.assertEqual(len(assigned_splits), 0) + + def test_worker_activation(self): # tests that scheduling depends on worker activation -- GitLab