[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC 1/4] drive-mirror: add support for sync=bitmap mode=never
From: |
Markus Armbruster |
Subject: |
Re: [RFC 1/4] drive-mirror: add support for sync=bitmap mode=never |
Date: |
Wed, 21 Feb 2024 07:55:01 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Fiona Ebner <f.ebner@proxmox.com> writes:
> From: John Snow <jsnow@redhat.com>
>
> This patch adds support for the "BITMAP" sync mode to drive-mirror and
> blockdev-mirror. It adds support only for the BitmapSyncMode "never,"
> because it's the simplest mode.
>
> This mode simply uses a user-provided bitmap as an initial copy
> manifest, and then does not clear any bits in the bitmap at the
> conclusion of the operation.
>
> Any new writes dirtied during the operation are copied out, in contrast
> to backup. Note that whether these writes are reflected in the bitmap
> at the conclusion of the operation depends on whether that bitmap is
> actually recording!
>
> This patch was originally based on one by Ma Haocong, but it has since
> been modified pretty heavily.
>
> Suggested-by: Ma Haocong <mahaocong@didichuxing.com>
> Signed-off-by: Ma Haocong <mahaocong@didichuxing.com>
> Signed-off-by: John Snow <jsnow@redhat.com>
> [FG: switch to bdrv_dirty_bitmap_merge_internal]
> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
> Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
> [FE: rebase for 9.0
> update version and formatting in QAPI]
> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
[...]
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index ab5a93a966..ac05483958 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -2181,6 +2181,15 @@
> # destination (all the disk, only the sectors allocated in the
> # topmost image, or only new I/O).
> #
> +# @bitmap: The name of a bitmap to use for sync=bitmap mode. This
> +# argument must be present for bitmap mode and absent otherwise.
> +# The bitmap's granularity is used instead of @granularity.
> +# (Since 9.0).
What happens when the user specifies @granularity anyway? Error or
silently ignored?
> +#
> +# @bitmap-mode: Specifies the type of data the bitmap should contain
> +# after the operation concludes. Must be present if sync is
> +# "bitmap". Must NOT be present otherwise. (Since 9.0)
Members that must be present when and only when some enum member has a
certain value should perhaps be in a union branch. Perhaps the block
maintainers have an opinion here.
> +#
> # @granularity: granularity of the dirty bitmap, default is 64K if the
> # image format doesn't have clusters, 4K if the clusters are
> # smaller than that, else the cluster size. Must be a power of 2
> @@ -2223,7 +2232,9 @@
> { 'struct': 'DriveMirror',
> 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
> '*format': 'str', '*node-name': 'str', '*replaces': 'str',
> - 'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
> + 'sync': 'MirrorSyncMode', '*bitmap': 'str',
> + '*bitmap-mode': 'BitmapSyncMode',
> + '*mode': 'NewImageMode',
> '*speed': 'int', '*granularity': 'uint32',
> '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
> '*on-target-error': 'BlockdevOnError',
> @@ -2507,6 +2518,15 @@
> # destination (all the disk, only the sectors allocated in the
> # topmost image, or only new I/O).
> #
> +# @bitmap: The name of a bitmap to use for sync=bitmap mode. This
> +# argument must be present for bitmap mode and absent otherwise.
> +# The bitmap's granularity is used instead of @granularity.
> +# (Since 9.0).
> +#
> +# @bitmap-mode: Specifies the type of data the bitmap should contain
> +# after the operation concludes. Must be present if sync is
> +# "bitmap". Must NOT be present otherwise. (Since 9.0)
> +#
> # @granularity: granularity of the dirty bitmap, default is 64K if the
> # image format doesn't have clusters, 4K if the clusters are
> # smaller than that, else the cluster size. Must be a power of 2
> @@ -2557,7 +2577,8 @@
> { 'command': 'blockdev-mirror',
> 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
> '*replaces': 'str',
> - 'sync': 'MirrorSyncMode',
> + 'sync': 'MirrorSyncMode', '*bitmap': 'str',
> + '*bitmap-mode': 'BitmapSyncMode',
> '*speed': 'int', '*granularity': 'uint32',
> '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
> '*on-target-error': 'BlockdevOnError',
[...]
- [RFC 0/4] mirror: implement incremental and bitmap modes, Fiona Ebner, 2024/02/16
- [RFC 3/4] mirror: move some checks to qmp, Fiona Ebner, 2024/02/16
- [RFC 2/4] drive-mirror: add support for conditional and always bitmap sync modes, Fiona Ebner, 2024/02/16
- [RFC 1/4] drive-mirror: add support for sync=bitmap mode=never, Fiona Ebner, 2024/02/16
- Re: [RFC 1/4] drive-mirror: add support for sync=bitmap mode=never,
Markus Armbruster <=
- [RFC 4/4] iotests: add test for bitmap mirror, Fiona Ebner, 2024/02/16
- Re: [RFC 0/4] mirror: implement incremental and bitmap modes, Vladimir Sementsov-Ogievskiy, 2024/02/28
Re: [RFC 0/4] mirror: implement incremental and bitmap modes, Vladimir Sementsov-Ogievskiy, 2024/02/28