mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-7144: No GSLB provider is available during assigning load
balancing rule
this fix ensures any bean implementing GslbProvider interface are injected
into GlobalLoadBalancingRulesServiceImpl.
(cherry picked from commit 9dc322d46f)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Conflicts:
server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
This commit is contained in:
parent
816eb63e97
commit
b8a28dfae3
|
|
@ -229,6 +229,11 @@
|
|||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="gslbServiceProvidersRegistry"
|
||||
class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
|
||||
<property name="excludeKey" value="gslb.service.provider.exclude" />
|
||||
</bean>
|
||||
|
||||
<bean id="affinityProcessorsRegistry"
|
||||
class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
|
||||
<property name="orderConfigKey" value="affinity.processors.order" />
|
||||
|
|
|
|||
|
|
@ -96,5 +96,9 @@
|
|||
<property name="typeClass"
|
||||
value="com.cloud.network.element.RemoteAccessVPNServiceProvider" />
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
<bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
|
||||
<property name="registry" ref="gslbServiceProvidersRegistry" />
|
||||
<property name="typeClass"
|
||||
value="org.apache.cloudstack.region.gslb.GslbServiceProvider" />
|
||||
</bean>
|
||||
</beans>
|
||||
|
|
|
|||
|
|
@ -231,7 +231,8 @@
|
|||
<bean id="PlannerHostReservationDaoImpl" class="com.cloud.deploy.dao.PlannerHostReservationDaoImpl" />
|
||||
|
||||
<bean id="GlobalLoadBalancingRulesServiceImpl"
|
||||
class="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" />
|
||||
|
||||
class="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" >
|
||||
<property name="gslbServiceProviders" value="#{gslbServiceProvidersRegistry.registered}" />
|
||||
</bean>
|
||||
<bean id="certServiceImpl" class="org.apache.cloudstack.network.lb.CertServiceImpl" />
|
||||
</beans>
|
||||
|
|
|
|||
|
|
@ -85,9 +85,10 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
|
|||
@Inject
|
||||
AgentManager _agentMgr;
|
||||
|
||||
protected GslbServiceProvider _gslbProvider=null;
|
||||
public void setGslbServiceProvider(GslbServiceProvider provider) {
|
||||
this._gslbProvider = provider;
|
||||
protected List<GslbServiceProvider> _gslbProviders;
|
||||
|
||||
public void setGslbServiceProviders(List<GslbServiceProvider> providers) {
|
||||
_gslbProviders = providers;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -663,8 +664,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
|
|||
ip.getAddress().addr(), Integer.toString(loadBalancer.getDefaultPortStart()),
|
||||
dataCenterId);
|
||||
|
||||
siteLb.setGslbProviderPublicIp(_gslbProvider.getZoneGslbProviderPublicIp(dataCenterId, physicalNetworkId));
|
||||
siteLb.setGslbProviderPrivateIp(_gslbProvider.getZoneGslbProviderPrivateIp(dataCenterId, physicalNetworkId));
|
||||
siteLb.setGslbProviderPublicIp(lookupGslbServiceProvider().getZoneGslbProviderPublicIp(dataCenterId, physicalNetworkId));
|
||||
siteLb.setGslbProviderPrivateIp(lookupGslbServiceProvider().getZoneGslbProviderPrivateIp(dataCenterId, physicalNetworkId));
|
||||
siteLb.setWeight(gslbLbMapVo.getWeight());
|
||||
|
||||
zoneSiteLoadbalancerMap.put(network.getDataCenterId(), siteLb);
|
||||
|
|
@ -693,7 +694,7 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
|
|||
}
|
||||
|
||||
try {
|
||||
_gslbProvider.applyGlobalLoadBalancerRule(zoneId.first(), zoneId.second(), gslbConfigCmd);
|
||||
lookupGslbServiceProvider().applyGlobalLoadBalancerRule(zoneId.first(), zoneId.second(), gslbConfigCmd);
|
||||
} catch (ResourceUnavailableException e) {
|
||||
String msg = "Failed to configure GSLB rule in the zone " + zoneId.first() + " due to " + e.getMessage();
|
||||
s_logger.warn(msg);
|
||||
|
|
@ -719,15 +720,20 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
|
|||
|
||||
private boolean checkGslbServiceEnabledInZone(long zoneId, long physicalNetworkId) {
|
||||
|
||||
if (_gslbProvider == null) {
|
||||
GslbServiceProvider gslbProvider = lookupGslbServiceProvider();
|
||||
if (gslbProvider == null) {
|
||||
throw new CloudRuntimeException("No GSLB provider is available");
|
||||
}
|
||||
|
||||
return _gslbProvider.isServiceEnabledInZone(zoneId, physicalNetworkId);
|
||||
return gslbProvider.isServiceEnabledInZone(zoneId, physicalNetworkId);
|
||||
}
|
||||
|
||||
protected GslbServiceProvider lookupGslbServiceProvider() {
|
||||
return _gslbProviders.size() == 0 ? null : _gslbProviders.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GlobalLoadBalancerRule findById(long gslbRuleId) {
|
||||
return _gslbRuleDao.findById(gslbRuleId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -726,7 +726,9 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
|
|||
gslbServiceImpl._globalConfigDao = Mockito.mock(ConfigurationDao.class);
|
||||
gslbServiceImpl._ipAddressDao = Mockito.mock(IPAddressDao.class);
|
||||
gslbServiceImpl._agentMgr = Mockito.mock(AgentManager.class);
|
||||
gslbServiceImpl._gslbProvider = Mockito.mock(GslbServiceProvider.class);
|
||||
List<GslbServiceProvider> mockGslbProviders = new ArrayList<GslbServiceProvider>();
|
||||
mockGslbProviders.add(Mockito.mock(GslbServiceProvider.class));
|
||||
gslbServiceImpl._gslbProviders = mockGslbProviders;
|
||||
|
||||
RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd = new RemoveFromGlobalLoadBalancerRuleCmdExtn();
|
||||
Class<?> _class = removeFromGslbCmd.getClass().getSuperclass();
|
||||
|
|
|
|||
Loading…
Reference in New Issue