From db24adccf4b695673fe2c15bd40403aaf3ddaeed 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 14e44c152fd..2097ac21288 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;