From 6db2e945430c1ba900ba055e0555e277b95c3f06 Mon Sep 17 00:00:00 2001 From: "Walter A. Boring IV" Date: Tue, 7 May 2019 20:16:34 +0000 Subject: [PATCH] move kaminario driver exceptions This patch moves the kaminario exceptions to the kaminario_common file Change-Id: Ib35eba39009a2ecdb1c45c6b56de7c08dabd6676 --- cinder/exception.py | 9 ---- .../unit/volume/drivers/test_kaminario.py | 24 ++++----- .../drivers/kaminario/kaminario_common.py | 53 +++++++++++-------- .../volume/drivers/kaminario/kaminario_fc.py | 9 ++-- .../drivers/kaminario/kaminario_iscsi.py | 7 ++- 5 files changed, 50 insertions(+), 52 deletions(-) diff --git a/cinder/exception.py b/cinder/exception.py index cf105b5c75c..24dc522544e 100644 --- a/cinder/exception.py +++ b/cinder/exception.py @@ -1129,15 +1129,6 @@ class NotSupportedOperation(Invalid): code = 405 -# Kaminario K2 -class KaminarioCinderDriverException(VolumeDriverException): - message = _("KaminarioCinderDriver failure: %(reason)s") - - -class KaminarioRetryableException(VolumeDriverException): - message = _("Kaminario retryable exception: %(reason)s") - - class AttachmentSpecsNotFound(NotFound): message = _("Attachment %(attachment_id)s has no " "key %(specs_key)s.") diff --git a/cinder/tests/unit/volume/drivers/test_kaminario.py b/cinder/tests/unit/volume/drivers/test_kaminario.py index 144f8e07598..a9883472177 100644 --- a/cinder/tests/unit/volume/drivers/test_kaminario.py +++ b/cinder/tests/unit/volume/drivers/test_kaminario.py @@ -78,10 +78,10 @@ class FakeSaveObject(FakeK2Obj): class FakeSaveObjectExp(FakeSaveObject): def save(self): - raise exception.KaminarioCinderDriverException("test") + raise kaminario_common.KaminarioCinderDriverException("test") def delete(self): - raise exception.KaminarioCinderDriverException("test") + raise kaminario_common.KaminarioCinderDriverException("test") class FakeSearchObject(object): @@ -159,7 +159,7 @@ class TestKaminarioCommon(test.TestCase): def test_create_volume_with_exception(self): """Test create_volume_with_exception.""" self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.create_volume, self.vol) def test_delete_volume(self): @@ -170,7 +170,7 @@ class TestKaminarioCommon(test.TestCase): def test_delete_volume_with_exception(self): """Test delete_volume_with_exception.""" self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.delete_volume, self.vol) def test_create_snapshot(self): @@ -189,7 +189,7 @@ class TestKaminarioCommon(test.TestCase): def test_create_snapshot_with_exception(self): """Test create_snapshot_with_exception.""" self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.create_snapshot, self.snap) def test_delete_snapshot(self): @@ -200,7 +200,7 @@ class TestKaminarioCommon(test.TestCase): def test_delete_snapshot_with_exception(self): """Test delete_snapshot_with_exception.""" self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.delete_snapshot, self.snap) @mock.patch.object(utils, 'brick_get_connector_properties') @@ -222,7 +222,7 @@ class TestKaminarioCommon(test.TestCase): mock_brick_get.return_value = CONNECTOR mock_copy_volume.return_value = None self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.create_volume_from_snapshot, self.vol, self.snap) @@ -245,7 +245,7 @@ class TestKaminarioCommon(test.TestCase): mock_copy_volume.return_value = None self.driver.terminate_connection = mock.Mock() self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.create_cloned_volume, self.vol, self.vol) def test_extend_volume(self): @@ -258,13 +258,13 @@ class TestKaminarioCommon(test.TestCase): """Test extend_volume_with_exception.""" self.driver.client = FakeKrestException() new_size = 256 - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.extend_volume, self.vol, new_size) def test_initialize_connection_with_exception(self): """Test initialize_connection_with_exception.""" self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver.initialize_connection, self.vol, CONNECTOR) @@ -354,7 +354,7 @@ class TestKaminarioCommon(test.TestCase): rep = Replication() self.driver.replica = rep self.driver.client = FakeKrestException() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver._create_volume_replica, self.vol, vg, vg, rep.rpo) @@ -425,7 +425,7 @@ class TestKaminarioCommon(test.TestCase): self.driver.replica = Replication() self.driver.target = FakeKrestException() self.driver._check_for_status = mock.Mock() - self.assertRaises(exception.KaminarioCinderDriverException, + self.assertRaises(kaminario_common.KaminarioCinderDriverException, self.driver._delete_volume_replica, self.vol, 'test', 'test') diff --git a/cinder/volume/drivers/kaminario/kaminario_common.py b/cinder/volume/drivers/kaminario/kaminario_common.py index 70aa4531a93..4a84b42db3a 100644 --- a/cinder/volume/drivers/kaminario/kaminario_common.py +++ b/cinder/volume/drivers/kaminario/kaminario_common.py @@ -72,6 +72,15 @@ K2HTTPError = requests.exceptions.HTTPError K2_RETRY_ERRORS = ("MC_ERR_BUSY", "MC_ERR_BUSY_SPECIFIC", "MC_ERR_INPROGRESS", "MC_ERR_START_TIMEOUT") + +class KaminarioCinderDriverException(exception.VolumeDriverException): + message = _("KaminarioCinderDriver failure: %(reason)s") + + +class KaminarioRetryableException(exception.VolumeDriverException): + message = _("Kaminario retryable exception: %(reason)s") + + if krest: class KrestWrap(krest.EndPoint): def __init__(self, *args, **kwargs): @@ -87,7 +96,7 @@ if krest: return True return False - @utils.retry(exception.KaminarioRetryableException, + @utils.retry(KaminarioRetryableException, retries=MAX_K2_RETRY) def _request(self, method, *args, **kwargs): try: @@ -98,7 +107,7 @@ if krest: err_code = err.response.status_code err_msg = err.response.text if self._should_retry(err_code, err_msg): - raise exception.KaminarioRetryableException( + raise KaminarioRetryableException( reason=six.text_type(err_msg)) raise finally: @@ -135,7 +144,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): if krest is None: msg = _("Unable to import 'krest' python module.") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) else: conf = self.configuration self.client = KrestWrap(conf.san_ip, @@ -156,12 +165,12 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): msg = _("K2 REST API version should be " ">= %s.") % K2_MIN_VERSION LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) else: msg = _("K2 REST API version search failed.") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) def _check_ops(self): """Ensure that the options we care about are set.""" @@ -213,7 +222,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): LOG.debug("Deleting vg: %s for failed volume in K2.", vg_name) vg_rs.hits[0].delete() LOG.exception("Creation of volume %s failed.", vol_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) if self._get_is_replica(volume.volume_type) and self.replica: self._create_volume_replica(volume, vg, vol, self.replica.rpo) @@ -239,7 +248,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): else: msg = _("Unable to find K2peer in source K2:") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) try: LOG.debug("Creating source session with name: %(sname)s and " " target session name: %(tname)s", @@ -274,7 +283,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): self._delete_by_ref(self.target, "volume_groups", rvg_name, "remote vg") self._delete_by_ref(self.client, "volume_groups", vg.name, "vg") - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) @utils.trace def _create_failover_volume_replica(self, volume, vg_name, vol_name): @@ -298,7 +307,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): else: msg = _("Unable to find K2peer in source K2:") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) try: LOG.debug("Creating source session with name: %(sname)s and " " target session name: %(tname)s", @@ -329,7 +338,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): session_name, 'remote session') self._delete_by_ref(self.client, "volumes", vol_name, "volume") self._delete_by_ref(self.client, "volume_groups", vg_name, "vg") - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) @utils.trace def _delete_by_ref(self, device, url, name, msg): @@ -565,12 +574,12 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): LOG.exception("Creating a view: %(view)s from snapshot: " "%(snap)s failed", {"view": view_name, "snap": snap_name}) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) else: msg = _("Snapshot: %s search failed in K2.") % snap_name LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) try: conn = self.initialize_connection(cview, properties) @@ -597,7 +606,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): self.delete_volume(volume) LOG.exception("Copy to volume: %(vol)s from view: %(view)s " "failed", {"vol": vol_name, "view": view_name}) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) @utils.trace def create_cloned_volume(self, volume, src_vref): @@ -618,7 +627,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): "To get this done, create a snapshot from the attached " "volume and then create a volume from the snapshot.") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) try: properties = utils.brick_get_connector_properties() conn = self.initialize_connection(src_vref, properties) @@ -642,7 +651,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): self.terminate_connection(volume, properties) self.delete_volume(volume) LOG.exception("Create a clone: %s failed.", clone_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) @utils.trace def delete_volume(self, volume): @@ -667,7 +676,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): vg_rs.hits[0].delete() except Exception as ex: LOG.exception("Deletion of volume %s failed.", vol_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) @utils.trace def _delete_volume_replica(self, volume, vg_name, vol_name): @@ -766,7 +775,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): is_auto_deleteable=False).save() except Exception as ex: LOG.exception("Creation of snapshot: %s failed.", snap_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) @utils.trace def delete_snapshot(self, snapshot): @@ -779,7 +788,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): snap_rs.hits[0].delete() except Exception as ex: LOG.exception("Deletion of snapshot: %s failed.", snap_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) @utils.trace def extend_volume(self, volume, new_size): @@ -793,7 +802,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): vol.save() except Exception as ex: LOG.exception("Extending volume: %s failed.", vol_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) def update_volume_stats(self): conf = self.configuration @@ -879,7 +888,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): name="Best_Effort_Retention").hits[0] except Exception as ex: LOG.exception("Retention policy search failed in K2.") - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) def _get_volume_object(self, volume): vol_name = self.get_volume_name(volume.id) @@ -890,7 +899,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): if not hasattr(vol_rs, 'hits') or vol_rs.total == 0: msg = _("Unable to find volume: %s from K2.") % vol_name LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise KaminarioCinderDriverException(reason=msg) return vol_rs.hits[0] def _get_lun_number(self, vol, host): @@ -963,7 +972,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): LOG.exception("Unable to map volume: %(vol)s to host: " "%(host)s", {'host': host_name, 'vol': vol.name}) - raise exception.KaminarioCinderDriverException(reason=ex) + raise KaminarioCinderDriverException(reason=ex) # Get lun number. if type(volume).__name__ == 'RestObject': return self._get_lun_number(vol, host) diff --git a/cinder/volume/drivers/kaminario/kaminario_fc.py b/cinder/volume/drivers/kaminario/kaminario_fc.py index c275721ffcd..ad30b2ceea8 100644 --- a/cinder/volume/drivers/kaminario/kaminario_fc.py +++ b/cinder/volume/drivers/kaminario/kaminario_fc.py @@ -16,7 +16,6 @@ from oslo_log import log as logging from cinder import coordination -from cinder import exception from cinder.i18n import _ from cinder.objects import fields from cinder import utils @@ -57,7 +56,7 @@ class KaminarioFCDriver(common.KaminarioCinderDriver): if not connector.get('wwpns'): msg = _("No wwpns found in host connector.") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise common.KaminarioCinderDriverException(reason=msg) # To support replication failback temp_client = None if (hasattr(volume, 'replication_status') and @@ -145,7 +144,7 @@ class KaminarioFCDriver(common.KaminarioCinderDriver): if not target_wwpns: msg = _("Unable to get FC target wwpns from K2.") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise common.KaminarioCinderDriverException(reason=msg) return target_wwpns @utils.trace @@ -162,7 +161,7 @@ class KaminarioFCDriver(common.KaminarioCinderDriver): except Exception as ex: LOG.exception("Unable to create host : %s in K2.", host_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise common.KaminarioCinderDriverException(reason=ex) else: # Use existing host. LOG.debug("Use existing initiator hostname: %s in K2.", host_name) @@ -184,7 +183,7 @@ class KaminarioFCDriver(common.KaminarioCinderDriver): LOG.exception("Unable to add wwpn : %(wwpn)s to " "host: %(host)s in K2.", {'wwpn': wwpn, 'host': host_name}) - raise exception.KaminarioCinderDriverException(reason=ex) + raise common.KaminarioCinderDriverException(reason=ex) return host, host_rs, host_name def _build_initiator_target_map(self, connector, all_target_wwns): diff --git a/cinder/volume/drivers/kaminario/kaminario_iscsi.py b/cinder/volume/drivers/kaminario/kaminario_iscsi.py index 9d36253dc75..263c2682a57 100644 --- a/cinder/volume/drivers/kaminario/kaminario_iscsi.py +++ b/cinder/volume/drivers/kaminario/kaminario_iscsi.py @@ -16,7 +16,6 @@ from oslo_log import log as logging from cinder import coordination -from cinder import exception from cinder.i18n import _ from cinder import interface from cinder.objects import fields @@ -109,7 +108,7 @@ class KaminarioISCSIDriver(common.KaminarioCinderDriver): if not iscsi_portals: msg = _("Unable to get ISCSI IP address from K2.") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise common.KaminarioCinderDriverException(reason=msg) LOG.debug("Searching system state for target iqn in K2.") sys_state_rs = self.client.search("system/state") @@ -120,7 +119,7 @@ class KaminarioISCSIDriver(common.KaminarioCinderDriver): if not target_iqns: msg = _("Unable to get target iqn from K2.") LOG.error(msg) - raise exception.KaminarioCinderDriverException(reason=msg) + raise common.KaminarioCinderDriverException(reason=msg) return iscsi_portals, target_iqns @utils.trace @@ -143,7 +142,7 @@ class KaminarioISCSIDriver(common.KaminarioCinderDriver): self._delete_host_by_name(host_name) LOG.exception("Unable to create host: %s in K2.", host_name) - raise exception.KaminarioCinderDriverException(reason=ex) + raise common.KaminarioCinderDriverException(reason=ex) else: LOG.debug("Use existing initiator hostname: %s in K2.", host_name) host = host_rs.hits[0]