From 203094ddd0ff350ded97d12e63654867d92de977 Mon Sep 17 00:00:00 2001 From: Vlastimil Holer Date: Mon, 11 May 2020 19:04:17 +0200 Subject: [PATCH] B #4695: Target host cleanup on failed KVM live migration (#4698) --- src/vmm_mad/remotes/kvm/migrate | 15 +++++++++++++-- src/vmm_mad/remotes/kvm/migrate_local | 12 ++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/vmm_mad/remotes/kvm/migrate b/src/vmm_mad/remotes/kvm/migrate index e149145dd4..30a035fc3b 100755 --- a/src/vmm_mad/remotes/kvm/migrate +++ b/src/vmm_mad/remotes/kvm/migrate @@ -33,8 +33,19 @@ for snap in $snaps; do "Failed to delete snapshot $snap from $deploy_id" done -exec_and_log "virsh --connect $LIBVIRT_URI migrate --live $MIGRATE_OPTIONS $deploy_id $QEMU_PROTOCOL://$dest_host/system" \ - "Could not migrate $deploy_id to $dest_host" +# do live migration, but cleanup target host in case of error +virsh --connect $LIBVIRT_URI migrate --live $MIGRATE_OPTIONS $deploy_id $QEMU_PROTOCOL://$dest_host/system + +RC=$? + +if [ $RC -ne 0 ]; then + for CLEAN_OP in destroy undefine; do + virsh --connect $QEMU_PROTOCOL://$dest_host/system "${CLEAN_OP}" $deploy_id >/dev/null 2>&1 + done + + error_message "Could not migrate $deploy_id to $dest_host" + exit $RC +fi if [ "$SYNC_TIME" = "yes" ]; then ( diff --git a/src/vmm_mad/remotes/kvm/migrate_local b/src/vmm_mad/remotes/kvm/migrate_local index 960e0777be..580df63576 100755 --- a/src/vmm_mad/remotes/kvm/migrate_local +++ b/src/vmm_mad/remotes/kvm/migrate_local @@ -34,9 +34,21 @@ for snap in $snaps; do "Failed to delete snapshot $snap from $deploy_id" done +# do live migration, but cleanup target host in case of error virsh --connect $QEMU_PROTOCOL://$src_host/system \ migrate --live $deploy_id $MIGRATE_OPTIONS $QEMU_PROTOCOL://$dest_host/system +RC=$? + +if [ $RC -ne 0 ]; then + for CLEAN_OP in destroy undefine; do + virsh --connect $QEMU_PROTOCOL://$dest_host/system "${CLEAN_OP}" $deploy_id >/dev/null 2>&1 + done + + error_message "Could not migrate $deploy_id to $dest_host" + exit $RC +fi + if [ "$SYNC_TIME" = "yes" ]; then ( for i in $(seq 3); do