diff --git a/manila/share/drivers/generic.py b/manila/share/drivers/generic.py index e4a7639a91..98aeb50450 100644 --- a/manila/share/drivers/generic.py +++ b/manila/share/drivers/generic.py @@ -250,8 +250,15 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver): }, } + @utils.retry(exception.ProcessExecutionError, backoff_rate=1) + def _is_device_file_available(self, server_details, volume): + """Checks whether the device file is available""" + command = ['sudo', 'test', '-b', volume['mountpoint']] + self._ssh_exec(server_details, command) + def _format_device(self, server_details, volume): """Formats device attached to the service vm.""" + self._is_device_file_available(server_details, volume) command = ['sudo', 'mkfs.%s' % self.configuration.share_volume_fstype, volume['mountpoint']] self._ssh_exec(server_details, command) diff --git a/manila/tests/share/drivers/test_generic.py b/manila/tests/share/drivers/test_generic.py index cc48f7ba61..23efbf7ff0 100644 --- a/manila/tests/share/drivers/test_generic.py +++ b/manila/tests/share/drivers/test_generic.py @@ -369,11 +369,26 @@ class GenericShareDriverTestCase(test.TestCase): self.assertRaises(exception.InvalidShare, self._driver.create_share, self._context, self.share, share_server=self.server) + def test_is_device_file_available(self): + volume = {'mountpoint': 'fake_mount_point'} + self.mock_object(self._driver, '_ssh_exec', + mock.Mock(return_value=None)) + + self._driver._is_device_file_available(self.server, volume) + + self._driver._ssh_exec.assert_called_once_with( + self.server, ['sudo', 'test', '-b', volume['mountpoint']]) + def test_format_device(self): volume = {'mountpoint': 'fake_mount_point'} self.mock_object(self._driver, '_ssh_exec', mock.Mock(return_value=('', ''))) + self.mock_object(self._driver, '_is_device_file_available') + self._driver._format_device(self.server, volume) + + self._driver._is_device_file_available.assert_called_once_with( + self.server, volume) self._driver._ssh_exec.assert_called_once_with( self.server, ['sudo', 'mkfs.%s' % self.fake_conf.share_volume_fstype,