Merge "Remove multi scheduler."
This commit is contained in:
@@ -1,78 +0,0 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright (c) 2010 OpenStack Foundation
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""
|
||||
Scheduler that allows routing some calls to one driver and others to another.
|
||||
|
||||
This scheduler was originally used to deal with both compute and volume. But
|
||||
is now used for openstack extensions that want to use the nova-scheduler to
|
||||
schedule requests to compute nodes but provide their own manager and topic.
|
||||
|
||||
https://bugs.launchpad.net/nova/+bug/1009681
|
||||
"""
|
||||
|
||||
from oslo.config import cfg
|
||||
|
||||
from nova.openstack.common import importutils
|
||||
from nova.scheduler import driver
|
||||
|
||||
|
||||
multi_scheduler_opts = [
|
||||
cfg.StrOpt('compute_scheduler_driver',
|
||||
default='nova.scheduler.'
|
||||
'filter_scheduler.FilterScheduler',
|
||||
help='Driver to use for scheduling compute calls'),
|
||||
cfg.StrOpt('default_scheduler_driver',
|
||||
default='nova.scheduler.chance.ChanceScheduler',
|
||||
help='Default driver to use for scheduling calls'),
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(multi_scheduler_opts)
|
||||
|
||||
|
||||
class MultiScheduler(driver.Scheduler):
|
||||
"""A scheduler that holds multiple sub-schedulers.
|
||||
|
||||
This exists to allow flag-driven composibility of schedulers, allowing
|
||||
third parties to integrate custom schedulers more easily.
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
super(MultiScheduler, self).__init__()
|
||||
compute_driver = importutils.import_object(
|
||||
CONF.compute_scheduler_driver)
|
||||
default_driver = importutils.import_object(
|
||||
CONF.default_scheduler_driver)
|
||||
|
||||
self.drivers = {'compute': compute_driver,
|
||||
'default': default_driver}
|
||||
|
||||
def schedule_run_instance(self, *args, **kwargs):
|
||||
return self.drivers['compute'].schedule_run_instance(*args, **kwargs)
|
||||
|
||||
def schedule_prep_resize(self, *args, **kwargs):
|
||||
return self.drivers['compute'].schedule_prep_resize(*args, **kwargs)
|
||||
|
||||
def update_service_capabilities(self, service_name, host, capabilities):
|
||||
# Multi scheduler is only a holder of sub-schedulers, so
|
||||
# pass the capabilities to the schedulers that matter
|
||||
for d in self.drivers.values():
|
||||
d.update_service_capabilities(service_name, host, capabilities)
|
||||
@@ -1,77 +0,0 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# Copyright 2011 OpenStack Foundation
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
"""
|
||||
Tests For Multi Scheduler
|
||||
"""
|
||||
|
||||
from nova.scheduler import driver
|
||||
from nova.scheduler import multi
|
||||
from nova.tests.scheduler import test_scheduler
|
||||
|
||||
|
||||
class FakeComputeScheduler(driver.Scheduler):
|
||||
is_fake_compute = True
|
||||
|
||||
def __init__(self):
|
||||
super(FakeComputeScheduler, self).__init__()
|
||||
self.is_update_caps_called = False
|
||||
|
||||
def schedule_theoretical(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class FakeDefaultScheduler(driver.Scheduler):
|
||||
is_fake_default = True
|
||||
|
||||
def __init__(self):
|
||||
super(FakeDefaultScheduler, self).__init__()
|
||||
self.is_update_caps_called = False
|
||||
|
||||
|
||||
class MultiDriverTestCase(test_scheduler.SchedulerTestCase):
|
||||
"""Test case for multi driver."""
|
||||
|
||||
driver_cls = multi.MultiScheduler
|
||||
|
||||
def setUp(self):
|
||||
super(MultiDriverTestCase, self).setUp()
|
||||
base_name = 'nova.tests.scheduler.test_multi_scheduler.%s'
|
||||
compute_cls_name = base_name % 'FakeComputeScheduler'
|
||||
default_cls_name = base_name % 'FakeDefaultScheduler'
|
||||
self.flags(compute_scheduler_driver=compute_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.assertTrue(mgr.drivers['compute'].is_fake_compute)
|
||||
self.assertTrue(mgr.drivers['default'].is_fake_default)
|
||||
|
||||
def test_update_service_capabilities(self):
|
||||
def fake_update_service_capabilities(self, service, host, caps):
|
||||
self.is_update_caps_called = True
|
||||
|
||||
mgr = self._manager
|
||||
self.stubs.Set(driver.Scheduler,
|
||||
'update_service_capabilities',
|
||||
fake_update_service_capabilities)
|
||||
self.assertFalse(mgr.drivers['compute'].is_update_caps_called)
|
||||
mgr.update_service_capabilities('foo_svc', 'foo_host', 'foo_caps')
|
||||
self.assertTrue(mgr.drivers['compute'].is_update_caps_called)
|
||||
Reference in New Issue
Block a user