From: Alberto Garcia <berto@igalia.com>
To: qemu-devel@nongnu.org
Cc: qemu-block@nongnu.org, Kevin Wolf <kwolf@redhat.com>,
Max Reitz <mreitz@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Alberto Garcia <berto@igalia.com>
Subject: [Qemu-devel] [PATCH v10 00/16] Support streaming to an intermediate layer
Date: Thu, 6 Oct 2016 16:02:43 +0300 [thread overview]
Message-ID: <cover.1475757437.git.berto@igalia.com> (raw)
Hi all,
6 months after v9, and more than a year after v8, here's the new
version of the intermediate block streaming series.
There have been so many changes in QEMU since then that all patches in
this series are either new or have changed. Still, some of the most
important changes have been merged in separate series during all these
months (job IDs, support for "read-only" in the options QDict, etc.).
What's left can be roughly divided into:
- Patch 1: pause all block jobs during bdrv_reopen(). See the patch
description for details.
- Patches 2-7: All jobs now block all BDSs that are involved in them,
and not simply the root node.
- Patches 8-9: Support streaming to an intermediate layer. This
is a rather simple change now and is similar to patches 2-7.
- Patch 10: Documentation (this one almost didn't change).
- Patches 11-16: Tests.
As you will see, the actual functional changes are rather simple. What
is there is many op blockers and many tests. I tried to write tests
for all scenarios that I could think of and I actually found a few
problems on the way, but I believe the code is stable now.
As always, comments and questions will be appreciated.
Berto
P.S. I don't include the backport-diff output because most patches are
new.
v10:
- Rebase the code.
- Pause block jobs during bdrv_reopen().
- Allow jobs in parallel again, and modify jobs to block all involved
nodes, not just the root one.
- Add more tests.
v9: https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg00411.html
- Rebase the code
- Block the active layer in order to forbid other block jobs in the
same chain.
- Split the patch that adds block_job_next() into 4 (new patches 1-4).
- Replace the test that performs several block-stream operations in
parallel with one that check that they're forbidden.
- Remove patches that have already been merged.
v8: https://lists.gnu.org/archive/html/qemu-devel/2015-06/msg05754.html
- Rebased on top of Stefan's block branch (0a35bce416)
- The loop that pauses the block jobs in bdrv_drain_all() is now split
in two: one that iterates the list of block jobs to stop them, and
one that iterates the root bds in order to get the aio contexts.
v7: https://lists.gnu.org/archive/html/qemu-devel/2015-05/msg02580.html
- Rebased against the current master
- Updated bdrv_drain_all() to use the new block_job_next() API.
v6: https://lists.gnu.org/archive/html/qemu-devel/2015-04/msg03046.html
- fix the no-op test following Max's suggestions
v5: https://lists.gnu.org/archive/html/qemu-devel/2015-04/msg03006.html
- Fix a few typos
- Minor documentation updates
- Update test_stream_partial() to test no-ops
- New test case: test_stream_parallel()
- New test case: test_stream_overlapping()
v4: https://lists.gnu.org/archive/html/qemu-devel/2015-04/msg01878.html
- Refactor find_block_job to use the error from bdrv_lookup_bs()
- Don't use QERR_DEVICE_IN_USE in block_job_create() since we can be
dealing with nodes now.
- Fix @device comment in the BlockJobInfo documentation
- stream_start(): simplify the bdrv_reopen() call and use
bdrv_get_device_or_node_name() for error messages.
- Use a different variable name for BlockDriverState *i
- Documentation fixes in docs/live-block-ops.txt
- Update iotest 30 since now test_device_not_found() returns
GenericError
- Fix test case test_stream_partial()
- Add new test case test_stream_intermediate()
- Fix typos
v3: https://lists.gnu.org/archive/html/qemu-devel/2015-04/msg00806.html
- Keep a list of block jobs and make qmp_query_block_jobs() iterate
over it.
v2: https://lists.gnu.org/archive/html/qemu-devel/2015-03/msg04798.html
- The 'block-stream' command does not have a 'node-name' parameter
anymore and reuses 'device' for that purpose.
- Block jobs can now be owned by any intermediate node, and not just
by the ones at the root. query-block-jobs is updated to reflect that
change.
- The 'device' parameter of all 'block-job-*' commands can now take a
node name.
- The BlockJobInfo type and all BLOCK_JOB_* events report the node
name in the 'device' field if the node does not have a device name.
- All intermediate nodes are blocked (and checked for blockers) during
the streaming operation.
v1: https://lists.gnu.org/archive/html/qemu-devel/2015-02/msg04116.html
Alberto Garcia (16):
block: Pause all jobs during bdrv_reopen_multiple()
block: Add block_job_add_bdrv()
block: Use block_job_add_bdrv() in mirror_start_job()
block: Use block_job_add_bdrv() in backup_start()
block: Check blockers in all nodes involved in a block-commit job
block: Block all nodes involved in the block-commit operation
block: Block all intermediate nodes in commit_active_start()
block: Support streaming to an intermediate layer
block: Add QMP support for streaming to an intermediate layer
docs: Document how to stream to an intermediate layer
qemu-iotests: Test streaming to an intermediate layer
qemu-iotests: Test block-stream operations in parallel
qemu-iotests: Test overlapping stream and commit operations
qemu-iotests: Test block-stream and block-commit in parallel
qemu-iotests: Add iotests.supports_quorum()
qemu-iotests: Test streaming to a Quorum child
block.c | 25 +++-
block/backup.c | 5 +-
block/commit.c | 10 ++
block/mirror.c | 11 +-
block/stream.c | 24 ++++
blockdev.c | 22 +++-
blockjob.c | 19 ++-
docs/live-block-ops.txt | 31 +++--
include/block/blockjob.h | 14 +++
qapi/block-core.json | 10 +-
tests/qemu-iotests/030 | 276 +++++++++++++++++++++++++++++++++++++++++-
tests/qemu-iotests/030.out | 4 +-
tests/qemu-iotests/041 | 27 ++---
tests/qemu-iotests/139 | 3 +-
tests/qemu-iotests/iotests.py | 5 +-
15 files changed, 438 insertions(+), 48 deletions(-)
--
2.9.3
next reply other threads:[~2016-10-06 13:03 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-06 13:02 Alberto Garcia [this message]
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 01/16] block: Pause all jobs during bdrv_reopen_multiple() Alberto Garcia
2016-10-10 15:37 ` Kevin Wolf
2016-10-10 16:41 ` Paolo Bonzini
2016-10-11 9:39 ` Kevin Wolf
2016-10-11 9:54 ` Paolo Bonzini
2016-10-11 11:07 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 02/16] block: Add block_job_add_bdrv() Alberto Garcia
2016-10-10 15:46 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 03/16] block: Use block_job_add_bdrv() in mirror_start_job() Alberto Garcia
2016-10-10 16:03 ` Kevin Wolf
2016-10-11 8:20 ` Paolo Bonzini
2016-10-11 13:46 ` Alberto Garcia
2016-10-11 14:01 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 04/16] block: Use block_job_add_bdrv() in backup_start() Alberto Garcia
2016-10-12 13:47 ` Kevin Wolf
2016-10-12 13:57 ` Alberto Garcia
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 05/16] block: Check blockers in all nodes involved in a block-commit job Alberto Garcia
2016-10-12 13:47 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 06/16] block: Block all nodes involved in the block-commit operation Alberto Garcia
2016-10-12 13:54 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 07/16] block: Block all intermediate nodes in commit_active_start() Alberto Garcia
2016-10-12 14:06 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 08/16] block: Support streaming to an intermediate layer Alberto Garcia
2016-10-12 14:23 ` Kevin Wolf
2016-10-12 14:33 ` Alberto Garcia
2016-10-12 14:45 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 09/16] block: Add QMP support for " Alberto Garcia
2016-10-10 19:09 ` Eric Blake
2016-10-11 14:30 ` Alberto Garcia
2016-10-11 14:57 ` Kevin Wolf
2016-10-11 15:53 ` Eric Blake
2016-10-11 16:50 ` Markus Armbruster
2016-10-12 9:11 ` Kevin Wolf
2016-10-12 9:25 ` Alberto Garcia
2016-10-11 16:32 ` Markus Armbruster
2016-10-12 9:28 ` Alberto Garcia
2016-10-12 12:17 ` Markus Armbruster
2016-10-12 14:30 ` Kevin Wolf
2016-10-12 14:48 ` Alberto Garcia
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 10/16] docs: Document how to stream " Alberto Garcia
2016-10-12 14:39 ` Kevin Wolf
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 11/16] qemu-iotests: Test streaming " Alberto Garcia
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 12/16] qemu-iotests: Test block-stream operations in parallel Alberto Garcia
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 13/16] qemu-iotests: Test overlapping stream and commit operations Alberto Garcia
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 14/16] qemu-iotests: Test block-stream and block-commit in parallel Alberto Garcia
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 15/16] qemu-iotests: Add iotests.supports_quorum() Alberto Garcia
2016-10-06 13:02 ` [Qemu-devel] [PATCH v10 16/16] qemu-iotests: Test streaming to a Quorum child Alberto Garcia
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=cover.1475757437.git.berto@igalia.com \
--to=berto@igalia.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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).