Skip to content

Commit d20e10e

Browse files
Alena ProkharchykAlena Prokharchyk
authored andcommitted
bug 12919: pass all lb rules in transition (revoke/add) state to the backend when apply a single LB rule
status 12919: resolved fixed
1 parent 1e675f4 commit d20e10e

6 files changed

Lines changed: 28 additions & 15 deletions

File tree

api/src/com/cloud/network/rules/FirewallRule.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.util.List;
2121

2222
import com.cloud.acl.ControlledEntity;
23-
import com.cloud.network.rules.FirewallRule.FirewallRuleType;
2423

2524
public interface FirewallRule extends ControlledEntity {
2625
enum Purpose {

server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
import javax.ejb.Local;
2424

25-
import org.apache.log4j.Logger;
26-
2725
import com.cloud.network.IPAddressVO;
2826
import com.cloud.network.rules.FirewallRule;
2927
import com.cloud.network.rules.FirewallRule.FirewallRuleType;
@@ -41,13 +39,12 @@
4139

4240
@Local(value=FirewallRulesDao.class) @DB(txn=false)
4341
public class FirewallRulesDaoImpl extends GenericDaoBase<FirewallRuleVO, Long> implements FirewallRulesDao {
44-
private static final Logger s_logger = Logger.getLogger(FirewallRulesDaoImpl.class);
4542

4643
protected final SearchBuilder<FirewallRuleVO> AllFieldsSearch;
4744
protected final SearchBuilder<FirewallRuleVO> NotRevokedSearch;
4845
protected final SearchBuilder<FirewallRuleVO> ReleaseSearch;
4946
protected SearchBuilder<FirewallRuleVO> VmSearch;
50-
protected final SearchBuilder<FirewallRuleVO> systemRuleSearch;
47+
protected final SearchBuilder<FirewallRuleVO> SystemRuleSearch;
5148

5249
protected final FirewallRulesCidrsDaoImpl _firewallRulesCidrsDao = ComponentLocator.inject(FirewallRulesCidrsDaoImpl.class);
5350

@@ -83,15 +80,16 @@ protected FirewallRulesDaoImpl() {
8380
ReleaseSearch.and("ports", ReleaseSearch.entity().getSourcePortStart(), Op.IN);
8481
ReleaseSearch.done();
8582

86-
systemRuleSearch = createSearchBuilder();
87-
systemRuleSearch.and("type", systemRuleSearch.entity().getType(), Op.EQ);
88-
systemRuleSearch.and("ipId", systemRuleSearch.entity().getSourceIpAddressId(), Op.NULL);
89-
systemRuleSearch.done();
83+
SystemRuleSearch = createSearchBuilder();
84+
SystemRuleSearch.and("type", SystemRuleSearch.entity().getType(), Op.EQ);
85+
SystemRuleSearch.and("ipId", SystemRuleSearch.entity().getSourceIpAddressId(), Op.NULL);
86+
SystemRuleSearch.done();
87+
9088
}
9189

9290
@Override
9391
public List<FirewallRuleVO> listSystemRules() {
94-
SearchCriteria<FirewallRuleVO> sc = systemRuleSearch.create();
92+
SearchCriteria<FirewallRuleVO> sc = SystemRuleSearch.create();
9593
sc.setParameters("type", FirewallRuleType.System.toString());
9694
return listBy(sc);
9795
}

server/src/com/cloud/network/dao/LoadBalancerDao.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ public interface LoadBalancerDao extends GenericDao<LoadBalancerVO, Long> {
2828
List<LoadBalancerVO> listByIpAddress(long ipAddressId);
2929
LoadBalancerVO findByIpAddressAndPublicPort(long ipAddressId, String publicPort);
3030
LoadBalancerVO findByAccountAndName(Long accountId, String name);
31-
List<LoadBalancerVO> listByNetworkId(long networkId);
31+
List<LoadBalancerVO> listByNetworkId(long networkId);
32+
List<LoadBalancerVO> listInTransitionStateByNetworkId(long networkId);
3233
}

server/src/com/cloud/network/dao/LoadBalancerDaoImpl.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@
2828
import org.apache.log4j.Logger;
2929

3030
import com.cloud.network.LoadBalancerVO;
31+
import com.cloud.network.rules.FirewallRule.State;
3132
import com.cloud.utils.component.ComponentLocator;
3233
import com.cloud.utils.db.GenericDaoBase;
3334
import com.cloud.utils.db.SearchBuilder;
3435
import com.cloud.utils.db.SearchCriteria;
36+
import com.cloud.utils.db.SearchCriteria.Op;
3537
import com.cloud.utils.db.Transaction;
3638

3739
@Local(value={LoadBalancerDao.class})
@@ -48,6 +50,7 @@ public class LoadBalancerDaoImpl extends GenericDaoBase<LoadBalancerVO, Long> im
4850
private final SearchBuilder<LoadBalancerVO> ListByIp;
4951
private final SearchBuilder<LoadBalancerVO> IpAndPublicPortSearch;
5052
private final SearchBuilder<LoadBalancerVO> AccountAndNameSearch;
53+
protected final SearchBuilder<LoadBalancerVO> TransitionStateSearch;
5154

5255
protected final FirewallRulesCidrsDaoImpl _portForwardingRulesCidrsDao = ComponentLocator.inject(FirewallRulesCidrsDaoImpl.class);
5356

@@ -66,6 +69,11 @@ protected LoadBalancerDaoImpl() {
6669
AccountAndNameSearch.and("accountId", AccountAndNameSearch.entity().getAccountId(), SearchCriteria.Op.EQ);
6770
AccountAndNameSearch.and("name", AccountAndNameSearch.entity().getName(), SearchCriteria.Op.EQ);
6871
AccountAndNameSearch.done();
72+
73+
TransitionStateSearch = createSearchBuilder();
74+
TransitionStateSearch.and("networkId", TransitionStateSearch.entity().getNetworkId(), Op.EQ);
75+
TransitionStateSearch.and("state", TransitionStateSearch.entity().getState(), Op.IN);
76+
TransitionStateSearch.done();
6977
}
7078

7179
@Override
@@ -118,5 +126,12 @@ public LoadBalancerVO findByAccountAndName(Long accountId, String name) {
118126
sc.setParameters("name", name);
119127
return findOneBy(sc);
120128
}
121-
129+
130+
@Override
131+
public List<LoadBalancerVO> listInTransitionStateByNetworkId(long networkId) {
132+
SearchCriteria<LoadBalancerVO> sc = TransitionStateSearch.create();
133+
sc.setParameters("networkId", networkId);
134+
sc.setParameters("state", State.Add.toString(), State.Revoke.toString());
135+
return listBy(sc);
136+
}
122137
}

server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -688,8 +688,9 @@ public LoadBalancer createLoadBalancer(CreateLoadBalancerRuleCmd lb, boolean ope
688688

689689
@Override
690690
public boolean applyLoadBalancerConfig(long lbRuleId) throws ResourceUnavailableException {
691-
List<LoadBalancerVO> lbs = new ArrayList<LoadBalancerVO>(1);
692-
lbs.add(_lbDao.findById(lbRuleId));
691+
LoadBalancerVO lb = _lbDao.findById(lbRuleId);
692+
//get all rules in transition state
693+
List<LoadBalancerVO> lbs = _lbDao.listInTransitionStateByNetworkId(lb.getNetworkId());
693694
return applyLoadBalancerRules(lbs, true);
694695
}
695696

server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@
146146
import com.cloud.network.dao.RemoteAccessVpnDao;
147147
import com.cloud.network.dao.VirtualRouterProviderDao;
148148
import com.cloud.network.dao.VpnUserDao;
149-
import com.cloud.network.element.NetworkElement;
150149
import com.cloud.network.lb.LoadBalancingRule;
151150
import com.cloud.network.lb.LoadBalancingRule.LbDestination;
152151
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;

0 commit comments

Comments
 (0)