Skip to content

Commit ca24cc7

Browse files
authored
Merge pull request #148 from stackhpc/upstream/2025.1-2026-06-22
Synchronise 2025.1 with upstream
2 parents c033fab + 6cefd2f commit ca24cc7

2 files changed

Lines changed: 50 additions & 12 deletions

File tree

cinder/tests/unit/volume/drivers/test_quobyte.py

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,7 +1021,9 @@ def test_copy_volume_from_snapshot(self):
10211021
self.mock_object(image_utils, 'qemu_img_info', return_value=img_info)
10221022
drv._set_rw_permissions = mock.Mock()
10231023

1024-
drv._copy_volume_from_snapshot(snapshot, dest_volume, size)
1024+
drv._copy_volume_from_snapshot(snapshot, dest_volume, size,
1025+
src_encryption_key_id=None,
1026+
new_encryption_key_id=None)
10251027

10261028
drv._read_info_file.assert_called_once_with(info_path)
10271029
image_utils.qemu_img_info.assert_called_once_with(
@@ -1074,14 +1076,17 @@ def test_copy_volume_from_snapshot_cached(self, os_ac_mock,
10741076

10751077
# mocking and testing starts here
10761078
mock_convert = self.mock_object(image_utils, 'convert_image')
1077-
drv._read_info_file = mock.Mock(return_value=
1078-
{'active': snap_file,
1079-
snapshot['id']: snap_file})
1079+
drv._read_info_file = mock.Mock(return_value={
1080+
'active': snap_file,
1081+
snapshot['id']: snap_file
1082+
})
10801083
self.mock_object(image_utils, 'qemu_img_info', return_value=img_info)
10811084
drv._set_rw_permissions = mock.Mock()
10821085
shutil.copyfile = mock.Mock()
10831086

1084-
drv._copy_volume_from_snapshot(snapshot, dest_volume, size)
1087+
drv._copy_volume_from_snapshot(snapshot, dest_volume, size,
1088+
src_encryption_key_id=None,
1089+
new_encryption_key_id=None)
10851090

10861091
drv._read_info_file.assert_called_once_with(info_path)
10871092
image_utils.qemu_img_info.assert_called_once_with(
@@ -1138,14 +1143,17 @@ def test_copy_volume_from_snapshot_not_cached_overlay(self, os_ac_mock,
11381143

11391144
# mocking and testing starts here
11401145
mock_convert = self.mock_object(image_utils, 'convert_image')
1141-
drv._read_info_file = mock.Mock(return_value=
1142-
{'active': snap_file,
1143-
snapshot['id']: snap_file})
1146+
drv._read_info_file = mock.Mock(return_value={
1147+
'active': snap_file,
1148+
snapshot['id']: snap_file
1149+
})
11441150
self.mock_object(image_utils, 'qemu_img_info', return_value=img_info)
11451151
drv._set_rw_permissions = mock.Mock()
11461152
drv._create_overlay_volume_from_snapshot = mock.Mock()
11471153

1148-
drv._copy_volume_from_snapshot(snapshot, dest_volume, size)
1154+
drv._copy_volume_from_snapshot(snapshot, dest_volume, size,
1155+
src_encryption_key_id=None,
1156+
new_encryption_key_id=None)
11491157

11501158
drv._read_info_file.assert_called_once_with(info_path)
11511159
os_ac_mock.assert_called_once_with(
@@ -1212,7 +1220,9 @@ def test_copy_volume_from_snapshot_not_cached(self, qb_falloc_mock):
12121220
drv._set_rw_permissions = mock.Mock()
12131221
self.mock_object(shutil, 'copyfile')
12141222

1215-
drv._copy_volume_from_snapshot(snapshot, dest_volume, size)
1223+
drv._copy_volume_from_snapshot(snapshot, dest_volume, size,
1224+
src_encryption_key_id=None,
1225+
new_encryption_key_id=None)
12161226

12171227
drv._read_info_file.assert_called_once_with(info_path)
12181228
image_utils.qemu_img_info.assert_called_once_with(
@@ -1229,6 +1239,25 @@ def test_copy_volume_from_snapshot_not_cached(self, qb_falloc_mock):
12291239
shutil.copyfile.assert_called_once_with(cache_path, dest_vol_path)
12301240
drv._set_rw_permissions.assert_called_once_with(dest_vol_path)
12311241

1242+
def test_copy_volume_from_snapshot_with_encr(self):
1243+
# setup vars
1244+
drv = self._driver
1245+
src_volume = self._simple_volume()
1246+
snapshot = self._get_fake_snapshot(src_volume)
1247+
dest_volume = self._simple_volume(
1248+
id='c1073000-0000-0000-0000-0000000c1073')
1249+
size = dest_volume['size']
1250+
1251+
# run test
1252+
self.assertRaises(exception.NotSupportedOperation,
1253+
drv._copy_volume_from_snapshot,
1254+
snapshot,
1255+
dest_volume,
1256+
size,
1257+
src_encryption_key_id=mock.sentinel.src_key,
1258+
new_encryption_key_id=mock.sentinel.dest_key
1259+
)
1260+
12321261
@ddt.data(['available', True], ['backing-up', True],
12331262
['creating', False], ['deleting', False])
12341263
@ddt.unpack

cinder/volume/drivers/quobyte.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from cinder.volume import configuration
3939
from cinder.volume.drivers import remotefs as remotefs_drv
4040

41-
VERSION = '1.1.13'
41+
VERSION = '1.1.14'
4242

4343
LOG = logging.getLogger(__name__)
4444

@@ -119,6 +119,7 @@ class QuobyteDriver(remotefs_drv.RemoteFSSnapDriverDistributed):
119119
1.1.11 - NAS secure ownership & permissions are now False by default
120120
1.1.12 - Ensure the currently configured volume url is always used
121121
1.1.13 - Allow creating volumes from snapshots in state 'backing-up'
122+
1.1.14 - Fixes regression from encryption being added in parent class
122123
123124
"""
124125

@@ -383,7 +384,9 @@ def create_volume_from_snapshot(self, volume, snapshot):
383384
return self._create_volume_from_snapshot(volume, snapshot)
384385

385386
@coordination.synchronized('{self.driver_prefix}-{volume.id}')
386-
def _copy_volume_from_snapshot(self, snapshot, volume, volume_size):
387+
def _copy_volume_from_snapshot(self, snapshot, volume, volume_size,
388+
src_encryption_key_id=None,
389+
new_encryption_key_id=None):
387390
"""Copy data from snapshot to destination volume.
388391
389392
This is done with a qemu-img convert to raw/qcow2 from the snapshot
@@ -392,6 +395,12 @@ def _copy_volume_from_snapshot(self, snapshot, volume, volume_size):
392395
snapshot id are created directly from the cache.
393396
"""
394397

398+
if new_encryption_key_id:
399+
msg = _("Encryption key %s was requested. Volume "
400+
"encryption is not supported.")
401+
raise exception.NotSupportedOperation(
402+
message=msg % new_encryption_key_id)
403+
395404
LOG.debug("snapshot: %(snap)s, volume: %(vol)s, ",
396405
{'snap': snapshot.id,
397406
'vol': volume.id,

0 commit comments

Comments
 (0)