mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: Add support for VIR_MIGRATE_POSTCOPY flag
Signed-off-by: Cristian Klein <cristiklein@gmail.com> Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
41d786b915
commit
e8d2ff6ff2
@ -2419,6 +2419,22 @@ qemuMigrationSetOption(virQEMUDriverPtr driver,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuMigrationSetPostCopy(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
bool state,
|
||||||
|
qemuDomainAsyncJob job)
|
||||||
|
{
|
||||||
|
if (qemuMigrationSetOption(driver, vm,
|
||||||
|
QEMU_MONITOR_MIGRATION_CAPS_POSTCOPY,
|
||||||
|
state, job) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuMigrationWaitForSpice(virDomainObjPtr vm)
|
qemuMigrationWaitForSpice(virDomainObjPtr vm)
|
||||||
{
|
{
|
||||||
@ -3055,6 +3071,15 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver,
|
|||||||
!qemuMigrationIsSafe(vm->def, nmigrate_disks, migrate_disks))
|
!qemuMigrationIsSafe(vm->def, nmigrate_disks, migrate_disks))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (flags & VIR_MIGRATE_POSTCOPY &&
|
||||||
|
(!(flags & VIR_MIGRATE_LIVE) ||
|
||||||
|
flags & VIR_MIGRATE_PAUSED)) {
|
||||||
|
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||||
|
_("post-copy migration is not supported with non-live "
|
||||||
|
"or paused migration"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC)) {
|
if (flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC)) {
|
||||||
bool has_drive_mirror = virQEMUCapsGet(priv->qemuCaps,
|
bool has_drive_mirror = virQEMUCapsGet(priv->qemuCaps,
|
||||||
QEMU_CAPS_DRIVE_MIRROR);
|
QEMU_CAPS_DRIVE_MIRROR);
|
||||||
@ -3395,6 +3420,15 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
|
|||||||
cookieFlags = QEMU_MIGRATION_COOKIE_GRAPHICS;
|
cookieFlags = QEMU_MIGRATION_COOKIE_GRAPHICS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & VIR_MIGRATE_POSTCOPY &&
|
||||||
|
(!(flags & VIR_MIGRATE_LIVE) ||
|
||||||
|
flags & VIR_MIGRATE_PAUSED)) {
|
||||||
|
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||||
|
_("post-copy migration is not supported with non-live "
|
||||||
|
"or paused migration"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -3548,6 +3582,11 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
|
|||||||
QEMU_ASYNC_JOB_MIGRATION_IN) < 0)
|
QEMU_ASYNC_JOB_MIGRATION_IN) < 0)
|
||||||
goto stopjob;
|
goto stopjob;
|
||||||
|
|
||||||
|
if (qemuMigrationSetPostCopy(driver, vm,
|
||||||
|
flags & VIR_MIGRATE_POSTCOPY,
|
||||||
|
QEMU_ASYNC_JOB_MIGRATION_IN) < 0)
|
||||||
|
goto stopjob;
|
||||||
|
|
||||||
if (mig->nbd &&
|
if (mig->nbd &&
|
||||||
flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC) &&
|
flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC) &&
|
||||||
virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NBD_SERVER)) {
|
virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NBD_SERVER)) {
|
||||||
@ -4453,6 +4492,11 @@ qemuMigrationRun(virQEMUDriverPtr driver,
|
|||||||
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
|
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuMigrationSetPostCopy(driver, vm,
|
||||||
|
flags & VIR_MIGRATE_POSTCOPY,
|
||||||
|
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
if (qemuDomainObjEnterMonitorAsync(driver, vm,
|
if (qemuDomainObjEnterMonitorAsync(driver, vm,
|
||||||
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
|
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -41,7 +41,8 @@
|
|||||||
VIR_MIGRATE_COMPRESSED | \
|
VIR_MIGRATE_COMPRESSED | \
|
||||||
VIR_MIGRATE_ABORT_ON_ERROR | \
|
VIR_MIGRATE_ABORT_ON_ERROR | \
|
||||||
VIR_MIGRATE_AUTO_CONVERGE | \
|
VIR_MIGRATE_AUTO_CONVERGE | \
|
||||||
VIR_MIGRATE_RDMA_PIN_ALL)
|
VIR_MIGRATE_RDMA_PIN_ALL | \
|
||||||
|
VIR_MIGRATE_POSTCOPY)
|
||||||
|
|
||||||
/* All supported migration parameters and their types. */
|
/* All supported migration parameters and their types. */
|
||||||
# define QEMU_MIGRATION_PARAMETERS \
|
# define QEMU_MIGRATION_PARAMETERS \
|
||||||
|
Loading…
Reference in New Issue
Block a user