From 084e11ed0d543c10715c4ca44c020e44c8402bf2 Mon Sep 17 00:00:00 2001 From: Nikesh Mahalka Date: Wed, 7 Sep 2016 09:35:13 -0400 Subject: [PATCH] Orphan view and multipath issue in Kaminario driver "create_volume_from_snapshot" method leaves an orphan view in Kaminario K2 iSCSI and FC Cinder Drivers. "create_volume_from_snapshot" and "create_cloned_volume" methods are not removing multipath_devices while detaching temporary attached volume/view for copying data. Change-Id: I3f064777ce0dd4264c3682f5724b3bb46f282311 Closes-Bug: #1620781 Co-Authored-By: Lakshman --- .../unit/volume/drivers/test_kaminario.py | 2 ++ .../drivers/kaminario/kaminario_common.py | 18 +++++++++++++++++- ...er-driver-bug-1620781-821d16f5f7f2932f.yaml | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/kaminario-cinder-driver-bug-1620781-821d16f5f7f2932f.yaml diff --git a/cinder/tests/unit/volume/drivers/test_kaminario.py b/cinder/tests/unit/volume/drivers/test_kaminario.py index 82f0a99f6be..83f13436c7c 100644 --- a/cinder/tests/unit/volume/drivers/test_kaminario.py +++ b/cinder/tests/unit/volume/drivers/test_kaminario.py @@ -202,6 +202,7 @@ class TestKaminarioISCSI(test.TestCase): """Test create_volume_from_snapshot.""" mock_brick_get.return_value = CONNECTOR mock_copy_volume.return_value = None + self.driver._kaminario_disconnect_volume = mock.Mock() result = self.driver.create_volume_from_snapshot(self.vol, self.snap) self.assertIsNone(result) @@ -223,6 +224,7 @@ class TestKaminarioISCSI(test.TestCase): """Test create_cloned_volume.""" mock_brick_get.return_value = CONNECTOR mock_copy_volume.return_value = None + self.driver._kaminario_disconnect_volume = mock.Mock() result = self.driver.create_cloned_volume(self.vol, self.vol) self.assertIsNone(result) diff --git a/cinder/volume/drivers/kaminario/kaminario_common.py b/cinder/volume/drivers/kaminario/kaminario_common.py index df951b85378..924a05c5c2c 100644 --- a/cinder/volume/drivers/kaminario/kaminario_common.py +++ b/cinder/volume/drivers/kaminario/kaminario_common.py @@ -600,9 +600,14 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): snapshot.volume.size * units.Ki, self.configuration.volume_dd_blocksize, sparse=True) + self._kaminario_disconnect_volume(src_attach_info, + dest_attach_info) self.terminate_connection(volume, properties) self.terminate_connection(cview, properties) + cview.delete() except Exception as ex: + self._kaminario_disconnect_volume(src_attach_info, + dest_attach_info) self.terminate_connection(cview, properties) self.terminate_connection(volume, properties) cview.delete() @@ -625,6 +630,7 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): src_name = self.get_volume_name(src_vref.id) src_vol = self.client.search("volumes", name=src_name) src_map = self.client.search("mappings", volume=src_vol) + src_attach_info = dest_attach_info = None if src_map.total != 0: msg = _("K2 driver does not support clone of a attached volume. " "To get this done, create a snapshot from the attached " @@ -643,10 +649,13 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): src_vref.size * units.Ki, self.configuration.volume_dd_blocksize, sparse=True) - + self._kaminario_disconnect_volume(src_attach_info, + dest_attach_info) self.terminate_connection(volume, properties) self.terminate_connection(src_vref, properties) except Exception as ex: + self._kaminario_disconnect_volume(src_attach_info, + dest_attach_info) self.terminate_connection(src_vref, properties) self.terminate_connection(volume, properties) self.delete_volume(volume) @@ -1139,3 +1148,10 @@ class KaminarioCinderDriver(cinder.volume.driver.ISCSIDriver): self._delete_failover_volume_replica(volume, vg_name, vol_name) else: self._delete_volume_replica(volume, vg_name, vol_name) + + def _kaminario_disconnect_volume(self, *attach_info): + for info in attach_info: + if (info and info.get('connector') and + info.get('conn', {}).get('data') and info.get('device')): + info['connector'].disconnect_volume(info['conn']['data'], + info['device']) diff --git a/releasenotes/notes/kaminario-cinder-driver-bug-1620781-821d16f5f7f2932f.yaml b/releasenotes/notes/kaminario-cinder-driver-bug-1620781-821d16f5f7f2932f.yaml new file mode 100644 index 00000000000..1ea0cee6146 --- /dev/null +++ b/releasenotes/notes/kaminario-cinder-driver-bug-1620781-821d16f5f7f2932f.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - Fixed orphan view in "create_volume_from_snapshot" method + and multipath_devices in "create_volume_from_snapshot" and + "create_cloned_volume" methods in Kaminario iSCSI and FC Cinder Drivers. +