qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: kwolf@redhat.com, famz@redhat.com, qemu-block@nongnu.org,
	qemu-devel@nongnu.org, armbru@redhat.com,
	vsementsov@parallels.com, mreitz@redhat.com
Subject: Re: [Qemu-devel] [PATCH v6 00/21] block: transactionless incremental backup series
Date: Fri, 24 Apr 2015 15:02:49 +0100	[thread overview]
Message-ID: <20150424140249.GA28184@stefanha-thinkpad.redhat.com> (raw)
In-Reply-To: <1429314609-29776-1-git-send-email-jsnow@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 10230 bytes --]

On Fri, Apr 17, 2015 at 07:49:48PM -0400, John Snow wrote:
> It's spring! The winter snow has thawed and so here is a new
> patch series to enter your life and warm your heart.
> 
> This patchset enables the in-memory part of the incremental backup
> feature, without transactional support.
> 
> Support for transactions was separated into a separate series which
> is also now available on-list. Getting this portion of the series
> committed will help stabilize work on bitmap persistence and bitmap
> migration.
> 
> Thanks to Fam Zheng for the original versions of this patchset,
> And thanks to Max and Eric for reviewing 2,396 versions of it since.
> 
> ===
> v6:
> ===
> 
> 01: s/underlaying/underlying/
>     Removed a reference to 'disabled' bitmaps.
>     Touching up inconsistent list indentation.
>     Added FreeBSD Documentation License, primarily to be difficult
> 07: More in-line documentation for hbitmap_merge, for return value.
>     Fix size cache index to be uint64_t.
> 09: Grammar fixes from Eric Blake, kept R-Bs.
> 10: Moved yield into the do{}while(). Now we check to see if we should
>        yield/cancel after each unsuccessful sector we transfer.
>     Some documentation additions for Eric Blake.
> 15: corrected 'num_elements' to 'start'
> 18: Refactored qmp.py event functions,
>     Added in more explicit exception classes.
>     No changes to iotests.py, just qmp.py.
> 
> Key:
> [----] : patches are identical
> [####] : number of functional differences between upstream/downstream patch
> [down] : patch is downstream-only
> The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively
> 
> 001/21:[0057] [FC] 'docs: incremental backup documentation'
> 002/21:[----] [--] 'qapi: Add optional field "name" to block dirty bitmap'
> 003/21:[----] [--] 'qmp: Ensure consistent granularity type'
> 004/21:[----] [--] 'qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove'
> 005/21:[----] [--] 'block: Introduce bdrv_dirty_bitmap_granularity()'
> 006/21:[----] [--] 'hbitmap: cache array lengths'
> 007/21:[0008] [FC] 'hbitmap: add hbitmap_merge'
> 008/21:[----] [--] 'block: Add bitmap disabled status'
> 009/21:[0008] [FC] 'block: Add bitmap successors'
> 010/21:[0013] [FC] 'qmp: Add support of "dirty-bitmap" sync mode for drive-backup'
> 011/21:[----] [--] 'qmp: add block-dirty-bitmap-clear'
> 012/21:[----] [--] 'qmp: Add dirty bitmap status field in query-block'
> 013/21:[----] [--] 'block: add BdrvDirtyBitmap documentation'
> 014/21:[----] [--] 'block: Ensure consistent bitmap function prototypes'
> 015/21:[0002] [FC] 'block: Resize bitmaps on bdrv_truncate'
> 016/21:[----] [--] 'hbitmap: truncate tests'
> 017/21:[----] [-C] 'iotests: add invalid input incremental backup tests'
> 018/21:[0095] [FC] 'iotests: add QMP event waiting queue'
> 019/21:[----] [--] 'iotests: add simple incremental backup case'
> 020/21:[----] [--] 'iotests: add incremental backup failure recovery test'
> 021/21:[----] [--] 'iotests: add incremental backup granularity tests'
> 
> ===
> v5:
> ===
> 
> 10: Code has been moved into backup_run_incremental()
>     'polyrhythm' check is removed,
>         clusters_per_iter variable is introduced instead.
>     If the bitmap granularity is larger than the backup granularity,
>         loop over the backup_do_cow call multiple times.
>     If the bitmap granularity is smaller, skip the iterator ahead as
>         we had been doing previously.
> 14: Only whitespace changes caused by patch 10.
> 15: Changed my approach for clearing out data for the hbitmap
>         truncate shrink case, as suggested by Stefan
> 18: Added a proper timeout mechanism to qmp.pull_event():
>       wait=False or wait=0.0 implies non-blocking.
>       wait=True implies blocking.
>       wait=60.0 implies a 60 second timeout.
>       VM.event_wait() now uses a 60 second timeout by default.
> 19: Many things:
>     The big picture is to add a set of full backups alongside the
>     incremental backups created during the test to be able to test
>     the validity of each incremental at the conclusion of the test
>     when we can shut the VM down.
> 
>     To do this, there are two basic changes:
>     (1) Keep a list of pairs of backup filenames (incremental, reference);
>         create a full reference backup for every incremental created.
>     (2) Refactor the backup helper functions a bit.
> 20: Naming fallout from 19
>     Added calls to vm.shutdown() and check_backups().
> 21: NEW, adds granularity tests that cover the changes in patch 10.
> 
> ===
> v4:
> ===
> 
> 04: Some in-line documentation for block_dirty_bitmap_lookup
>     Changed behavior with respect to aio_context
>       (always acquire, release if pbs == null, give to user otherwise)
> 10: Removed vestigial (currently nop) bdrv_enable_dirty_bitmap call
>     Kept R-B.
> 16: Added some comments to test_check_boundary_bits.
>     Kept R-B.
> 17: Folded in refactor from "incremental transactions v1" (Poor Kitty)
> 18: Pulled forward from "incremental transactions v1"
>     Kept R-B from that series.
> 19: Folded in refactor from "incremental transactions v1"
>     Added offset assertions into wait_incremental
> 20: Removed error tolerance from wait_until_completed, as
>     these patches no longer make use of that feature.
> 
> ===
> v3:
> ===
> 
> 01: Removed enabled/disabled modes information.
>     Elaborated on events that can occur during error cases.
> 04: Added an AioContext out parameter to block_dirty_bitmap_lookup.
> 06: NEW:
>     Cache the array lengths for hbitmap.
> 07: hbitmap_merge now uses the cached array lengths.
> 11: block-dirty-bitmap-clear is edited for the new block_dirty_bitmap_lookup.
> 12: Removed the "disabled" status, leaving just "Frozen."
> 15: Moved bdrv_truncate_dirty_bitmap to be static local
>     Inlined dirty_bitmap_truncate function.
>     Removed size[] caching into new patch (06, above)
>     hbitmap_truncate now keeps correct bit population count
>     hbitmap_truncate now uses hbitmap_reset BEFORE the truncate,
>         to avoid tricky out-of-bounds usages.
>     Remove g_realloc_n call that is not available in glib 2.12 (or 2.22)
>     Renamed "truncate" to "shrink" to make that more clear
>         to people who aren't me (at last count: 7+ billion)
> 16 NEW:
>    hbitmap_truncate tests.
> 
> ===
> v2:
> ===
> 
> 01: Added a new opening blurb.
>     Adjusted codeblock indentations to be 4 spaces instead of 3,
>     so it works as MD or GFMD.
>     Adjusted errors explanation.
>     Make visual separations between json data and shell commands
>     Eliminate any ligering single quotes
> 
> 07: Remember that memset takes bytes, not n_items ...
> 
> ===
> v1:
> ===
> 
> Deletions:
>  - Removed Transactions, to be added later.
>  - Removed Transaction tests, as above.
> 
> Changes:
> 01: Indentation fixes.
>     Removed enable/disable documentation.
>     Added a note that transactions aren't implemented yet.
>     Removed my needless commas
>     Added error case documentation.
> 
> 07: QMP enable/disable commands are deleted.
> 
> 14: Some comments concerning assertions.
>     Scrub re-alloc memory if we expand the array.
>     Do not attempt to scrub memory if fix_count is 0
> 
> Changes made with Reviews kept:
> 
> 02: Since 2.4
> 04: Since 2.4
>     Demingled the QMP command documentation.
> 08: Additions to what was qmp_block_dirty_enable/disable
>     are no longer present as those function no longer exist.
> 09: Since 2.4
> 10: Since 2.4
>     Demingled QMP command documentation.
> 11: Since 2.4
> 15: Test 112 --> 124
> 17: Number of tests altered. (Only 4, now.)
> 
> Fam Zheng (1):
>   qapi: Add optional field "name" to block dirty bitmap
> 
> John Snow (20):
>   docs: incremental backup documentation
>   qmp: Ensure consistent granularity type
>   qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove
>   block: Introduce bdrv_dirty_bitmap_granularity()
>   hbitmap: cache array lengths
>   hbitmap: add hbitmap_merge
>   block: Add bitmap disabled status
>   block: Add bitmap successors
>   qmp: Add support of "dirty-bitmap" sync mode for drive-backup
>   qmp: add block-dirty-bitmap-clear
>   qmp: Add dirty bitmap status field in query-block
>   block: add BdrvDirtyBitmap documentation
>   block: Ensure consistent bitmap function prototypes
>   block: Resize bitmaps on bdrv_truncate
>   hbitmap: truncate tests
>   iotests: add invalid input incremental backup tests
>   iotests: add QMP event waiting queue
>   iotests: add simple incremental backup case
>   iotests: add incremental backup failure recovery test
>   iotests: add incremental backup granularity tests
> 
>  block.c                       | 243 ++++++++++++++++++++++++++--
>  block/backup.c                | 155 +++++++++++++++---
>  block/mirror.c                |  46 +++---
>  blockdev.c                    | 176 +++++++++++++++++++-
>  docs/bitmaps.md               | 352 ++++++++++++++++++++++++++++++++++++++++
>  hmp.c                         |   3 +-
>  include/block/block.h         |  33 +++-
>  include/block/block_int.h     |   4 +-
>  include/qemu/hbitmap.h        |  23 +++
>  migration/block.c             |   9 +-
>  qapi/block-core.json          |  91 ++++++++++-
>  qmp-commands.hx               |  93 ++++++++++-
>  scripts/qmp/qmp.py            |  95 +++++++----
>  tests/qemu-iotests/124        | 363 ++++++++++++++++++++++++++++++++++++++++++
>  tests/qemu-iotests/124.out    |   5 +
>  tests/qemu-iotests/group      |   1 +
>  tests/qemu-iotests/iotests.py |  38 +++++
>  tests/test-hbitmap.c          | 255 +++++++++++++++++++++++++++++
>  util/hbitmap.c                |  85 ++++++++++
>  19 files changed, 1953 insertions(+), 117 deletions(-)
>  create mode 100644 docs/bitmaps.md
>  create mode 100644 tests/qemu-iotests/124
>  create mode 100644 tests/qemu-iotests/124.out
> 
> -- 
> 2.1.0
> 

Thanks, applied to my block-next tree:
https://github.com/stefanha/qemu/commits/block-next

Stefan

[-- Attachment #2: Type: application/pgp-signature, Size: 473 bytes --]

      parent reply	other threads:[~2015-04-24 14:03 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-17 23:49 [Qemu-devel] [PATCH v6 00/21] block: transactionless incremental backup series John Snow
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 01/21] docs: incremental backup documentation John Snow
2015-04-22 16:17   ` Max Reitz
2015-04-22 19:20   ` Eric Blake
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 02/21] qapi: Add optional field "name" to block dirty bitmap John Snow
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 03/21] qmp: Ensure consistent granularity type John Snow
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 04/21] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove John Snow
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 05/21] block: Introduce bdrv_dirty_bitmap_granularity() John Snow
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 06/21] hbitmap: cache array lengths John Snow
2015-04-23 13:39   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 07/21] hbitmap: add hbitmap_merge John Snow
2015-04-22 16:22   ` Max Reitz
2015-04-22 22:00   ` Eric Blake
2015-04-23 13:40   ` Stefan Hajnoczi
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 08/21] block: Add bitmap disabled status John Snow
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 09/21] block: Add bitmap successors John Snow
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 10/21] qmp: Add support of "dirty-bitmap" sync mode for drive-backup John Snow
2015-04-22 16:33   ` Max Reitz
2015-04-22 22:11   ` Eric Blake
2015-04-23 13:47   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-17 23:49 ` [Qemu-devel] [PATCH v6 11/21] qmp: add block-dirty-bitmap-clear John Snow
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 12/21] qmp: Add dirty bitmap status field in query-block John Snow
2015-04-22 22:18   ` Eric Blake
2015-04-22 22:22     ` John Snow
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 13/21] block: add BdrvDirtyBitmap documentation John Snow
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 14/21] block: Ensure consistent bitmap function prototypes John Snow
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 15/21] block: Resize bitmaps on bdrv_truncate John Snow
2015-04-22 16:35   ` Max Reitz
2015-04-23 13:51   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 16/21] hbitmap: truncate tests John Snow
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 17/21] iotests: add invalid input incremental backup tests John Snow
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 18/21] iotests: add QMP event waiting queue John Snow
2015-04-22 16:50   ` Max Reitz
2015-04-23 14:24   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 19/21] iotests: add simple incremental backup case John Snow
2015-04-23 14:28   ` Stefan Hajnoczi
2015-05-22 15:02   ` Kevin Wolf
2015-05-22 15:29     ` John Snow
2015-05-22 15:37       ` Kevin Wolf
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 20/21] iotests: add incremental backup failure recovery test John Snow
2015-04-23 14:28   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-11-27 17:14   ` [Qemu-devel] " Kevin Wolf
2015-11-30 17:17     ` John Snow
2015-12-01  9:31       ` Kevin Wolf
2015-04-17 23:50 ` [Qemu-devel] [PATCH v6 21/21] iotests: add incremental backup granularity tests John Snow
2015-04-23 14:29   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-23 13:19 ` [Qemu-devel] [Qemu-block] [PATCH v6 00/21] block: transactionless incremental backup series Stefan Hajnoczi
2015-04-23 14:41   ` John Snow
2015-04-23 19:18     ` Eric Blake
2015-04-23 19:40       ` John Snow
2015-04-24  8:37         ` Stefan Hajnoczi
2015-04-24 14:02 ` Stefan Hajnoczi [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150424140249.GA28184@stefanha-thinkpad.redhat.com \
    --to=stefanha@redhat.com \
    --cc=armbru@redhat.com \
    --cc=famz@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@parallels.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).