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. +