qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Fam Zheng <famz@redhat.com>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Jeff Cody <jcody@redhat.com>,
	vsementsov@parallels.com, stefanha@redhat.com,
	Max Reitz <mreitz@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v7 00/14] block: incremental backup transactions using BlockJobTxn
Date: Tue, 22 Sep 2015 16:48:47 -0400	[thread overview]
Message-ID: <5601BEAF.9060706@redhat.com> (raw)
In-Reply-To: <1442889976-8733-1-git-send-email-famz@redhat.com>



On 09/21/2015 10:46 PM, Fam Zheng wrote:
> v7: Add Eric's rev-by in 1, 11.
>     Add Max's rev-by in 4, 5, 9, 10, 11.
>     Add John's rev-by in 5, 6, 8.
>     Fix wording for 6. [John]
>     Fix comment of block_job_txn_add_job() in 9. [Max]
>     Remove superfluous hunks, and document default value in 11. [Eric]
>     Update Makefile dep in 14. [Max]
> 
> v6: Address comments from Max and Eric (many thanks for reviewing!):
>     Add Max's reviews.
>     Don't leak txn. [Max]
>     Unusual comment ending "**/" -> "*/". [Eric]
>     Fix the stale block_job_txn_prepare_to_complete comment. [Max]
>     Move "block_job_txn_unref" to below FOREACH block. [Max]
>     Split "base" and "txn" in qapi schema, so that transactional-cancel is only
>     visible in transaction. [Eric]
> 
> v5: Address comments from Max Reitz:
>     2.4 -> 2.5 in qapi docs.
>     Don't leak txn object.
>     English syntax fixes.
>     Really leave the "cancelled" status of failed job.
>     Remove a superfluous added line.
> 
> This is based on top of the work by Stefan Hajnoczi and John Snow.
> 
> Recap: motivation for block job transactions
> --------------------------------------------
> If an incremental backup block job fails then we reclaim the bitmap so
> the job can be retried.  The problem comes when multiple jobs are started as
> part of a qmp 'transaction' command.  We need to group these jobs in a
> transaction so that either all jobs complete successfully or all bitmaps are
> reclaimed.
> 
> Without transactions, there is a case where some jobs complete successfully and
> throw away their bitmaps, making it impossible to retry the backup by rerunning
> the command if one of the jobs fails.
> 
> How does this implementation work?
> ----------------------------------
> These patches add a BlockJobTxn object with the following API:
> 
>   txn = block_job_txn_new();
>   block_job_txn_add_job(txn, job1);
>   block_job_txn_add_job(txn, job2);
> 
> The jobs either both complete successfully or they both fail/cancel.  If the
> user cancels job1 then job2 will also be cancelled and vice versa.
> 
> Jobs objects stay alive waiting for other jobs to complete, even if the
> coroutines have returned.  They can be cancelled by the user during this time.
> Job blockers are still in effect and no other block job can run on this device
> in the meantime (since QEMU currently only allows 1 job per device).  This is
> the main drawback to this approach but reasonable since you probably don't want
> to run other jobs/operations until you're sure the backup was successful (you
> won't be able to retry a failed backup if there's a new job running).
> 
> 
> Fam Zheng (6):
>   backup: Extract dirty bitmap handling as a separate function
>   blockjob: Introduce reference count
>   blockjob: Add .commit and .abort block job actions
>   blockjob: Add "completed" and "ret" in BlockJob
>   blockjob: Simplify block_job_finish_sync
>   block: Add block job transactions
> 
> John Snow (4):
>   qapi: Add transaction support to block-dirty-bitmap operations
>   iotests: add transactional incremental backup test
>   block: rename BlkTransactionState and BdrvActionOps
>   iotests: 124 - transactional failure test
> 
> Kashyap Chamarthy (1):
>   qmp-commands.hx: Update the supported 'transaction' operations
> 
> Stefan Hajnoczi (3):
>   blockdev: make BlockJobTxn available to qmp 'transaction'
>   block/backup: support block job transactions
>   tests: add BlockJobTxn unit test
> 
>  block.c                    |  19 ++-
>  block/backup.c             |  50 +++++--
>  block/mirror.c             |   2 +-
>  blockdev.c                 | 354 +++++++++++++++++++++++++++++++++++----------
>  blockjob.c                 | 185 +++++++++++++++++++----
>  docs/bitmaps.md            |   6 +-
>  include/block/block.h      |   2 +-
>  include/block/block_int.h  |   6 +-
>  include/block/blockjob.h   |  85 ++++++++++-
>  qapi-schema.json           |  10 +-
>  qapi/block-core.json       |  27 +++-
>  qmp-commands.hx            |  21 ++-
>  tests/Makefile             |   3 +
>  tests/qemu-iotests/124     | 182 ++++++++++++++++++++++-
>  tests/qemu-iotests/124.out |   4 +-
>  tests/test-blockjob-txn.c  | 244 +++++++++++++++++++++++++++++++
>  16 files changed, 1056 insertions(+), 144 deletions(-)
>  create mode 100644 tests/test-blockjob-txn.c
> 

Reminder: needed as a new patch -- an update to the documentation
concerning the transactional-cancel argument added in patch 11/14 for
docs/bitmaps.md.

--js

      parent reply	other threads:[~2015-09-22 20:48 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-22  2:46 [Qemu-devel] [PATCH v7 00/14] block: incremental backup transactions using BlockJobTxn Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 01/14] qapi: Add transaction support to block-dirty-bitmap operations Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 02/14] iotests: add transactional incremental backup test Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 03/14] block: rename BlkTransactionState and BdrvActionOps Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 04/14] backup: Extract dirty bitmap handling as a separate function Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 05/14] blockjob: Introduce reference count Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 06/14] blockjob: Add .commit and .abort block job actions Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 07/14] blockjob: Add "completed" and "ret" in BlockJob Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 08/14] blockjob: Simplify block_job_finish_sync Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 09/14] block: Add block job transactions Fam Zheng
2015-09-22 19:09   ` John Snow
2015-09-24  8:29     ` Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 10/14] blockdev: make BlockJobTxn available to qmp 'transaction' Fam Zheng
2015-09-22 19:13   ` John Snow
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 11/14] block/backup: support block job transactions Fam Zheng
2015-09-22 16:03   ` Eric Blake
2015-09-22 21:08   ` John Snow
2015-09-22 22:34     ` Eric Blake
2015-09-22 23:27       ` John Snow
2015-09-23 11:09         ` Markus Armbruster
2015-09-23 16:14           ` John Snow
2015-09-24  6:34             ` Markus Armbruster
2015-09-25 16:05               ` John Snow
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 12/14] iotests: 124 - transactional failure test Fam Zheng
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 13/14] qmp-commands.hx: Update the supported 'transaction' operations Fam Zheng
2015-09-30 18:56   ` John Snow
2015-10-01 10:57     ` Kashyap Chamarthy
2015-09-22  2:46 ` [Qemu-devel] [PATCH v7 14/14] tests: add BlockJobTxn unit test Fam Zheng
2015-09-22 23:33   ` John Snow
2015-09-22 20:48 ` John Snow [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=5601BEAF.9060706@redhat.com \
    --to=jsnow@redhat.com \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --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).