From b04e14425da05250c10fa4d759fc62d321aef28d 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 47c5af39786..ce13c6ec4a1 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -881,6 +881,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); @@ -911,6 +920,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); } @@ -6368,7 +6382,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;