diff --git a/cinder/tests/unit/test_volume.py b/cinder/tests/unit/test_volume.py index 44dea0bd47d..35058060938 100644 --- a/cinder/tests/unit/test_volume.py +++ b/cinder/tests/unit/test_volume.py @@ -6620,6 +6620,7 @@ class GenericVolumeDriverTestCase(DriverTestCase): db.volume_destroy(self.context, dest_vol['id']) +@ddt.ddt class LVMVolumeDriverTestCase(DriverTestCase): """Test case for VolumeDriver""" driver_name = "cinder.volume.drivers.lvm.LVMVolumeDriver" @@ -7375,6 +7376,26 @@ class LVMVolumeDriverTestCase(DriverTestCase): ret = self.volume.driver.unmanage(volume) self.assertEqual(ret, None) + # Global setting, LVM setting, expected outcome + @ddt.data((10.0, 2.0, 2.0)) + @ddt.data((10.0, None, 10.0)) + @ddt.unpack + def test_lvm_max_over_subscription_ratio(self, + global_value, + lvm_value, + expected_value): + configuration = conf.Configuration(fake_opt, 'fake_group') + configuration.max_over_subscription_ratio = global_value + configuration.lvm_max_over_subscription_ratio = lvm_value + + fake_vg = mock.Mock(fake_lvm.FakeBrickLVM('cinder-volumes', False, + None, 'default')) + lvm_driver = lvm.LVMVolumeDriver(configuration=configuration, + vg_obj=fake_vg, db=db) + + self.assertEqual(expected_value, + lvm_driver.configuration.max_over_subscription_ratio) + class ISCSITestCase(DriverTestCase): """Test Case for ISCSIDriver""" diff --git a/cinder/volume/drivers/lvm.py b/cinder/volume/drivers/lvm.py index 0f7a147cf12..34a9172e1a0 100644 --- a/cinder/volume/drivers/lvm.py +++ b/cinder/volume/drivers/lvm.py @@ -60,7 +60,15 @@ volume_opts = [ help='LVM conf file to use for the LVM driver in Cinder; ' 'this setting is ignored if the specified file does ' 'not exist (You can also specify \'None\' to not use ' - 'a conf file even if one exists).') + 'a conf file even if one exists).'), + cfg.FloatOpt('lvm_max_over_subscription_ratio', + # This option exists to provide a default value for the + # LVM driver which is different than the global default. + default=1.0, + help='max_over_subscription_ratio setting for the LVM ' + 'driver. If set, this takes precedence over the ' + 'general max_over_subscription_ratio option. If ' + 'None, the general option is used.') ] CONF = cfg.CONF @@ -101,6 +109,10 @@ class LVMVolumeDriver(driver.VolumeDriver): self.protocol = self.target_driver.protocol self._sparse_copy_volume = False + if self.configuration.lvm_max_over_subscription_ratio is not None: + self.configuration.max_over_subscription_ratio = \ + self.configuration.lvm_max_over_subscription_ratio + def _sizestr(self, size_in_g): return '%sg' % size_in_g