qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 10/16] qapi-schema: Collect transaction stuff


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH v2 10/16] qapi-schema: Collect transaction stuff in qapi/transaction.json
Date: Fri, 25 Aug 2017 11:16:35 +0000

On Thu, Aug 24, 2017 at 9:18 PM Markus Armbruster <address@hidden> wrote:

> Signed-off-by: Markus Armbruster <address@hidden>
>

Reviewed-by: Marc-André Lureau <address@hidden>

---
>  MAINTAINERS           |   1 +
>  Makefile              |   1 +
>  qapi-schema.json      | 151
> +----------------------------------------------
>  qapi/transaction.json | 158
> ++++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 161 insertions(+), 150 deletions(-)
>  create mode 100644 qapi/transaction.json
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index baa9859..8cebd79 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1231,6 +1231,7 @@ S: Supported
>  F: blockdev.c
>  F: block/qapi.c
>  F: qapi/block*.json
> +F: qapi/transaction.json
>  T: git git://repo.or.cz/qemu/armbru.git block-next
>
>  Dirty Bitmaps
> diff --git a/Makefile b/Makefile
> index 18cf670..ea6de37 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -419,6 +419,7 @@ qapi-modules = $(SRC_PATH)/qapi-schema.json
> $(SRC_PATH)/qapi/common.json \
>                 $(SRC_PATH)/qapi/run-state.json \
>                 $(SRC_PATH)/qapi/sockets.json \
>                 $(SRC_PATH)/qapi/trace.json \
> +               $(SRC_PATH)/qapi/transaction.json \
>                 $(SRC_PATH)/qapi/ui.json
>
>  qapi-types.c qapi-types.h :\
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 21f54ea..4108ef0 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -88,6 +88,7 @@
>  { 'include': 'qapi/rocker.json' }
>  { 'include': 'qapi/ui.json' }
>  { 'include': 'qapi/migration.json' }
> +{ 'include': 'qapi/transaction.json' }
>  { 'include': 'qapi/event.json' }
>  { 'include': 'qapi/trace.json' }
>  { 'include': 'qapi/introspect.json' }
> @@ -1097,156 +1098,6 @@
>  { 'command': 'balloon', 'data': {'value': 'int'} }
>
>  ##
> -# @Abort:
> -#
> -# This action can be used to test transaction failure.
> -#
> -# Since: 1.6
> -##
> -{ 'struct': 'Abort',
> -  'data': { } }
> -
> -##
> -# @ActionCompletionMode:
> -#
> -# An enumeration of Transactional completion modes.
> -#
> -# @individual: Do not attempt to cancel any other Actions if any Actions
> fail
> -#              after the Transaction request succeeds. All Actions that
> -#              can complete successfully will do so without waiting on
> others.
> -#              This is the default.
> -#
> -# @grouped: If any Action fails after the Transaction succeeds, cancel all
> -#           Actions. Actions do not complete until all Actions are ready
> to
> -#           complete. May be rejected by Actions that do not support this
> -#           completion mode.
> -#
> -# Since: 2.5
> -##
> -{ 'enum': 'ActionCompletionMode',
> -  'data': [ 'individual', 'grouped' ] }
> -
> -##
> -# @TransactionAction:
> -#
> -# A discriminated record of operations that can be performed with
> -# @transaction. Action @type can be:
> -#
> -# - @abort: since 1.6
> -# - @block-dirty-bitmap-add: since 2.5
> -# - @block-dirty-bitmap-clear: since 2.5
> -# - @blockdev-backup: since 2.3
> -# - @blockdev-snapshot: since 2.5
> -# - @blockdev-snapshot-internal-sync: since 1.7
> -# - @blockdev-snapshot-sync: since 1.1
> -# - @drive-backup: since 1.6
> -#
> -# Since: 1.1
> -##
> -{ 'union': 'TransactionAction',
> -  'data': {
> -       'abort': 'Abort',
> -       'block-dirty-bitmap-add': 'BlockDirtyBitmapAdd',
> -       'block-dirty-bitmap-clear': 'BlockDirtyBitmap',
> -       'blockdev-backup': 'BlockdevBackup',
> -       'blockdev-snapshot': 'BlockdevSnapshot',
> -       'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal',
> -       'blockdev-snapshot-sync': 'BlockdevSnapshotSync',
> -       'drive-backup': 'DriveBackup'
> -   } }
> -
> -##
> -# @TransactionProperties:
> -#
> -# Optional arguments to modify the behavior of a Transaction.
> -#
> -# @completion-mode: Controls how jobs launched asynchronously by
> -#                   Actions will complete or fail as a group.
> -#                   See @ActionCompletionMode for details.
> -#
> -# Since: 2.5
> -##
> -{ 'struct': 'TransactionProperties',
> -  'data': {
> -       '*completion-mode': 'ActionCompletionMode'
> -  }
> -}
> -
> -##
> -# @transaction:
> -#
> -# Executes a number of transactionable QMP commands atomically. If any
> -# operation fails, then the entire set of actions will be abandoned and
> the
> -# appropriate error returned.
> -#
> -# For external snapshots, the dictionary contains the device, the file to
> use for
> -# the new snapshot, and the format.  The default format, if not
> specified, is
> -# qcow2.
> -#
> -# Each new snapshot defaults to being created by QEMU (wiping any
> -# contents if the file already exists), but it is also possible to reuse
> -# an externally-created file.  In the latter case, you should ensure that
> -# the new image file has the same contents as the current one; QEMU cannot
> -# perform any meaningful check.  Typically this is achieved by using the
> -# current image file as the backing file for the new image.
> -#
> -# On failure, the original disks pre-snapshot attempt will be used.
> -#
> -# For internal snapshots, the dictionary contains the device and the
> snapshot's
> -# name.  If an internal snapshot matching name already exists, the
> request will
> -# be rejected.  Only some image formats support it, for example, qcow2,
> rbd,
> -# and sheepdog.
> -#
> -# On failure, qemu will try delete the newly created internal snapshot in
> the
> -# transaction.  When an I/O error occurs during deletion, the user needs
> to fix
> -# it later with qemu-img or other command.
> -#
> -# @actions: List of @TransactionAction;
> -#           information needed for the respective operations.
> -#
> -# @properties: structure of additional options to control the
> -#              execution of the transaction. See @TransactionProperties
> -#              for additional detail.
> -#
> -# Returns: nothing on success
> -#
> -#          Errors depend on the operations of the transaction
> -#
> -# Note: The transaction aborts on the first failure.  Therefore, there
> will be
> -# information on only one failed operation returned in an error
> condition, and
> -# subsequent actions will not have been attempted.
> -#
> -# Since: 1.1
> -#
> -# Example:
> -#
> -# -> { "execute": "transaction",
> -#      "arguments": { "actions": [
> -#          { "type": "blockdev-snapshot-sync", "data" : { "device":
> "ide-hd0",
> -#                                      "snapshot-file":
> "/some/place/my-image",
> -#                                      "format": "qcow2" } },
> -#          { "type": "blockdev-snapshot-sync", "data" : { "node-name":
> "myfile",
> -#                                      "snapshot-file":
> "/some/place/my-image2",
> -#                                      "snapshot-node-name": "node3432",
> -#                                      "mode": "existing",
> -#                                      "format": "qcow2" } },
> -#          { "type": "blockdev-snapshot-sync", "data" : { "device":
> "ide-hd1",
> -#                                      "snapshot-file":
> "/some/place/my-image2",
> -#                                      "mode": "existing",
> -#                                      "format": "qcow2" } },
> -#          { "type": "blockdev-snapshot-internal-sync", "data" : {
> -#                                      "device": "ide-hd2",
> -#                                      "name": "snapshot0" } } ] } }
> -# <- { "return": {} }
> -#
> -##
> -{ 'command': 'transaction',
> -  'data': { 'actions': [ 'TransactionAction' ],
> -            '*properties': 'TransactionProperties'
> -          }
> -}
> -
> -##
>  # @human-monitor-command:
>  #
>  # Execute a command on the human monitor and return the output.
> diff --git a/qapi/transaction.json b/qapi/transaction.json
> new file mode 100644
> index 0000000..bd31279
> --- /dev/null
> +++ b/qapi/transaction.json
> @@ -0,0 +1,158 @@
> +# -*- Mode: Python -*-
> +#
> +
> +##
> +# = Transactions
> +##
> +
> +{ 'include': 'block.json' }
> +
> +##
> +# @Abort:
> +#
> +# This action can be used to test transaction failure.
> +#
> +# Since: 1.6
> +##
> +{ 'struct': 'Abort',
> +  'data': { } }
> +
> +##
> +# @ActionCompletionMode:
> +#
> +# An enumeration of Transactional completion modes.
> +#
> +# @individual: Do not attempt to cancel any other Actions if any Actions
> fail
> +#              after the Transaction request succeeds. All Actions that
> +#              can complete successfully will do so without waiting on
> others.
> +#              This is the default.
> +#
> +# @grouped: If any Action fails after the Transaction succeeds, cancel all
> +#           Actions. Actions do not complete until all Actions are ready
> to
> +#           complete. May be rejected by Actions that do not support this
> +#           completion mode.
> +#
> +# Since: 2.5
> +##
> +{ 'enum': 'ActionCompletionMode',
> +  'data': [ 'individual', 'grouped' ] }
> +
> +##
> +# @TransactionAction:
> +#
> +# A discriminated record of operations that can be performed with
> +# @transaction. Action @type can be:
> +#
> +# - @abort: since 1.6
> +# - @block-dirty-bitmap-add: since 2.5
> +# - @block-dirty-bitmap-clear: since 2.5
> +# - @blockdev-backup: since 2.3
> +# - @blockdev-snapshot: since 2.5
> +# - @blockdev-snapshot-internal-sync: since 1.7
> +# - @blockdev-snapshot-sync: since 1.1
> +# - @drive-backup: since 1.6
> +#
> +# Since: 1.1
> +##
> +{ 'union': 'TransactionAction',
> +  'data': {
> +       'abort': 'Abort',
> +       'block-dirty-bitmap-add': 'BlockDirtyBitmapAdd',
> +       'block-dirty-bitmap-clear': 'BlockDirtyBitmap',
> +       'blockdev-backup': 'BlockdevBackup',
> +       'blockdev-snapshot': 'BlockdevSnapshot',
> +       'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal',
> +       'blockdev-snapshot-sync': 'BlockdevSnapshotSync',
> +       'drive-backup': 'DriveBackup'
> +   } }
> +
> +##
> +# @TransactionProperties:
> +#
> +# Optional arguments to modify the behavior of a Transaction.
> +#
> +# @completion-mode: Controls how jobs launched asynchronously by
> +#                   Actions will complete or fail as a group.
> +#                   See @ActionCompletionMode for details.
> +#
> +# Since: 2.5
> +##
> +{ 'struct': 'TransactionProperties',
> +  'data': {
> +       '*completion-mode': 'ActionCompletionMode'
> +  }
> +}
> +
> +##
> +# @transaction:
> +#
> +# Executes a number of transactionable QMP commands atomically. If any
> +# operation fails, then the entire set of actions will be abandoned and
> the
> +# appropriate error returned.
> +#
> +# For external snapshots, the dictionary contains the device, the file to
> use for
> +# the new snapshot, and the format.  The default format, if not
> specified, is
> +# qcow2.
> +#
> +# Each new snapshot defaults to being created by QEMU (wiping any
> +# contents if the file already exists), but it is also possible to reuse
> +# an externally-created file.  In the latter case, you should ensure that
> +# the new image file has the same contents as the current one; QEMU cannot
> +# perform any meaningful check.  Typically this is achieved by using the
> +# current image file as the backing file for the new image.
> +#
> +# On failure, the original disks pre-snapshot attempt will be used.
> +#
> +# For internal snapshots, the dictionary contains the device and the
> snapshot's
> +# name.  If an internal snapshot matching name already exists, the
> request will
> +# be rejected.  Only some image formats support it, for example, qcow2,
> rbd,
> +# and sheepdog.
> +#
> +# On failure, qemu will try delete the newly created internal snapshot in
> the
> +# transaction.  When an I/O error occurs during deletion, the user needs
> to fix
> +# it later with qemu-img or other command.
> +#
> +# @actions: List of @TransactionAction;
> +#           information needed for the respective operations.
> +#
> +# @properties: structure of additional options to control the
> +#              execution of the transaction. See @TransactionProperties
> +#              for additional detail.
> +#
> +# Returns: nothing on success
> +#
> +#          Errors depend on the operations of the transaction
> +#
> +# Note: The transaction aborts on the first failure.  Therefore, there
> will be
> +# information on only one failed operation returned in an error
> condition, and
> +# subsequent actions will not have been attempted.
> +#
> +# Since: 1.1
> +#
> +# Example:
> +#
> +# -> { "execute": "transaction",
> +#      "arguments": { "actions": [
> +#          { "type": "blockdev-snapshot-sync", "data" : { "device":
> "ide-hd0",
> +#                                      "snapshot-file":
> "/some/place/my-image",
> +#                                      "format": "qcow2" } },
> +#          { "type": "blockdev-snapshot-sync", "data" : { "node-name":
> "myfile",
> +#                                      "snapshot-file":
> "/some/place/my-image2",
> +#                                      "snapshot-node-name": "node3432",
> +#                                      "mode": "existing",
> +#                                      "format": "qcow2" } },
> +#          { "type": "blockdev-snapshot-sync", "data" : { "device":
> "ide-hd1",
> +#                                      "snapshot-file":
> "/some/place/my-image2",
> +#                                      "mode": "existing",
> +#                                      "format": "qcow2" } },
> +#          { "type": "blockdev-snapshot-internal-sync", "data" : {
> +#                                      "device": "ide-hd2",
> +#                                      "name": "snapshot0" } } ] } }
> +# <- { "return": {} }
> +#
> +##
> +{ 'command': 'transaction',
> +  'data': { 'actions': [ 'TransactionAction' ],
> +            '*properties': 'TransactionProperties'
> +          }
> +}
> --
> 2.7.5
>
>
> --
Marc-André Lureau


reply via email to

[Prev in Thread] Current Thread [Next in Thread]