mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
libxl: acquire job though begin phase only
During migration, the libxl driver starts a modify job in the begin phase, ending the job in the confirm phase. This is essentially VIR_MIGRATE_CHANGE_PROTECTION semantics, but the driver does not support that flag. Without CHANGE_PROTECTION support, the job would never be terminated in error conditions where migrate confirm phase is not executed. Further attempts to modify the domain would result in failure to acquire a job after LIBXL_JOB_WAIT_TIME. Similar to the qemu driver, end the job in the begin phase. Protecting the domain object across all phases of migration can be done in a future patch adding CHANGE_PROTECTION support.
This commit is contained in:
parent
c4f66bb8be
commit
bab7ad4ceb
@ -4491,11 +4491,8 @@ libxlDomainMigratePerform3Params(virDomainPtr dom,
|
||||
goto cleanup;
|
||||
|
||||
if (libxlDomainMigrationPerform(driver, vm, dom_xml, dconnuri,
|
||||
uri, dname, flags) < 0) {
|
||||
/* Job terminated and vm unlocked if MigrationPerform failed */
|
||||
vm = NULL;
|
||||
uri, dname, flags) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
|
@ -215,6 +215,10 @@ libxlDomainMigrationBegin(virConnectPtr conn,
|
||||
|
||||
xml = virDomainDefFormat(def, VIR_DOMAIN_XML_SECURE);
|
||||
|
||||
endjob:
|
||||
if (!libxlDomainObjEndJob(driver, vm))
|
||||
vm = NULL;
|
||||
|
||||
cleanup:
|
||||
if (vm)
|
||||
virObjectUnlock(vm);
|
||||
@ -222,11 +226,6 @@ libxlDomainMigrationBegin(virConnectPtr conn,
|
||||
virDomainDefFree(tmpdef);
|
||||
virObjectUnref(cfg);
|
||||
return xml;
|
||||
|
||||
endjob:
|
||||
if (!libxlDomainObjEndJob(driver, vm))
|
||||
vm = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
virDomainDefPtr
|
||||
@ -468,11 +467,6 @@ libxlDomainMigrationPerform(libxlDriverPrivatePtr driver,
|
||||
virObjectLock(vm);
|
||||
|
||||
cleanup:
|
||||
/* If failure, terminate the job started in MigrationBegin */
|
||||
if (ret == -1) {
|
||||
if (libxlDomainObjEndJob(driver, vm))
|
||||
virObjectUnlock(vm);
|
||||
}
|
||||
VIR_FORCE_CLOSE(sockfd);
|
||||
virURIFree(uri);
|
||||
return ret;
|
||||
@ -578,8 +572,6 @@ libxlDomainMigrationConfirm(libxlDriverPrivatePtr driver,
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (!libxlDomainObjEndJob(driver, vm))
|
||||
vm = NULL;
|
||||
if (event)
|
||||
libxlDomainEventQueue(driver, event);
|
||||
if (vm)
|
||||
|
Loading…
x
Reference in New Issue
Block a user