[libvirt] [PATCHv9 2/9] blockjob: react to active block copy
Peter Krempa
pkrempa at redhat.com
Thu Oct 25 20:57:53 UTC 2012
On 10/23/12 04:10, Eric Blake wrote:
> For now, disk migration via block copy job is not implemented in
> libvirt. But when we do implement it, we have to deal with the
> fact that qemu does not yet provide an easy way to re-start a qemu
> process with mirroring still intact. Paolo has proposed an idea
> for a persistent dirty bitmap that might make this possible, but
> until that design is complete, it's hard to say what changes
> libvirt would need. 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 for now, 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, migration,
> 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).
> Later, if the qemu design is enhanced, we can relax our code.
>
> 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.
> * src/qemu/qemu_migration.c (qemuMigrationIsAllowed): Likewise.
> ---
>
> v9: also inhibit migration during active block job
>
> 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 +++++++
> src/qemu/qemu_migration.c | 5 +++++
> 6 files changed, 55 insertions(+)
>
ACK.
Peter
More information about the libvir-list
mailing list