Skip to content

Commit 548e766

Browse files
committed
storage: speedup the coalesce tests by avoiding writing the whole device
This is necessary with large volumes to run in a reasonable amount of time on standard hardware. This is done by: * writing in only a small piece of data at the beginning, in the middle and at the end of the device * creating the snapshot/clone * writing for data in an already used location and a non used one * triggering the coalesce * finally verifying that the data we generated is accessible as expected Signed-off-by: Gaëtan Lehmann <gaetan.lehmann@vates.tech>
1 parent db0349e commit 548e766

1 file changed

Lines changed: 36 additions & 9 deletions

File tree

tests/storage/storage.py

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -197,28 +197,55 @@ def randstream(vm: VM, args: str) -> str:
197197

198198
def coalesce_integrity(vm: VM, vdi: VDI, vdi_op: CoalesceOperation, defer: Defer) -> None:
199199
vdi_size = vdi.get_virtual_size()
200-
# second stream is 1/8 of the full one, truncated to a multiple of 32KiB, in order to
201-
# be validable in a single command
202-
second_stream_size = (vdi_size // 8 // (32 * KiB)) * (32 * KiB)
200+
# second stream is 1/16 of the full one, truncated to a multiple of 32KiB
201+
stream_size = min((vdi_size // 16 // (32 * KiB)) * (32 * KiB), 2 * GiB)
203202
vbd = vm.connect_vdi(vdi)
204203
defer(lambda: vm.disconnect_vdi(vdi))
205204

206205
dev = f'/dev/{vbd.param_get("device")}'
207-
checksum = randstream(vm, f'generate {dev}')
208-
# default seed is 0
209-
randstream(vm, f'validate --expected-checksum {checksum} {dev}')
206+
# generate at the start, in the middle and the end of the disk
207+
checksum1 = randstream(vm, f'generate --size {stream_size} {dev}')
208+
checksum2 = randstream(vm, f'generate --position {vdi_size // 2} --size {stream_size} {dev}')
209+
checksum3 = randstream(vm, f'generate --position {vdi_size - stream_size} --size {stream_size} {dev}')
210+
# make sure we can read that exact data before the snapshot/clone
211+
randstream(vm, f'validate --expected-checksum {checksum1} --size {stream_size} {dev}')
212+
randstream(vm, f'validate --expected-checksum {checksum2} --position {vdi_size // 2} --size {stream_size} {dev}')
213+
randstream(
214+
vm, f'validate --expected-checksum {checksum3} --position {vdi_size - stream_size} --size {stream_size} {dev}'
215+
)
210216
new_vdi: VDI | None = None
211217
match vdi_op:
212218
case 'clone': new_vdi = vdi.clone()
213219
case 'snapshot': new_vdi = vdi.snapshot()
214220
defer(lambda: new_vdi.destroy() if new_vdi is not None else None)
215221
assert vdi is not None
216222

217-
randstream(vm, f'generate --seed 1 --size {second_stream_size} {dev}')
218-
checksum = randstream(vm, f"validate {dev}")
223+
# add some data in a non-used place, and overwrite an already used one
224+
checksum2bis = randstream(vm, f'generate --seed 1 --position {vdi_size // 2} --size {stream_size} {dev}')
225+
checksum4 = randstream(vm, f'generate --position {stream_size} --size {stream_size} {dev}')
226+
# make sure we can write that data before the coalesce
227+
randstream(
228+
vm, f'validate --expected-checksum {checksum2bis} --position {vdi_size // 2} --size {stream_size} {dev}',
229+
)
230+
randstream(
231+
vm, f'validate --expected-checksum {checksum4} --position {stream_size} --size {stream_size} {dev}'
232+
)
233+
234+
# trigger the coalesce
219235
vdi.wait_for_coalesce(new_vdi.destroy)
220236
new_vdi = None
221-
randstream(vm, f'validate --expected-checksum {checksum} {dev}')
237+
238+
# verify the data is still as expected
239+
randstream(vm, f'validate --expected-checksum {checksum1} --size {stream_size} {dev}')
240+
randstream(
241+
vm, f'validate --expected-checksum {checksum2bis} --position {vdi_size // 2} --size {stream_size} {dev}',
242+
)
243+
randstream(
244+
vm, f'validate --expected-checksum {checksum3} --position {vdi_size - stream_size} --size {stream_size} {dev}'
245+
)
246+
randstream(
247+
vm, f'validate --expected-checksum {checksum4} --position {stream_size} --size {stream_size} {dev}'
248+
)
222249

223250
XVACompression = Literal['none', 'gzip', 'zstd']
224251

0 commit comments

Comments
 (0)