Add context and request spec to filter_properties
Change-Id: Iebece7fac9c980ef32e37a8b01b505340e5d12b0
This commit is contained in:
@@ -92,7 +92,7 @@ class DistributedScheduler(driver.Scheduler):
|
||||
weighted_hosts.append(self._make_weighted_host_from_blob(blob))
|
||||
else:
|
||||
# No plan ... better make one.
|
||||
weighted_hosts = self._schedule(elevated, "compute", request_spec,
|
||||
weighted_hosts = self._schedule(context, "compute", request_spec,
|
||||
*args, **kwargs)
|
||||
|
||||
if not weighted_hosts:
|
||||
@@ -135,7 +135,7 @@ class DistributedScheduler(driver.Scheduler):
|
||||
instance_type = db.instance_type_get(elevated, instance_type_id)
|
||||
|
||||
# Now let's grab a possibility
|
||||
hosts = self._schedule(elevated, 'compute', request_spec,
|
||||
hosts = self._schedule(context, 'compute', request_spec,
|
||||
*args, **kwargs)
|
||||
if not hosts:
|
||||
raise exception.NoValidHost(reason=_(""))
|
||||
@@ -151,8 +151,7 @@ class DistributedScheduler(driver.Scheduler):
|
||||
internal zone information will be encrypted so as not to reveal
|
||||
anything about our inner layout.
|
||||
"""
|
||||
elevated = context.elevated()
|
||||
weighted_hosts = self._schedule(elevated, "compute", request_spec,
|
||||
weighted_hosts = self._schedule(context, "compute", request_spec,
|
||||
*args, **kwargs)
|
||||
return [weighted_host.to_dict() for weighted_host in weighted_hosts]
|
||||
|
||||
@@ -284,10 +283,11 @@ class DistributedScheduler(driver.Scheduler):
|
||||
"""
|
||||
pass
|
||||
|
||||
def _schedule(self, elevated, topic, request_spec, *args, **kwargs):
|
||||
def _schedule(self, context, topic, request_spec, *args, **kwargs):
|
||||
"""Returns a list of hosts that meet the required specs,
|
||||
ordered by their fitness.
|
||||
"""
|
||||
elevated = context.elevated()
|
||||
if topic != "compute":
|
||||
msg = _("Scheduler only understands Compute nodes (for now)")
|
||||
raise NotImplementedError(msg)
|
||||
@@ -300,17 +300,16 @@ class DistributedScheduler(driver.Scheduler):
|
||||
raise NotImplementedError(msg)
|
||||
|
||||
cost_functions = self.get_cost_functions()
|
||||
|
||||
ram_requirement_mb = instance_type['memory_mb']
|
||||
disk_requirement_gb = instance_type['local_gb']
|
||||
|
||||
config_options = self._get_configuration_options()
|
||||
|
||||
filter_properties = kwargs.get('filter_properties', {})
|
||||
filter_properties.update({'config_options': config_options,
|
||||
filter_properties.update({'context': context,
|
||||
'request_spec': request_spec,
|
||||
'config_options': config_options,
|
||||
'instance_type': instance_type})
|
||||
|
||||
self.populate_filter_properties(request_spec, filter_properties)
|
||||
self.populate_filter_properties(request_spec,
|
||||
filter_properties)
|
||||
|
||||
# Find our local list of acceptable hosts by repeatedly
|
||||
# filtering and weighing our options. Each time we choose a
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
Fakes For Scheduler tests.
|
||||
"""
|
||||
|
||||
import mox
|
||||
|
||||
from nova import db
|
||||
from nova.scheduler import distributed_scheduler
|
||||
from nova.scheduler import host_manager
|
||||
@@ -99,9 +101,9 @@ class FakeComputeAPI(object):
|
||||
pass
|
||||
|
||||
|
||||
def mox_host_manager_db_calls(mox, context):
|
||||
mox.StubOutWithMock(db, 'compute_node_get_all')
|
||||
mox.StubOutWithMock(db, 'instance_get_all')
|
||||
def mox_host_manager_db_calls(mock, context):
|
||||
mock.StubOutWithMock(db, 'compute_node_get_all')
|
||||
mock.StubOutWithMock(db, 'instance_get_all')
|
||||
|
||||
db.compute_node_get_all(context).AndReturn(COMPUTE_NODES)
|
||||
db.instance_get_all(context).AndReturn(INSTANCES)
|
||||
db.compute_node_get_all(mox.IgnoreArg()).AndReturn(COMPUTE_NODES)
|
||||
db.instance_get_all(mox.IgnoreArg()).AndReturn(INSTANCES)
|
||||
|
||||
@@ -18,7 +18,6 @@ Tests For Distributed Scheduler.
|
||||
|
||||
import json
|
||||
|
||||
from nova.compute import api as compute_api
|
||||
from nova import context
|
||||
from nova import db
|
||||
from nova import exception
|
||||
@@ -165,32 +164,36 @@ class DistributedSchedulerTestCase(test.TestCase):
|
||||
a non-admin context. DB actions should work."""
|
||||
self.was_admin = False
|
||||
|
||||
def fake_schedule(context, *args, **kwargs):
|
||||
def fake_get(context, *args, **kwargs):
|
||||
# make sure this is called with admin context, even though
|
||||
# we're using user context below
|
||||
self.was_admin = context.is_admin
|
||||
return []
|
||||
return {}
|
||||
|
||||
sched = fakes.FakeDistributedScheduler()
|
||||
self.stubs.Set(sched, '_schedule', fake_schedule)
|
||||
self.stubs.Set(sched.host_manager, 'get_all_host_states', fake_get)
|
||||
|
||||
fake_context = context.RequestContext('user', 'project')
|
||||
|
||||
request_spec = {'instance_type': {'memory_mb': 1, 'local_gb': 1},
|
||||
'instance_properties': {'project_id': 1}}
|
||||
self.assertRaises(exception.NoValidHost, sched.schedule_run_instance,
|
||||
fake_context, {})
|
||||
fake_context, request_spec)
|
||||
self.assertTrue(self.was_admin)
|
||||
|
||||
def test_schedule_bad_topic(self):
|
||||
"""Parameter checking."""
|
||||
sched = fakes.FakeDistributedScheduler()
|
||||
self.assertRaises(NotImplementedError, sched._schedule, None, "foo",
|
||||
{})
|
||||
fake_context = context.RequestContext('user', 'project')
|
||||
self.assertRaises(NotImplementedError, sched._schedule, fake_context,
|
||||
"foo", {})
|
||||
|
||||
def test_schedule_no_instance_type(self):
|
||||
"""Parameter checking."""
|
||||
sched = fakes.FakeDistributedScheduler()
|
||||
request_spec = {'instance_properties': {}}
|
||||
self.assertRaises(NotImplementedError, sched._schedule, None,
|
||||
fake_context = context.RequestContext('user', 'project')
|
||||
self.assertRaises(NotImplementedError, sched._schedule, fake_context,
|
||||
"compute", request_spec=request_spec)
|
||||
|
||||
def test_schedule_happy_day(self):
|
||||
|
||||
Reference in New Issue
Block a user