From 5dec43352960820b8ab0a4a606f78554817a74e5 Mon Sep 17 00:00:00 2001 From: alena Date: Mon, 28 Mar 2011 13:51:20 -0700 Subject: [PATCH] bug 9188: remove all lb-vm DB mapping that are set with Revoke status after the LB rule is set on the backend status 9188: resolved fixed --- .../lb/LoadBalancingRulesManagerImpl.java | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 21e4f12a04e..d558f6ac5d2 100644 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -194,10 +194,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, return removeFromLoadBalancerInternal(loadBalancerId, instanceIds); } - @DB private boolean removeFromLoadBalancerInternal(long loadBalancerId, List instanceIds) { UserContext caller = UserContext.current(); - Transaction txn = Transaction.currentTxn(); LoadBalancerVO loadBalancer = _lbDao.findById(Long.valueOf(loadBalancerId)); if (loadBalancer == null) { @@ -217,21 +215,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, s_logger.debug("Set load balancer rule for revoke: rule id " + loadBalancerId + ", vmId " + instanceId); } - if (applyLoadBalancerConfig(loadBalancerId)) { - - txn.start(); - _lb2VmMapDao.remove(loadBalancerId, instanceIds, null); - s_logger.debug("Load balancer rule id " + loadBalancerId + " is removed for vms " + instanceIds); - - if (_lb2VmMapDao.listByLoadBalancerId(loadBalancerId).isEmpty()) { - loadBalancer.setState(FirewallRule.State.Add); - _lbDao.persist(loadBalancer); - s_logger.debug("LB rule " + loadBalancerId + " state is set to Add as there are no more active LB-VM mappings"); - - } - txn.commit(); - - } else { + if (!applyLoadBalancerConfig(loadBalancerId)) { s_logger.warn("Failed to remove load balancer rule id " + loadBalancerId + " for vms " + instanceIds); throw new CloudRuntimeException("Failed to remove load balancer rule id " + loadBalancerId + " for vms " + instanceIds); } @@ -446,8 +430,9 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, } } + @DB private boolean applyLoadBalancerRules(List lbs) throws ResourceUnavailableException{ - + Transaction txn = Transaction.currentTxn(); List rules = new ArrayList(); for (LoadBalancerVO lb : lbs) { List dstList = getExistingDestinations(lb.getId()); @@ -464,6 +449,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, } for (LoadBalancerVO lb : lbs) { + txn.start(); if (lb.getState() == FirewallRule.State.Revoke) { _lbDao.remove(lb.getId()); s_logger.debug("LB " + lb.getId() + " is successfully removed"); @@ -471,7 +457,28 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, lb.setState(FirewallRule.State.Active); s_logger.debug("LB rule " + lb.getId() + " state is set to Active"); _lbDao.persist(lb); + } + + //remove LB-Vm mappings that were state to revoke + List lbVmMaps = _lb2VmMapDao.listByLoadBalancerId(lb.getId(), true); + List instanceIds = new ArrayList(); + + for (LoadBalancerVMMapVO lbVmMap : lbVmMaps) { + instanceIds.add(lbVmMap.getInstanceId()); } + + if (!instanceIds.isEmpty()) { + _lb2VmMapDao.remove(lb.getId(), instanceIds, null); + s_logger.debug("Load balancer rule id " + lb.getId() + " is removed for vms " + instanceIds); + } + + if (_lb2VmMapDao.listByLoadBalancerId(lb.getId()).isEmpty()) { + lb.setState(FirewallRule.State.Add); + _lbDao.persist(lb); + s_logger.debug("LB rule " + lb.getId() + " state is set to Add as there are no more active LB-VM mappings"); + } + + txn.commit(); } return true; }