qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

transaction.json (7759B)


      1 # -*- Mode: Python -*-
      2 # vim: filetype=python
      3 #
      4 
      5 ##
      6 # = Transactions
      7 ##
      8 
      9 { 'include': 'block-core.json' }
     10 
     11 ##
     12 # @Abort:
     13 #
     14 # This action can be used to test transaction failure.
     15 #
     16 # Since: 1.6
     17 ##
     18 { 'struct': 'Abort',
     19   'data': { } }
     20 
     21 ##
     22 # @ActionCompletionMode:
     23 #
     24 # An enumeration of Transactional completion modes.
     25 #
     26 # @individual: Do not attempt to cancel any other Actions if any Actions fail
     27 #              after the Transaction request succeeds. All Actions that
     28 #              can complete successfully will do so without waiting on others.
     29 #              This is the default.
     30 #
     31 # @grouped: If any Action fails after the Transaction succeeds, cancel all
     32 #           Actions. Actions do not complete until all Actions are ready to
     33 #           complete. May be rejected by Actions that do not support this
     34 #           completion mode.
     35 #
     36 # Since: 2.5
     37 ##
     38 { 'enum': 'ActionCompletionMode',
     39   'data': [ 'individual', 'grouped' ] }
     40 
     41 ##
     42 # @TransactionActionKind:
     43 #
     44 # @abort: Since 1.6
     45 # @block-dirty-bitmap-add: Since 2.5
     46 # @block-dirty-bitmap-remove: Since 4.2
     47 # @block-dirty-bitmap-clear: Since 2.5
     48 # @block-dirty-bitmap-enable: Since 4.0
     49 # @block-dirty-bitmap-disable: Since 4.0
     50 # @block-dirty-bitmap-merge: Since 4.0
     51 # @blockdev-backup: Since 2.3
     52 # @blockdev-snapshot: Since 2.5
     53 # @blockdev-snapshot-internal-sync: Since 1.7
     54 # @blockdev-snapshot-sync: since 1.1
     55 # @drive-backup: Since 1.6
     56 #
     57 # Features:
     58 # @deprecated: Member @drive-backup is deprecated.  Use member
     59 #              @blockdev-backup instead.
     60 #
     61 # Since: 1.1
     62 ##
     63 { 'enum': 'TransactionActionKind',
     64   'data': [ 'abort', 'block-dirty-bitmap-add', 'block-dirty-bitmap-remove',
     65             'block-dirty-bitmap-clear', 'block-dirty-bitmap-enable',
     66             'block-dirty-bitmap-disable', 'block-dirty-bitmap-merge',
     67             'blockdev-backup', 'blockdev-snapshot',
     68             'blockdev-snapshot-internal-sync', 'blockdev-snapshot-sync',
     69             { 'name': 'drive-backup', 'features': [ 'deprecated' ] } ] }
     70 
     71 ##
     72 # @AbortWrapper:
     73 #
     74 # Since: 1.6
     75 ##
     76 { 'struct': 'AbortWrapper',
     77   'data': { 'data': 'Abort' } }
     78 
     79 ##
     80 # @BlockDirtyBitmapAddWrapper:
     81 #
     82 # Since: 2.5
     83 ##
     84 { 'struct': 'BlockDirtyBitmapAddWrapper',
     85   'data': { 'data': 'BlockDirtyBitmapAdd' } }
     86 
     87 ##
     88 # @BlockDirtyBitmapWrapper:
     89 #
     90 # Since: 2.5
     91 ##
     92 { 'struct': 'BlockDirtyBitmapWrapper',
     93   'data': { 'data': 'BlockDirtyBitmap' } }
     94 
     95 ##
     96 # @BlockDirtyBitmapMergeWrapper:
     97 #
     98 # Since: 4.0
     99 ##
    100 { 'struct': 'BlockDirtyBitmapMergeWrapper',
    101   'data': { 'data': 'BlockDirtyBitmapMerge' } }
    102 
    103 ##
    104 # @BlockdevBackupWrapper:
    105 #
    106 # Since: 2.3
    107 ##
    108 { 'struct': 'BlockdevBackupWrapper',
    109   'data': { 'data': 'BlockdevBackup' } }
    110 
    111 ##
    112 # @BlockdevSnapshotWrapper:
    113 #
    114 # Since: 2.5
    115 ##
    116 { 'struct': 'BlockdevSnapshotWrapper',
    117   'data': { 'data': 'BlockdevSnapshot' } }
    118 
    119 ##
    120 # @BlockdevSnapshotInternalWrapper:
    121 #
    122 # Since: 1.7
    123 ##
    124 { 'struct': 'BlockdevSnapshotInternalWrapper',
    125   'data': { 'data': 'BlockdevSnapshotInternal' } }
    126 
    127 ##
    128 # @BlockdevSnapshotSyncWrapper:
    129 #
    130 # Since: 1.1
    131 ##
    132 { 'struct': 'BlockdevSnapshotSyncWrapper',
    133   'data': { 'data': 'BlockdevSnapshotSync' } }
    134 
    135 ##
    136 # @DriveBackupWrapper:
    137 #
    138 # Since: 1.6
    139 ##
    140 { 'struct': 'DriveBackupWrapper',
    141   'data': { 'data': 'DriveBackup' } }
    142 
    143 ##
    144 # @TransactionAction:
    145 #
    146 # A discriminated record of operations that can be performed with
    147 # @transaction.
    148 #
    149 # Since: 1.1
    150 ##
    151 { 'union': 'TransactionAction',
    152   'base': { 'type': 'TransactionActionKind' },
    153   'discriminator': 'type',
    154   'data': {
    155        'abort': 'AbortWrapper',
    156        'block-dirty-bitmap-add': 'BlockDirtyBitmapAddWrapper',
    157        'block-dirty-bitmap-remove': 'BlockDirtyBitmapWrapper',
    158        'block-dirty-bitmap-clear': 'BlockDirtyBitmapWrapper',
    159        'block-dirty-bitmap-enable': 'BlockDirtyBitmapWrapper',
    160        'block-dirty-bitmap-disable': 'BlockDirtyBitmapWrapper',
    161        'block-dirty-bitmap-merge': 'BlockDirtyBitmapMergeWrapper',
    162        'blockdev-backup': 'BlockdevBackupWrapper',
    163        'blockdev-snapshot': 'BlockdevSnapshotWrapper',
    164        'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternalWrapper',
    165        'blockdev-snapshot-sync': 'BlockdevSnapshotSyncWrapper',
    166        'drive-backup': 'DriveBackupWrapper'
    167    } }
    168 
    169 ##
    170 # @TransactionProperties:
    171 #
    172 # Optional arguments to modify the behavior of a Transaction.
    173 #
    174 # @completion-mode: Controls how jobs launched asynchronously by
    175 #                   Actions will complete or fail as a group.
    176 #                   See @ActionCompletionMode for details.
    177 #
    178 # Since: 2.5
    179 ##
    180 { 'struct': 'TransactionProperties',
    181   'data': {
    182        '*completion-mode': 'ActionCompletionMode'
    183   }
    184 }
    185 
    186 ##
    187 # @transaction:
    188 #
    189 # Executes a number of transactionable QMP commands atomically. If any
    190 # operation fails, then the entire set of actions will be abandoned and the
    191 # appropriate error returned.
    192 #
    193 # For external snapshots, the dictionary contains the device, the file to use for
    194 # the new snapshot, and the format.  The default format, if not specified, is
    195 # qcow2.
    196 #
    197 # Each new snapshot defaults to being created by QEMU (wiping any
    198 # contents if the file already exists), but it is also possible to reuse
    199 # an externally-created file.  In the latter case, you should ensure that
    200 # the new image file has the same contents as the current one; QEMU cannot
    201 # perform any meaningful check.  Typically this is achieved by using the
    202 # current image file as the backing file for the new image.
    203 #
    204 # On failure, the original disks pre-snapshot attempt will be used.
    205 #
    206 # For internal snapshots, the dictionary contains the device and the
    207 # snapshot's name.  If an internal snapshot matching name already exists,
    208 # the request will be rejected.  Only some image formats support it, for
    209 # example, qcow2, and rbd,
    210 #
    211 # On failure, qemu will try delete the newly created internal snapshot in the
    212 # transaction.  When an I/O error occurs during deletion, the user needs to fix
    213 # it later with qemu-img or other command.
    214 #
    215 # @actions: List of @TransactionAction;
    216 #           information needed for the respective operations.
    217 #
    218 # @properties: structure of additional options to control the
    219 #              execution of the transaction. See @TransactionProperties
    220 #              for additional detail.
    221 #
    222 # Returns: nothing on success
    223 #
    224 #          Errors depend on the operations of the transaction
    225 #
    226 # Note: The transaction aborts on the first failure.  Therefore, there will be
    227 #       information on only one failed operation returned in an error condition, and
    228 #       subsequent actions will not have been attempted.
    229 #
    230 # Since: 1.1
    231 #
    232 # Example:
    233 #
    234 # -> { "execute": "transaction",
    235 #      "arguments": { "actions": [
    236 #          { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd0",
    237 #                                      "snapshot-file": "/some/place/my-image",
    238 #                                      "format": "qcow2" } },
    239 #          { "type": "blockdev-snapshot-sync", "data" : { "node-name": "myfile",
    240 #                                      "snapshot-file": "/some/place/my-image2",
    241 #                                      "snapshot-node-name": "node3432",
    242 #                                      "mode": "existing",
    243 #                                      "format": "qcow2" } },
    244 #          { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd1",
    245 #                                      "snapshot-file": "/some/place/my-image2",
    246 #                                      "mode": "existing",
    247 #                                      "format": "qcow2" } },
    248 #          { "type": "blockdev-snapshot-internal-sync", "data" : {
    249 #                                      "device": "ide-hd2",
    250 #                                      "name": "snapshot0" } } ] } }
    251 # <- { "return": {} }
    252 #
    253 ##
    254 { 'command': 'transaction',
    255   'data': { 'actions': [ 'TransactionAction' ],
    256             '*properties': 'TransactionProperties'
    257           }
    258 }