xref: /qemu/qapi/yank.json (revision c1101028)
150186051SLukas Straub# -*- Mode: Python -*-
250186051SLukas Straub# vim: filetype=python
350186051SLukas Straub#
450186051SLukas Straub
550186051SLukas Straub##
650186051SLukas Straub# = Yank feature
750186051SLukas Straub##
850186051SLukas Straub
950186051SLukas Straub##
1050186051SLukas Straub# @YankInstanceType:
1150186051SLukas Straub#
1250186051SLukas Straub# An enumeration of yank instance types. See @YankInstance for more
1350186051SLukas Straub# information.
1450186051SLukas Straub#
1550186051SLukas Straub# Since: 6.0
1650186051SLukas Straub##
1750186051SLukas Straub{ 'enum': 'YankInstanceType',
1850186051SLukas Straub  'data': [ 'block-node', 'chardev', 'migration' ] }
1950186051SLukas Straub
2050186051SLukas Straub##
2150186051SLukas Straub# @YankInstanceBlockNode:
2250186051SLukas Straub#
2350186051SLukas Straub# Specifies which block graph node to yank. See @YankInstance for more
2450186051SLukas Straub# information.
2550186051SLukas Straub#
2650186051SLukas Straub# @node-name: the name of the block graph node
2750186051SLukas Straub#
2850186051SLukas Straub# Since: 6.0
2950186051SLukas Straub##
3050186051SLukas Straub{ 'struct': 'YankInstanceBlockNode',
3150186051SLukas Straub  'data': { 'node-name': 'str' } }
3250186051SLukas Straub
3350186051SLukas Straub##
3450186051SLukas Straub# @YankInstanceChardev:
3550186051SLukas Straub#
3650186051SLukas Straub# Specifies which character device to yank. See @YankInstance for more
3750186051SLukas Straub# information.
3850186051SLukas Straub#
3950186051SLukas Straub# @id: the chardev's ID
4050186051SLukas Straub#
4150186051SLukas Straub# Since: 6.0
4250186051SLukas Straub##
4350186051SLukas Straub{ 'struct': 'YankInstanceChardev',
4450186051SLukas Straub  'data': { 'id': 'str' } }
4550186051SLukas Straub
4650186051SLukas Straub##
4750186051SLukas Straub# @YankInstance:
4850186051SLukas Straub#
4950186051SLukas Straub# A yank instance can be yanked with the @yank qmp command to recover from a
5050186051SLukas Straub# hanging QEMU.
5150186051SLukas Straub#
5250186051SLukas Straub# Currently implemented yank instances:
53c1101028SMarkus Armbruster#
5450186051SLukas Straub# - nbd block device:
5550186051SLukas Straub#   Yanking it will shut down the connection to the nbd server without
5650186051SLukas Straub#   attempting to reconnect.
5750186051SLukas Straub# - socket chardev:
5850186051SLukas Straub#   Yanking it will shut down the connected socket.
5950186051SLukas Straub# - migration:
6050186051SLukas Straub#   Yanking it will shut down all migration connections. Unlike
6150186051SLukas Straub#   @migrate_cancel, it will not notify the migration process, so migration
6250186051SLukas Straub#   will go into @failed state, instead of @cancelled state. @yank should be
6350186051SLukas Straub#   used to recover from hangs.
6450186051SLukas Straub#
6550186051SLukas Straub# Since: 6.0
6650186051SLukas Straub##
6750186051SLukas Straub{ 'union': 'YankInstance',
6850186051SLukas Straub  'base': { 'type': 'YankInstanceType' },
6950186051SLukas Straub  'discriminator': 'type',
7050186051SLukas Straub  'data': {
7150186051SLukas Straub      'block-node': 'YankInstanceBlockNode',
7250186051SLukas Straub      'chardev': 'YankInstanceChardev' } }
7350186051SLukas Straub
7450186051SLukas Straub##
7550186051SLukas Straub# @yank:
7650186051SLukas Straub#
7750186051SLukas Straub# Try to recover from hanging QEMU by yanking the specified instances. See
7850186051SLukas Straub# @YankInstance for more information.
7950186051SLukas Straub#
8050186051SLukas Straub# Takes a list of @YankInstance as argument.
8150186051SLukas Straub#
8250186051SLukas Straub# Returns: - Nothing on success
8350186051SLukas Straub#          - @DeviceNotFound error, if any of the YankInstances doesn't exist
8450186051SLukas Straub#
8550186051SLukas Straub# Example:
8650186051SLukas Straub#
8750186051SLukas Straub# -> { "execute": "yank",
8850186051SLukas Straub#      "arguments": {
8950186051SLukas Straub#          "instances": [
9050186051SLukas Straub#               { "type": "block-node",
9150186051SLukas Straub#                 "node-name": "nbd0" }
9250186051SLukas Straub#          ] } }
9350186051SLukas Straub# <- { "return": {} }
9450186051SLukas Straub#
9550186051SLukas Straub# Since: 6.0
9650186051SLukas Straub##
9750186051SLukas Straub{ 'command': 'yank',
9850186051SLukas Straub  'data': { 'instances': ['YankInstance'] },
9950186051SLukas Straub  'allow-oob': true }
10050186051SLukas Straub
10150186051SLukas Straub##
10250186051SLukas Straub# @query-yank:
10350186051SLukas Straub#
10450186051SLukas Straub# Query yank instances. See @YankInstance for more information.
10550186051SLukas Straub#
10650186051SLukas Straub# Returns: list of @YankInstance
10750186051SLukas Straub#
10850186051SLukas Straub# Example:
10950186051SLukas Straub#
11050186051SLukas Straub# -> { "execute": "query-yank" }
11150186051SLukas Straub# <- { "return": [
11250186051SLukas Straub#          { "type": "block-node",
11350186051SLukas Straub#            "node-name": "nbd0" }
11450186051SLukas Straub#      ] }
11550186051SLukas Straub#
11650186051SLukas Straub# Since: 6.0
11750186051SLukas Straub##
11850186051SLukas Straub{ 'command': 'query-yank',
11950186051SLukas Straub  'returns': ['YankInstance'],
12050186051SLukas Straub  'allow-oob': true }
121