On Thu, Jan 25, 2018 at 19:51:23 +0530, Prerna Saxena wrote: > In case of non-p2p migration, in case libvirt client gets disconnected from source libvirt > after PERFORM phase is over, the daemon just resets the current migration job. > However, the VM could be left paused on both source and destination in such case. In case > the client reconnects and queries migration status, the job has been blanked out from source libvirt, > and this reconnected client has no clear way of figuring out if an unclean migration had previously > been aborted. The virDomainGetState API should return VIR_DOMAIN_PAUSED with VIR_DOMAIN_PAUSED_MIGRATION reason. Is this not enough? > This patch calls out a "potentially" incomplete migration as a failed > job, so that a client may As you say it's potentially incomplete, so marking it as failed is not completely correct. It's a split brain when the source cannot distinguish whether the migration was successful or not. > diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c > index e8e0313..7c60d17 100644 > --- a/src/qemu/qemu_domain.c > +++ b/src/qemu/qemu_domain.c > @@ -4564,6 +4564,22 @@ qemuDomainObjDiscardAsyncJob(virQEMUDriverPtr driver, virDomainObjPtr obj) > qemuDomainObjSaveJob(driver, obj); > } > > + > +void > +qemuDomainObjFailAsyncJob(virQEMUDriverPtr driver, virDomainObjPtr obj) > +{ > + qemuDomainObjPrivatePtr priv = obj->privateData; > + VIR_FREE(priv->job.completed); > + if (VIR_ALLOC(priv->job.completed) == 0) { > + priv->job.current->type = VIR_DOMAIN_JOB_FAILED; > + priv->job.completed = priv->job.current; This will just leak the memory allocated for priv->job.completed by overwriting the pointer to the one from priv->job.current, ... > + } else { > + VIR_WARN("Unable to allocate job.completed for VM %s", obj->def->name); > + } > + qemuDomainObjResetAsyncJob(priv); which will point to a freed memory after this call. > + qemuDomainObjEndJob(driver, obj); And while this is almost certainly (I didn't really check though) not something you should call from a close callback, you don't save the changes to the status XML so once libvirtd restarts, it will think the domain is still being migrated. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list