Commit e80a4150 authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by Eric Blake
Browse files

qemu-iotests/199: increase postcopy period



The test wants to force a bitmap postcopy. Still, the resulting
postcopy period is very small. Let's increase it by adding more
bitmaps to migrate. Also, test disabled bitmaps migration.

Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: default avatarAndrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Tested-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <20200727194236.19551-7-vsementsov@virtuozzo.com>
Signed-off-by: default avatarEric Blake <eblake@redhat.com>
parent 31e38279
Loading
Loading
Loading
Loading
+39 −19
Original line number Diff line number Diff line
@@ -103,29 +103,45 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):

    def test_postcopy(self):
        granularity = 512
        nb_bitmaps = 15

        for i in range(nb_bitmaps):
            result = self.vm_a.qmp('block-dirty-bitmap-add', node='drive0',
                               name='bitmap', granularity=granularity)
                                   name='bitmap{}'.format(i),
                                   granularity=granularity)
            self.assert_qmp(result, 'return', {})

        result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
                               node='drive0', name='bitmap')
                               node='drive0', name='bitmap0')
        empty_sha256 = result['return']['sha256']

        apply_discards(self.vm_a, discards1 + discards2)
        apply_discards(self.vm_a, discards1)

        result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
                               node='drive0', name='bitmap')
        sha256 = result['return']['sha256']
                               node='drive0', name='bitmap0')
        discards1_sha256 = result['return']['sha256']

        # Check, that updating the bitmap by discards works
        assert sha256 != empty_sha256
        assert discards1_sha256 != empty_sha256

        result = self.vm_a.qmp('block-dirty-bitmap-clear', node='drive0',
                               name='bitmap')
        # We want to calculate resulting sha256. Do it in bitmap0, so, disable
        # other bitmaps
        for i in range(1, nb_bitmaps):
            result = self.vm_a.qmp('block-dirty-bitmap-disable', node='drive0',
                                   name='bitmap{}'.format(i))
            self.assert_qmp(result, 'return', {})

        apply_discards(self.vm_a, discards1)
        apply_discards(self.vm_a, discards2)

        result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
                               node='drive0', name='bitmap0')
        all_discards_sha256 = result['return']['sha256']

        # Now, enable some bitmaps, to be updated during migration
        for i in range(2, nb_bitmaps, 2):
            result = self.vm_a.qmp('block-dirty-bitmap-enable', node='drive0',
                                   name='bitmap{}'.format(i))
            self.assert_qmp(result, 'return', {})

        caps = [{'capability': 'dirty-bitmaps', 'state': True},
                {'capability': 'events', 'state': True}]
@@ -145,6 +161,7 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
        event_resume = self.vm_b.event_wait('RESUME')
        self.vm_b_events.append(event_resume)

        # enabled bitmaps should be updated
        apply_discards(self.vm_b, discards2)

        match = {'data': {'status': 'completed'}}
@@ -158,7 +175,7 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
        downtime = event_dist(event_stop, event_resume)
        postcopy_time = event_dist(event_resume, event_complete)

        # TODO: assert downtime * 10 < postcopy_time
        assert downtime * 10 < postcopy_time
        if debug:
            print('downtime:', downtime)
            print('postcopy_time:', postcopy_time)
@@ -166,11 +183,14 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
        # Assert that bitmap migration is finished (check that successor bitmap
        # is removed)
        result = self.vm_b.qmp('query-block')
        assert len(result['return'][0]['dirty-bitmaps']) == 1
        assert len(result['return'][0]['dirty-bitmaps']) == nb_bitmaps

        # Check content of migrated (and updated by new writes) bitmap
        # Check content of migrated bitmaps. Still, don't waste time checking
        # every bitmap
        for i in range(0, nb_bitmaps, 5):
            result = self.vm_b.qmp('x-debug-block-dirty-bitmap-sha256',
                               node='drive0', name='bitmap')
                                   node='drive0', name='bitmap{}'.format(i))
            sha256 = discards1_sha256 if i % 2 else all_discards_sha256
            self.assert_qmp(result, 'return/sha256', sha256)