Updated Branches: refs/heads/master 37d58313c -> 90388ce77
CLOUDSTACK-4315: add code to clean up libvirt data structure after plug/unplug, that's the only thing I can do to fix this kind of libvirt issue Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/90388ce7 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/90388ce7 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/90388ce7 Branch: refs/heads/master Commit: 90388ce77e8906ec70641fe5b9f8fe26bb9ccf2e Parents: 37d5831 Author: Edison Su <[email protected]> Authored: Wed Aug 14 16:56:58 2013 -0700 Committer: Edison Su <[email protected]> Committed: Wed Aug 14 16:59:07 2013 -0700 ---------------------------------------------------------------------- .../kvm/resource/LibvirtComputingResource.java | 22 ++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/90388ce7/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java ---------------------------------------------------------------------- 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 c3efb9c..bab591a 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 @@ -1738,9 +1738,10 @@ ServerResource { private PlugNicAnswer execute(PlugNicCommand cmd) { NicTO nic = cmd.getNic(); String vmName = cmd.getVmName(); + Domain vm = null; try { Connect conn = LibvirtConnection.getConnectionByVmName(vmName); - Domain vm = getDomain(conn, vmName); + vm = getDomain(conn, vmName); List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName); Integer nicnum = 0; for (InterfaceDef pluggedNic : pluggedNics) { @@ -1760,6 +1761,14 @@ ServerResource { String msg = " Plug Nic failed due to " + e.toString(); s_logger.warn(msg, e); return new PlugNicAnswer(cmd, false, msg); + } finally { + if (vm != null) { + try { + vm.free(); + } catch (LibvirtException l) { + s_logger.trace("Ignoring libvirt error.", l); + } + } } } @@ -1767,9 +1776,10 @@ ServerResource { Connect conn; NicTO nic = cmd.getNic(); String vmName = cmd.getVmName(); + Domain vm = null; try { conn = LibvirtConnection.getConnectionByVmName(vmName); - Domain vm = getDomain(conn, vmName); + vm = getDomain(conn, vmName); List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName); for (InterfaceDef pluggedNic : pluggedNics) { if (pluggedNic.getMacAddress().equalsIgnoreCase(nic.getMac())) { @@ -1787,6 +1797,14 @@ ServerResource { String msg = " Unplug Nic failed due to " + e.toString(); s_logger.warn(msg, e); return new UnPlugNicAnswer(cmd, false, msg); + } finally { + if (vm != null) { + try { + vm.free(); + } catch (LibvirtException l) { + s_logger.trace("Ignoring libvirt error.", l); + } + } } }
