[libvirt] [PATCH v2 7/8] Implement virDomainMigrateStartPostCopy in qemu
Jiri Denemark
jdenemar at redhat.com
Tue Oct 7 14:24:48 UTC 2014
On Tue, Sep 30, 2014 at 16:39:28 +0200, Cristian Klein wrote:
> Signed-off-by: Cristian Klein <cristian.klein at cs.umu.se>
> ---
> src/qemu/qemu_driver.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 50 insertions(+)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 3fe2216..1242b77 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -11950,6 +11950,55 @@ qemuDomainGetJobStats(virDomainPtr dom,
> }
>
>
> +static int qemuDomainMigrateStartPostCopy(virDomainPtr dom,
> + unsigned int flags)
> +{
> + virQEMUDriverPtr driver = dom->conn->privateData;
> + virDomainObjPtr vm;
> + int ret = -1;
> + qemuDomainObjPrivatePtr priv;
> +
> + virCheckFlags(0, -1);
> +
> + if (!(vm = qemuDomObjFromDomain(dom)))
> + goto cleanup;
return -1;
> +
> + if (virDomainMigrateStartPostCopyEnsureACL(dom->conn, vm->def) < 0)
> + return -1;
goto cleanup;
> +
> + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MIGRATION_OP) < 0)
> + goto cleanup;
> +
> + if (!virDomainObjIsActive(vm)) {
> + virReportError(VIR_ERR_OPERATION_INVALID,
> + "%s", _("domain is not running"));
> + goto endjob;
> + }
> +
> + priv = vm->privateData;
> +
> + if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) {
> + virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> + _("post-copy can only be started "
> + "while migration is in progress"));
> + goto cleanup;
goto endjob;
> + }
Do we need to explicitly check that post-copy was activated or is the
error we get from qemuMonitorMigrateStartPostCopy in such case good
enough?
> +
> + VIR_DEBUG("Starting post-copy");
> + qemuDomainObjEnterMonitor(driver, vm);
> + ret = qemuMonitorMigrateStartPostCopy(priv->mon);
> + qemuDomainObjExitMonitor(driver, vm);
> +
> + endjob:
> + if (!qemuDomainObjEndJob(driver, vm))
> + vm = NULL;
> +
> + cleanup:
> + if (vm)
> + virObjectUnlock(vm);
> + return ret;
> +}
> +
> static int qemuDomainAbortJob(virDomainPtr dom)
> {
> virQEMUDriverPtr driver = dom->conn->privateData;
> @@ -18419,6 +18468,7 @@ static virDriver qemuDriver = {
> .connectGetDomainCapabilities = qemuConnectGetDomainCapabilities, /* 1.2.7 */
> .connectGetAllDomainStats = qemuConnectGetAllDomainStats, /* 1.2.8 */
> .nodeAllocPages = qemuNodeAllocPages, /* 1.2.9 */
> + .domainMigrateStartPostCopy = qemuDomainMigrateStartPostCopy, /* 1.2.10 */
> };
Jirka
More information about the libvir-list
mailing list