From 8319ea4c497aa2e25ae9b8be671ac33378aa95db Mon Sep 17 00:00:00 2001 From: alexey-mr <alexey.morlang@gmail.com> Date: Fri, 24 Jun 2016 13:35:57 +0300 Subject: [PATCH] Use default provisioning type from config ScaleIO allows to define provisioning type via volume types, but default value is hardcoded. Cinder has appropriate option in config and some customers want to have ability to set default volume provisioning type via this config option for a whole cluster rather than using volume types. DocImpact Change-Id: I2a2df4b2b4296972a46a15b9dca259f9256c1f0d --- .../unit/volume/drivers/emc/scaleio/mocks.py | 4 ++++ .../volume/drivers/emc/scaleio/test_misc.py | 20 +++++++++++++++++++ cinder/volume/drivers/emc/scaleio.py | 9 ++++++++- ...-volume-provisioning-c648118fcc8f297f.yaml | 5 +++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/scaleio-default-volume-provisioning-c648118fcc8f297f.yaml diff --git a/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py b/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py index 95fee182a1b..248d8deb5d6 100644 --- a/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py +++ b/cinder/tests/unit/volume/drivers/emc/scaleio/mocks.py @@ -44,6 +44,10 @@ class ScaleIODriver(scaleio.ScaleIODriver): override='test_domain') configuration.set_override('sio_storage_pools', override='test_domain:test_pool') + if 'san_thin_provision' in kwargs: + configuration.set_override( + 'san_thin_provision', + override=kwargs['san_thin_provision']) super(ScaleIODriver, self).__init__(configuration=configuration, *args, diff --git a/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py b/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py index 01e6e21ed80..b8dd9f30f1e 100644 --- a/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py +++ b/cinder/tests/unit/volume/drivers/emc/scaleio/test_misc.py @@ -12,6 +12,8 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + +import ddt import mock from six.moves import urllib @@ -23,6 +25,7 @@ from cinder.tests.unit.volume.drivers.emc import scaleio from cinder.tests.unit.volume.drivers.emc.scaleio import mocks +@ddt.ddt class TestMisc(scaleio.TestScaleIODriver): DOMAIN_NAME = 'PD1' POOL_NAME = 'SP1' @@ -188,3 +191,20 @@ class TestMisc(scaleio.TestScaleIODriver): self.volume, self.new_volume['id'] ) + + def test_default_provisioning_type_unspecified(self): + empty_storage_type = {} + self.assertEqual( + 'thin', + self.driver._find_provisioning_type(empty_storage_type)) + + @ddt.data((True, 'thin'), (False, 'thick')) + @ddt.unpack + def test_default_provisioning_type_thin(self, config_provisioning_type, + expected_provisioning_type): + self.driver = mocks.ScaleIODriver( + san_thin_provision=config_provisioning_type) + empty_storage_type = {} + self.assertEqual( + expected_provisioning_type, + self.driver._find_provisioning_type(empty_storage_type)) diff --git a/cinder/volume/drivers/emc/scaleio.py b/cinder/volume/drivers/emc/scaleio.py index ec5a092c24a..4a8fca79669 100644 --- a/cinder/volume/drivers/emc/scaleio.py +++ b/cinder/volume/drivers/emc/scaleio.py @@ -153,6 +153,12 @@ class ScaleIODriver(driver.VolumeDriver): "Protection domain id: %(domain_id)s."), {'domain_id': self.protection_domain_id}) + self.provisioning_type = ( + 'thin' if self.configuration.san_thin_provision else 'thick') + LOG.info(_LI( + "Default provisioning type: %(provisioning_type)s."), + {'provisioning_type': self.provisioning_type}) + self.connector = connector.InitiatorConnector.factory( connector.SCALEIO, utils.get_root_helper(), device_scan_attempts= @@ -235,7 +241,8 @@ class ScaleIODriver(driver.VolumeDriver): self.protection_domain_name) def _find_provisioning_type(self, storage_type): - return storage_type.get(PROVISIONING_KEY) + return storage_type.get(PROVISIONING_KEY, + self.provisioning_type) def _find_limit(self, storage_type, qos_key, extraspecs_key): qos_limit = (storage_type.get(qos_key) diff --git a/releasenotes/notes/scaleio-default-volume-provisioning-c648118fcc8f297f.yaml b/releasenotes/notes/scaleio-default-volume-provisioning-c648118fcc8f297f.yaml new file mode 100644 index 00000000000..ff9185742c0 --- /dev/null +++ b/releasenotes/notes/scaleio-default-volume-provisioning-c648118fcc8f297f.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - EMC ScaleIO driver now uses the config option + san_thin_provision to determine the default + provisioning type.