Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.4:ARM
libvirt.9813
47da84e0-libxl-fix-job-handling-migsrc.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 47da84e0-libxl-fix-job-handling-migsrc.patch of Package libvirt.9813
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.0.0/src/libxl/libxl_migration.c =================================================================== --- libvirt-4.0.0.orig/src/libxl/libxl_migration.c +++ libvirt-4.0.0/src/libxl/libxl_migration.c @@ -400,6 +400,11 @@ libxlDomainMigrationBegin(virConnectPtr 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; @@ -429,6 +434,9 @@ libxlDomainMigrationBegin(virConnectPtr 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); @@ -1177,6 +1185,14 @@ libxlDomainMigrationPerformP2P(libxlDriv ret = libxlDoMigrateP2P(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); @@ -1240,11 +1256,17 @@ libxlDomainMigrationPerform(libxlDriverP ret = libxlDoMigrateSend(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); @@ -1405,6 +1427,8 @@ libxlDomainMigrationConfirm(libxlDriverP ret = 0; cleanup: + /* EndJob for corresponding BeginJob in begin phase */ + libxlDomainObjEndJob(driver, vm); if (event) libxlDomainEventQueue(driver, event); virObjectUnref(cfg);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor