mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
VPC: support LB in multiple vpc tiers if LB provider is VpcVirtualRouter (#5580)
* VPC: support LB in multiple vpc tiers if LB provider is VpcVirtualRouter * server: fix unit test CreateNetworkOfferingTest failures [ERROR] Tests run: 10, Failures: 0, Errors: 10, Skipped: 0, Time elapsed: 13.902 s <<< FAILURE! - in org.apache.cloudstack.networkoffering.CreateNetworkOfferingTest [ERROR] createIsolatedNtwkOffWithVlan(org.apache.cloudstack.networkoffering.CreateNetworkOfferingTest) Time elapsed: 0.662 s <<< ERROR! org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadBalancerDaoImpl': Invocation of init method failed; nested exception is java.lang.NullPointerException at org.apache.cloudstack.networkoffering.CreateNetworkOfferingTest.setUp(CreateNetworkOfferingTest.java:110) Caused by: java.lang.NullPointerException at org.apache.cloudstack.networkoffering.CreateNetworkOfferingTest.setUp(CreateNetworkOfferingTest.java:110) * update #5580: use java.util.Optional * update #5580: create method listByNetworkIdOrVpcIdAndScheme
This commit is contained in:
parent
a5372a98dc
commit
f29aef8b70
@ -27,6 +27,10 @@ public interface LoadBalancerDao extends GenericDao<LoadBalancerVO, Long> {
|
|||||||
|
|
||||||
List<LoadBalancerVO> listByNetworkIdAndScheme(long networkId, Scheme scheme);
|
List<LoadBalancerVO> listByNetworkIdAndScheme(long networkId, Scheme scheme);
|
||||||
|
|
||||||
|
List<LoadBalancerVO> listByVpcIdAndScheme(long vpcId, Scheme scheme);
|
||||||
|
|
||||||
|
List<LoadBalancerVO> listByNetworkIdOrVpcIdAndScheme(long networkId, Long vpcId, Scheme scheme);
|
||||||
|
|
||||||
List<LoadBalancerVO> listInTransitionStateByNetworkIdAndScheme(long networkId, Scheme scheme);
|
List<LoadBalancerVO> listInTransitionStateByNetworkIdAndScheme(long networkId, Scheme scheme);
|
||||||
|
|
||||||
boolean isLoadBalancerRulesMappedToVmGuestIp(long instanceId, String instanceIp, long networkId);
|
boolean isLoadBalancerRulesMappedToVmGuestIp(long instanceId, String instanceIp, long networkId);
|
||||||
|
|||||||
@ -18,6 +18,7 @@ package com.cloud.network.dao;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import com.cloud.network.rules.FirewallRule;
|
import com.cloud.network.rules.FirewallRule;
|
||||||
@ -35,11 +36,25 @@ import com.cloud.utils.db.SearchCriteria.Op;
|
|||||||
public class LoadBalancerDaoImpl extends GenericDaoBase<LoadBalancerVO, Long> implements LoadBalancerDao {
|
public class LoadBalancerDaoImpl extends GenericDaoBase<LoadBalancerVO, Long> implements LoadBalancerDao {
|
||||||
private final SearchBuilder<LoadBalancerVO> ListByIp;
|
private final SearchBuilder<LoadBalancerVO> ListByIp;
|
||||||
protected final SearchBuilder<LoadBalancerVO> TransitionStateSearch;
|
protected final SearchBuilder<LoadBalancerVO> TransitionStateSearch;
|
||||||
|
private SearchBuilder<LoadBalancerVO> ListByVpcId;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
protected FirewallRulesCidrsDao _portForwardingRulesCidrsDao;
|
protected FirewallRulesCidrsDao _portForwardingRulesCidrsDao;
|
||||||
@Inject
|
@Inject
|
||||||
LoadBalancerVMMapDao _loadBalancerVMMapDao;
|
LoadBalancerVMMapDao _loadBalancerVMMapDao;
|
||||||
|
@Inject
|
||||||
|
NetworkDao _networkDao;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
void init() {
|
||||||
|
ListByVpcId = createSearchBuilder();
|
||||||
|
ListByVpcId.and("networkId", ListByVpcId.entity().getNetworkId(), SearchCriteria.Op.EQ);
|
||||||
|
ListByVpcId.and("scheme", ListByVpcId.entity().getScheme(), SearchCriteria.Op.EQ);
|
||||||
|
SearchBuilder<NetworkVO> networkSearch = _networkDao.createSearchBuilder();
|
||||||
|
networkSearch.and("vpcId", networkSearch.entity().getVpcId(), SearchCriteria.Op.EQ);
|
||||||
|
ListByVpcId.join("network", networkSearch, networkSearch.entity().getId(), ListByVpcId.entity().getNetworkId(), JoinBuilder.JoinType.INNER);
|
||||||
|
ListByVpcId.done();
|
||||||
|
}
|
||||||
|
|
||||||
protected LoadBalancerDaoImpl() {
|
protected LoadBalancerDaoImpl() {
|
||||||
ListByIp = createSearchBuilder();
|
ListByIp = createSearchBuilder();
|
||||||
@ -70,6 +85,23 @@ public class LoadBalancerDaoImpl extends GenericDaoBase<LoadBalancerVO, Long> im
|
|||||||
return listBy(sc);
|
return listBy(sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LoadBalancerVO> listByVpcIdAndScheme(long vpcId, Scheme scheme) {
|
||||||
|
SearchCriteria<LoadBalancerVO> sc = ListByVpcId.create();
|
||||||
|
sc.setJoinParameters("network", "vpcId", vpcId);
|
||||||
|
sc.setParameters("scheme", scheme);
|
||||||
|
return listBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<LoadBalancerVO> listByNetworkIdOrVpcIdAndScheme(long networkId, Long vpcId, Scheme scheme) {
|
||||||
|
if (vpcId != null) {
|
||||||
|
return listByVpcIdAndScheme(vpcId, scheme);
|
||||||
|
} else {
|
||||||
|
return listByNetworkIdAndScheme(networkId, scheme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<LoadBalancerVO> listInTransitionStateByNetworkIdAndScheme(long networkId, Scheme scheme) {
|
public List<LoadBalancerVO> listInTransitionStateByNetworkIdAndScheme(long networkId, Scheme scheme) {
|
||||||
SearchCriteria<LoadBalancerVO> sc = TransitionStateSearch.create();
|
SearchCriteria<LoadBalancerVO> sc = TransitionStateSearch.create();
|
||||||
|
|||||||
@ -58,8 +58,9 @@ public class FirewallRules extends RuleApplier {
|
|||||||
|
|
||||||
if (_purpose == Purpose.LoadBalancing) {
|
if (_purpose == Purpose.LoadBalancing) {
|
||||||
LoadBalancerDao loadBalancerDao = visitor.getVirtualNetworkApplianceFactory().getLoadBalancerDao();
|
LoadBalancerDao loadBalancerDao = visitor.getVirtualNetworkApplianceFactory().getLoadBalancerDao();
|
||||||
// for load balancer we have to resend all lb rules for the network
|
// for load balancer we have to resend all lb rules for the network or vpc
|
||||||
final List<LoadBalancerVO> lbs = loadBalancerDao.listByNetworkIdAndScheme(_network.getId(), Scheme.Public);
|
final List<LoadBalancerVO> lbs = loadBalancerDao.listByNetworkIdOrVpcIdAndScheme(_network.getId(), _network.getVpcId(), Scheme.Public);
|
||||||
|
|
||||||
_loadbalancingRules = new ArrayList<LoadBalancingRule>();
|
_loadbalancingRules = new ArrayList<LoadBalancingRule>();
|
||||||
|
|
||||||
LoadBalancingRulesManager lbMgr = visitor.getVirtualNetworkApplianceFactory().getLbMgr();
|
LoadBalancingRulesManager lbMgr = visitor.getVirtualNetworkApplianceFactory().getLbMgr();
|
||||||
@ -91,4 +92,4 @@ public class FirewallRules extends RuleApplier {
|
|||||||
public Purpose getPurpose() {
|
public Purpose getPurpose() {
|
||||||
return _purpose;
|
return _purpose;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,8 +50,8 @@ public class LoadBalancingRules extends RuleApplier {
|
|||||||
_router = router;
|
_router = router;
|
||||||
|
|
||||||
LoadBalancerDao loadBalancerDao = visitor.getVirtualNetworkApplianceFactory().getLoadBalancerDao();
|
LoadBalancerDao loadBalancerDao = visitor.getVirtualNetworkApplianceFactory().getLoadBalancerDao();
|
||||||
// For load balancer we have to resend all lb rules for the network
|
// For load balancer we have to resend all lb rules for the network or vpc
|
||||||
final List<LoadBalancerVO> lbs = loadBalancerDao.listByNetworkIdAndScheme(_network.getId(), Scheme.Public);
|
final List<LoadBalancerVO> lbs = loadBalancerDao.listByNetworkIdOrVpcIdAndScheme(_network.getId(), _network.getVpcId(), Scheme.Public);
|
||||||
|
|
||||||
// We are cleaning it before because all the rules have to be sent to the router.
|
// We are cleaning it before because all the rules have to be sent to the router.
|
||||||
_rules.clear();
|
_rules.clear();
|
||||||
@ -76,4 +76,4 @@ public class LoadBalancingRules extends RuleApplier {
|
|||||||
public List<LoadBalancingRule> getRules() {
|
public List<LoadBalancingRule> getRules() {
|
||||||
return _rules;
|
return _rules;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,7 +54,7 @@ import com.cloud.network.dao.FirewallRulesCidrsDaoImpl;
|
|||||||
import com.cloud.network.dao.FirewallRulesDaoImpl;
|
import com.cloud.network.dao.FirewallRulesDaoImpl;
|
||||||
import com.cloud.network.dao.FirewallRulesDcidrsDaoImpl;
|
import com.cloud.network.dao.FirewallRulesDcidrsDaoImpl;
|
||||||
import com.cloud.network.dao.IPAddressDaoImpl;
|
import com.cloud.network.dao.IPAddressDaoImpl;
|
||||||
import com.cloud.network.dao.LoadBalancerDaoImpl;
|
import com.cloud.network.dao.LoadBalancerDao;
|
||||||
import com.cloud.network.dao.NetworkDao;
|
import com.cloud.network.dao.NetworkDao;
|
||||||
import com.cloud.network.dao.NetworkDomainDaoImpl;
|
import com.cloud.network.dao.NetworkDomainDaoImpl;
|
||||||
import com.cloud.network.dao.NetworkServiceMapDaoImpl;
|
import com.cloud.network.dao.NetworkServiceMapDaoImpl;
|
||||||
@ -132,7 +132,7 @@ import org.springframework.core.type.filter.TypeFilter;
|
|||||||
DataCenterDetailsDaoImpl.class, NicSecondaryIpDaoImpl.class, UserIpv6AddressDaoImpl.class, UserDaoImpl.class, NicDaoImpl.class,
|
DataCenterDetailsDaoImpl.class, NicSecondaryIpDaoImpl.class, UserIpv6AddressDaoImpl.class, UserDaoImpl.class, NicDaoImpl.class,
|
||||||
NetworkDomainDaoImpl.class, HostDetailsDaoImpl.class, HostTagsDaoImpl.class, ClusterDaoImpl.class, FirewallRulesDaoImpl.class,
|
NetworkDomainDaoImpl.class, HostDetailsDaoImpl.class, HostTagsDaoImpl.class, ClusterDaoImpl.class, FirewallRulesDaoImpl.class,
|
||||||
FirewallRulesCidrsDaoImpl.class, FirewallRulesDcidrsDaoImpl.class, PhysicalNetworkDaoImpl.class, PhysicalNetworkTrafficTypeDaoImpl.class, PhysicalNetworkServiceProviderDaoImpl.class,
|
FirewallRulesCidrsDaoImpl.class, FirewallRulesDcidrsDaoImpl.class, PhysicalNetworkDaoImpl.class, PhysicalNetworkTrafficTypeDaoImpl.class, PhysicalNetworkServiceProviderDaoImpl.class,
|
||||||
LoadBalancerDaoImpl.class, NetworkServiceMapDaoImpl.class, PrimaryDataStoreDaoImpl.class, StoragePoolDetailsDaoImpl.class,
|
NetworkServiceMapDaoImpl.class, PrimaryDataStoreDaoImpl.class, StoragePoolDetailsDaoImpl.class,
|
||||||
PortableIpRangeDaoImpl.class, RegionDaoImpl.class, PortableIpDaoImpl.class, AccountGuestVlanMapDaoImpl.class, ImageStoreDaoImpl.class, ImageStoreDetailsDaoImpl.class},
|
PortableIpRangeDaoImpl.class, RegionDaoImpl.class, PortableIpDaoImpl.class, AccountGuestVlanMapDaoImpl.class, ImageStoreDaoImpl.class, ImageStoreDetailsDaoImpl.class},
|
||||||
includeFilters = {@Filter(value = ChildTestConfiguration.Library.class, type = FilterType.CUSTOM)},
|
includeFilters = {@Filter(value = ChildTestConfiguration.Library.class, type = FilterType.CUSTOM)},
|
||||||
useDefaultFilters = false)
|
useDefaultFilters = false)
|
||||||
@ -344,6 +344,11 @@ public class
|
|||||||
return Mockito.mock(StorageManager.class);
|
return Mockito.mock(StorageManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public LoadBalancerDao loadBalancerDao() {
|
||||||
|
return Mockito.mock(LoadBalancerDao.class);
|
||||||
|
}
|
||||||
|
|
||||||
public static class Library implements TypeFilter {
|
public static class Library implements TypeFilter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -462,7 +462,7 @@ export default {
|
|||||||
},
|
},
|
||||||
lbProviderMap: {
|
lbProviderMap: {
|
||||||
publicLb: {
|
publicLb: {
|
||||||
vpc: ['VpcVirtualRouter', 'Netscaler']
|
vpc: ['Netscaler']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
publicLBExists: false
|
publicLBExists: false
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user