[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 12/18] block/backup: add 'always' bitmap sync
From: |
Max Reitz |
Subject: |
Re: [Qemu-devel] [PATCH v2 12/18] block/backup: add 'always' bitmap sync policy |
Date: |
Thu, 4 Jul 2019 19:43:46 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 |
On 03.07.19 23:55, John Snow wrote:
> This adds an "always" policy for bitmap synchronization. Regardless of if
> the job succeeds or fails, the bitmap is *always* synchronized. This means
> that for backups that fail part-way through, the bitmap retains a record of
> which sectors need to be copied out to accomplish a new backup using the
> old, partial result.
>
> In effect, this allows us to "resume" a failed backup; however the new backup
> will be from the new point in time, so it isn't a "resume" as much as it is
> an "incremental retry." This can be useful in the case of extremely large
> backups that fail considerably through the operation and we'd like to not
> waste
> the work that was already performed.
>
> Signed-off-by: John Snow <address@hidden>
> ---
> block/backup.c | 25 +++++++++++++++++--------
> qapi/block-core.json | 5 ++++-
> 2 files changed, 21 insertions(+), 9 deletions(-)
>
> diff --git a/block/backup.c b/block/backup.c
> index 9cc5a7f6ca..495d8f71aa 100644
> --- a/block/backup.c
> +++ b/block/backup.c
> @@ -266,16 +266,25 @@ static void backup_cleanup_sync_bitmap(BackupBlockJob
> *job, int ret)
> {
> BdrvDirtyBitmap *bm;
> BlockDriverState *bs = blk_bs(job->common.blk);
> + bool sync = (((ret == 0) || (job->bitmap_mode ==
> BITMAP_SYNC_MODE_ALWAYS)) \
> + && (job->bitmap_mode != BITMAP_SYNC_MODE_NEVER));
>
> - if (ret < 0 || job->bitmap_mode == BITMAP_SYNC_MODE_NEVER) {
> - /* Failure, or we don't want to synchronize the bitmap.
> - * Merge the successor back into the parent, delete nothing. */
> - bm = bdrv_reclaim_dirty_bitmap(bs, job->sync_bitmap, NULL);
> - assert(bm);
> - } else {
> - /* Everything is fine, delete this bitmap and install the backup. */
> + if (sync) {
> + /* We succeeded, or we always intended to sync the bitmap.
> + * Delete this bitmap and install the child. */
> bm = bdrv_dirty_bitmap_abdicate(bs, job->sync_bitmap, NULL);
> - assert(bm);
> + } else {
> + /* We failed, or we never intended to sync the bitmap anyway.
> + * Merge the successor back into the parent, keeping all data. */
> + bm = bdrv_reclaim_dirty_bitmap(bs, job->sync_bitmap, NULL);
> + }
> +
> + assert(bm);
> +
> + if (ret < 0 && job->bitmap_mode == BITMAP_SYNC_MODE_ALWAYS) {
“ret < 0 && sync” would be simpler – your choice.
> + /* If we failed and synced, merge in the bits we didn't copy: */
> + bdrv_dirty_bitmap_merge_internal(bm, job->copy_bitmap,
> + NULL, true);
I presume this is for sync=full?
If so:
Reviewed-by: Max Reitz <address@hidden>
> }
> }
>
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [PATCH v2 08/18] hbitmap: enable merging across granularities, (continued)
- [Qemu-devel] [PATCH v2 08/18] hbitmap: enable merging across granularities, John Snow, 2019/07/03
- [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/03
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, Max Reitz, 2019/07/04
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/05
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, Max Reitz, 2019/07/08
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/08
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, Max Reitz, 2019/07/08
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/08
[Qemu-devel] [PATCH v2 12/18] block/backup: add 'always' bitmap sync policy, John Snow, 2019/07/03
- Re: [Qemu-devel] [PATCH v2 12/18] block/backup: add 'always' bitmap sync policy,
Max Reitz <=
[Qemu-devel] [PATCH v2 10/18] block/dirty-bitmap: add bdrv_dirty_bitmap_get, John Snow, 2019/07/03
[Qemu-devel] [PATCH v2 14/18] iotests: teach run_job to cancel pending jobs, John Snow, 2019/07/03
[Qemu-devel] [PATCH v2 11/18] block/backup: upgrade copy_bitmap to BdrvDirtyBitmap, John Snow, 2019/07/03