diff --git a/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml b/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml index 5e799c06483..a10bbb38703 100644 --- a/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml +++ b/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml @@ -229,6 +229,11 @@ + + + + diff --git a/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml b/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml index a54d58818bc..76cdfe3e749 100644 --- a/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml +++ b/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml @@ -96,5 +96,9 @@ - - \ No newline at end of file + + + + + diff --git a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml index 31f31cd972a..a5f9a0bc36f 100644 --- a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml +++ b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml @@ -231,7 +231,8 @@ - + class="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" > + + diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java index 62b9748de3a..d4275d4ce2b 100644 --- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java +++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java @@ -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 _gslbProviders; + + public void setGslbServiceProviders(List 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); } -} \ No newline at end of file +} diff --git a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java b/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java index 504ab9cebb2..5b5dd086515 100644 --- a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java +++ b/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java @@ -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 mockGslbProviders = new ArrayList(); + mockGslbProviders.add(Mockito.mock(GslbServiceProvider.class)); + gslbServiceImpl._gslbProviders = mockGslbProviders; RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd = new RemoveFromGlobalLoadBalancerRuleCmdExtn(); Class _class = removeFromGslbCmd.getClass().getSuperclass();