From 4ec3bc5865e94a2005bfbde7b9e44b02adf1236e Mon Sep 17 00:00:00 2001 From: alena Date: Thu, 6 Jan 2011 15:06:18 -0800 Subject: [PATCH] bug 7244: delete corresponding untagged pod vlan ranges when pod is deleted status 7244: resolved fixed --- .../configuration/ConfigurationManagerImpl.java | 10 +++++++++- server/src/com/cloud/network/NetworkManager.java | 3 ++- .../src/com/cloud/network/NetworkManagerImpl.java | 15 +++++---------- .../src/com/cloud/network/rules/RulesManager.java | 2 ++ .../com/cloud/network/rules/RulesManagerImpl.java | 6 +++++- 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index cf656f6744b..968f025a330 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -523,7 +523,15 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if (!(_LinkLocalIpAllocDao.deleteIpAddressByPod(podId))) { throw new CloudRuntimeException("Failed to cleanup private ip addresses for pod " + podId); } - + + //Delete vlans associated with the pod + List vlans = _networkMgr.listPodVlans(podId); + if (vlans != null && !vlans.isEmpty()) { + for (Vlan vlan: vlans) { + _vlanDao.remove(vlan.getId()); + } + } + //Delete the pod if (!(_podDao.expunge(podId))) { throw new CloudRuntimeException("Failed to delete pod " + podId); diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index a7f458e3208..d8dd1982248 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -20,6 +20,7 @@ package com.cloud.network; import java.util.List; import java.util.Map; +import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; @@ -137,6 +138,6 @@ public interface NetworkManager extends NetworkService { PublicIpAddress getPublicIpAddress(Ip ipAddress); - String getPodVlanGateway(long podId); + List listPodVlans(long podId); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index e0674cc4b81..3addb3b067e 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -99,6 +99,7 @@ import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.lb.LoadBalancingRulesManager; import com.cloud.network.router.VirtualNetworkApplianceManager; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.PortForwardingRuleVO; import com.cloud.network.rules.RulesManager; import com.cloud.network.rules.dao.PortForwardingRulesDao; @@ -176,7 +177,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Inject VirtualNetworkApplianceManager _routerMgr; @Inject RulesManager _rulesMgr; @Inject LoadBalancingRulesManager _lbMgr; - @Inject PortForwardingRulesDao _pfRulesDao; @Inject UsageEventDao _usageEventDao; @Inject PodVlanMapDao _podVlanMapDao; @@ -1636,7 +1636,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override public boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException { - if (rules.size() == 0) { + if (rules == null || rules.size() == 0) { s_logger.debug("There are no rules to forward to the network elements"); return true; } @@ -1742,7 +1742,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } //Reapply pf rules - List pfRules = _pfRulesDao.listByNetworkId(networkId); + List pfRules = _rulesMgr.listByNetworkId(networkId); if (!applyRules(pfRules, true)) { s_logger.warn("Failed to apply port forwarding rules as a part of network " + network.getId() + " restart"); return false; @@ -1843,14 +1843,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - public String getPodVlanGateway(long podId) { + public List listPodVlans(long podId) { List vlans = _vlanDao.listVlansForPodByType(podId, VlanType.DirectAttached); - //we don't allow vlans to have different gateways, so take the value from the first one - if (vlans == null || !vlans.isEmpty()) { - return vlans.get(0).getVlanGateway(); - } else { - return null; - } + return vlans; } } diff --git a/server/src/com/cloud/network/rules/RulesManager.java b/server/src/com/cloud/network/rules/RulesManager.java index 136464e509f..8d101623642 100644 --- a/server/src/com/cloud/network/rules/RulesManager.java +++ b/server/src/com/cloud/network/rules/RulesManager.java @@ -75,4 +75,6 @@ public interface RulesManager extends RulesService { FirewallRule[] reservePorts(IpAddress ip, String protocol, FirewallRule.Purpose purpose, int... ports) throws NetworkRuleConflictException; boolean releasePorts(Ip ip, String protocol, FirewallRule.Purpose purpose, int... ports); + + List listByNetworkId(long networkId); } diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index edd43b431c0..b420f1b0f85 100644 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -526,6 +526,10 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { return allRules; } - + + @Override + public List listByNetworkId(long networkId) { + return _forwardingDao.listByNetworkId(networkId); + } }