Skip to content

Commit 991248e

Browse files
authored
Merge pull request #452 from xcp-ng/gln/optimize-test-volume-writes-qxtl
xva/vdi: only write a small data amount in large volumes for faster tests
2 parents 5aafec1 + 0985dab commit 991248e

2 files changed

Lines changed: 8 additions & 62 deletions

File tree

tests/storage/storage.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ def xva_export_import(vm: VM, compression: XVACompression, temp_large_dir: str,
274274
growpart_returncode = vm.ssh_with_result('growpart /dev/xvda 3').returncode
275275
assert growpart_returncode in [0, 1] # growpart returns 1 if the size is already the expected one
276276
vm.ssh('resize2fs /dev/xvda3')
277-
stream_size = volume_size // 2
277+
stream_size = min(volume_size // 2, 2 * GiB)
278278
else:
279279
stream_size = 500 * MiB
280280

@@ -311,16 +311,8 @@ def vdi_export_import(vm: VM, sr: SR, image_format: ImageFormat, temp_large_dir:
311311
defer(lambda: vm.disconnect_vdi(vdi_src) if vdi_src is not None and vdi_src.uuid in vm.vdis else None)
312312
dev = f'/dev/{vbd.param_get("device")}'
313313

314-
# the stream is 1/5 of the full one, truncated to a multiple of 32KiB, in order to
315-
# be validable in a single command
316-
stream_size = (config.volume_size // 5 // (32 * KiB)) * (32 * KiB)
317-
stream_position = (config.volume_size // 2)
318-
319-
checksum1 = randstream(vm, f'generate --size {stream_size} {dev}')
320-
# use a different seed to not write the same data (default seed is 0)
321-
checksum2 = randstream(vm, f'generate --seed 1 --position {stream_position} --size {stream_size} {dev}')
322-
randstream(vm, f'validate --size {stream_size} --expected-checksum {checksum1} {dev}')
323-
randstream(vm, f'validate --position {stream_position} --size {stream_size} --expected-checksum {checksum2} {dev}')
314+
checksums = partially_populate_device(vm, dev, config.volume_size)
315+
validate_partially_populated_device(vm, dev, config.volume_size, checksums)
324316
vm.disconnect_vdi(vdi_src)
325317

326318
image_path = f'{temp_large_dir}/{vdi_src.uuid}.{image_format}'
@@ -332,7 +324,8 @@ def vdi_export_import(vm: VM, sr: SR, image_format: ImageFormat, temp_large_dir:
332324

333325
# check that the zero blocks are not part of the result
334326
size_mb = int(vm.host.ssh(f'du -sm --apparent-size {image_path}').split()[0])
335-
assert stream_size // MiB * 2 < size_mb < stream_size // MiB * 2.1, f"unexpected image size: {size_mb}"
327+
stream_size = partial_stream_size(config.volume_size)
328+
assert stream_size // MiB * 3 < size_mb < stream_size // MiB * 3.1, f"unexpected image size: {size_mb}"
336329
vdi_dest = sr.create_vdi(image_format=image_format, virtual_size=config.volume_size)
337330
defer(lambda: vdi_dest.destroy())
338331

@@ -341,5 +334,4 @@ def vdi_export_import(vm: VM, sr: SR, image_format: ImageFormat, temp_large_dir:
341334
defer(lambda: vm.disconnect_vdi(vdi_dest))
342335
dev = f'/dev/{vbd.param_get("device")}'
343336

344-
randstream(vm, f'validate --size {stream_size} --expected-checksum {checksum1} {dev}')
345-
randstream(vm, f'validate --position {stream_position} --size {stream_size} --expected-checksum {checksum2} {dev}')
337+
validate_partially_populated_device(vm, dev, config.volume_size, checksums)

tests/storage/zfsvol/test_zfsvol_sr.py

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
ImageFormat,
1616
XVACompression,
1717
coalesce_integrity,
18-
randstream,
18+
vdi_export_import,
1919
xva_export_import,
2020
)
2121

@@ -89,53 +89,7 @@ def test_vdi_export_import(self, storage_test_vm: VM, zfsvol_sr: SR, image_forma
8989
defer: Defer) -> None:
9090
vm = storage_test_vm
9191
sr = zfsvol_sr
92-
vdi_src: VDI | None = sr.create_vdi(image_format=image_format, virtual_size=config.volume_size)
93-
defer(lambda: vdi_src.destroy() if vdi_src is not None else None)
94-
assert vdi_src is not None
95-
96-
vbd = vm.connect_vdi(vdi_src)
97-
defer(lambda: vm.disconnect_vdi(vdi_src) if vdi_src is not None and vdi_src.uuid in vm.vdis else None)
98-
dev = f'/dev/{vbd.param_get("device")}'
99-
100-
# the stream is 1/5 of the full one, truncated to a multiple of 32KiB, in order to
101-
# be validable in a single command
102-
stream_size = (config.volume_size // 5 // (32 * KiB)) * (32 * KiB)
103-
stream_position = (config.volume_size // 2)
104-
105-
checksum1 = randstream(vm, f'generate --size {stream_size} {dev}')
106-
# use a different seed to not write the same data (default seed is 0)
107-
checksum2 = randstream(vm, f'generate --seed 1 --position {stream_position} --size {stream_size} {dev}')
108-
randstream(vm, f'validate --size {stream_size} --expected-checksum {checksum1} {dev}')
109-
randstream(
110-
vm, f'validate --position {stream_position} --size {stream_size} --expected-checksum {checksum2} {dev}'
111-
)
112-
vm.disconnect_vdi(vdi_src)
113-
114-
image_path = f'{temp_large_dir}/{vdi_src.uuid}.{image_format}'
115-
defer(lambda: vm.host.ssh(f'rm -f {image_path}'))
116-
117-
vm.host.xe('vdi-export', {'uuid': vdi_src.uuid, 'filename': image_path, 'format': image_format})
118-
vdi_src.destroy()
119-
vdi_src = None
120-
121-
# check that the zero blocks are not part of the result
122-
size_mb = int(vm.host.ssh(f'du -sm --apparent-size {image_path}').split()[0])
123-
if image_format == 'vhd':
124-
logging.warning(f"FIXME: this is broken with vhd, skip for now (XCPNG-2631). File size is {size_mb}MB")
125-
else:
126-
assert stream_size // MiB * 2 < size_mb < stream_size // MiB * 2.1, f"unexpected image size: {size_mb}"
127-
vdi_dest = sr.create_vdi(image_format=image_format, virtual_size=config.volume_size)
128-
defer(lambda: vdi_dest.destroy())
129-
130-
vm.host.xe('vdi-import', {'uuid': vdi_dest.uuid, 'filename': image_path, 'format': image_format})
131-
vbd = vm.connect_vdi(vdi_dest)
132-
defer(lambda: vm.disconnect_vdi(vdi_dest))
133-
dev = f'/dev/{vbd.param_get("device")}'
134-
135-
randstream(vm, f'validate --size {stream_size} --expected-checksum {checksum1} {dev}')
136-
randstream(
137-
vm, f'validate --position {stream_position} --size {stream_size} --expected-checksum {checksum2} {dev}'
138-
)
92+
vdi_export_import(vm, sr, image_format, temp_large_dir, defer)
13993

14094
# *** tests with reboots (longer tests).
14195

0 commit comments

Comments
 (0)