[Optimize] Validate configured scheduler filters when initialize
The correctness of default scheduler filters will be validated only when processing filter requests, this means administrators will be unware of that until creating requests keep failing. This patch moves that logic into initialization code. Change-Id: I596c94fae33767b6b8d4816e572ff5e9dda621b7
This commit is contained in:
parent
b3b5779119
commit
fe7b3812a6
@ -414,6 +414,8 @@ class HostManager(object):
|
||||
self.filter_handler = filters.BackendFilterHandler('cinder.scheduler.'
|
||||
'filters')
|
||||
self.filter_classes = self.filter_handler.get_all_classes()
|
||||
self.enabled_filters = self._choose_backend_filters(
|
||||
CONF.scheduler_default_filters)
|
||||
self.weight_handler = importutils.import_object(
|
||||
CONF.scheduler_weight_handler,
|
||||
'cinder.scheduler.weights')
|
||||
@ -430,8 +432,6 @@ class HostManager(object):
|
||||
of acceptable filters (all loaded filters). If input is None,
|
||||
it uses CONF.scheduler_default_filters instead.
|
||||
"""
|
||||
if filter_cls_names is None:
|
||||
filter_cls_names = CONF.scheduler_default_filters
|
||||
if not isinstance(filter_cls_names, (list, tuple)):
|
||||
filter_cls_names = [filter_cls_names]
|
||||
good_filters = []
|
||||
@ -481,7 +481,10 @@ class HostManager(object):
|
||||
def get_filtered_backends(self, backends, filter_properties,
|
||||
filter_class_names=None):
|
||||
"""Filter backends and return only ones passing all filters."""
|
||||
filter_classes = self._choose_backend_filters(filter_class_names)
|
||||
if filter_class_names is not None:
|
||||
filter_classes = self._choose_backend_filters(filter_class_names)
|
||||
else:
|
||||
filter_classes = self.enabled_filters
|
||||
return self.filter_handler.get_filtered_objects(filter_classes,
|
||||
backends,
|
||||
filter_properties)
|
||||
|
@ -64,20 +64,31 @@ class HostManagerTestCase(test.TestCase):
|
||||
# For a second scheduler service.
|
||||
self.host_manager_1 = host_manager.HostManager()
|
||||
|
||||
@mock.patch(
|
||||
'cinder.scheduler.filters.BackendFilterHandler.get_all_classes')
|
||||
def test_initialzie_with_default_filters(self, mock_get_all_classes):
|
||||
self.flags(scheduler_default_filters=
|
||||
'FakeFilterClass1,FakeFilterClass2')
|
||||
mock_get_all_classes.return_value = [
|
||||
FakeFilterClass1, FakeFilterClass2, FakeFilterClass3]
|
||||
h_manager = host_manager.HostManager()
|
||||
self.assertListEqual([FakeFilterClass1, FakeFilterClass2],
|
||||
h_manager.enabled_filters)
|
||||
|
||||
def test_choose_backend_filters_not_found(self):
|
||||
self.flags(scheduler_default_filters='FakeFilterClass3')
|
||||
self.host_manager.filter_classes = [FakeFilterClass1,
|
||||
FakeFilterClass2]
|
||||
self.assertRaises(exception.SchedulerHostFilterNotFound,
|
||||
self.host_manager._choose_backend_filters, None)
|
||||
self.host_manager._choose_backend_filters,
|
||||
'FakeFilterClass3')
|
||||
|
||||
def test_choose_backend_filters(self):
|
||||
self.flags(scheduler_default_filters=['FakeFilterClass2'])
|
||||
self.host_manager.filter_classes = [FakeFilterClass1,
|
||||
FakeFilterClass2]
|
||||
|
||||
# Test 'volume' returns 1 correct function
|
||||
filter_classes = self.host_manager._choose_backend_filters(None)
|
||||
filter_classes = self.host_manager._choose_backend_filters(
|
||||
'FakeFilterClass2')
|
||||
self.assertEqual(1, len(filter_classes))
|
||||
self.assertEqual('FakeFilterClass2', filter_classes[0].__name__)
|
||||
|
||||
@ -94,9 +105,9 @@ class HostManagerTestCase(test.TestCase):
|
||||
expected = []
|
||||
for fake_backend in self.fake_backends:
|
||||
expected.append(mock.call(fake_backend, fake_properties))
|
||||
|
||||
result = self.host_manager.get_filtered_backends(self.fake_backends,
|
||||
fake_properties)
|
||||
host_manager1 = host_manager.HostManager()
|
||||
result = host_manager1.get_filtered_backends(self.fake_backends,
|
||||
fake_properties)
|
||||
self.assertEqual(expected, mock_func.call_args_list)
|
||||
self.assertEqual(set(self.fake_backends), set(result))
|
||||
|
||||
@ -1066,10 +1077,10 @@ class HostManagerTestCase(test.TestCase):
|
||||
'volume_backend_name': 'AAA',
|
||||
'qos_specs': 'BBB',
|
||||
}
|
||||
|
||||
res = self.host_manager._filter_pools_by_volume_type(context,
|
||||
mock_volume_type,
|
||||
hosts)
|
||||
host_manager1 = host_manager.HostManager()
|
||||
res = host_manager1._filter_pools_by_volume_type(context,
|
||||
mock_volume_type,
|
||||
hosts)
|
||||
expected = {'host1': {'volume_backend_name': 'AAA',
|
||||
'total_capacity_gb': 512,
|
||||
'free_capacity_gb': 200,
|
||||
|
Loading…
x
Reference in New Issue
Block a user