mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
bitmaps patches for 2021-02-12
- add 'transform' member to manipulate bitmaps across migration - work towards better error handling during bdrv_open -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEccLMIrHEYCkn0vOqp6FrSiUnQ2oFAmAnDQsACgkQp6FrSiUn Q2qc5Qf/SKVdpX4j7OnHF6sBuf/8LVWz4KazSqEU0ohazBJmafgJpH2EA5pXMXR4 frZDWeanGmhj1MjMkta/++uvEBU/TMpW2z98mZvjErteXdnRQAlII/hOCI+QZJvg viQ5t1EyrkyXzUePOjs+AwqA5KHWbCKt6QqyItQ78HvI23sw/fuvHj0G67KbVzXZ VcSrVr0J7PXnZV/hWfg+C+Nn9Ro9tsVdn79awLYVQ7/SDro3hzylpcHMQaHMK2oe mX4D2kNq7s21E27Zb6vlknUhQPkMdETk0gfEbpn7sTVMEc58GRLC7Tqfx7l0JIFK 5izVyA5vndKVxDGYPkbDK6VL2uDg4A== =+Epy -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/ericb/tags/pull-bitmaps-2021-02-12' into staging bitmaps patches for 2021-02-12 - add 'transform' member to manipulate bitmaps across migration - work towards better error handling during bdrv_open # gpg: Signature made Fri 12 Feb 2021 23:19:39 GMT # gpg: using RSA key 71C2CC22B1C4602927D2F3AAA7A16B4A2527436A # gpg: Good signature from "Eric Blake <eblake@redhat.com>" [full] # gpg: aka "Eric Blake (Free Software Programmer) <ebb9@byu.net>" [full] # gpg: aka "[jpeg image of size 6874]" [full] # Primary key fingerprint: 71C2 CC22 B1C4 6029 27D2 F3AA A7A1 6B4A 2527 436A * remotes/ericb/tags/pull-bitmaps-2021-02-12: block: use return status of bdrv_append() block: return status from bdrv_append and friends qemu-iotests: 300: Add test case for modifying persistence of bitmap migration: dirty-bitmap: Allow control of bitmap persistence migration: dirty-bitmap: Use struct for alias map inner members Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
392b9a74b9
11 changed files with 226 additions and 75 deletions
|
@ -600,6 +600,99 @@ class TestCrossAliasMigration(TestDirtyBitmapMigration):
|
|||
self.verify_dest_has_all_bitmaps()
|
||||
self.verify_dest_error(None)
|
||||
|
||||
class TestAliasTransformMigration(TestDirtyBitmapMigration):
|
||||
"""
|
||||
Tests the 'transform' option which modifies bitmap persistence on migration.
|
||||
"""
|
||||
|
||||
src_node_name = 'node-a'
|
||||
dst_node_name = 'node-b'
|
||||
src_bmap_name = 'bmap-a'
|
||||
dst_bmap_name = 'bmap-b'
|
||||
|
||||
def setUp(self) -> None:
|
||||
TestDirtyBitmapMigration.setUp(self)
|
||||
|
||||
# Now create another block device and let both have two bitmaps each
|
||||
result = self.vm_a.qmp('blockdev-add',
|
||||
node_name='node-b', driver='null-co',
|
||||
read_zeroes=False)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm_b.qmp('blockdev-add',
|
||||
node_name='node-a', driver='null-co',
|
||||
read_zeroes=False)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
bmaps_to_add = (('node-a', 'bmap-b'),
|
||||
('node-b', 'bmap-a'),
|
||||
('node-b', 'bmap-b'))
|
||||
|
||||
for (node, bmap) in bmaps_to_add:
|
||||
result = self.vm_a.qmp('block-dirty-bitmap-add',
|
||||
node=node, name=bmap)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
@staticmethod
|
||||
def transform_mapping() -> BlockBitmapMapping:
|
||||
return [
|
||||
{
|
||||
'node-name': 'node-a',
|
||||
'alias': 'node-a',
|
||||
'bitmaps': [
|
||||
{
|
||||
'name': 'bmap-a',
|
||||
'alias': 'bmap-a',
|
||||
'transform':
|
||||
{
|
||||
'persistent': True
|
||||
}
|
||||
},
|
||||
{
|
||||
'name': 'bmap-b',
|
||||
'alias': 'bmap-b'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'node-name': 'node-b',
|
||||
'alias': 'node-b',
|
||||
'bitmaps': [
|
||||
{
|
||||
'name': 'bmap-a',
|
||||
'alias': 'bmap-a'
|
||||
},
|
||||
{
|
||||
'name': 'bmap-b',
|
||||
'alias': 'bmap-b'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
def verify_dest_bitmap_state(self) -> None:
|
||||
bitmaps = self.vm_b.query_bitmaps()
|
||||
|
||||
for node in bitmaps:
|
||||
bitmaps[node] = sorted(((bmap['name'], bmap['persistent']) for bmap in bitmaps[node]))
|
||||
|
||||
self.assertEqual(bitmaps,
|
||||
{'node-a': [('bmap-a', True), ('bmap-b', False)],
|
||||
'node-b': [('bmap-a', False), ('bmap-b', False)]})
|
||||
|
||||
def test_transform_on_src(self) -> None:
|
||||
self.set_mapping(self.vm_a, self.transform_mapping())
|
||||
|
||||
self.migrate()
|
||||
self.verify_dest_bitmap_state()
|
||||
self.verify_dest_error(None)
|
||||
|
||||
def test_transform_on_dst(self) -> None:
|
||||
self.set_mapping(self.vm_b, self.transform_mapping())
|
||||
|
||||
self.migrate()
|
||||
self.verify_dest_bitmap_state()
|
||||
self.verify_dest_error(None)
|
||||
|
||||
if __name__ == '__main__':
|
||||
iotests.main(supported_protocols=['file'])
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.....................................
|
||||
.......................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 37 tests
|
||||
Ran 39 tests
|
||||
|
||||
OK
|
||||
|
|
|
@ -101,7 +101,7 @@ static BlockDriverState *pass_through_node(const char *name)
|
|||
*/
|
||||
static void test_update_perm_tree(void)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
int ret;
|
||||
|
||||
BlockBackend *root = blk_new(qemu_get_aio_context(),
|
||||
BLK_PERM_WRITE | BLK_PERM_CONSISTENT_READ,
|
||||
|
@ -114,8 +114,8 @@ static void test_update_perm_tree(void)
|
|||
bdrv_attach_child(filter, bs, "child", &child_of_bds,
|
||||
BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, &error_abort);
|
||||
|
||||
bdrv_append(filter, bs, &local_err);
|
||||
error_free_or_abort(&local_err);
|
||||
ret = bdrv_append(filter, bs, NULL);
|
||||
g_assert_cmpint(ret, <, 0);
|
||||
|
||||
blk_unref(root);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue