bug 12919: pass all lb rules in transition (revoke/add) state to the backend when apply a single LB rule

status 12919: resolved fixed
This commit is contained in:
Alena Prokharchyk 2012-01-18 14:13:59 -08:00
parent 1e675f45ba
commit d20e10edd3
6 changed files with 28 additions and 15 deletions

View File

@ -20,7 +20,6 @@ package com.cloud.network.rules;
import java.util.List;
import com.cloud.acl.ControlledEntity;
import com.cloud.network.rules.FirewallRule.FirewallRuleType;
public interface FirewallRule extends ControlledEntity {
enum Purpose {

View File

@ -22,8 +22,6 @@ import java.util.List;
import javax.ejb.Local;
import org.apache.log4j.Logger;
import com.cloud.network.IPAddressVO;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.FirewallRule.FirewallRuleType;
@ -41,13 +39,12 @@ import com.cloud.utils.db.Transaction;
@Local(value=FirewallRulesDao.class) @DB(txn=false)
public class FirewallRulesDaoImpl extends GenericDaoBase<FirewallRuleVO, Long> implements FirewallRulesDao {
private static final Logger s_logger = Logger.getLogger(FirewallRulesDaoImpl.class);
protected final SearchBuilder<FirewallRuleVO> AllFieldsSearch;
protected final SearchBuilder<FirewallRuleVO> NotRevokedSearch;
protected final SearchBuilder<FirewallRuleVO> ReleaseSearch;
protected SearchBuilder<FirewallRuleVO> VmSearch;
protected final SearchBuilder<FirewallRuleVO> systemRuleSearch;
protected final SearchBuilder<FirewallRuleVO> SystemRuleSearch;
protected final FirewallRulesCidrsDaoImpl _firewallRulesCidrsDao = ComponentLocator.inject(FirewallRulesCidrsDaoImpl.class);
@ -83,15 +80,16 @@ public class FirewallRulesDaoImpl extends GenericDaoBase<FirewallRuleVO, Long> i
ReleaseSearch.and("ports", ReleaseSearch.entity().getSourcePortStart(), Op.IN);
ReleaseSearch.done();
systemRuleSearch = createSearchBuilder();
systemRuleSearch.and("type", systemRuleSearch.entity().getType(), Op.EQ);
systemRuleSearch.and("ipId", systemRuleSearch.entity().getSourceIpAddressId(), Op.NULL);
systemRuleSearch.done();
SystemRuleSearch = createSearchBuilder();
SystemRuleSearch.and("type", SystemRuleSearch.entity().getType(), Op.EQ);
SystemRuleSearch.and("ipId", SystemRuleSearch.entity().getSourceIpAddressId(), Op.NULL);
SystemRuleSearch.done();
}
@Override
public List<FirewallRuleVO> listSystemRules() {
SearchCriteria<FirewallRuleVO> sc = systemRuleSearch.create();
SearchCriteria<FirewallRuleVO> sc = SystemRuleSearch.create();
sc.setParameters("type", FirewallRuleType.System.toString());
return listBy(sc);
}

View File

@ -28,5 +28,6 @@ public interface LoadBalancerDao extends GenericDao<LoadBalancerVO, Long> {
List<LoadBalancerVO> listByIpAddress(long ipAddressId);
LoadBalancerVO findByIpAddressAndPublicPort(long ipAddressId, String publicPort);
LoadBalancerVO findByAccountAndName(Long accountId, String name);
List<LoadBalancerVO> listByNetworkId(long networkId);
List<LoadBalancerVO> listByNetworkId(long networkId);
List<LoadBalancerVO> listInTransitionStateByNetworkId(long networkId);
}

View File

@ -28,10 +28,12 @@ import javax.ejb.Local;
import org.apache.log4j.Logger;
import com.cloud.network.LoadBalancerVO;
import com.cloud.network.rules.FirewallRule.State;
import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.Transaction;
@Local(value={LoadBalancerDao.class})
@ -48,6 +50,7 @@ public class LoadBalancerDaoImpl extends GenericDaoBase<LoadBalancerVO, Long> im
private final SearchBuilder<LoadBalancerVO> ListByIp;
private final SearchBuilder<LoadBalancerVO> IpAndPublicPortSearch;
private final SearchBuilder<LoadBalancerVO> AccountAndNameSearch;
protected final SearchBuilder<LoadBalancerVO> TransitionStateSearch;
protected final FirewallRulesCidrsDaoImpl _portForwardingRulesCidrsDao = ComponentLocator.inject(FirewallRulesCidrsDaoImpl.class);
@ -66,6 +69,11 @@ public class LoadBalancerDaoImpl extends GenericDaoBase<LoadBalancerVO, Long> im
AccountAndNameSearch.and("accountId", AccountAndNameSearch.entity().getAccountId(), SearchCriteria.Op.EQ);
AccountAndNameSearch.and("name", AccountAndNameSearch.entity().getName(), SearchCriteria.Op.EQ);
AccountAndNameSearch.done();
TransitionStateSearch = createSearchBuilder();
TransitionStateSearch.and("networkId", TransitionStateSearch.entity().getNetworkId(), Op.EQ);
TransitionStateSearch.and("state", TransitionStateSearch.entity().getState(), Op.IN);
TransitionStateSearch.done();
}
@Override
@ -118,5 +126,12 @@ public class LoadBalancerDaoImpl extends GenericDaoBase<LoadBalancerVO, Long> im
sc.setParameters("name", name);
return findOneBy(sc);
}
@Override
public List<LoadBalancerVO> listInTransitionStateByNetworkId(long networkId) {
SearchCriteria<LoadBalancerVO> sc = TransitionStateSearch.create();
sc.setParameters("networkId", networkId);
sc.setParameters("state", State.Add.toString(), State.Revoke.toString());
return listBy(sc);
}
}

View File

@ -688,8 +688,9 @@ public class LoadBalancingRulesManagerImpl<Type> implements LoadBalancingRulesMa
@Override
public boolean applyLoadBalancerConfig(long lbRuleId) throws ResourceUnavailableException {
List<LoadBalancerVO> lbs = new ArrayList<LoadBalancerVO>(1);
lbs.add(_lbDao.findById(lbRuleId));
LoadBalancerVO lb = _lbDao.findById(lbRuleId);
//get all rules in transition state
List<LoadBalancerVO> lbs = _lbDao.listInTransitionStateByNetworkId(lb.getNetworkId());
return applyLoadBalancerRules(lbs, true);
}

View File

@ -146,7 +146,6 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
import com.cloud.network.dao.RemoteAccessVpnDao;
import com.cloud.network.dao.VirtualRouterProviderDao;
import com.cloud.network.dao.VpnUserDao;
import com.cloud.network.element.NetworkElement;
import com.cloud.network.lb.LoadBalancingRule;
import com.cloud.network.lb.LoadBalancingRule.LbDestination;
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;