Commit d20ba603 authored by Alberto Garcia's avatar Alberto Garcia Committed by Kevin Wolf
Browse files

block: test block-stream with a base node that is used by block-commit



The base node of a block-stream operation indicates the first image
from the backing chain starting from which no data is copied to the
top node.

The block-stream job allows others to use that base image, so a second
block-stream job could be writing to it at the same time. An important
restriction is that the base image must not disappear while the stream
job is ongoing. stream_start() freezes the backing chain from top to
base with that purpose but it does it too late in the code so there is
a race condition there.

This bug was fixed in the previous commit, and this patch contains an
iotest for this scenario.

Signed-off-by: default avatarAlberto Garcia <berto@igalia.com>
Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 20509c4b
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -314,6 +314,23 @@ class TestParallelOps(iotests.QMPTestCase):

        self.wait_until_completed(drive='commit-drive0')

    # In this case the base node of the stream job is the same as the
    # top node of commit job. Since block-commit removes the top node
    # when it finishes, this is not allowed.
    def test_overlapping_4(self):
        self.assert_no_active_block_jobs()

        # Commit from node2 into node0
        result = self.vm.qmp('block-commit', device='drive0', top=self.imgs[2], base=self.imgs[0])
        self.assert_qmp(result, 'return', {})

        # Stream from node2 into node4
        result = self.vm.qmp('block-stream', device='node4', base_node='node2', job_id='node4')
        self.assert_qmp(result, 'error/class', 'GenericError')

        self.wait_until_completed()
        self.assert_no_active_block_jobs()

    # Test a block-stream and a block-commit job in parallel
    # Here the stream job is supposed to finish quickly in order to reproduce
    # the scenario that triggers the bug fixed in 3d5d319e1221 and 1a63a907507
+2 −2
Original line number Diff line number Diff line
........................
.........................
----------------------------------------------------------------------
Ran 24 tests
Ran 25 tests

OK