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 6e0abc251dd4f8eba1f53656dfede12e5840e83b). Signed-off-by: Max Reitz <mreitz@redhat.com> Message-id: 20171110224302.14424-5-mreitz@redhat.com Reviewed-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
82fcf66e05
commit
34ce111141
@ -2508,7 +2508,7 @@ out:
|
|||||||
aio_context_release(aio_context);
|
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);
|
blockdev_remove_medium(false, NULL, true, id, errp);
|
||||||
}
|
}
|
||||||
@ -2586,8 +2586,8 @@ static void blockdev_insert_medium(bool has_device, const char *device,
|
|||||||
qmp_blockdev_insert_anon_medium(blk, bs, errp);
|
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)
|
Error **errp)
|
||||||
{
|
{
|
||||||
blockdev_insert_medium(false, NULL, true, id, node_name, errp);
|
blockdev_insert_medium(false, NULL, true, id, node_name, errp);
|
||||||
}
|
}
|
||||||
|
@ -3403,7 +3403,7 @@
|
|||||||
'*id': 'str' } }
|
'*id': 'str' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @x-blockdev-remove-medium:
|
# @blockdev-remove-medium:
|
||||||
#
|
#
|
||||||
# Removes a medium (a block driver state tree) from a block device. That block
|
# 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
|
# 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.
|
# 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)
|
# @id: The name or QOM path of the guest device
|
||||||
#
|
#
|
||||||
# Note: This command is still a work in progress and is considered experimental.
|
# Since: 2.12
|
||||||
# Stay away from it unless you want to help with its development.
|
|
||||||
#
|
|
||||||
# Since: 2.5
|
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
#
|
#
|
||||||
# -> { "execute": "x-blockdev-remove-medium",
|
# -> { "execute": "blockdev-remove-medium",
|
||||||
# "arguments": { "id": "ide0-1-0" } }
|
# "arguments": { "id": "ide0-1-0" } }
|
||||||
#
|
#
|
||||||
# <- { "error": { "class": "GenericError",
|
# <- { "error": { "class": "GenericError",
|
||||||
@ -3438,30 +3435,27 @@
|
|||||||
#
|
#
|
||||||
# <- { "return": {} }
|
# <- { "return": {} }
|
||||||
#
|
#
|
||||||
# -> { "execute": "x-blockdev-remove-medium",
|
# -> { "execute": "blockdev-remove-medium",
|
||||||
# "arguments": { "id": "ide0-1-0" } }
|
# "arguments": { "id": "ide0-1-0" } }
|
||||||
#
|
#
|
||||||
# <- { "return": {} }
|
# <- { "return": {} }
|
||||||
#
|
#
|
||||||
##
|
##
|
||||||
{ 'command': 'x-blockdev-remove-medium',
|
{ 'command': 'blockdev-remove-medium',
|
||||||
'data': { 'id': 'str' } }
|
'data': { 'id': 'str' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @x-blockdev-insert-medium:
|
# @blockdev-insert-medium:
|
||||||
#
|
#
|
||||||
# Inserts a medium (a block driver state tree) into a block device. That block
|
# 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's tray must currently be open (unless there is no attached guest
|
||||||
# device) and there must be no medium inserted already.
|
# 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
|
# @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.
|
# Since: 2.12
|
||||||
# Stay away from it unless you want to help with its development.
|
|
||||||
#
|
|
||||||
# Since: 2.5
|
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
#
|
#
|
||||||
@ -3473,14 +3467,14 @@
|
|||||||
# "filename": "fedora.iso" } } }
|
# "filename": "fedora.iso" } } }
|
||||||
# <- { "return": {} }
|
# <- { "return": {} }
|
||||||
#
|
#
|
||||||
# -> { "execute": "x-blockdev-insert-medium",
|
# -> { "execute": "blockdev-insert-medium",
|
||||||
# "arguments": { "id": "ide0-1-0",
|
# "arguments": { "id": "ide0-1-0",
|
||||||
# "node-name": "node0" } }
|
# "node-name": "node0" } }
|
||||||
#
|
#
|
||||||
# <- { "return": {} }
|
# <- { "return": {} }
|
||||||
#
|
#
|
||||||
##
|
##
|
||||||
{ 'command': 'x-blockdev-insert-medium',
|
{ 'command': 'blockdev-insert-medium',
|
||||||
'data': { 'id': 'str',
|
'data': { 'id': 'str',
|
||||||
'node-name': 'str'} }
|
'node-name': 'str'} }
|
||||||
|
|
||||||
@ -3509,8 +3503,8 @@
|
|||||||
#
|
#
|
||||||
# Changes the medium inserted into a block device by ejecting the current medium
|
# 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
|
# and loading a new image file which is inserted as the new medium (this command
|
||||||
# combines blockdev-open-tray, x-blockdev-remove-medium,
|
# combines blockdev-open-tray, blockdev-remove-medium, blockdev-insert-medium
|
||||||
# x-blockdev-insert-medium and blockdev-close-tray).
|
# and blockdev-close-tray).
|
||||||
#
|
#
|
||||||
# @device: Block device name (deprecated, use @id instead)
|
# @device: Block device name (deprecated, use @id instead)
|
||||||
#
|
#
|
||||||
|
@ -1596,7 +1596,7 @@ static void test_atapi_tray(void)
|
|||||||
rsp = qmp_receive();
|
rsp = qmp_receive();
|
||||||
QDECREF(rsp);
|
QDECREF(rsp);
|
||||||
|
|
||||||
qmp_discard_response("{'execute': 'x-blockdev-remove-medium', "
|
qmp_discard_response("{'execute': 'blockdev-remove-medium', "
|
||||||
"'arguments': {'id': 'cd0'}}");
|
"'arguments': {'id': 'cd0'}}");
|
||||||
|
|
||||||
/* Test the tray without a medium */
|
/* Test the tray without a medium */
|
||||||
@ -1612,7 +1612,7 @@ static void test_atapi_tray(void)
|
|||||||
"'driver': 'raw', "
|
"'driver': 'raw', "
|
||||||
"'file': { 'driver': 'file', "
|
"'file': { 'driver': 'file', "
|
||||||
"'filename': %s }}}", iso);
|
"'filename': %s }}}", iso);
|
||||||
qmp_discard_response("{'execute': 'x-blockdev-insert-medium',"
|
qmp_discard_response("{'execute': 'blockdev-insert-medium',"
|
||||||
"'arguments': { 'id': 'cd0', "
|
"'arguments': { 'id': 'cd0', "
|
||||||
"'node-name': 'node0' }}");
|
"'node-name': 'node0' }}");
|
||||||
|
|
||||||
|
@ -348,9 +348,9 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
|
|||||||
# Now eject cd0 and insert cd1
|
# Now eject cd0 and insert cd1
|
||||||
result = self.vm.qmp("blockdev-open-tray", id='dev0')
|
result = self.vm.qmp("blockdev-open-tray", id='dev0')
|
||||||
self.assert_qmp(result, 'return', {})
|
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', {})
|
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', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
# Check that the I/O limits are still the same
|
# 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)
|
self.assert_qmp(result, 'return[0]/inserted/bps', 50)
|
||||||
|
|
||||||
# Eject cd1
|
# 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', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
# Check that we can't set limits if the device has no medium
|
# Check that we can't set limits if the device has no medium
|
||||||
|
@ -233,7 +233,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
|||||||
else:
|
else:
|
||||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
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)
|
id=self.device_name)
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
|||||||
self.assert_qmp(result, 'return[0]/tray_open', True)
|
self.assert_qmp(result, 'return[0]/tray_open', True)
|
||||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
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')
|
id=self.device_name, node_name='new')
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
@ -271,7 +271,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
|||||||
if not self.has_real_tray:
|
if not self.has_real_tray:
|
||||||
return
|
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')
|
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||||
|
|
||||||
def test_insert_on_closed(self):
|
def test_insert_on_closed(self):
|
||||||
@ -285,7 +285,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
|||||||
'driver': 'file'})
|
'driver': 'file'})
|
||||||
self.assert_qmp(result, 'return', {})
|
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')
|
node_name='new')
|
||||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||||
|
|
||||||
@ -320,7 +320,7 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):
|
|||||||
|
|
||||||
self.wait_for_open()
|
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')
|
node_name='new')
|
||||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):
|
|||||||
|
|
||||||
self.wait_for_open()
|
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
|
# Should be a no-op
|
||||||
self.assert_qmp(result, 'return', {})
|
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/ro', False)
|
||||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
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', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
result = self.vm.qmp('query-block')
|
result = self.vm.qmp('query-block')
|
||||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
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')
|
node_name='new')
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
@ -642,7 +642,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
|
|||||||
|
|
||||||
# For device-less BBs, calling blockdev-open-tray or blockdev-close-tray
|
# For device-less BBs, calling blockdev-open-tray or blockdev-close-tray
|
||||||
# is not necessary
|
# 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', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
result = self.vm.qmp('query-block')
|
result = self.vm.qmp('query-block')
|
||||||
@ -655,7 +655,7 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
|
|||||||
'driver': 'file'})
|
'driver': 'file'})
|
||||||
self.assert_qmp(result, 'return', {})
|
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')
|
node_name='node0')
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
|||||||
# Insert a BlockDriverState
|
# Insert a BlockDriverState
|
||||||
def insertDrive(self, device, node):
|
def insertDrive(self, device, node):
|
||||||
self.checkBlockDriverState(node)
|
self.checkBlockDriverState(node)
|
||||||
result = self.vm.qmp('x-blockdev-insert-medium',
|
result = self.vm.qmp('blockdev-insert-medium',
|
||||||
id = device, node_name = node)
|
id = device, node_name = node)
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
self.checkBlockDriverState(node)
|
self.checkBlockDriverState(node)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user