Commit 34ce1111 authored by Max Reitz's avatar Max Reitz
Browse files

blockdev: Mark BD-{remove,insert}-medium stable



Now that iotest 093 test proves that the throttling configuration
survives a blockdev-remove-medium/blockdev-insert-medium pair, the
original reason for declaring these commands experimental is gone
(see commit 6e0abc25).

Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
Message-id: 20171110224302.14424-5-mreitz@redhat.com
Reviewed-by: default avatarAlberto Garcia <berto@igalia.com>
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
parent 82fcf66e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -2508,7 +2508,7 @@ out:
    aio_context_release(aio_context);
}

void qmp_x_blockdev_remove_medium(const char *id, Error **errp)
void qmp_blockdev_remove_medium(const char *id, Error **errp)
{
    blockdev_remove_medium(false, NULL, true, id, errp);
}
@@ -2586,7 +2586,7 @@ static void blockdev_insert_medium(bool has_device, const char *device,
    qmp_blockdev_insert_anon_medium(blk, bs, errp);
}

void qmp_x_blockdev_insert_medium(const char *id, const char *node_name,
void qmp_blockdev_insert_medium(const char *id, const char *node_name,
                                Error **errp)
{
    blockdev_insert_medium(false, NULL, true, id, node_name, errp);
+13 −19
Original line number Diff line number Diff line
@@ -3403,7 +3403,7 @@
            '*id': 'str' } }

