Creating image-volume cache on NFS backend fails

snapshot.id doesn't have `tmp-snap` in it as id
is not passed as a option while creating snapshot
object. This should be change to
`snapshot.display_name` at same location
Also includes regression and NITs from other
patches
(I33da9c65ef56b3e4967170e3a0fb25f12e067876)
(Ia620043904f4f31a81bc8463fb36476a149f9808)
(Id0b4981be5bf4e79aedcdad2258fc64aad8eeb72)

Closes-Bug: #1875570
Change-Id: I66da0212a61d778fe9795d382b3af5b225a8aa54
(cherry picked from commit f68a64540f)
(cherry picked from commit 193f3e97ce)
This commit is contained in:
Sofia Enriquez 2020-05-08 20:24:48 +00:00 committed by Rajat Dhasmana
parent 175eb62813
commit 14f5a20dad
3 changed files with 18 additions and 5 deletions

View File

@ -256,10 +256,13 @@ class RemoteFsSnapDriverTestCase(test.TestCase):
mock.call(*command3, run_as_root=True)]
self._driver._execute.assert_has_calls(calls)
def _test_create_snapshot(self, volume_in_use=False, tmp_snap=False):
def _test_create_snapshot(self, volume_in_use=False, tmp_snap=False,
display_name=None):
fake_snapshot_info = {}
fake_snapshot_file_name = os.path.basename(self._fake_snapshot_path)
snapshot = self._fake_snapshot
snapshot.display_name = display_name
self._driver._local_path_volume_info = mock.Mock(
return_value=mock.sentinel.fake_info_path)
self._driver._read_info_file = mock.Mock(
@ -278,16 +281,15 @@ class RemoteFsSnapDriverTestCase(test.TestCase):
self._fake_snapshot.id: fake_snapshot_file_name
}
exp_acceptable_states = ['available', 'in-use', 'backing-up']
if tmp_snap:
if display_name and display_name.startswith('tmp-snap-'):
exp_acceptable_states.append('downloading')
self._fake_snapshot.id = 'tmp-snap-%s' % self._fake_snapshot.id
self._fake_snapshot.volume.status = 'downloading'
if volume_in_use:
self._fake_snapshot.volume.status = 'backing-up'
self._fake_snapshot.volume.attach_status = 'attached'
expected_method_called = '_create_snapshot_online'
else:
self._fake_snapshot.volume.status = 'available'
expected_method_called = '_do_create_snapshot'
self._driver._create_snapshot(self._fake_snapshot)
@ -315,6 +317,10 @@ class RemoteFsSnapDriverTestCase(test.TestCase):
self._driver._create_snapshot,
self._fake_snapshot)
@ddt.data(None, 'test', 'tmp-snap-404f-404')
def test_create_snapshot_names(self, display_name):
self._test_create_snapshot(display_name=display_name)
@mock.patch('cinder.db.snapshot_get')
@mock.patch('time.sleep')
def test_create_snapshot_online_with_concurrent_delete(

View File

@ -1439,7 +1439,8 @@ class RemoteFSSnapDriverBase(RemoteFSDriver):
status = snapshot.volume.status
acceptable_states = ['available', 'in-use', 'backing-up']
if snapshot.id.startswith('tmp-snap-'):
if (snapshot.display_name and
snapshot.display_name.startswith('tmp-snap-')):
# This is an internal volume snapshot. In order to support
# image caching, we'll allow creating/deleting such snapshots
# while having volumes in 'downloading' state.

View File

@ -0,0 +1,6 @@
---
fixes:
- |
`Bug #1875570 <https://bugs.launchpad.net/cinder/+bug/1875570>`_:
Fixed issue with NFS backend where the image-volume cache was
never used to create a volume, even when the cache was enabled.