[libvirt] [PATCHv5 07/23] blockjob: react to active block copy

Jiri Denemark jdenemar at redhat.com
Thu Apr 19 20:09:08 UTC 2012


On Mon, Apr 16, 2012 at 23:05:58 -0600, Eric Blake wrote:
> For now, disk migration via block copy job is not implemented.  But
> when we do implement it, we have to deal with the fact that qemu does
> not provide an easy way to re-start a qemu process with mirroring
> still intact (it _might_ be possible by using qemu -S then an
> initial 'drive-mirror' with disk reuse before starting the domain,
> but that gets hairy).  Even something like 'virDomainSave' becomes
> hairy, if you realize the implications that 'virDomainRestore' would
> be stuck with recreating the same mirror layout.
> 
> But if we step back and look at the bigger picture, we realize that
> the initial client of live storage migration via disk mirroring is
> oVirt, which always uses transient domains, and that if a transient
> domain is destroyed while a mirror exists, oVirt can easily restart
> the storage migration by creating a new domain that visits just the
> source storage, with no loss in data.
> 
> We can make life a lot easier by being cowards, and forbidding
> certain operations on a domain.  This patch guarantees that we
> never get in a state where we would have to restart a domain with
> a mirroring block copy, by preventing saves, snapshots, hot
> unplug of a disk in use, and conversion to a persistent domain
> (thankfully, it is still relatively easy to 'virsh undefine' a
> running domain to temporarily make it transient, run tests on
> 'virsh blockcopy', then 'virsh define' to restore the persistence).
> 
> The change to qemudDomainDefine looks a bit odd for undoing an
> assignment, rather than probing up front to avoid the assignment,
> but this is because of how virDomainAssignDef combines both a
> lookup and assignment into a single function call.
> 
> * src/conf/domain_conf.h (virDomainHasDiskMirror): New prototype.
> * src/conf/domain_conf.c (virDomainHasDiskMirror): New function.
> * src/libvirt_private.syms (domain_conf.h): Export it.
> * src/qemu/qemu_driver.c (qemuDomainSaveInternal)
> (qemuDomainSnapshotCreateXML, qemuDomainRevertToSnapshot)
> (qemuDomainBlockJobImpl, qemudDomainDefine): Prevent dangerous
> actions while block copy is already in action.
> * src/qemu/qemu_hotplug.c (qemuDomainDetachDiskDevice): Likewise.
> ---
> 
> was 8/18 in v4
> v5: improve commit message
> 
>  src/conf/domain_conf.c   |   12 ++++++++++++
>  src/conf/domain_conf.h   |    1 +
>  src/libvirt_private.syms |    1 +
>  src/qemu/qemu_driver.c   |   29 +++++++++++++++++++++++++++++
>  src/qemu/qemu_hotplug.c  |    7 +++++++
>  5 files changed, 50 insertions(+), 0 deletions(-)

OK, nice commit message improvement.

Jirka




More information about the libvir-list mailing list