Skip to content

Commit

Permalink
Add capabilities reporting to ThinLVM driver
Browse files Browse the repository at this point in the history
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 a95a214)
  • Loading branch information
j-griffith committed May 3, 2013
1 parent 93247d2 commit 6221a0e
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion cinder/volume/drivers/lvm.py
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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

0 comments on commit 6221a0e

Please sign in to comment.