##
# @x-blockdev-remove-medium:
# @blockdev-remove-medium:
#
# Removes a medium (a block driver state tree) from a block device. That block
# device's tray must currently be open (unless there is no attached guest
@@ -3411,16 +3411,13 @@
#
# If the tray is open and there is no medium inserted, this will be a no-op.
#
# @id:     The name or QOM path of the guest device (since: 2.8)
#
# Note: This command is still a work in progress and is considered experimental.
# Stay away from it unless you want to help with its development.
# @id:     The name or QOM path of the guest device
#
# Since: 2.5
# Since: 2.12
#
# Example:
#
# -> { "execute": "x-blockdev-remove-medium",
# -> { "execute": "blockdev-remove-medium",
#      "arguments": { "id": "ide0-1-0" } }
#
# <- { "error": { "class": "GenericError",
@@ -3438,30 +3435,27 @@
#
# <- { "return": {} }
#
# -> { "execute": "x-blockdev-remove-medium",
# -> { "execute": "blockdev-remove-medium",
#      "arguments": { "id": "ide0-1-0" } }
#
# <- { "return": {} }
#
##
{ 'command': 'x-blockdev-remove-medium',
{ 'command': 'blockdev-remove-medium',
  'data': { 'id': 'str' } }

##
# @x-blockdev-insert-medium:
# @blockdev-insert-medium:
#
# Inserts a medium (a block driver state tree) into a block device. That block
# device's tray must currently be open (unless there is no attached guest
# device) and there must be no medium inserted already.
#
# @id:        The name or QOM path of the guest device (since: 2.8)
# @id:        The name or QOM path of the guest device
#
# @node-name: name of a node in the block driver state graph
#
# Note: This command is still a work in progress and is considered experimental.
# Stay away from it unless you want to help with its development.
#
# Since: 2.5
# Since: 2.12
#
# Example:
#
@@ -3473,14 +3467,14 @@
#                    "filename": "fedora.iso" } } }
# <- { "return": {} }
#
# -> { "execute": "x-blockdev-insert-medium",
# -> { "execute": "blockdev-insert-medium",
#      "arguments": { "id": "ide0-1-0",
#                     "node-name": "node0" } }
#
# <- { "return": {} }
#
##
{ 'command': 'x-blockdev-insert-medium',
{ 'command': 'blockdev-insert-medium',
  'data': { 'id': 'str',
            'node-name': 'str'} }

@@ -3509,8 +3503,8 @@
#
# Changes the medium inserted into a block device by ejecting the current medium
# and loading a new image file which is inserted as the new medium (this command
# combines blockdev-open-tray, x-blockdev-remove-medium,
# x-blockdev-insert-medium and blockdev-close-tray).
# combines blockdev-open-tray, blockdev-remove-medium, blockdev-insert-medium
# and blockdev-close-tray).
#
# @device:          Block device name (deprecated, use @id instead)
#
+2 −2
Original line number Diff line number Diff line
@@ -1596,7 +1596,7 @@ static void test_atapi_tray(void)
    rsp = qmp_receive();
    QDECREF(rsp);

    qmp_discard_response("{'execute': 'x-blockdev-remove-medium', "
    qmp_discard_response("{'execute': 'blockdev-remove-medium', "
                         "'arguments': {'id': 'cd0'}}");

    /* Test the tray without a medium */
@@ -1612,7 +1612,7 @@ static void test_atapi_tray(void)
                                        "'driver': 'raw', "
                                        "'file': { 'driver': 'file', "
                                                  "'filename': %s }}}", iso);
    qmp_discard_response("{'execute': 'x-blockdev-insert-medium',"
    qmp_discard_response("{'execute': 'blockdev-insert-medium',"
                          "'arguments': { 'id': 'cd0', "
                                         "'node-name': 'node0' }}");

+3 −3
Original line number Diff line number Diff line
@@ -348,9 +348,9 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
        # Now eject cd0 and insert cd1
        result = self.vm.qmp("blockdev-open-tray", id='dev0')
        self.assert_qmp(result, 'return', {})
        result = self.vm.qmp("x-blockdev-remove-medium", id='dev0')
        result = self.vm.qmp("blockdev-remove-medium", id='dev0')
        self.assert_qmp(result, 'return', {})
        result = self.vm.qmp("x-blockdev-insert-medium", id='dev0', node_name='cd1')
        result = self.vm.qmp("blockdev-insert-medium", id='dev0', node_name='cd1')
        self.assert_qmp(result, 'return', {})

        # Check that the I/O limits are still the same
@@ -359,7 +359,7 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
        self.assert_qmp(result, 'return[0]/inserted/bps',   50)

        # Eject cd1
        result = self.vm.qmp("x-blockdev-remove-medium", id='dev0')
        result = self.vm.qmp("blockdev-remove-medium", id='dev0')
        self.assert_qmp(result, 'return', {})

        # Check that we can't set limits if the device has no medium
+10 −10
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
        else:
            self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)

        result = self.vm.qmp('x-blockdev-remove-medium',
        result = self.vm.qmp('blockdev-remove-medium',
                             id=self.device_name)
        self.assert_qmp(result, 'return', {})

@@ -242,7 +242,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
            self.assert_qmp(result, 'return[0]/tray_open', True)
        self.assert_qmp_absent(result, 'return[0]/inserted')

        result = self.vm.qmp('x-blockdev-insert-medium',
        result = self.vm.qmp('blockdev-insert-medium',
                             id=self.device_name, node_name='new')
        self.assert_qmp(result, 'return', {})

@@ -271,7 +271,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
        if not self.has_real_tray:
            return

        result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
        result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
        self.assert_qmp(result, 'error/class', 'GenericError')

    def test_insert_on_closed(self):
@@ -285,7 +285,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
                                   'driver': 'file'})
        self.assert_qmp(result, 'return', {})

        result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
        result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
                                                       node_name='new')
        self.assert_qmp(result, 'error/class', 'GenericError')

@@ -320,7 +320,7 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):

        self.wait_for_open()

        result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
        result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
                                                       node_name='new')
        self.assert_qmp(result, 'error/class', 'GenericError')

@@ -345,7 +345,7 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):

        self.wait_for_open()

        result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
        result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
        # Should be a no-op
        self.assert_qmp(result, 'return', {})

@@ -603,13 +603,13 @@ class TestChangeReadOnly(ChangeBaseClass):
        self.assert_qmp(result, 'return[0]/inserted/ro', False)
        self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)

        result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
        result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
        self.assert_qmp(result, 'return', {})

        result = self.vm.qmp('query-block')
        self.assert_qmp_absent(result, 'return[0]/inserted')

        result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
        result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
                                                       node_name='new')
        self.assert_qmp(result, 'return', {})

@@ -642,7 +642,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):

        # For device-less BBs, calling blockdev-open-tray or blockdev-close-tray
        # is not necessary
        result = self.vm.qmp('x-blockdev-remove-medium', id=self.device_name)
        result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
        self.assert_qmp(result, 'return', {})

        result = self.vm.qmp('query-block')
@@ -655,7 +655,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
                                   'driver': 'file'})
        self.assert_qmp(result, 'return', {})

        result = self.vm.qmp('x-blockdev-insert-medium', id=self.device_name,
        result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
                                                       node_name='node0')
        self.assert_qmp(result, 'return', {})

Loading