From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, hreitz@redhat.com, stefanha@redhat.com,
pkrempa@redhat.com, peterx@redhat.com, farosas@suse.de,
qemu-devel@nongnu.org
Subject: [PATCH v3 00/16] block: Managing inactive nodes (QSD migration)
Date: Tue, 4 Feb 2025 22:13:51 +0100 [thread overview]
Message-ID: <20250204211407.381505-1-kwolf@redhat.com> (raw)
This series adds a mechanism that allows the user or management tool to
manually activate and inactivate block nodes instead of fully relying on
the automatic management in the migration code.
One case where this is needed is for migration with shared storage and
devices backed by qemu-storage-daemon, which as an external process is
not involved in the VM migration. Management tools can manually
orchestrate the handover in this scenario. The new qemu-iotests case
qsd-migrate demonstrates this.
There are other cases without qemu-storage-daemon where manual
management is necessary. For example, after migration, the destination
VM only activates images on 'cont', but after migrating a paused VM, the
user may want to perform operations on a block node while the VM is
still paused.
This series adds support for block exports on an inactive node (needed
for shared storage migration with qemu-storage-daemon) only to NBD.
Adding it to other export types will be done in a future series.
v3:
- Moved bdrv_is_inactive() to patch 1 to fix the build [Fabiano]
- Patch 5 ('block: Allow inactivating already inactive nodes') has
become patch 2 to fix the logical ordering [Eric]
- Patch 8: Fixed typo in the documentation [Eric]
- Patch 10: Fixed typo in the commit message [Stefan]
- Added Patch 11: Drain nodes for setting inactive flag [Stefan]
- Patch 14: Test reading inactive images from both sides [Eric]
- Patch 16: Fix typo in a comment [Eric]
v2:
- Added a comprehensive test case that tests how inactive nodes
interoperate with many operations
- Added a couple of fixes for bugs uncovered by the tests (that would
usually lead to crashes when an unsupported operation is performed on
inactive nodes)
- Added 'active' status to query-block information
Kevin Wolf (16):
block: Add 'active' field to BlockDeviceInfo
block: Allow inactivating already inactive nodes
block: Inactivate external snapshot overlays when necessary
migration/block-active: Remove global active flag
block: Don't attach inactive child to active node
block: Fix crash on block_resize on inactive node
block: Add option to create inactive nodes
block: Add blockdev-set-active QMP command
block: Support inactive nodes in blk_insert_bs()
block/export: Don't ignore image activation error in blk_exp_add()
block: Drain nodes before inactivating them
block/export: Add option to allow export of inactive nodes
nbd/server: Support inactive nodes
iotests: Add filter_qtest()
iotests: Add qsd-migrate case
iotests: Add (NBD-based) tests for inactive nodes
qapi/block-core.json | 44 ++-
qapi/block-export.json | 10 +-
include/block/block-common.h | 1 +
include/block/block-global-state.h | 6 +
include/block/export.h | 3 +
migration/migration.h | 3 -
block.c | 64 +++-
block/block-backend.c | 16 +-
block/export/export.c | 29 +-
block/monitor/block-hmp-cmds.c | 5 +-
block/qapi.c | 1 +
blockdev.c | 48 +++
migration/block-active.c | 46 ---
migration/migration.c | 8 -
nbd/server.c | 17 +
tests/qemu-iotests/iotests.py | 8 +
tests/qemu-iotests/041 | 4 +-
tests/qemu-iotests/165 | 4 +-
tests/qemu-iotests/184.out | 2 +
tests/qemu-iotests/191.out | 16 +
tests/qemu-iotests/273.out | 5 +
tests/qemu-iotests/tests/copy-before-write | 3 +-
tests/qemu-iotests/tests/inactive-node-nbd | 303 ++++++++++++++++++
.../qemu-iotests/tests/inactive-node-nbd.out | 239 ++++++++++++++
tests/qemu-iotests/tests/migrate-bitmaps-test | 7 +-
tests/qemu-iotests/tests/qsd-migrate | 140 ++++++++
tests/qemu-iotests/tests/qsd-migrate.out | 59 ++++
27 files changed, 1004 insertions(+), 87 deletions(-)
create mode 100755 tests/qemu-iotests/tests/inactive-node-nbd
create mode 100644 tests/qemu-iotests/tests/inactive-node-nbd.out
create mode 100755 tests/qemu-iotests/tests/qsd-migrate
create mode 100644 tests/qemu-iotests/tests/qsd-migrate.out
--
2.48.1
next reply other threads:[~2025-02-04 21:18 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-04 21:13 Kevin Wolf [this message]
2025-02-04 21:13 ` [PATCH v3 01/16] block: Add 'active' field to BlockDeviceInfo Kevin Wolf
2025-02-04 21:13 ` [PATCH v3 02/16] block: Allow inactivating already inactive nodes Kevin Wolf
2025-02-04 21:13 ` [PATCH v3 03/16] block: Inactivate external snapshot overlays when necessary Kevin Wolf
2025-02-04 21:13 ` [PATCH v3 04/16] migration/block-active: Remove global active flag Kevin Wolf
2025-02-04 21:13 ` [PATCH v3 05/16] block: Don't attach inactive child to active node Kevin Wolf
2025-02-04 21:13 ` [PATCH v3 06/16] block: Fix crash on block_resize on inactive node Kevin Wolf
2025-02-04 21:13 ` [PATCH v3 07/16] block: Add option to create inactive nodes Kevin Wolf
2025-02-04 21:13 ` [PATCH v3 08/16] block: Add blockdev-set-active QMP command Kevin Wolf
2025-02-04 21:14 ` [PATCH v3 09/16] block: Support inactive nodes in blk_insert_bs() Kevin Wolf
2025-02-04 21:14 ` [PATCH v3 10/16] block/export: Don't ignore image activation error in blk_exp_add() Kevin Wolf
2025-02-04 21:14 ` [PATCH v3 11/16] block: Drain nodes before inactivating them Kevin Wolf
2025-02-05 20:42 ` Eric Blake
2025-02-04 21:14 ` [PATCH v3 12/16] block/export: Add option to allow export of inactive nodes Kevin Wolf
2025-02-04 21:14 ` [PATCH v3 13/16] nbd/server: Support " Kevin Wolf
2025-02-05 20:43 ` Eric Blake
2025-02-04 21:14 ` [PATCH v3 14/16] iotests: Add filter_qtest() Kevin Wolf
2025-02-04 21:14 ` [PATCH v3 15/16] iotests: Add qsd-migrate case Kevin Wolf
2025-02-05 20:46 ` Eric Blake
2025-02-24 10:23 ` Thomas Huth
2025-02-24 13:13 ` Kevin Wolf
2025-02-04 21:14 ` [PATCH v3 16/16] iotests: Add (NBD-based) tests for inactive nodes Kevin Wolf
2025-02-05 20:49 ` Eric Blake
2025-02-05 15:35 ` [PATCH v3 00/16] block: Managing inactive nodes (QSD migration) Stefan Hajnoczi
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=20250204211407.381505-1-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=farosas@suse.de \
--cc=hreitz@redhat.com \
--cc=peterx@redhat.com \
--cc=pkrempa@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).