From fb0b2eb26731a6db00c65dcd799653a213475387 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 4 Mar 2014 14:18:51 -0700 Subject: [PATCH] CLOUDSTACK-6192: Return failure on StartCommand and PrepareForMigrationCommand when connectPhysicalDisk fails, rather than continuing on --- .../kvm/resource/LibvirtComputingResource.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 3553b5ca9c9..1056bcf21f2 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -3063,7 +3063,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv NicTO[] nics = vm.getNics(); - boolean success = false; + boolean skipDisconnect = false; try { Connect conn = LibvirtConnection.getConnectionByVmName(vm.getName()); @@ -3079,13 +3079,16 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } } - _storagePoolMgr.connectPhysicalDisksViaVmSpec(vm); + if (!_storagePoolMgr.connectPhysicalDisksViaVmSpec(vm)) { + skipDisconnect = true; + return new PrepareForMigrationAnswer(cmd, "failed to connect physical disks to host"); + } synchronized (_vms) { _vms.put(vm.getName(), State.Migrating); } - success = true; + skipDisconnect = true; return new PrepareForMigrationAnswer(cmd); } catch (LibvirtException e) { @@ -3095,7 +3098,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } catch (URISyntaxException e) { return new PrepareForMigrationAnswer(cmd, e.toString()); } finally { - if (!success) { + if (!skipDisconnect) { _storagePoolMgr.disconnectPhysicalDisksViaVmSpec(vm); } } @@ -3628,7 +3631,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv createVbd(conn, vmSpec, vmName, vm); - _storagePoolMgr.connectPhysicalDisksViaVmSpec(vmSpec); + if (!_storagePoolMgr.connectPhysicalDisksViaVmSpec(vmSpec)) { + return new StartAnswer(cmd, "Failed to connect physical disks to host"); + } createVifs(vmSpec, vm);