Fix 'extend_share' in generic driver

When we create a share and mount it on client VM, we cannot do
'manila extend' because of error:
Stderr: u'umount: /shares/share-xxxxxx: device is busy.

We need to 'disable_access_for_maintenance' before doing an extension
and 'restore_access_after_maintenance' after extension was done.

Closes-Bug: #1473033

Change-Id: I4b5e665f8d028d4784d02411bbe6daace30aa49e
This commit is contained in:
Julia Varlamova 2015-07-10 04:26:45 -04:00
parent c98d1c2be8
commit 48c7b605db
2 changed files with 13 additions and 1 deletions

View File

@ -557,6 +557,8 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
def extend_share(self, share, new_size, share_server=None):
server_details = share_server['backend_details']
helper = self._get_helper(share)
helper.disable_access_for_maintenance(server_details, share['name'])
self._unmount_device(share, server_details)
self._detach_volume(self.admin_context, share, server_details)
@ -570,6 +572,8 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
volume)
self._resize_filesystem(server_details, volume)
self._mount_device(share, server_details, volume)
helper.restore_access_after_maintenance(server_details,
share['name'])
def _extend_volume(self, context, volume, new_size):
self.volume_api.extend(context, volume['id'], new_size)

View File

@ -1385,7 +1385,11 @@ class GenericShareDriverTestCase(test.TestCase):
def test_extend_share(self):
fake_volume = "fake"
fake_share = {'id': 'fake'}
fake_share = {
'id': 'fake',
'share_proto': 'NFS',
'name': 'test_share',
}
new_size = 123
srv_details = self.server['backend_details']
self.mock_object(
@ -1419,6 +1423,10 @@ class GenericShareDriverTestCase(test.TestCase):
mock.ANY, fake_volume, new_size)
self._driver._attach_volume.assert_called_once_with(
mock.ANY, fake_share, srv_details['instance_id'], mock.ANY)
self._helper_nfs.disable_access_for_maintenance.\
assert_called_once_with(srv_details, 'test_share')
self._helper_nfs.restore_access_after_maintenance.\
assert_called_once_with(srv_details, 'test_share')
self.assertTrue(self._driver._resize_filesystem.called)
def test_extend_volume(self):