From 8ccfdc08de33f5798c092dc6bd39fefd86506f40 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 2 Aug 2011 20:31:37 -0700 Subject: [PATCH] handle release of ip on deletion of loadbalancer rule --- .../lb/ElasticLoadBalancerManager.java | 3 ++- .../lb/ElasticLoadBalancerManagerImpl.java | 19 ++++++++++++++----- .../lb/LoadBalancingRulesManagerImpl.java | 1 + 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/network/lb/ElasticLoadBalancerManager.java b/server/src/com/cloud/network/lb/ElasticLoadBalancerManager.java index 3a7165e96d2..e8785f3f2e4 100644 --- a/server/src/com/cloud/network/lb/ElasticLoadBalancerManager.java +++ b/server/src/com/cloud/network/lb/ElasticLoadBalancerManager.java @@ -37,5 +37,6 @@ public interface ElasticLoadBalancerManager { throws ResourceUnavailableException; public LoadBalancer handleCreateLoadBalancerRule(CreateLoadBalancerRuleCmd lb, Account caller) throws InsufficientAddressCapacityException, NetworkRuleConflictException; - + + public void handleDeleteLoadBalancerRule(LoadBalancer lb, long callerUserId, Account caller); } diff --git a/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index 6edb183b408..4fca666805e 100644 --- a/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -206,20 +206,19 @@ public class ElasticLoadBalancerManagerImpl implements params.put(VirtualMachineProfile.Param.RestartNetwork, true); Account owner = _accountService.getActiveAccount("system", new Long(1)); DeployDestination dest = new DeployDestination(dc, pod, null, null); - s_logger.debug("About to deploy elastic LB vm "); + s_logger.debug("About to deploy ELB vm "); try { DomainRouterVO elbVm = deployELBVm(network, dest, owner, params); - - s_logger.debug("ELB vm = " + elbVm); if (elbVm == null) { throw new InvalidParameterValueException("Could not deploy or find existing ELB VM"); } + s_logger.debug("Deployed ELB vm = " + elbVm); + return elbVm; } catch (Throwable t) { - String errorMsg = "Error while deploying Loadbalancer VM: " + t; - s_logger.warn(errorMsg); + s_logger.warn("Error while deploying ELB VM: " + t); return null; } @@ -563,7 +562,11 @@ public class ElasticLoadBalancerManagerImpl implements public void releaseIp(long ipId, long userId, Account caller) { s_logger.info("Release public IP for loadbalancing " + ipId); + IPAddressVO ipvo = _ipAddressDao.findById(ipId); + ipvo.setAssociatedWithNetworkId(null); + _ipAddressDao.update(ipvo.getId(), ipvo); _networkMgr.releasePublicIpAddress(ipId, userId, caller); + _ipAddressDao.unassignIpAddress(ipId); } @Override @@ -714,4 +717,10 @@ public class ElasticLoadBalancerManagerImpl implements } } + + @Override + public void handleDeleteLoadBalancerRule(LoadBalancer lb, long userId, Account caller) { + s_logger.debug("ELB mgr: releasing ip " + lb.getSourceIpAddressId() + " since the LB rule is deleted"); + releaseIp(lb.getSourceIpAddressId(), userId, caller); + } } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 5ef1ba579e9..563c502029f 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -345,6 +345,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, } _rulesDao.remove(lb.getId()); + _elbMgr.handleDeleteLoadBalancerRule(lb, callerUserId, caller); s_logger.debug("Load balancer with id " + lb.getId() + " is removed successfully"); return true; }