diff --git a/cinder/exception.py b/cinder/exception.py index 6a418a2e97c..9306981b32e 100644 --- a/cinder/exception.py +++ b/cinder/exception.py @@ -1255,11 +1255,6 @@ class NotSupportedOperation(Invalid): code = 405 -# NexentaStor driver exception -class NexentaException(VolumeDriverException): - message = "%(reason)s" - - # Kaminario K2 class KaminarioCinderDriverException(VolumeDriverException): message = _("KaminarioCinderDriver failure: %(reason)s") diff --git a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta.py b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta.py index a048a2c6e20..b4be1419ad5 100644 --- a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta.py +++ b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta.py @@ -22,7 +22,6 @@ from oslo_utils import units from cinder import context from cinder import db -from cinder import exception from cinder import test from cinder.volume import configuration as conf from cinder.volume.drivers.nexenta import iscsi @@ -216,7 +215,7 @@ class TestNexentaISCSIDriver(test.TestCase): # Check that exception not raised if snapshot does not exist self.drv.delete_snapshot(self.TEST_SNAPSHOT_REF) self.nms_mock.snapshot.destroy.side_effect = ( - exception.NexentaException('does not exist')) + utils.NexentaException('does not exist')) self.nms_mock.snapshot.destroy.assert_called_with( 'cinder/volume1@snapshot1', '') @@ -236,7 +235,7 @@ class TestNexentaISCSIDriver(test.TestCase): def _stub_all_export_methods(self): self.nms_mock.scsidisk.lu_exists.return_value = False self.nms_mock.scsidisk.lu_shared.side_effect = ( - exception.NexentaException(['does not exist for zvol'])) + utils.NexentaException(['does not exist for zvol'])) self.nms_mock.scsidisk.create_lu.return_value = {'lun': 0} self.nms_mock.stmf.list_targets.return_value = [] self.nms_mock.stmf.list_targetgroups.return_value = [] @@ -480,12 +479,12 @@ class TestNexentaNfsDriver(test.TestCase): mock_chmod.assert_called_with( 'chmod ugo+rw /volumes/stack/share/volume-1/volume') mock_truncate = self.nms_mock.appliance.execute - mock_truncate.side_effect = exception.NexentaException( + mock_truncate.side_effect = utils.NexentaException( 'fake_exception') self.nms_mock.server.get_prop.return_value = '/volumes' self.nms_mock.folder.get_child_props.return_value = { 'available': 1, 'used': 1} - self.assertRaises(exception.NexentaException, + self.assertRaises(utils.NexentaException, self.drv._do_create_volume, volume) def test_create_sparsed_file(self): @@ -637,7 +636,7 @@ class TestNexentaNfsDriver(test.TestCase): # Check that exception not raised if folder does not exist on # NexentaStor appliance. mock = self.nms_mock.folder.destroy - mock.side_effect = exception.NexentaException('Folder does not exist') + mock.side_effect = utils.NexentaException('Folder does not exist') self.drv.delete_volume({ 'id': '1', 'name': 'volume-1', diff --git a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta_edge.py b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta_edge.py index 40731e44c77..e96b66881e5 100644 --- a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta_edge.py +++ b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta_edge.py @@ -23,6 +23,7 @@ from cinder import exception from cinder import test from cinder.volume import configuration as conf from cinder.volume.drivers.nexenta.nexentaedge import iscsi +from cinder.volume.drivers.nexenta import utils NEDGE_BUCKET = 'c/t/bk' NEDGE_SERVICE = 'isc' @@ -138,7 +139,7 @@ class TestNexentaEdgeISCSIDriver(test.TestCase): } self.mock_api.side_effect = my_side_effect - self.assertRaises(exception.NexentaException, + self.assertRaises(utils.NexentaException, self.driver.do_setup, self.context) def check_for_setup_error(self): diff --git a/cinder/volume/drivers/nexenta/iscsi.py b/cinder/volume/drivers/nexenta/iscsi.py index 33c7d8b7dd5..b1e6ea9a336 100644 --- a/cinder/volume/drivers/nexenta/iscsi.py +++ b/cinder/volume/drivers/nexenta/iscsi.py @@ -139,7 +139,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): try: self.nms.iscsitarget.create_target({ 'target_name': target_name}) - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'already' in exc.args[0]: LOG.info('Ignored target creation error "%s" while ' 'ensuring export.', @@ -149,7 +149,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): if not self._target_group_exists(target_group_name): try: self.nms.stmf.create_targetgroup(target_group_name) - except exception.NexentaException as exc: + except utils.NexentaException as exc: if ('already' in exc.args[0]): LOG.info('Ignored target group creation error "%s" ' 'while ensuring export.', @@ -161,7 +161,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): try: self.nms.stmf.add_targetgroup_member(target_group_name, target_name) - except exception.NexentaException as exc: + except utils.NexentaException as exc: if ('already' in exc.args[0]): LOG.info('Ignored target group member addition error ' '"%s" while ensuring export.', @@ -248,7 +248,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): try: props = self.nms.zvol.get_child_props(volume_name, 'origin') or {} self.nms.zvol.destroy(volume_name, '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'does not exist' in exc.args[0]: LOG.info('Volume %s does not exist, it ' 'seems it was already deleted.', volume_name) @@ -281,14 +281,14 @@ class NexentaISCSIDriver(driver.ISCSIDriver): self.create_volume_from_snapshot(volume, snapshot) self._mark_as_garbage('@'.join( (self._get_zvol_name(src_vref['name']), snapshot['name']))) - except exception.NexentaException: + except utils.NexentaException: with excutils.save_and_reraise_exception(): LOG.exception( 'Volume creation failed, deleting created snapshot ' '%(volume_name)s@%(name)s', snapshot) try: self.delete_snapshot(snapshot) - except (exception.NexentaException, exception.SnapshotIsBusy): + except (utils.NexentaException, exception.SnapshotIsBusy): LOG.warning('Failed to delete zfs snapshot ' '%(volume_name)s@%(name)s', snapshot) raise @@ -368,7 +368,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): try: self.nms.appliance.execute(self._get_zfs_send_recv_cmd(src, dst)) - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot send source snapshot %(src)s to " "destination %(dst)s. Reason: %(exc)s", {'src': src, 'dst': dst, 'exc': exc}) @@ -376,13 +376,13 @@ class NexentaISCSIDriver(driver.ISCSIDriver): finally: try: self.delete_snapshot(snapshot) - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot delete temporary source snapshot " "%(src)s on NexentaStor Appliance: %(exc)s", {'src': src, 'exc': exc}) try: self.delete_volume(volume) - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot delete source volume %(volume)s on " "NexentaStor Appliance: %(exc)s", {'volume': volume['name'], 'exc': exc}) @@ -392,7 +392,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): snapshot['name']) try: dst_nms.snapshot.destroy(dst_snapshot, '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot delete temporary destination snapshot " "%(dst)s on NexentaStor Appliance: %(exc)s", {'dst': dst_snapshot, 'exc': exc}) @@ -459,7 +459,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): nms.zvol.set_child_prop( zvol, options[opt], new) retyped = True - except exception.NexentaException: + except utils.NexentaException: LOG.error('Error trying to change %(opt)s' ' from %(old)s to %(new)s', {'opt': opt, 'old': old, 'new': new}) @@ -498,7 +498,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): snapshot_name = '%s@%s' % (volume_name, snapshot['name']) try: self.nms.snapshot.destroy(snapshot_name, '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: if "does not exist" in exc.args[0]: LOG.info('Snapshot %s does not exist, it seems it was ' 'already deleted.', snapshot_name) @@ -564,7 +564,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): """ try: return bool(self.nms.scsidisk.lu_exists(zvol_name)) - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'does not exist' not in exc.args[0]: raise return False @@ -578,7 +578,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): """ try: shared = self.nms.scsidisk.lu_shared(zvol_name) > 0 - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'does not exist for zvol' not in exc.args[0]: raise # Zvol does not exists shared = False # LU does not exist @@ -609,7 +609,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): if not self._lu_exists(zvol_name): try: entry = self.nms.scsidisk.create_lu(zvol_name, {}) - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'in use' not in exc.args[0]: raise LOG.info('Ignored LU creation error "%s" while ensuring ' @@ -618,7 +618,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): try: entry = self.nms.scsidisk.add_lun_mapping_entry(zvol_name, { 'target_group': target_group_name}) - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'view entry exists' not in exc.args[0]: raise LOG.info('Ignored LUN mapping entry addition error "%s" ' @@ -703,7 +703,7 @@ class NexentaISCSIDriver(driver.ISCSIDriver): parent = '/'.join((path, volume)) try: self.nms.snapshot.destroy(zfs_object, '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.debug('Error occurred while trying to delete a ' 'snapshot: %s', exc) return @@ -711,13 +711,13 @@ class NexentaISCSIDriver(driver.ISCSIDriver): try: props = self.nms.zvol.get_child_props( zfs_object, 'origin') or {} - except exception.NexentaException: + except utils.NexentaException: props = {} parent = (props['origin'] if 'origin' in props and props['origin'] else '') try: self.nms.zvol.destroy(zfs_object, '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.debug('Error occurred while trying to delete a ' 'volume: %s', exc) return diff --git a/cinder/volume/drivers/nexenta/jsonrpc.py b/cinder/volume/drivers/nexenta/jsonrpc.py index 161249a52b4..7f91925618a 100644 --- a/cinder/volume/drivers/nexenta/jsonrpc.py +++ b/cinder/volume/drivers/nexenta/jsonrpc.py @@ -17,8 +17,8 @@ from oslo_log import log as logging from oslo_serialization import jsonutils import requests -from cinder import exception from cinder.utils import retry +from cinder.volume.drivers.nexenta import utils LOG = logging.getLogger(__name__) TIMEOUT = 60 @@ -82,5 +82,5 @@ class NexentaJSONProxy(object): LOG.debug('Got response: %s', response) if response.get('error') is not None: message = response['error'].get('message', '') - raise exception.NexentaException(message) + raise utils.NexentaException(message) return response.get('result') diff --git a/cinder/volume/drivers/nexenta/nexentaedge/iscsi.py b/cinder/volume/drivers/nexenta/nexentaedge/iscsi.py index 9982369fb9f..315317a8405 100644 --- a/cinder/volume/drivers/nexenta/nexentaedge/iscsi.py +++ b/cinder/volume/drivers/nexenta/nexentaedge/iscsi.py @@ -136,7 +136,7 @@ class NexentaEdgeISCSIDriver(driver.ISCSIDriver): data['X-ISCSI-TargetName'], data['X-ISCSI-TargetID']) if 'X-VIPS' in data: if self.target_vip not in data['X-VIPS']: - raise exception.NexentaException( + raise nexenta_utils.NexentaException( 'Configured client IP address does not match any VIP' ' provided by iSCSI service %s' % self.iscsi_service) else: @@ -302,13 +302,13 @@ class NexentaEdgeISCSIDriver(driver.ISCSIDriver): self.create_snapshot(snapshot) try: self.create_volume_from_snapshot(volume, snapshot) - except exception.NexentaException: + except nexenta_utils.NexentaException: LOG.error('Volume creation failed, deleting created snapshot ' '%s', '@'.join([snapshot['volume_name'], snapshot['name']])) try: self.delete_snapshot(snapshot) - except (exception.NexentaException, exception.SnapshotIsBusy): + except (nexenta_utils.NexentaException, exception.SnapshotIsBusy): LOG.warning('Failed to delete zfs snapshot ' '%s', '@'.join([snapshot['volume_name'], snapshot['name']])) diff --git a/cinder/volume/drivers/nexenta/nfs.py b/cinder/volume/drivers/nexenta/nfs.py index ae65256aeca..fb8c413e869 100644 --- a/cinder/volume/drivers/nexenta/nfs.py +++ b/cinder/volume/drivers/nexenta/nfs.py @@ -201,7 +201,7 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 dst = ':'.join([dst_host, dst_volume.split('/volumes/')[1]]) try: nms.appliance.execute(self._get_zfs_send_recv_cmd(src, dst)) - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot send source snapshot %(src)s to " "destination %(dst)s. Reason: %(exc)s", {'src': src, 'dst': dst, 'exc': exc}) @@ -209,13 +209,13 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 finally: try: self.delete_snapshot(snapshot) - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot delete temporary source snapshot " "%(src)s on NexentaStor Appliance: %(exc)s", {'src': src, 'exc': exc}) try: self.delete_volume(volume) - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot delete source volume %(volume)s on " "NexentaStor Appliance: %(exc)s", {'volume': volume['name'], 'exc': exc}) @@ -225,7 +225,7 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 volume['name'], snapshot['name']) try: dst_nms.snapshot.destroy(dst_snapshot, '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: LOG.warning("Cannot delete temporary destination snapshot " "%(dst)s on NexentaStor Appliance: %(exc)s", {'dst': dst_snapshot, 'exc': exc}) @@ -320,7 +320,7 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 nms.folder.set_child_prop( folder, options[opt], new) retyped = True - except exception.NexentaException: + except utils.NexentaException: LOG.error('Error trying to change %(opt)s' ' from %(old)s to %(new)s', {'opt': opt, 'old': old, 'new': new}) @@ -371,10 +371,10 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 volume) self._ensure_share_mounted(sub_share, mnt_path) self._get_capacity_info(nfs_share) - except exception.NexentaException: + except utils.NexentaException: try: nms.folder.destroy('%s/%s' % (vol, folder)) - except exception.NexentaException: + except utils.NexentaException: LOG.warning("Cannot destroy created folder: " "%(vol)s/%(folder)s", {'vol': vol, 'folder': folder}) @@ -401,10 +401,10 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 try: self._share_folder(nms, vol, folder) - except exception.NexentaException: + except utils.NexentaException: try: nms.folder.destroy('%s/%s' % (vol, folder), '') - except exception.NexentaException: + except utils.NexentaException: LOG.warning("Cannot destroy cloned folder: " "%(vol)s/%(folder)s", {'vol': vol, 'folder': folder}) @@ -438,12 +438,12 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 self.create_snapshot(snapshot) try: return self.create_volume_from_snapshot(volume, snapshot) - except exception.NexentaException: + except utils.NexentaException: LOG.error('Volume creation failed, deleting created snapshot ' '%(volume_name)s@%(name)s', snapshot) try: self.delete_snapshot(snapshot) - except (exception.NexentaException, exception.SnapshotIsBusy): + except (utils.NexentaException, exception.SnapshotIsBusy): LOG.warning('Failed to delete zfs snapshot ' '%(volume_name)s@%(name)s', snapshot) raise @@ -465,7 +465,7 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 try: props = nms.folder.get_child_props(folder, 'origin') or {} nms.folder.destroy(folder, '-r') - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'does not exist' in exc.args[0]: LOG.info('Folder %s does not exist, it was ' 'already deleted.', folder) @@ -476,7 +476,7 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 if origin and self._is_clone_snapshot_name(origin): try: nms.snapshot.destroy(origin, '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'does not exist' in exc.args[0]: LOG.info('Snapshot %s does not exist, it was ' 'already deleted.', origin) @@ -536,7 +536,7 @@ class NexentaNfsDriver(nfs.NfsDriver): # pylint: disable=R0921 folder = '%s/%s/%s' % (vol, dataset, volume['name']) try: nms.snapshot.destroy('%s@%s' % (folder, snapshot['name']), '') - except exception.NexentaException as exc: + except utils.NexentaException as exc: if 'does not exist' in exc.args[0]: LOG.info('Snapshot %(folder)s@%(snapshot)s does not ' 'exist, it was already deleted.', diff --git a/cinder/volume/drivers/nexenta/utils.py b/cinder/volume/drivers/nexenta/utils.py index 517911ede66..6163ecb1b1c 100644 --- a/cinder/volume/drivers/nexenta/utils.py +++ b/cinder/volume/drivers/nexenta/utils.py @@ -19,9 +19,14 @@ import six from oslo_utils import units import six.moves.urllib.parse as urlparse +from cinder import exception from cinder.i18n import _ +class NexentaException(exception.VolumeDriverException): + message = "%(reason)s" + + def str2size(s, scale=1024): """Convert size-string.