[PATCH 0/8] qemu: Show willingness to use blockdev-reopen

Peter Krempa pkrempa at redhat.com
Fri Feb 28 13:39:52 UTC 2020


To break the chicken and egg problem loop between qemu and libvirt in
using new features introduce experimental support for blockdev-reopen
(or actually x-blockdev-reopen for the time being).

This patchset adds QEMU_CAPS_BLOCKDEV_REOPEN capability which is
currently not asserted until qemu stabilizes the blockdev-reopen
interface but implements all the handlers to use it.

This is a similar approach we used to add all of the bits required to
use -blockdev with qemu.

To show it's usefullnes two real problems are addressed using reopening:
- Checkpoint deletion in backing chain, where we need to reopen
  the read-only backing images to allow modification of bitmaps.

  Using this approach will prevent qemu from having to introduce yet
  another ad-hoc interface to deal with the bitmaps.

  (note that checkpoints are also experimental themselves since they
   are part of the not-yet-finished incremental backup feature)

- Late open of backing files for virDomainBlockCopy

  oVirt abuses a quirk in the old handling of block-copy when
  drive-mirror is used as qemu opens the backing images of the
  destination of the copy only once block-job-complete is called.

  Without blockdev-reopen it's impossible to replicate the old semantics
  as we need to install a backing file for the mirror copy and that
  is possible only using blockdev-reopen.

  (this change will stay disabled until blockdev-reopen is stabilized)

There are a few other problems which this will deal with  mostly related
to bitmap handling which would also require ad-hoc qemu functionality
otherwise.

Since we have an existing interface we can show we are willing to use it
to prevent wasting more engieering on qemu's side on partial solutions.

This patchset applies on top of:

https://www.redhat.com/archives/libvir-list/2020-February/msg01062.html

It can be fetched from my repo:

 git fetch https://gitlab.com/pipo.sk/libvirt.git reopen-impl

 https://gitlab.com/pipo.sk/libvirt/-/commits/reopen-impl

 Note the above branch contains also patches which enable the feature
 and also enable incremental backup to facilitate simple testing
 without the need to use the qemu namespace.


Successful use requires the following qemu patches:

https://lists.gnu.org/archive/html/qemu-block/2020-02/msg01423.html
https://lists.gnu.org/archive/html/qemu-block/2020-02/msg01467.html

 A qemu repo containing the above patches and patch to enable the
 detection done in my private brnch mentioned above can be fetched at:

 git fetch https://gitlab.com/pipo.sk/qemu.git bitmap-reopen

 https://gitlab.com/pipo.sk/qemu/-/commits/bitmap-reopen

Peter Krempa (8):
  qemu: capabilities: Add QEMU_CAPS_BLOCKDEV_REOPEN
  qemu: monitor: Add handler for blockdev-reopen
  qemu: block: implement helpers for blockdev-reopen
  qemuCheckpointDiscardBitmaps: Reopen images for bitmap modifications
  qemuCheckpointDiscardBitmaps: Use correct field for checkpoint bitmap
    name
  qemuDomainBlockPivot: Move check prior to executing the pivot steps
  qemuDomainBlockCopyCommon: Record updated flags to block job
  qemu: blockcopy: Allow late opening of the backing chain of a shallow
    copy

 src/qemu/qemu_block.c        | 121 +++++++++++++++++++++++++++++++++++
 src/qemu/qemu_block.h        |  14 ++++
 src/qemu/qemu_capabilities.c |   1 +
 src/qemu/qemu_capabilities.h |   1 +
 src/qemu/qemu_checkpoint.c   |   6 +-
 src/qemu/qemu_driver.c       |  67 ++++++++++++++++---
 src/qemu/qemu_monitor.c      |  13 ++++
 src/qemu/qemu_monitor.h      |   3 +
 src/qemu/qemu_monitor_json.c |  21 ++++++
 src/qemu/qemu_monitor_json.h |   4 ++
 10 files changed, 241 insertions(+), 10 deletions(-)

-- 
2.24.1




More information about the libvir-list mailing list