in case vm doesn't exist on kvm host, getconnectionbyname will throw exception, need to catch the exception, and return the default connection
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/435f4bce Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/435f4bce Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/435f4bce Branch: refs/heads/marvin_refactor Commit: 435f4bceb27f7b7bc96ad1ee46f4688b9a971355 Parents: cdd459b Author: Edison Su <sudi...@gmail.com> Authored: Wed Apr 24 10:38:14 2013 -0700 Committer: Edison Su <sudi...@gmail.com> Committed: Wed Apr 24 10:39:07 2013 -0700 ---------------------------------------------------------------------- .../hypervisor/kvm/resource/LibvirtConnection.java | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/435f4bce/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java index 2ad1616..2fc5425 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtConnection.java @@ -61,13 +61,19 @@ public class LibvirtConnection { static public Connect getConnectionByVmName(String vmName) throws LibvirtException { HypervisorType[] hypervisors = new HypervisorType[] {HypervisorType.KVM, Hypervisor.HypervisorType.LXC}; + for (HypervisorType hypervisor : hypervisors) { - Connect conn = LibvirtConnection.getConnectionByType(hypervisor.toString()); - if (conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName.getBytes())) != null) { - return conn; - } + try { + Connect conn = LibvirtConnection.getConnectionByType(hypervisor.toString()); + if (conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName.getBytes())) != null) { + return conn; + } + } catch (Exception e) { + s_logger.debug("can't find connection: " + hypervisor.toString() + ", for vm: " + vmName + ", continue"); + } } + s_logger.debug("can't find which hypervisor the vm used , then use the default hypervisor"); // return the default connection return getConnection(); }