From 3ed23855828ae3e21aa03e7d9c38ef16fe9e8391 Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Tue, 23 Aug 2011 11:22:55 -0700 Subject: [PATCH] bug 11212: disable vlan network when vm fails to start. It is still possible for it leak. For example, if the VM object wasn't constructed and we already failed but those cases are less likely and it's not absolutely necessary to disable vlan. --- .../xen/resource/CitrixResourceBase.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 9598cde1283..91974d93be5 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -889,6 +889,15 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe try { VM.Record vmr = vm.getRecord(conn); + List networks = new ArrayList(); + for (VIF vif : vmr.VIFs) { + try { + VIF.Record rec = vif.getRecord(conn); + networks.add(rec.network); + } catch (Exception e) { + s_logger.warn("Unable to cleanup VIF", e); + } + } if (vmr.powerState == VmPowerState.RUNNING) { try { vm.hardShutdown(conn); @@ -919,6 +928,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn("Unable to cleanup VIF", e); } } + for (Network network : networks) { + if (network.getNameLabel(conn).startsWith("VLAN")) { + disableVlanNetwork(conn, network); + } + } } catch (Exception e) { s_logger.warn("VM getRecord failed due to ", e); } @@ -6466,7 +6480,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe * XsNic represents a network and the host's specific PIF. */ protected class XsLocalNetwork { - private Network _n; + private final Network _n; private Network.Record _nr; private PIF _p; private PIF.Record _pr;