From c83fd94d2637dae7d5326ec379d9dfb565fd2d97 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Tue, 6 Aug 2013 05:53:48 +0530 Subject: [PATCH] CLOUDSTACK-4037: [GSLB] removeFromGSLBRule is not cleaning the cloudsite1 infro from the second site NetScaler device ensuring when a site no longer participates in GSLB, complete GSLB config for that rule is wiped out on the GSLB provider for that site --- .../api/routing/GlobalLoadBalancerConfigCommand.java | 4 ++++ .../region/gslb/GlobalLoadBalancingRulesServiceImpl.java | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java b/core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java index b3603c8be95..c5182322c1b 100644 --- a/core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java +++ b/core/src/com/cloud/agent/api/routing/GlobalLoadBalancerConfigCommand.java @@ -93,6 +93,10 @@ public class GlobalLoadBalancerConfigCommand extends Command { return revoked; } + public void setForRevoke(boolean revoke) { + this.revoked = revoke; + } + @Override public boolean executeInSequence() { return false; diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java index 2a7ca7ac899..db2be40140d 100644 --- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java +++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java @@ -661,7 +661,6 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR for (Pair zoneId: gslbSiteIds) { List slbs = new ArrayList(); - // set site as 'local' for the site in that zone for (Pair innerLoopZoneId: gslbSiteIds) { SiteLoadBalancerConfig siteLb = zoneSiteLoadbalancerMap.get(innerLoopZoneId.first()); @@ -670,6 +669,14 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR } gslbConfigCmd.setSiteLoadBalancers(slbs); + gslbConfigCmd.setForRevoke(revoke); + + // revoke GSLB configuration completely on the site GSLB provider for the sites that no longer + // are participants of a GSLB rule + SiteLoadBalancerConfig siteLb = zoneSiteLoadbalancerMap.get(zoneId.first()); + if (siteLb.forRevoke()) { + gslbConfigCmd.setForRevoke(true); + } try { _gslbProvider.applyGlobalLoadBalancerRule(zoneId.first(), zoneId.second(), gslbConfigCmd);