iotests/backup-discard-source: don't use actual-size
Relying on disk usage is bad thing, and test just doesn't work on XFS. Let's instead add a dirty bitmap to track writes to test image. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Message-ID: <20240620144402.65896-3-vsementsov@yandex-team.ru> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Tested-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
b4bc6ad1d7
commit
526c4a90c4
@ -31,12 +31,6 @@ target_img = os.path.join(iotests.test_dir, 'target')
|
||||
size = 1024 * 1024
|
||||
|
||||
|
||||
def get_actual_size(vm, node_name):
|
||||
nodes = vm.cmd('query-named-block-nodes', flat=True)
|
||||
node = next(n for n in nodes if n['node-name'] == node_name)
|
||||
return node['image']['actual-size']
|
||||
|
||||
|
||||
class TestBackup(iotests.QMPTestCase):
|
||||
def setUp(self):
|
||||
qemu_img_create('-f', iotests.imgfmt, source_img, str(size))
|
||||
@ -84,7 +78,12 @@ class TestBackup(iotests.QMPTestCase):
|
||||
}
|
||||
})
|
||||
|
||||
self.assertLess(get_actual_size(self.vm, 'temp'), 512 * 1024)
|
||||
self.bitmap = {
|
||||
'node': 'temp',
|
||||
'name': 'bitmap0'
|
||||
}
|
||||
|
||||
self.vm.cmd('block-dirty-bitmap-add', self.bitmap)
|
||||
|
||||
def tearDown(self):
|
||||
# That should fail, because region is discarded
|
||||
@ -113,6 +112,13 @@ class TestBackup(iotests.QMPTestCase):
|
||||
|
||||
self.vm.event_wait(name='BLOCK_JOB_COMPLETED')
|
||||
|
||||
def get_bitmap_count(self):
|
||||
nodes = self.vm.cmd('query-named-block-nodes', flat=True)
|
||||
temp = next(n for n in nodes if n['node-name'] == 'temp')
|
||||
bitmap = temp['dirty-bitmaps'][0]
|
||||
assert bitmap['name'] == self.bitmap['name']
|
||||
return bitmap['count']
|
||||
|
||||
def test_discard_written(self):
|
||||
"""
|
||||
1. Guest writes
|
||||
@ -125,7 +131,7 @@ class TestBackup(iotests.QMPTestCase):
|
||||
self.assert_qmp(result, 'return', '')
|
||||
|
||||
# Check that data is written to temporary image
|
||||
self.assertGreater(get_actual_size(self.vm, 'temp'), size)
|
||||
self.assertEqual(self.get_bitmap_count(), size)
|
||||
|
||||
self.do_backup()
|
||||
|
||||
@ -138,13 +144,18 @@ class TestBackup(iotests.QMPTestCase):
|
||||
"""
|
||||
self.do_backup()
|
||||
|
||||
# backup job did discard operation and pollute the bitmap,
|
||||
# we have to clean the bitmap, to check next write
|
||||
self.assertEqual(self.get_bitmap_count(), size)
|
||||
self.vm.cmd('block-dirty-bitmap-clear', self.bitmap)
|
||||
|
||||
# Try trigger copy-before-write operation
|
||||
result = self.vm.hmp_qemu_io('cbw', 'write 0 1M')
|
||||
self.assert_qmp(result, 'return', '')
|
||||
|
||||
# Check that data is not written to temporary image, as region
|
||||
# is discarded from copy-before-write process
|
||||
self.assertLess(get_actual_size(self.vm, 'temp'), 512 * 1024)
|
||||
self.assertEqual(self.get_bitmap_count(), 0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Loading…
Reference in New Issue
Block a user