qemu: Introduce qemuMigrationSrcBeginXML helper
Turn the final part of Begin phase formatting a domain XML for migration into a reusable helper. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
3c1f37848d
commit
ab3fd13932
@ -2458,6 +2458,60 @@ qemuMigrationAnyRefreshStatus(virQEMUDriver *driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *
|
||||||
|
qemuMigrationSrcBeginXML(virDomainObj *vm,
|
||||||
|
const char *xmlin,
|
||||||
|
char **cookieout,
|
||||||
|
int *cookieoutlen,
|
||||||
|
unsigned int cookieFlags,
|
||||||
|
const char **migrate_disks,
|
||||||
|
size_t nmigrate_disks,
|
||||||
|
unsigned long flags)
|
||||||
|
{
|
||||||
|
qemuDomainObjPrivate *priv = vm->privateData;
|
||||||
|
virQEMUDriver *driver = priv->driver;
|
||||||
|
g_autoptr(qemuMigrationCookie) mig = NULL;
|
||||||
|
|
||||||
|
if (priv->origCPU)
|
||||||
|
cookieFlags |= QEMU_MIGRATION_COOKIE_CPU;
|
||||||
|
|
||||||
|
if (!(flags & VIR_MIGRATE_OFFLINE))
|
||||||
|
cookieFlags |= QEMU_MIGRATION_COOKIE_CAPS;
|
||||||
|
|
||||||
|
if (!(mig = qemuMigrationCookieNew(vm->def, priv->origname)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (cookieFlags & QEMU_MIGRATION_COOKIE_NBD &&
|
||||||
|
virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING) &&
|
||||||
|
qemuMigrationSrcBeginPhaseBlockDirtyBitmaps(mig, vm, migrate_disks,
|
||||||
|
nmigrate_disks) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (qemuMigrationCookieFormat(mig, driver, vm,
|
||||||
|
QEMU_MIGRATION_SOURCE,
|
||||||
|
cookieout, cookieoutlen,
|
||||||
|
cookieFlags) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (xmlin) {
|
||||||
|
g_autoptr(virDomainDef) def = NULL;
|
||||||
|
|
||||||
|
if (!(def = virDomainDefParseString(xmlin, driver->xmlopt, priv->qemuCaps,
|
||||||
|
VIR_DOMAIN_DEF_PARSE_INACTIVE |
|
||||||
|
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!qemuDomainCheckABIStability(driver, vm, def))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return qemuDomainDefFormatLive(driver, priv->qemuCaps, def, NULL, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return qemuDomainDefFormatLive(driver, priv->qemuCaps, vm->def, priv->origCPU,
|
||||||
|
false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* The caller is supposed to lock the vm and start a migration job. */
|
/* The caller is supposed to lock the vm and start a migration job. */
|
||||||
static char *
|
static char *
|
||||||
qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
|
qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
|
||||||
@ -2470,8 +2524,6 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
|
|||||||
const char **migrate_disks,
|
const char **migrate_disks,
|
||||||
unsigned long flags)
|
unsigned long flags)
|
||||||
{
|
{
|
||||||
g_autoptr(qemuMigrationCookie) mig = NULL;
|
|
||||||
g_autoptr(virDomainDef) def = NULL;
|
|
||||||
qemuDomainObjPrivate *priv = vm->privateData;
|
qemuDomainObjPrivate *priv = vm->privateData;
|
||||||
unsigned int cookieFlags = QEMU_MIGRATION_COOKIE_LOCKSTATE;
|
unsigned int cookieFlags = QEMU_MIGRATION_COOKIE_LOCKSTATE;
|
||||||
|
|
||||||
@ -2589,41 +2641,10 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
|
|||||||
vm->newDef && !qemuDomainVcpuHotplugIsInOrder(vm->newDef)))
|
vm->newDef && !qemuDomainVcpuHotplugIsInOrder(vm->newDef)))
|
||||||
cookieFlags |= QEMU_MIGRATION_COOKIE_CPU_HOTPLUG;
|
cookieFlags |= QEMU_MIGRATION_COOKIE_CPU_HOTPLUG;
|
||||||
|
|
||||||
if (priv->origCPU)
|
return qemuMigrationSrcBeginXML(vm, xmlin,
|
||||||
cookieFlags |= QEMU_MIGRATION_COOKIE_CPU;
|
cookieout, cookieoutlen, cookieFlags,
|
||||||
|
migrate_disks, nmigrate_disks,
|
||||||
if (!(flags & VIR_MIGRATE_OFFLINE))
|
flags);
|
||||||
cookieFlags |= QEMU_MIGRATION_COOKIE_CAPS;
|
|
||||||
|
|
||||||
if (!(mig = qemuMigrationCookieNew(vm->def, priv->origname)))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (cookieFlags & QEMU_MIGRATION_COOKIE_NBD &&
|
|
||||||
virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING) &&
|
|
||||||
qemuMigrationSrcBeginPhaseBlockDirtyBitmaps(mig, vm, migrate_disks,
|
|
||||||
nmigrate_disks) < 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (qemuMigrationCookieFormat(mig, driver, vm,
|
|
||||||
QEMU_MIGRATION_SOURCE,
|
|
||||||
cookieout, cookieoutlen,
|
|
||||||
cookieFlags) < 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (xmlin) {
|
|
||||||
if (!(def = virDomainDefParseString(xmlin, driver->xmlopt, priv->qemuCaps,
|
|
||||||
VIR_DOMAIN_DEF_PARSE_INACTIVE |
|
|
||||||
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (!qemuDomainCheckABIStability(driver, vm, def))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return qemuDomainDefFormatLive(driver, priv->qemuCaps, def, NULL, false, true);
|
|
||||||
} else {
|
|
||||||
return qemuDomainDefFormatLive(driver, priv->qemuCaps, vm->def, priv->origCPU,
|
|
||||||
false, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user