From 6727f5cbeafb02b24022e54fa6e53350d9fb956b Mon Sep 17 00:00:00 2001 From: Ivan Kolodyazhny Date: Wed, 13 May 2020 13:59:43 +0300 Subject: [PATCH] Fix DriverFilter to accept None volume type Change Icfc6ba5f47c3a61b49cbec5110ef7df05eb47195 fixes CapacityFilter only. We need to do it for DriverFilter too. We need this patch only for releases before Train when we can create a volume without volume type. Change-Id: I3d6166c0fcdbb1d78b69ed4cc648542ac10342bd Related-Bug: 1619246 --- cinder/scheduler/filters/driver_filter.py | 2 +- cinder/tests/unit/scheduler/test_host_filters.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cinder/scheduler/filters/driver_filter.py b/cinder/scheduler/filters/driver_filter.py index aa0338b5cb2..e63a9b4850b 100644 --- a/cinder/scheduler/filters/driver_filter.py +++ b/cinder/scheduler/filters/driver_filter.py @@ -114,7 +114,7 @@ class DriverFilter(filters.BaseBackendFilter): qos_specs = filter_properties.get('qos_specs', {}) - volume_type = filter_properties.get('volume_type', {}) + volume_type = filter_properties.get('volume_type', {}) or {} extra_specs = volume_type.get('extra_specs', {}) request_spec = filter_properties.get('request_spec', {}) diff --git a/cinder/tests/unit/scheduler/test_host_filters.py b/cinder/tests/unit/scheduler/test_host_filters.py index 8ffc113f31e..6db573599cc 100644 --- a/cinder/tests/unit/scheduler/test_host_filters.py +++ b/cinder/tests/unit/scheduler/test_host_filters.py @@ -819,8 +819,11 @@ class AffinityFilterTestCase(BackendFiltersTestCase): self.assertFalse(filt_cls.backend_passes(host, filter_properties)) +@ddt.ddt class DriverFilterTestCase(BackendFiltersTestCase): - def test_passing_function(self): + @ddt.data({'volume_type': {}}, {'volume_type': None}) + @ddt.unpack + def test_passing_function(self, volume_type): filt_cls = self.class_map['DriverFilter']() host1 = fakes.FakeBackendState( 'host1', { @@ -829,7 +832,7 @@ class DriverFilterTestCase(BackendFiltersTestCase): } }) - filter_properties = {'volume_type': {}} + filter_properties = {'volume_type': volume_type} self.assertTrue(filt_cls.backend_passes(host1, filter_properties))