forked from pool/libvirt
827fa7dc68
- libxl: fix VM migration on busy hosts 60b4fd90-libxl-rm-vm-finish-phase.patch, e39c66d3-libxl-fix-p2p-migration.patch, 47da84e0-libxl-fix-job-handling-migsrc.patch, 0149464a-libxl-fix-job-handling-migdst.patch, 5ea2abb3-libxl-join-mig-rcv-thread.patch bsc#1108086 - Update to libvirt 4.7.0 - Many incremental improvements and bug fixes, see http://libvirt.org/news.html - Dropped patches: 9ed59012--revert-jansson1.patch, 54f2b5e3-revert-jansson2.patch, b56950fd-revert-jansson3.patch, 6c3d66ac-revert-jansson4.patch, 8e373e6d-revert-jansson5.patch, 6f99de31-revert-jansson6.patch, f204cf51-revert-jansson7.patch, 5a58b5ed-revert-jansson8.patch, 63f6e0e9-revert-jansson9.patch, 8687eba-revert-jansson10.patch, e96e71d8-revert-jansson11.patch, d99a8959-revert-jansson12.patch, 074a7e14-revert-jansson13.patch OBS-URL: https://build.opensuse.org/request/show/636920 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=704
89 lines
3.1 KiB
Diff
89 lines
3.1 KiB
Diff
commit 47da84e09044e5af914a64469d06adef34279964
|
|
Author: Jim Fehlig <jfehlig@suse.com>
|
|
Date: Tue Aug 28 17:30:18 2018 -0600
|
|
|
|
libxl: fix job handling across migration phases on src
|
|
|
|
The libxlDomainMigrationSrc* functions are a bit flawed in their
|
|
handling of modify jobs. A job begins at the start of the begin
|
|
phase but ends before the phase completes. No job is running for
|
|
the remaining phases of migration on the source host.
|
|
|
|
Change the logic to keep the job running after a successful begin
|
|
phase, and end the job in the confirm phase. The job must also end
|
|
in the perform phase in the case of error since confirm phase would
|
|
not be executed.
|
|
|
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
|
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
|
Index: libvirt-4.7.0/src/libxl/libxl_migration.c
|
|
===================================================================
|
|
--- libvirt-4.7.0.orig/src/libxl/libxl_migration.c
|
|
+++ libvirt-4.7.0/src/libxl/libxl_migration.c
|
|
@@ -399,6 +399,11 @@ libxlDomainMigrationSrcBegin(virConnectP
|
|
virDomainDefPtr def;
|
|
char *xml = NULL;
|
|
|
|
+ /*
|
|
+ * In the case of successful migration, a job is started here and
|
|
+ * terminated in the confirm phase. Errors in the begin or perform
|
|
+ * phase will also terminate the job.
|
|
+ */
|
|
if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0)
|
|
goto cleanup;
|
|
|
|
@@ -428,6 +433,9 @@ libxlDomainMigrationSrcBegin(virConnectP
|
|
goto endjob;
|
|
|
|
xml = virDomainDefFormat(def, cfg->caps, VIR_DOMAIN_DEF_FORMAT_SECURE);
|
|
+ /* Valid xml means success! EndJob in the confirm phase */
|
|
+ if (xml)
|
|
+ goto cleanup;
|
|
|
|
endjob:
|
|
libxlDomainObjEndJob(driver, vm);
|
|
@@ -1169,6 +1177,14 @@ libxlDomainMigrationSrcPerformP2P(libxlD
|
|
ret = libxlDoMigrateSrcP2P(driver, vm, sconn, xmlin, dconn, dconnuri,
|
|
dname, uri_str, flags);
|
|
|
|
+ if (ret < 0) {
|
|
+ /*
|
|
+ * Confirm phase will not be executed if perform fails. End the
|
|
+ * job started in begin phase.
|
|
+ */
|
|
+ libxlDomainObjEndJob(driver, vm);
|
|
+ }
|
|
+
|
|
cleanup:
|
|
orig_err = virSaveLastError();
|
|
virObjectUnlock(vm);
|
|
@@ -1232,11 +1248,17 @@ libxlDomainMigrationSrcPerform(libxlDriv
|
|
ret = libxlDoMigrateSrcSend(driver, vm, flags, sockfd);
|
|
virObjectLock(vm);
|
|
|
|
- if (ret < 0)
|
|
+ if (ret < 0) {
|
|
virDomainLockProcessResume(driver->lockManager,
|
|
"xen:///system",
|
|
vm,
|
|
priv->lockState);
|
|
+ /*
|
|
+ * Confirm phase will not be executed if perform fails. End the
|
|
+ * job started in begin phase.
|
|
+ */
|
|
+ libxlDomainObjEndJob(driver, vm);
|
|
+ }
|
|
|
|
cleanup:
|
|
VIR_FORCE_CLOSE(sockfd);
|
|
@@ -1386,6 +1408,8 @@ libxlDomainMigrationSrcConfirm(libxlDriv
|
|
ret = 0;
|
|
|
|
cleanup:
|
|
+ /* EndJob for corresponding BeginJob in begin phase */
|
|
+ libxlDomainObjEndJob(driver, vm);
|
|
virObjectEventStateQueue(driver->domainEventState, event);
|
|
virObjectUnref(cfg);
|
|
return ret;
|