summaryrefslogtreecommitdiff
path: root/scheduler
diff options
context:
space:
mode:
authorjamesren <jamesren@592f7852-d20e-0410-864c-8624ca9c26a4>2010-03-13 00:58:17 +0000
committerjamesren <jamesren@592f7852-d20e-0410-864c-8624ca9c26a4>2010-03-13 00:58:17 +0000
commit4a8fc1d2c3caad95862d2e32d2737f083ffb6f42 (patch)
treee2ca2f9b6bfa536e5ab8e1a198d69513684425d1 /scheduler
parentd7ae8babd51c9fe59246a48e200aa7e9156827fb (diff)
Set hostless queue entries to STARTING upon scheduling the agent. This
fixes an issue where the scheduler created multiple HostlessQueueTask objects for a single hostless queue entry, causing several autoserv processes to be launched when the agents are run. Signed-off-by: James Ren <jamesren@google.com> git-svn-id: svn://test.kernel.org/autotest/trunk@4304 592f7852-d20e-0410-864c-8624ca9c26a4
Diffstat (limited to 'scheduler')
-rwxr-xr-xscheduler/monitor_db.py1
-rwxr-xr-xscheduler/monitor_db_unittest.py23
2 files changed, 24 insertions, 0 deletions
diff --git a/scheduler/monitor_db.py b/scheduler/monitor_db.py
index 4b18d2ca..2f4f0d54 100755
--- a/scheduler/monitor_db.py
+++ b/scheduler/monitor_db.py
@@ -1077,6 +1077,7 @@ class Dispatcher(object):
def _schedule_hostless_job(self, queue_entry):
self.add_agent_task(HostlessQueueTask(queue_entry))
+ queue_entry.set_status(models.HostQueueEntry.Status.STARTING)
def _schedule_new_jobs(self):
diff --git a/scheduler/monitor_db_unittest.py b/scheduler/monitor_db_unittest.py
index 905a3fff..243e74ce 100755
--- a/scheduler/monitor_db_unittest.py
+++ b/scheduler/monitor_db_unittest.py
@@ -1298,6 +1298,29 @@ class JobSchedulingTest(BaseSchedulerTest):
self._dispatcher._schedule_running_host_queue_entries)
+ def test_schedule_hostless_job(self):
+ job = self._create_job(hostless=True)
+ self.assertEqual(1, job.hostqueueentry_set.count())
+ hqe_query = scheduler_models.HostQueueEntry.fetch(
+ 'id = %s' % job.hostqueueentry_set.all()[0].id)
+ self.assertEqual(1, len(hqe_query))
+ hqe = hqe_query[0]
+
+ self.assertEqual(models.HostQueueEntry.Status.QUEUED, hqe.status)
+ self.assertEqual(0, len(self._dispatcher._agents))
+
+ self._dispatcher._schedule_new_jobs()
+
+ self.assertEqual(models.HostQueueEntry.Status.STARTING, hqe.status)
+ self.assertEqual(1, len(self._dispatcher._agents))
+
+ self._dispatcher._schedule_new_jobs()
+
+ # No change to previously schedule hostless job, and no additional agent
+ self.assertEqual(models.HostQueueEntry.Status.STARTING, hqe.status)
+ self.assertEqual(1, len(self._dispatcher._agents))
+
+
class TopLevelFunctionsTest(unittest.TestCase):
def setUp(self):
self.god = mock.mock_god()