From 77127e7d469e69400402fc42758a81e9aaf15ca6 Mon Sep 17 00:00:00 2001 From: Ajitha Robert Date: Mon, 8 Mar 2021 18:46:00 -0800 Subject: [PATCH] Bug fix for revert to snapshot feature Snapshot information should be retrieved from the snapshot API instead of retrieving volume's last_snap Closes-bug: #1918099 Change-Id: Iee7d2e8d935a806f92f3991a943a458f5b74ef48 --- cinder/tests/unit/volume/drivers/test_nimble.py | 13 +++++++++++-- cinder/volume/drivers/nimble.py | 4 +++- releasenotes/notes/1918099-18b26dd9107f19c0.yaml | 6 ++++++ 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 releasenotes/notes/1918099-18b26dd9107f19c0.yaml diff --git a/cinder/tests/unit/volume/drivers/test_nimble.py b/cinder/tests/unit/volume/drivers/test_nimble.py index fb39f1f5a79..1f35c91f1d4 100644 --- a/cinder/tests/unit/volume/drivers/test_nimble.py +++ b/cinder/tests/unit/volume/drivers/test_nimble.py @@ -167,6 +167,9 @@ FAKE_GET_VOL_INFO_REVERT = {'name': 'testvolume', 'agent_type': 'openstack', 'last_snap': {'snap_id': fake.SNAPSHOT_ID}} +FAKE_SNAP_INFO_REVERT = {'name': 'testsnap', + 'id': fake.SNAPSHOT2_ID} + FAKE_CREATE_VOLUME_NEGATIVE_RESPONSE = exception.VolumeBackendAPIException( "Volume testvolume not found") @@ -1274,17 +1277,20 @@ class NimbleDriverSnapshotTestCase(NimbleDriverBaseTestCase): FAKE_GET_VOL_INFO_REVERT) self.mock_client_service.get_netconfig.return_value = ( FAKE_POSITIVE_NETCONFIG_RESPONSE) + self.mock_client_service.get_snap_info.return_value = ( + FAKE_SNAP_INFO_REVERT) ctx = context.get_admin_context() self.driver.revert_to_snapshot(ctx, {'id': fake.VOLUME_ID, 'size': 1, 'name': 'testvolume'}, - {'id': fake.SNAPSHOT_ID, + {'id': fake.SNAPSHOT2_ID, + 'name': 'testsnap', 'volume_id': fake.VOLUME_ID}) expected_calls = [mock.call.online_vol('testvolume', False), mock.call.volume_restore('testvolume', {'data': {'id': fake.VOLUME_ID, - 'base_snap_id': fake.SNAPSHOT_ID}}), + 'base_snap_id': fake.SNAPSHOT2_ID}}), mock.call.online_vol('testvolume', True)] self.mock_client_service.assert_has_calls(expected_calls) @@ -1301,6 +1307,8 @@ class NimbleDriverSnapshotTestCase(NimbleDriverBaseTestCase): FAKE_GET_VOL_INFO_REVERT) self.mock_client_service.get_netconfig.return_value = ( FAKE_POSITIVE_NETCONFIG_RESPONSE) + self.mock_client_service.get_snap_info.return_value = ( + FAKE_SNAP_INFO_REVERT) ctx = context.get_admin_context() self.assertRaises(exception.VolumeBackendAPIException, self.driver.revert_to_snapshot, ctx, @@ -1308,6 +1316,7 @@ class NimbleDriverSnapshotTestCase(NimbleDriverBaseTestCase): 'size': 1, 'name': 'testvolume'}, {'id': fake.SNAPSHOT_ID, + 'name': 'testsnap', 'volume_id': fake.VOLUME_ID}) diff --git a/cinder/volume/drivers/nimble.py b/cinder/volume/drivers/nimble.py index 1e6bdfa4dde..56cd702d1c7 100644 --- a/cinder/volume/drivers/nimble.py +++ b/cinder/volume/drivers/nimble.py @@ -755,7 +755,9 @@ class NimbleBaseVolumeDriver(san.SanDriver): def revert_to_snapshot(self, context, volume, snapshot): vol_info = self.APIExecutor.get_vol_info(volume['name']) - snap_id = vol_info['last_snap']['snap_id'] + snap_info = self.APIExecutor.get_snap_info(snapshot['name'], + volume['name']) + snap_id = snap_info['id'] volume_id = vol_info['id'] LOG.debug("Reverting volume %(vol)s with snapshot id %(snap_id)s", {'vol': volume['name'], 'snap_id': snap_id}) diff --git a/releasenotes/notes/1918099-18b26dd9107f19c0.yaml b/releasenotes/notes/1918099-18b26dd9107f19c0.yaml new file mode 100644 index 00000000000..fb850ea0dca --- /dev/null +++ b/releasenotes/notes/1918099-18b26dd9107f19c0.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Nimble driver `bug #1918099 + `_: Fix + revert to snapshot not working as expected.