summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/scheduler/chance.py5
-rw-r--r--nova/tests/scheduler/test_chance_scheduler.py9
-rw-r--r--nova/tests/scheduler/test_filter_scheduler.py9
-rw-r--r--nova/tests/scheduler/test_scheduler.py4
4 files changed, 26 insertions, 1 deletions
diff --git a/nova/scheduler/chance.py b/nova/scheduler/chance.py
index 6e9688d81..0f8f3c45a 100644
--- a/nova/scheduler/chance.py
+++ b/nova/scheduler/chance.py
@@ -60,9 +60,12 @@ class ChanceScheduler(driver.Scheduler):
def select_hosts(self, context, request_spec, filter_properties):
"""Selects a set of random hosts."""
- return [self._schedule(context, CONF.compute_topic,
+ hosts = [self._schedule(context, CONF.compute_topic,
request_spec, filter_properties)
for instance_uuid in request_spec.get('instance_uuids', [])]
+ if not hosts:
+ raise exception.NoValidHost(reason="")
+ return hosts
def schedule_run_instance(self, context, request_spec,
admin_password, injected_files,
diff --git a/nova/tests/scheduler/test_chance_scheduler.py b/nova/tests/scheduler/test_chance_scheduler.py
index a589000cd..8a281073a 100644
--- a/nova/tests/scheduler/test_chance_scheduler.py
+++ b/nova/tests/scheduler/test_chance_scheduler.py
@@ -194,3 +194,12 @@ class ChanceSchedulerTestCase(test_scheduler.SchedulerTestCase):
self.mox.ReplayAll()
hosts = self.driver.select_hosts(ctxt, request_spec, {})
self.assertEquals(['host3', 'host1'], hosts)
+
+ def test_select_hosts_no_valid_host(self):
+
+ def _return_no_host(*args, **kwargs):
+ return []
+
+ self.stubs.Set(self.driver, '_schedule', _return_no_host)
+ self.assertRaises(exception.NoValidHost,
+ self.driver.select_hosts, self.context, {}, {})
diff --git a/nova/tests/scheduler/test_filter_scheduler.py b/nova/tests/scheduler/test_filter_scheduler.py
index 919187fd8..b82e079a4 100644
--- a/nova/tests/scheduler/test_filter_scheduler.py
+++ b/nova/tests/scheduler/test_filter_scheduler.py
@@ -734,3 +734,12 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
hosts = sched.select_hosts(fake_context, request_spec, {})
self.assertEquals(len(hosts), 10)
self.assertEquals(hosts, selected_hosts)
+
+ def test_select_hosts_no_valid_host(self):
+
+ def _return_no_host(*args, **kwargs):
+ return []
+
+ self.stubs.Set(self.driver, '_schedule', _return_no_host)
+ self.assertRaises(exception.NoValidHost,
+ self.driver.select_hosts, self.context, {}, {})
diff --git a/nova/tests/scheduler/test_scheduler.py b/nova/tests/scheduler/test_scheduler.py
index 7742962bd..44ddcc7a6 100644
--- a/nova/tests/scheduler/test_scheduler.py
+++ b/nova/tests/scheduler/test_scheduler.py
@@ -955,6 +955,10 @@ class SchedulerDriverBaseTestCase(SchedulerTestCase):
self.context, {},
fake_request_spec, {}, {}, {}, None)
+ def test_unimplemented_select_hosts(self):
+ self.assertRaises(NotImplementedError,
+ self.driver.select_hosts, self.context, {}, {})
+
class SchedulerDriverModuleTestCase(test.NoDBTestCase):
"""Test case for scheduler driver module methods."""