forked from pool/libvirt
45 lines
1.8 KiB
Diff
45 lines
1.8 KiB
Diff
|
commit 60b4fd90213135be0e471756d3d95c68eb3e8f59
|
||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||
|
Date: Fri Aug 24 14:55:03 2018 -0600
|
||
|
|
||
|
libxl: migration: defer removing VM until finish phase
|
||
|
|
||
|
If for any reason the restore of a VM fails on the destination host
|
||
|
in a migration operation, the VM is removed (if not persistent) from
|
||
|
the virDomainObjList, meaning it is no longer available for additional
|
||
|
cleanup or processing in the finish phase. Defer removing the VM from
|
||
|
the virDomainObjList until the finish phase, which already contains
|
||
|
logic to remove the VM.
|
||
|
|
||
|
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
|
||
|
@@ -264,7 +264,6 @@ libxlDoMigrateDstReceive(void *opaque)
|
||
|
libxlDriverPrivatePtr driver = args->conn->privateData;
|
||
|
int recvfd = args->recvfd;
|
||
|
size_t i;
|
||
|
- int ret;
|
||
|
|
||
|
virObjectRef(vm);
|
||
|
virObjectLock(vm);
|
||
|
@@ -274,12 +273,10 @@ libxlDoMigrateDstReceive(void *opaque)
|
||
|
/*
|
||
|
* Always start the domain paused. If needed, unpause in the
|
||
|
* finish phase, after transfer of the domain is complete.
|
||
|
+ * Errors and cleanup are also handled in the finish phase.
|
||
|
*/
|
||
|
- ret = libxlDomainStartRestore(driver, vm, true, recvfd,
|
||
|
- args->migcookie->xenMigStreamVer);
|
||
|
-
|
||
|
- if (ret < 0 && !vm->persistent)
|
||
|
- virDomainObjListRemove(driver->domains, vm);
|
||
|
+ libxlDomainStartRestore(driver, vm, true, recvfd,
|
||
|
+ args->migcookie->xenMigStreamVer);
|
||
|
|
||
|
/* Remove all listen socks from event handler, and close them. */
|
||
|
for (i = 0; i < nsocks; i++) {
|