You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2014/11/25 15:51:54 UTC
[18/18] git commit: updated refs/heads/4.3 to b8a28df
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 9dc322d46fa5cfb9abd87c408988abad1219d607)
Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
Conflicts:
server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b8a28dfa
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b8a28dfa
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b8a28dfa
Branch: refs/heads/4.3
Commit: b8a28dfae391a4642e06569fbe1c3dbbafa66a69
Parents: 816eb63
Author: Murali Reddy <mu...@gmail.com>
Authored: Mon Jul 21 16:48:28 2014 +0530
Committer: Rohit Yadav <ro...@shapeblue.com>
Committed: Tue Nov 25 19:50:37 2014 +0530
----------------------------------------------------------------------
.../core/spring-core-registry-core-context.xml | 5 ++++
...re-lifecycle-network-context-inheritable.xml | 8 +++++--
.../spring-server-core-managers-context.xml | 5 ++--
.../GlobalLoadBalancingRulesServiceImpl.java | 24 ++++++++++++--------
...GlobalLoadBalancingRulesServiceImplTest.java | 4 +++-
5 files changed, 32 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b8a28dfa/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
----------------------------------------------------------------------
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 5e799c0..a10bbb3 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 @@
</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" />
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b8a28dfa/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml
----------------------------------------------------------------------
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 a54d588..76cdfe3 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 @@
<property name="typeClass"
value="com.cloud.network.element.RemoteAccessVPNServiceProvider" />
</bean>
-
-</beans>
\ No newline at end of file
+ <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>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b8a28dfa/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
----------------------------------------------------------------------
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 31f31cd..a5f9a0b 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 @@
<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>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b8a28dfa/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
index 62b9748..d4275d4 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<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);
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b8a28dfa/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java b/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
index 504ab9c..5b5dd08 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<GslbServiceProvider> mockGslbProviders = new ArrayList<GslbServiceProvider>();
+ mockGslbProviders.add(Mockito.mock(GslbServiceProvider.class));
+ gslbServiceImpl._gslbProviders = mockGslbProviders;
RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd = new RemoveFromGlobalLoadBalancerRuleCmdExtn();
Class<?> _class = removeFromGslbCmd.getClass().getSuperclass();