2020-12-28 16:08:41 +01:00
|
|
|
# -*- Mode: Python -*-
|
|
|
|
# vim: filetype=python
|
|
|
|
#
|
|
|
|
|
|
|
|
##
|
|
|
|
# = Yank feature
|
|
|
|
##
|
|
|
|
|
|
|
|
##
|
|
|
|
# @YankInstanceType:
|
|
|
|
#
|
2023-04-28 12:54:29 +02:00
|
|
|
# An enumeration of yank instance types. See @YankInstance for more
|
2020-12-28 16:08:41 +01:00
|
|
|
# information.
|
|
|
|
#
|
|
|
|
# Since: 6.0
|
|
|
|
##
|
|
|
|
{ 'enum': 'YankInstanceType',
|
|
|
|
'data': [ 'block-node', 'chardev', 'migration' ] }
|
|
|
|
|
|
|
|
##
|
|
|
|
# @YankInstanceBlockNode:
|
|
|
|
#
|
2023-04-28 12:54:29 +02:00
|
|
|
# Specifies which block graph node to yank. See @YankInstance for
|
|
|
|
# more information.
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
|
|
|
# @node-name: the name of the block graph node
|
|
|
|
#
|
|
|
|
# Since: 6.0
|
|
|
|
##
|
|
|
|
{ 'struct': 'YankInstanceBlockNode',
|
|
|
|
'data': { 'node-name': 'str' } }
|
|
|
|
|
|
|
|
##
|
|
|
|
# @YankInstanceChardev:
|
|
|
|
#
|
2023-04-28 12:54:29 +02:00
|
|
|
# Specifies which character device to yank. See @YankInstance for
|
|
|
|
# more information.
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
|
|
|
# @id: the chardev's ID
|
|
|
|
#
|
|
|
|
# Since: 6.0
|
|
|
|
##
|
|
|
|
{ 'struct': 'YankInstanceChardev',
|
|
|
|
'data': { 'id': 'str' } }
|
|
|
|
|
|
|
|
##
|
|
|
|
# @YankInstance:
|
|
|
|
#
|
2023-04-28 12:54:29 +02:00
|
|
|
# A yank instance can be yanked with the @yank qmp command to recover
|
|
|
|
# from a hanging QEMU.
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
2024-02-05 08:47:09 +01:00
|
|
|
# @type: yank instance type
|
|
|
|
#
|
2020-12-28 16:08:41 +01:00
|
|
|
# Currently implemented yank instances:
|
2023-04-25 08:42:16 +02:00
|
|
|
#
|
2023-04-28 12:54:29 +02:00
|
|
|
# - nbd block device: Yanking it will shut down the connection to the
|
|
|
|
# nbd server without attempting to reconnect.
|
|
|
|
# - socket chardev: Yanking it will shut down the connected socket.
|
|
|
|
# - migration: Yanking it will shut down all migration connections.
|
|
|
|
# Unlike @migrate_cancel, it will not notify the migration process,
|
|
|
|
# so migration will go into @failed state, instead of @cancelled
|
|
|
|
# state. @yank should be used to recover from hangs.
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
|
|
|
# Since: 6.0
|
|
|
|
##
|
|
|
|
{ 'union': 'YankInstance',
|
|
|
|
'base': { 'type': 'YankInstanceType' },
|
|
|
|
'discriminator': 'type',
|
|
|
|
'data': {
|
|
|
|
'block-node': 'YankInstanceBlockNode',
|
|
|
|
'chardev': 'YankInstanceChardev' } }
|
|
|
|
|
|
|
|
##
|
|
|
|
# @yank:
|
|
|
|
#
|
2023-04-28 12:54:29 +02:00
|
|
|
# Try to recover from hanging QEMU by yanking the specified instances.
|
|
|
|
# See @YankInstance for more information.
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
2024-02-05 08:47:04 +01:00
|
|
|
# @instances: the instances to be yanked
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
2024-02-27 12:39:12 +01:00
|
|
|
# Errors:
|
2024-02-27 12:39:15 +01:00
|
|
|
# - If any of the YankInstances doesn't exist, DeviceNotFound
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
2024-02-16 15:58:34 +01:00
|
|
|
# -> { "execute": "yank",
|
|
|
|
# "arguments": {
|
|
|
|
# "instances": [
|
|
|
|
# { "type": "block-node",
|
|
|
|
# "node-name": "nbd0" }
|
|
|
|
# ] } }
|
|
|
|
# <- { "return": {} }
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
|
|
|
# Since: 6.0
|
|
|
|
##
|
|
|
|
{ 'command': 'yank',
|
|
|
|
'data': { 'instances': ['YankInstance'] },
|
|
|
|
'allow-oob': true }
|
|
|
|
|
|
|
|
##
|
|
|
|
# @query-yank:
|
|
|
|
#
|
2023-04-28 12:54:29 +02:00
|
|
|
# Query yank instances. See @YankInstance for more information.
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
|
|
|
# Returns: list of @YankInstance
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
2024-02-16 15:58:34 +01:00
|
|
|
# -> { "execute": "query-yank" }
|
|
|
|
# <- { "return": [
|
|
|
|
# { "type": "block-node",
|
|
|
|
# "node-name": "nbd0" }
|
|
|
|
# ] }
|
2020-12-28 16:08:41 +01:00
|
|
|
#
|
|
|
|
# Since: 6.0
|
|
|
|
##
|
|
|
|
{ 'command': 'query-yank',
|
|
|
|
'returns': ['YankInstance'],
|
|
|
|
'allow-oob': true }
|