From 6221a0e279c795270d03fb03dc2c848fd6f44056 Mon Sep 17 00:00:00 2001 From: John Griffith Date: Thu, 11 Apr 2013 20:05:01 -0600 Subject: [PATCH] Add capabilities reporting to ThinLVM driver ThinLVM driver was missing the newly required capabilities reporting and inheritance from the parent LVM driver doesn't work because the capacity reporting methods between regular LVM and Thin LVM are not compatible. This patch add the basic requirements needed in the capabilities reporting to make it usable by the filter scheduler. Fixes bug: 1166572 Change-Id: I471dcc31d07516e71bcd2d3ae03e0405e0594697 (cherry picked from commit a95a2149a5ba805451a6d961b792ccd5b9984bea) --- cinder/volume/drivers/lvm.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/cinder/volume/drivers/lvm.py b/cinder/volume/drivers/lvm.py index 3ab5ec38efd..b989c9f6a29 100644 --- a/cinder/volume/drivers/lvm.py +++ b/cinder/volume/drivers/lvm.py @@ -63,6 +63,9 @@ class LVMVolumeDriver(driver.VolumeDriver): """Executes commands relating to Volumes.""" + + VERSION = '1.0' + def __init__(self, *args, **kwargs): super(LVMVolumeDriver, self).__init__(*args, **kwargs) self.configuration.append_config_values(volume_opts) @@ -559,7 +562,7 @@ def _update_volume_status(self): backend_name = self.configuration.safe_get('volume_backend_name') data["volume_backend_name"] = backend_name or 'LVM_iSCSI' data["vendor_name"] = 'Open Source' - data["driver_version"] = '1.0' + data["driver_version"] = self.VERSION data["storage_protocol"] = 'iSCSI' data['total_capacity_gb'] = 0 @@ -593,6 +596,9 @@ def _iscsi_authentication(self, chap, name, password): class ThinLVMVolumeDriver(LVMISCSIDriver): """Subclass for thin provisioned LVM's.""" + + VERSION = '1.0' + def __init__(self, *args, **kwargs): super(ThinLVMVolumeDriver, self).__init__(*args, **kwargs) @@ -651,3 +657,28 @@ def create_snapshot(self, snapshot): """Creates a snapshot of a volume.""" orig_lv_name = "%s/%s" % (FLAGS.volume_group, snapshot['volume_name']) self._do_lvm_snapshot(orig_lv_name, snapshot) + + def get_volume_stats(self, refresh=False): + """Get volume status. + If 'refresh' is True, run update the stats first.""" + if refresh: + self._update_volume_status() + + return self._stats + + def _update_volume_status(self): + """Retrieve status info from volume group.""" + + LOG.debug(_("Updating volume status")) + data = {} + + backend_name = self.configuration.safe_get('volume_backend_name') + data["volume_backend_name"] = backend_name or self.__class__.__name__ + data["vendor_name"] = 'Open Source' + data["driver_version"] = self.VERSION + data["storage_protocol"] = 'iSCSI' + data['reserved_percentage'] = self.configuration.reserved_percentage + data['QoS_support'] = False + data['total_capacity_gb'] = 'infinite' + data['free_capacity_gb'] = 'infinite' + self._stats = data