Merge "Adds default fall-through to the multi scheduler. Fixes bug 1009681"
This commit is contained in:
commit
92dff6857d
1
Authors
1
Authors
@ -49,6 +49,7 @@ Daniel P. Berrange <berrange@redhat.com>
|
||||
Dave Lapsley <dlapsley@nicira.com>
|
||||
Dave Walker <Dave.Walker@canonical.com>
|
||||
David Pravec <David.Pravec@danix.org>
|
||||
David Scannell <dscannell@gridcentric.com>
|
||||
David Shrewsbury <shrewsbury.dave@gmail.com>
|
||||
David Subiros <david.perez5@hp.com>
|
||||
Dean Troyer <dtroyer@gmail.com>
|
||||
|
@ -35,6 +35,9 @@ multi_scheduler_opts = [
|
||||
cfg.StrOpt('volume_scheduler_driver',
|
||||
default='nova.scheduler.chance.ChanceScheduler',
|
||||
help='Driver to use for scheduling volume calls'),
|
||||
cfg.StrOpt('default_scheduler_driver',
|
||||
default='nova.scheduler.chance.ChanceScheduler',
|
||||
help='Default driver to use for scheduling calls'),
|
||||
]
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
@ -60,9 +63,12 @@ class MultiScheduler(driver.Scheduler):
|
||||
FLAGS.compute_scheduler_driver)
|
||||
volume_driver = importutils.import_object(
|
||||
FLAGS.volume_scheduler_driver)
|
||||
default_driver = importutils.import_object(
|
||||
FLAGS.default_scheduler_driver)
|
||||
|
||||
self.drivers = {'compute': compute_driver,
|
||||
'volume': volume_driver}
|
||||
'volume': volume_driver,
|
||||
'default': default_driver}
|
||||
|
||||
def __getattr__(self, key):
|
||||
if not key.startswith('schedule_'):
|
||||
@ -73,7 +79,8 @@ class MultiScheduler(driver.Scheduler):
|
||||
return getattr(self.drivers[_METHOD_MAP[method]], key)
|
||||
|
||||
def schedule(self, context, topic, method, *_args, **_kwargs):
|
||||
return self.drivers[topic].schedule(context, topic,
|
||||
driver = self.drivers.get(topic, self.drivers['default'])
|
||||
return driver.schedule(context, topic,
|
||||
method, *_args, **_kwargs)
|
||||
|
||||
def schedule_run_instance(self, *args, **kwargs):
|
||||
|
@ -56,6 +56,17 @@ class FakeVolumeScheduler(driver.Scheduler):
|
||||
pass
|
||||
|
||||
|
||||
class FakeDefaultScheduler(driver.Scheduler):
|
||||
is_fake_default = True
|
||||
|
||||
def __init__(self):
|
||||
super(FakeDefaultScheduler, self).__init__()
|
||||
self.is_update_caps_called = False
|
||||
|
||||
def schedule(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class MultiDriverTestCase(test_scheduler.SchedulerTestCase):
|
||||
"""Test case for multi driver"""
|
||||
|
||||
@ -66,15 +77,18 @@ class MultiDriverTestCase(test_scheduler.SchedulerTestCase):
|
||||
base_name = 'nova.tests.scheduler.test_multi_scheduler.%s'
|
||||
compute_cls_name = base_name % 'FakeComputeScheduler'
|
||||
volume_cls_name = base_name % 'FakeVolumeScheduler'
|
||||
default_cls_name = base_name % 'FakeDefaultScheduler'
|
||||
self.flags(compute_scheduler_driver=compute_cls_name,
|
||||
volume_scheduler_driver=volume_cls_name)
|
||||
volume_scheduler_driver=volume_cls_name,
|
||||
default_scheduler_driver=default_cls_name)
|
||||
self._manager = multi.MultiScheduler()
|
||||
|
||||
def test_drivers_inited(self):
|
||||
mgr = self._manager
|
||||
self.assertEqual(len(mgr.drivers), 2)
|
||||
self.assertEqual(len(mgr.drivers), 3)
|
||||
self.assertTrue(mgr.drivers['compute'].is_fake_compute)
|
||||
self.assertTrue(mgr.drivers['volume'].is_fake_volume)
|
||||
self.assertTrue(mgr.drivers['default'].is_fake_default)
|
||||
|
||||
def test_proxy_calls(self):
|
||||
mgr = self._manager
|
||||
@ -96,6 +110,7 @@ class MultiDriverTestCase(test_scheduler.SchedulerTestCase):
|
||||
|
||||
self.mox.StubOutWithMock(mgr.drivers['compute'], 'schedule')
|
||||
self.mox.StubOutWithMock(mgr.drivers['volume'], 'schedule')
|
||||
self.mox.StubOutWithMock(mgr.drivers['default'], 'schedule')
|
||||
|
||||
ctxt = 'fake_context'
|
||||
method = 'fake_method'
|
||||
@ -107,10 +122,13 @@ class MultiDriverTestCase(test_scheduler.SchedulerTestCase):
|
||||
*fake_args, **fake_kwargs)
|
||||
mgr.drivers['volume'].schedule(ctxt, 'volume', method,
|
||||
*fake_args, **fake_kwargs)
|
||||
mgr.drivers['default'].schedule(ctxt, 'random_topic', method,
|
||||
*fake_args, **fake_kwargs)
|
||||
|
||||
self.mox.ReplayAll()
|
||||
mgr.schedule(ctxt, 'compute', method, *fake_args, **fake_kwargs)
|
||||
mgr.schedule(ctxt, 'volume', method, *fake_args, **fake_kwargs)
|
||||
mgr.schedule(ctxt, 'random_topic', method, *fake_args, **fake_kwargs)
|
||||
|
||||
def test_update_service_capabilities(self):
|
||||
def fake_update_service_capabilities(self, service, host, caps):
|
||||
|
Loading…
x
Reference in New Issue
Block a user