diff --git a/manila/share/drivers/ibm/gpfs.py b/manila/share/drivers/ibm/gpfs.py index 3fe10f201f..2613f2a5d9 100644 --- a/manila/share/drivers/ibm/gpfs.py +++ b/manila/share/drivers/ibm/gpfs.py @@ -120,6 +120,7 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin, API version history: 1.0 - Initial version. + 1.1 - Added extend_share functionality """ def __init__(self, *args, **kwargs): @@ -447,6 +448,20 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin, LOG.error(msg) raise exception.GPFSException(msg) + def _extend_share(self, shareobj, new_size): + sharename = shareobj['name'] + sizestr = '%sG' % new_size + fsdev = self._get_gpfs_device() + try: + self._gpfs_execute('mmsetquota', '-j', sharename, '-h', + sizestr, fsdev) + except exception.ProcessExecutionError as e: + msg = (_('Failed to set quota for the share %(sharename)s. ' + 'Error: %(excmsg)s.') % + {'sharename': sharename, 'excmsg': e}) + LOG.error(msg) + raise exception.GPFSException(msg) + def get_network_allocations_number(self): return 0 @@ -479,6 +494,10 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin, """Deletes a snapshot.""" self._delete_share_snapshot(snapshot) + def extend_share(self, share, new_size, share_server=None): + """Extends the quota on the share fileset.""" + self._extend_share(share, new_size) + def ensure_share(self, ctx, share, share_server=None): """Ensure that storage are mounted and exported.""" diff --git a/manila/tests/share/drivers/ibm/test_gpfs.py b/manila/tests/share/drivers/ibm/test_gpfs.py index 2f9aaf2852..c9252d6e15 100644 --- a/manila/tests/share/drivers/ibm/test_gpfs.py +++ b/manila/tests/share/drivers/ibm/test_gpfs.py @@ -219,6 +219,34 @@ class GPFSShareDriverTestCase(test.TestCase): '-j', self.snapshot['share_name'] ) + def test_extend_share(self): + self._driver._extend_share = mock.Mock() + self._driver.extend_share(self.share, 10) + self._driver._extend_share.assert_called_once_with(self.share, 10) + + def test__extend_share(self): + self._driver._get_gpfs_device = mock.Mock(return_value=self.fakedev) + self._driver._gpfs_execute = mock.Mock(return_value=True) + self._driver._extend_share(self.share, 10) + self._driver._gpfs_execute.assert_called_once_with('mmsetquota', '-j', + self.share['name'], + '-h', '10G', + self.fakedev) + self._driver._get_gpfs_device.assert_called_once_with() + + def test__extend_share_exception(self): + self._driver._get_gpfs_device = mock.Mock(return_value=self.fakedev) + self._driver._gpfs_execute = mock.Mock( + side_effect=exception.ProcessExecutionError + ) + self.assertRaises(exception.GPFSException, + self._driver._extend_share, self.share, 10) + self._driver._gpfs_execute.assert_called_once_with('mmsetquota', '-j', + self.share['name'], + '-h', '10G', + self.fakedev) + self._driver._get_gpfs_device.assert_called_once_with() + def test_allow_access(self): self._driver._get_share_path = mock.Mock( return_value=self.fakesharepath