You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mu...@apache.org on 2013/02/22 10:24:50 UTC
git commit: refs/heads/gslb-wip - implements assiging load balacner
rules to global load balancer rules
Updated Branches:
refs/heads/gslb-wip 2a7eb95f5 -> 701f4cad4
implements assiging load balacner rules to global load balancer rules
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/701f4cad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/701f4cad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/701f4cad
Branch: refs/heads/gslb-wip
Commit: 701f4cad4f4620720c14c287cd11bac9b8a15636
Parents: 2a7eb95
Author: Murali Reddy <mu...@citrix.com>
Authored: Fri Feb 22 14:53:06 2013 +0530
Committer: Murali Reddy <mu...@citrix.com>
Committed: Fri Feb 22 14:53:06 2013 +0530
----------------------------------------------------------------------
api/src/com/cloud/async/AsyncJob.java | 5 +-
.../com/cloud/region/ha/GlobalLoadBalancer.java | 67 ------
.../cloud/region/ha/GlobalLoadBalancerRule.java | 77 +++++++
.../region/ha/GlobalLoadBalancingRulesService.java | 12 +-
.../apache/cloudstack/api/ResponseGenerator.java | 4 +-
.../ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java | 21 +-
.../ha/gslb/CreateGlobalLoadBalancerRuleCmd.java | 8 +-
.../ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java | 4 +-
.../gslb/RemoveFromGlobalLoadBalancerRuleCmd.java | 8 +-
server/src/com/cloud/api/ApiResponseHelper.java | 18 +-
.../region/gslb/GlobalLoadBalancerDao.java | 6 +-
.../region/gslb/GlobalLoadBalancerDaoImpl.java | 10 +-
.../gslb/GlobalLoadBalancerLbRuleMapDao.java | 4 +-
.../gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java | 14 ++
.../region/gslb/GlobalLoadBalancerLbRuleMapVO.java | 12 +
.../region/gslb/GlobalLoadBalancerRuleVO.java | 169 +++++++++++++++
.../region/gslb/GlobalLoadBalancerVO.java | 146 -------------
.../gslb/GlobalLoadBalancingRulesServiceImpl.java | 142 +++++++++++--
setup/db/create-schema.sql | 2 +
19 files changed, 454 insertions(+), 275 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/com/cloud/async/AsyncJob.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java
index 5c4db79..8e4aec0 100644
--- a/api/src/com/cloud/async/AsyncJob.java
+++ b/api/src/com/cloud/async/AsyncJob.java
@@ -16,12 +16,11 @@
// under the License.
package com.cloud.async;
-import java.util.Date;
-
-import com.cloud.region.ha.GlobalLoadBalancer;
import org.apache.cloudstack.api.Identity;
import org.apache.cloudstack.api.InternalIdentity;
+import java.util.Date;
+
public interface AsyncJob extends Identity, InternalIdentity {
public enum Type {
None,
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/com/cloud/region/ha/GlobalLoadBalancer.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/region/ha/GlobalLoadBalancer.java b/api/src/com/cloud/region/ha/GlobalLoadBalancer.java
deleted file mode 100644
index 3d9f25ef..0000000
--- a/api/src/com/cloud/region/ha/GlobalLoadBalancer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.region.ha;
-
-import org.apache.cloudstack.api.Identity;
-import org.apache.cloudstack.api.InternalIdentity;
-
-/**
- * Definition for a GlobalLoadBalancer
- */
-public interface GlobalLoadBalancer extends Identity, InternalIdentity {
-
- enum Algorithm {
-
- RoundRobin,
- LeastConn,
- Proximity;
-
- public static boolean isValidAlgorithm(String algorithm) {
- if (RoundRobin.name().equalsIgnoreCase(algorithm) ||
- LeastConn.name().equalsIgnoreCase(algorithm) ||
- Proximity.name().equalsIgnoreCase(algorithm)) {
- return true;
- }
- return false;
- }
- }
- enum Persistence {
-
- sourceip;
-
- public static boolean isValidPersistence(String persistence) {
- if (sourceip.name().equalsIgnoreCase(persistence)) {
- return true;
- }
- return false;
- }
- }
-
- public String getName();
-
- public String getDescription();
-
- public String getGslbDomain();
-
- public String getAlgorithm();
-
- public String getPersistence();
-
- public int getRegion();
-
- public long getAccountId();
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/com/cloud/region/ha/GlobalLoadBalancerRule.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/region/ha/GlobalLoadBalancerRule.java b/api/src/com/cloud/region/ha/GlobalLoadBalancerRule.java
new file mode 100644
index 0000000..2705664
--- /dev/null
+++ b/api/src/com/cloud/region/ha/GlobalLoadBalancerRule.java
@@ -0,0 +1,77 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.region.ha;
+
+import org.apache.cloudstack.acl.ControlledEntity;
+import org.apache.cloudstack.api.Identity;
+import org.apache.cloudstack.api.InternalIdentity;
+
+/**
+ * GlobalLoadBalancerRule defines a global (multi zone) load balancing configuration.
+ */
+public interface GlobalLoadBalancerRule extends Identity, InternalIdentity, ControlledEntity {
+
+ enum Algorithm {
+
+ RoundRobin,
+ LeastConn,
+ Proximity;
+
+ public static boolean isValidAlgorithm(String algorithm) {
+ if (RoundRobin.name().equalsIgnoreCase(algorithm) ||
+ LeastConn.name().equalsIgnoreCase(algorithm) ||
+ Proximity.name().equalsIgnoreCase(algorithm)) {
+ return true;
+ }
+ return false;
+ }
+ }
+ enum Persistence {
+
+ sourceip;
+
+ public static boolean isValidPersistence(String persistence) {
+ if (sourceip.name().equalsIgnoreCase(persistence)) {
+ return true;
+ }
+ return false;
+ }
+ }
+
+ enum State {
+ Staged,
+ Add,
+ Active,
+ Revoke
+ }
+
+ public String getName();
+
+ public String getDescription();
+
+ public String getGslbDomain();
+
+ public String getAlgorithm();
+
+ public String getPersistence();
+
+ public int getRegion();
+
+ public long getAccountId();
+
+ public State getState();
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/com/cloud/region/ha/GlobalLoadBalancingRulesService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/region/ha/GlobalLoadBalancingRulesService.java b/api/src/com/cloud/region/ha/GlobalLoadBalancingRulesService.java
index 2a4115b..794d197 100644
--- a/api/src/com/cloud/region/ha/GlobalLoadBalancingRulesService.java
+++ b/api/src/com/cloud/region/ha/GlobalLoadBalancingRulesService.java
@@ -25,18 +25,24 @@ import java.util.List;
public interface GlobalLoadBalancingRulesService {
/*
+ *
* methods for managing life cycle of global load balancing rules
+ *
*/
- GlobalLoadBalancer createGlobalLoadBalancerRule(CreateGlobalLoadBalancerRuleCmd createGslbCmd) throws InvalidParameterSpecException;
+ GlobalLoadBalancerRule createGlobalLoadBalancerRule(CreateGlobalLoadBalancerRuleCmd createGslbCmd)
+ throws InvalidParameterSpecException;
boolean deleteGlobalLoadBalancerRule(DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd);
- GlobalLoadBalancer updateGlobalLoadBalancerRule(UpdateGlobalLoadBalancerRuleCmd updateGslbCmd);
+ GlobalLoadBalancerRule updateGlobalLoadBalancerRule(UpdateGlobalLoadBalancerRuleCmd updateGslbCmd);
+
+ List<GlobalLoadBalancerRule> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd);
- List<GlobalLoadBalancer> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd);
/*
+ *
* methods for managing sites participating in global load balancing
+ *
*/
boolean assignToGlobalLoadBalancerRule(AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/org/apache/cloudstack/api/ResponseGenerator.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
index 58f7504..11ca452 100644
--- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java
+++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
@@ -47,7 +47,7 @@ import com.cloud.org.Cluster;
import com.cloud.projects.Project;
import com.cloud.projects.ProjectAccount;
import com.cloud.projects.ProjectInvitation;
-import com.cloud.region.ha.GlobalLoadBalancer;
+import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.server.ResourceTag;
import com.cloud.storage.*;
import com.cloud.storage.snapshot.SnapshotPolicy;
@@ -106,7 +106,7 @@ public interface ResponseGenerator {
IPAddressResponse createIPAddressResponse(IpAddress ipAddress);
- GlobalLoadBalancerResponse createGlobalLoadBalancerResponse(GlobalLoadBalancer globalLoadBalancer);
+ GlobalLoadBalancerResponse createGlobalLoadBalancerResponse(GlobalLoadBalancerRule globalLoadBalancerRule);
LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
index 4fc90ad..b93f849 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/AssignToGlobalLoadBalancerRuleCmd.java
@@ -20,7 +20,7 @@ package org.apache.cloudstack.api.command.user.region.ha.gslb;
import com.cloud.event.EventTypes;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.network.rules.LoadBalancer;
-import com.cloud.region.ha.GlobalLoadBalancer;
+import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.region.ha.GlobalLoadBalancingRulesService;
import com.cloud.user.Account;
import com.cloud.user.UserContext;
@@ -59,11 +59,11 @@ public class AssignToGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
- public Long getGlobalLoadBalancerId() {
+ public Long getGlobalLoadBalancerRuleId() {
return id;
}
- public List<Long> getLoadBalancerRulesId() {
+ public List<Long> getLoadBalancerRulesIds() {
return loadBalancerRulesIds;
}
@@ -81,11 +81,12 @@ public class AssignToGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
@Override
public long getEntityOwnerId() {
- GlobalLoadBalancer globalLoadBalancer = _entityMgr.findById(GlobalLoadBalancer.class, getGlobalLoadBalancerId());
- if (globalLoadBalancer == null) {
+ GlobalLoadBalancerRule globalLoadBalancerRule = _entityMgr.findById(GlobalLoadBalancerRule.class,
+ getGlobalLoadBalancerRuleId());
+ if (globalLoadBalancerRule == null) {
return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked
}
- return globalLoadBalancer.getAccountId();
+ return globalLoadBalancerRule.getAccountId();
}
@Override
@@ -95,14 +96,14 @@ public class AssignToGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
@Override
public String getEventDescription() {
- return "applying load balancer rules " + StringUtils.join(getLoadBalancerRulesId(), ",") +
- " to global load balancer rule " + getGlobalLoadBalancerId();
+ return "applying load balancer rules " + StringUtils.join(getLoadBalancerRulesIds(), ",") +
+ " to global load balancer rule " + getGlobalLoadBalancerRuleId();
}
@Override
public void execute(){
- UserContext.current().setEventDetails("Global Load balancer rule Id: "+ getGlobalLoadBalancerId()+ " VmIds: "
- + StringUtils.join(getLoadBalancerRulesId(), ","));
+ UserContext.current().setEventDetails("Global Load balancer rule Id: "+ getGlobalLoadBalancerRuleId()+ " VmIds: "
+ + StringUtils.join(getLoadBalancerRulesIds(), ","));
boolean result = _gslbService.assignToGlobalLoadBalancerRule(this);
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
index b764c25..c0f5c84 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/CreateGlobalLoadBalancerRuleCmd.java
@@ -21,7 +21,7 @@ import com.cloud.async.AsyncJob;
import com.cloud.event.EventTypes;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.region.ha.GlobalLoadBalancer;
+import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.region.ha.GlobalLoadBalancingRulesService;
import com.cloud.user.UserContext;
import org.apache.cloudstack.api.*;
@@ -117,7 +117,7 @@ public class CreateGlobalLoadBalancerRuleCmd extends BaseAsyncCreateCmd {
public void execute() throws ResourceAllocationException, ResourceUnavailableException {
UserContext callerContext = UserContext.current();
- GlobalLoadBalancer rule = _entityMgr.findById(GlobalLoadBalancer.class, getEntityId());
+ GlobalLoadBalancerRule rule = _entityMgr.findById(GlobalLoadBalancerRule.class, getEntityId());
GlobalLoadBalancerResponse response = null;
if (rule != null) {
response = _responseGenerator.createGlobalLoadBalancerResponse(rule);
@@ -129,7 +129,7 @@ public class CreateGlobalLoadBalancerRuleCmd extends BaseAsyncCreateCmd {
@Override
public void create() {
try {
- GlobalLoadBalancer gslbRule = _gslbService.createGlobalLoadBalancerRule(this);
+ GlobalLoadBalancerRule gslbRule = _gslbService.createGlobalLoadBalancerRule(this);
this.setEntityId(gslbRule.getId());
this.setEntityUuid(gslbRule.getUuid());
UserContext.current().setEventDetails("Rule Id: " + getEntityId());
@@ -154,7 +154,7 @@ public class CreateGlobalLoadBalancerRuleCmd extends BaseAsyncCreateCmd {
@Override
public AsyncJob.Type getInstanceType() {
- return AsyncJob.Type.FirewallRule;
+ return AsyncJob.Type.GlobalLoadBalancerRule;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
index 0d185df..424b107 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/DeleteGlobalLoadBalancerRuleCmd.java
@@ -19,7 +19,7 @@ package org.apache.cloudstack.api.command.user.region.ha.gslb;
import com.cloud.async.AsyncJob;
import com.cloud.event.EventTypes;
-import com.cloud.region.ha.GlobalLoadBalancer;
+import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.region.ha.GlobalLoadBalancingRulesService;
import com.cloud.user.Account;
import com.cloud.user.UserContext;
@@ -67,7 +67,7 @@ public class DeleteGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
@Override
public long getEntityOwnerId() {
- GlobalLoadBalancer lb = _entityMgr.findById(GlobalLoadBalancer.class, getGlobalLoadBalancerId());
+ GlobalLoadBalancerRule lb = _entityMgr.findById(GlobalLoadBalancerRule.class, getGlobalLoadBalancerId());
if (lb != null) {
return lb.getAccountId();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
index 31bae9e..0cd9737 100644
--- a/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/region/ha/gslb/RemoveFromGlobalLoadBalancerRuleCmd.java
@@ -18,7 +18,7 @@
package org.apache.cloudstack.api.command.user.region.ha.gslb;
import com.cloud.event.EventTypes;
-import com.cloud.region.ha.GlobalLoadBalancer;
+import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.region.ha.GlobalLoadBalancingRulesService;
import com.cloud.user.Account;
import com.cloud.utils.StringUtils;
@@ -80,11 +80,11 @@ public class RemoveFromGlobalLoadBalancerRuleCmd extends BaseAsyncCmd {
@Override
public long getEntityOwnerId() {
- GlobalLoadBalancer globalLoadBalancer = _entityMgr.findById(GlobalLoadBalancer.class, getGlobalLoadBalancerId());
- if (globalLoadBalancer == null) {
+ GlobalLoadBalancerRule globalLoadBalancerRule = _entityMgr.findById(GlobalLoadBalancerRule.class, getGlobalLoadBalancerId());
+ if (globalLoadBalancerRule == null) {
return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked
}
- return globalLoadBalancer.getAccountId();
+ return globalLoadBalancerRule.getAccountId();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index 8fe0ee0..8c3391d 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -59,7 +59,7 @@ import com.cloud.org.Cluster;
import com.cloud.projects.Project;
import com.cloud.projects.ProjectAccount;
import com.cloud.projects.ProjectInvitation;
-import com.cloud.region.ha.GlobalLoadBalancer;
+import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.server.Criteria;
import com.cloud.server.ResourceTag;
import com.cloud.server.ResourceTag.TaggedResourceType;
@@ -534,15 +534,15 @@ public class ApiResponseHelper implements ResponseGenerator {
}
@Override
- public GlobalLoadBalancerResponse createGlobalLoadBalancerResponse(GlobalLoadBalancer globalLoadBalancer) {
+ public GlobalLoadBalancerResponse createGlobalLoadBalancerResponse(GlobalLoadBalancerRule globalLoadBalancerRule) {
GlobalLoadBalancerResponse response = new GlobalLoadBalancerResponse();
- response.setAlgorithm(globalLoadBalancer.getAlgorithm());
- response.setStickyMethod(globalLoadBalancer.getPersistence());
- response.setServiceDomainName(globalLoadBalancer.getGslbDomain());
- response.setName(globalLoadBalancer.getName());
- response.setDescription(globalLoadBalancer.getDescription());
- response.setRegionIdId(globalLoadBalancer.getRegion());
- response.setId(globalLoadBalancer.getUuid());
+ response.setAlgorithm(globalLoadBalancerRule.getAlgorithm());
+ response.setStickyMethod(globalLoadBalancerRule.getPersistence());
+ response.setServiceDomainName(globalLoadBalancerRule.getGslbDomain());
+ response.setName(globalLoadBalancerRule.getName());
+ response.setDescription(globalLoadBalancerRule.getDescription());
+ response.setRegionIdId(globalLoadBalancerRule.getRegion());
+ response.setId(globalLoadBalancerRule.getUuid());
return response;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDao.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDao.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDao.java
index c7f1d58..c87665e 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDao.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDao.java
@@ -21,8 +21,8 @@ import com.cloud.utils.db.GenericDao;
import java.util.List;
-public interface GlobalLoadBalancerDao extends GenericDao<GlobalLoadBalancerVO, Long> {
+public interface GlobalLoadBalancerDao extends GenericDao<GlobalLoadBalancerRuleVO, Long> {
- List<GlobalLoadBalancerVO> listByRegionId(long regionId);
- List<GlobalLoadBalancerVO> listByDomainName(String domainName);
+ List<GlobalLoadBalancerRuleVO> listByRegionId(long regionId);
+ List<GlobalLoadBalancerRuleVO> listByDomainName(String domainName);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java
index 63d60c0..4021fc0 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerDaoImpl.java
@@ -27,9 +27,9 @@ import java.util.List;
@Component
@Local(value={GlobalLoadBalancerDao.class})
-public class GlobalLoadBalancerDaoImpl extends GenericDaoBase<GlobalLoadBalancerVO, Long> implements GlobalLoadBalancerDao {
+public class GlobalLoadBalancerDaoImpl extends GenericDaoBase<GlobalLoadBalancerRuleVO, Long> implements GlobalLoadBalancerDao {
- private final SearchBuilder<GlobalLoadBalancerVO> listByDomainSearch;
+ private final SearchBuilder<GlobalLoadBalancerRuleVO> listByDomainSearch;
public GlobalLoadBalancerDaoImpl() {
listByDomainSearch = createSearchBuilder();
@@ -38,13 +38,13 @@ public class GlobalLoadBalancerDaoImpl extends GenericDaoBase<GlobalLoadBalancer
}
@Override
- public List<GlobalLoadBalancerVO> listByRegionId(long regionId) {
+ public List<GlobalLoadBalancerRuleVO> listByRegionId(long regionId) {
return null;
}
@Override
- public List<GlobalLoadBalancerVO> listByDomainName(String domainName) {
- SearchCriteria<GlobalLoadBalancerVO> sc = listByDomainSearch.create();
+ public List<GlobalLoadBalancerRuleVO> listByDomainName(String domainName) {
+ SearchCriteria<GlobalLoadBalancerRuleVO> sc = listByDomainSearch.create();
sc.setParameters("gslbDomain", domainName);
return listBy(sc);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java
index 6ffdc49..8f8f7bb 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDao.java
@@ -19,6 +19,8 @@ package org.apache.cloudstack.region.gslb;
import com.cloud.utils.db.GenericDao;
-public interface GlobalLoadBalancerLbRuleMapDao extends GenericDao<GlobalLoadBalancerLbRuleMapVO, Long> {
+import java.util.List;
+public interface GlobalLoadBalancerLbRuleMapDao extends GenericDao<GlobalLoadBalancerLbRuleMapVO, Long> {
+ List<GlobalLoadBalancerLbRuleMapVO> listByGslbRuleId(long gslbRuleId);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java
index 6251985..eb62253 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapDaoImpl.java
@@ -19,16 +19,30 @@ package org.apache.cloudstack.region.gslb;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
import org.springframework.stereotype.Component;
import javax.ejb.Local;
+import java.util.List;
@Component
@Local(value={GlobalLoadBalancerLbRuleMapDao.class})
@DB(txn = false)
public class GlobalLoadBalancerLbRuleMapDaoImpl extends GenericDaoBase<GlobalLoadBalancerLbRuleMapVO, Long> implements GlobalLoadBalancerLbRuleMapDao {
+ private final SearchBuilder<GlobalLoadBalancerLbRuleMapVO> listByGslbRuleId;
+
public GlobalLoadBalancerLbRuleMapDaoImpl() {
+ listByGslbRuleId = createSearchBuilder();
+ listByGslbRuleId.and("gslbLoadBalancerId", listByGslbRuleId.entity().getGslbLoadBalancerId(), SearchCriteria.Op.EQ);
+ listByGslbRuleId.done();
+ }
+ @Override
+ public List<GlobalLoadBalancerLbRuleMapVO> listByGslbRuleId(long gslbRuleId) {
+ SearchCriteria<GlobalLoadBalancerLbRuleMapVO> sc = listByGslbRuleId.create();
+ sc.setParameters("gslbLoadBalancerId", gslbRuleId);
+ return listBy(sc);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java
index 84ce0cc..6a1e17d 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerLbRuleMapVO.java
@@ -40,6 +40,9 @@ public class GlobalLoadBalancerLbRuleMapVO implements InternalIdentity {
@Column(name="gslb_rule_id")
private long gslbLoadBalancerId;
+ @Column(name="revoke")
+ private boolean revoke = false;
+
public GlobalLoadBalancerLbRuleMapVO() {
}
@@ -47,6 +50,7 @@ public class GlobalLoadBalancerLbRuleMapVO implements InternalIdentity {
public GlobalLoadBalancerLbRuleMapVO(long loadBalancerId, long gslbLoadBalancerId) {
this.loadBalancerId = loadBalancerId;
this.gslbLoadBalancerId = gslbLoadBalancerId;
+ this.revoke = false;
}
public long getId() {
@@ -68,4 +72,12 @@ public class GlobalLoadBalancerLbRuleMapVO implements InternalIdentity {
public void setGslbLoadBalancerId(long gslbLoadBalancerId) {
this.gslbLoadBalancerId = gslbLoadBalancerId;
}
+
+ public boolean isRevoke() {
+ return revoke;
+ }
+
+ public void setRevoke(boolean revoke) {
+ this.revoke = revoke;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java
new file mode 100644
index 0000000..1f6bd8a
--- /dev/null
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerRuleVO.java
@@ -0,0 +1,169 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.cloudstack.region.gslb;
+
+import com.cloud.region.ha.GlobalLoadBalancerRule;
+
+import javax.persistence.*;
+import java.util.UUID;
+
+@Entity
+@Table(name=("global_load_balancing_rules"))
+public class GlobalLoadBalancerRuleVO implements GlobalLoadBalancerRule {
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(name="id")
+ long id;
+
+ @Column(name="name")
+ private String name;
+
+ @Column(name="description", length=4096)
+ private String description;
+
+ @Column(name="algorithm")
+ private String algorithm;
+
+ @Column(name="persistence")
+ private String persistence;
+
+ @Column(name="gslb_domain_name")
+ private String gslbDomain;
+
+ @Column(name="region_id")
+ private int region;
+
+ @Column(name="account_id")
+ long accountId;
+
+ @Column(name="domain_id", updatable=false)
+ long domainId;
+
+ @Column(name="uuid")
+ String uuid;
+
+ @Enumerated(value=EnumType.STRING)
+ @Column(name="state")
+ GlobalLoadBalancerRule.State state;
+
+ public GlobalLoadBalancerRuleVO() {
+ this.uuid = UUID.randomUUID().toString();
+ }
+
+ public GlobalLoadBalancerRuleVO(String name, String description, String gslbDomain, String algorithm,
+ String persistence, int regionId, long accountId, long domainId, State state) {
+ this.name =name;
+ this.description = description;
+ this.region = regionId;
+ this.algorithm = algorithm;
+ this.gslbDomain = gslbDomain;
+ this.persistence = persistence;
+ this.accountId = accountId;
+ this.domainId = domainId;
+ this.uuid = UUID.randomUUID().toString();
+ this.state = state;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public String getAlgorithm() {
+ return algorithm;
+ }
+
+ @Override
+ public String getPersistence() {
+ return persistence;
+ }
+
+ @Override
+ public int getRegion() {
+ return region;
+ }
+
+ @Override
+ public long getAccountId() {
+ return accountId;
+ }
+
+ @Override
+ public long getDomainId() {
+ return domainId;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public void setAlgorithm(String algorithm) {
+ this.algorithm = algorithm;
+ }
+
+ public void setPersistence(String persistence) {
+ this.persistence = persistence;
+ }
+
+ @Override
+ public String getGslbDomain() {
+ return gslbDomain;
+ }
+
+ public void setGslbDomain(String gslbDomain) {
+ this.gslbDomain = gslbDomain;
+ }
+
+ public void setRegion(int region) {
+ this.region =region;
+ }
+
+ @Override
+ public long getId() {
+ return id;
+ }
+
+ @Override
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public void setState(GlobalLoadBalancerRule.State state) {
+ this.state = state;
+ }
+
+ @Override
+ public GlobalLoadBalancerRule.State getState() {
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerVO.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerVO.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerVO.java
deleted file mode 100644
index 372ef7d..0000000
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancerVO.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.region.gslb;
-
-import com.cloud.region.ha.GlobalLoadBalancer;
-
-import javax.persistence.*;
-import java.util.UUID;
-
-@Entity
-@Table(name=("global_load_balancing_rules"))
-public class GlobalLoadBalancerVO implements GlobalLoadBalancer {
-
- @Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- @Column(name="id")
- long id;
-
- @Column(name="name")
- private String name;
-
- @Column(name="description", length=4096)
- private String description;
-
- @Column(name="algorithm")
- private String algorithm;
-
- @Column(name="persistence")
- private String persistence;
-
- @Column(name="gslb_domain_name")
- private String gslbDomain;
-
- @Column(name="region_id")
- private int region;
-
- @Column(name="account_id")
- long accountId;
-
- @Column(name="uuid")
- String uuid;
-
- public GlobalLoadBalancerVO() {
- this.uuid = UUID.randomUUID().toString();
- }
-
- public GlobalLoadBalancerVO(String name, String description, String gslbDomain, String algorithm,
- String persistence, int regionId, long accountId) {
- this.name =name;
- this.description = description;
- this.region = regionId;
- this.algorithm = algorithm;
- this.gslbDomain = gslbDomain;
- this.persistence = persistence;
- this.accountId = accountId;
- this.uuid = UUID.randomUUID().toString();
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- @Override
- public String getDescription() {
- return description;
- }
-
- @Override
- public String getAlgorithm() {
- return algorithm;
- }
-
- @Override
- public String getPersistence() {
- return persistence;
- }
-
- @Override
- public int getRegion() {
- return region;
- }
-
- @Override
- public long getAccountId() {
- return accountId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public void setAlgorithm(String algorithm) {
- this.algorithm = algorithm;
- }
-
- public void setPersistence(String persistence) {
- this.persistence = persistence;
- }
-
- @Override
- public String getGslbDomain() {
- return gslbDomain;
- }
-
- public void setGslbDomain(String gslbDomain) {
- this.gslbDomain = gslbDomain;
- }
-
- public void setRegion(int region) {
- this.region =region;
- }
-
- @Override
- public long getId() {
- return id;
- }
-
- @Override
- public String getUuid() {
- return this.uuid;
- }
-
- public void setUuid(String uuid) {
- this.uuid = uuid;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/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 c6a2dc2..8d5d374 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
@@ -21,13 +21,21 @@ import com.cloud.agent.api.routing.GlobalLoadBalancerConfigCommand;
import com.cloud.event.ActionEvent;
import com.cloud.event.EventTypes;
import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.region.ha.GlobalLoadBalancer;
+import com.cloud.network.Network;
+import com.cloud.network.dao.LoadBalancerDao;
+import com.cloud.network.dao.LoadBalancerVO;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.rules.LoadBalancer;
+import com.cloud.network.rules.RulesManager;
+import com.cloud.region.ha.GlobalLoadBalancerRule;
import com.cloud.region.ha.GlobalLoadBalancingRulesService;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
+import com.cloud.user.UserContext;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.net.NetUtils;
+import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.api.command.user.region.ha.gslb.*;
import org.apache.cloudstack.region.Region;
import org.apache.cloudstack.region.dao.RegionDao;
@@ -36,6 +44,7 @@ import org.springframework.stereotype.Component;
import javax.ejb.Local;
import javax.inject.Inject;
import java.security.spec.InvalidParameterSpecException;
+import java.util.ArrayList;
import java.util.List;
@Component
@@ -47,12 +56,20 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
@Inject
GlobalLoadBalancerDao _globalLoadBalancerDao;
@Inject
+ GlobalLoadBalancerLbRuleMapDao _gslbLbMapDao;
+ @Inject
RegionDao _regionDao;
+ @Inject
+ RulesManager _rulesMgr;
+ @Inject
+ LoadBalancerDao _lbDao;
+ @Inject
+ NetworkDao _networkDao;
@Override
@DB
@ActionEvent(eventType = EventTypes.EVENT_GLOBAL_LOAD_BALANCER_CREATE, eventDescription = "creating global load balancer")
- public GlobalLoadBalancer createGlobalLoadBalancerRule(CreateGlobalLoadBalancerRuleCmd newGslb)
+ public GlobalLoadBalancerRule createGlobalLoadBalancerRule(CreateGlobalLoadBalancerRuleCmd newGslb)
throws InvalidParameterSpecException {
Integer regionId = newGslb.getRegionId();
@@ -64,17 +81,18 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
Account gslbOwner = _accountMgr.getAccount(newGslb.getEntityOwnerId());
- if (!GlobalLoadBalancer.Algorithm.isValidAlgorithm(algorithm)) {
+ if (!GlobalLoadBalancerRule.Algorithm.isValidAlgorithm(algorithm)) {
throw new InvalidParameterSpecException("Invalid Algorithm: " + algorithm);
}
- if (!GlobalLoadBalancer.Persistence.isValidPersistence(stickyMethod)) {
+ if (!GlobalLoadBalancerRule.Persistence.isValidPersistence(stickyMethod)) {
throw new InvalidParameterSpecException("Invalid persistence: " + stickyMethod);
}
- List<GlobalLoadBalancerVO> gslbRules = _globalLoadBalancerDao.listByDomainName(domainName);
+ List<GlobalLoadBalancerRuleVO> gslbRules = _globalLoadBalancerDao.listByDomainName(domainName);
if (gslbRules != null && !gslbRules.isEmpty()) {
- throw new InvalidParameterSpecException("There exist a GSLB rule with same domain name : " + domainName);
+ throw new InvalidParameterSpecException("There exist a GSLB rule with that conflicts with domain name : "
+ + domainName + " provided");
}
if (!NetUtils.verifyDomainName(domainName)){
@@ -90,34 +108,126 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
throw new InvalidParameterValueException("GSLB service is not enabled in region : " + region.getName());
}
- // persist in the DB
Transaction txn = Transaction.currentTxn();
txn.start();
- GlobalLoadBalancerVO newGslbRule = new GlobalLoadBalancerVO(name, description, domainName, algorithm,
- stickyMethod, regionId, gslbOwner.getId());
+ GlobalLoadBalancerRuleVO newGslbRule = new GlobalLoadBalancerRuleVO(name, description, domainName, algorithm,
+ stickyMethod, regionId, gslbOwner.getId(), gslbOwner.getDomainId(), GlobalLoadBalancerRule.State.Staged);
_globalLoadBalancerDao.persist(newGslbRule);
txn.commit();
return newGslbRule;
}
@Override
- public boolean deleteGlobalLoadBalancerRule(DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd) {
+ @DB
+ @ActionEvent(eventType = EventTypes.EVENT_ASSIGN_TO_GLOBAL_LOAD_BALANCER_RULE, eventDescription =
+ "Assign a load balancer rule to global load balancer rule")
+ public boolean assignToGlobalLoadBalancerRule(AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd) {
+
+ UserContext ctx = UserContext.current();
+ Account caller = ctx.getCaller();
+ long gslbRuleId = assignToGslbCmd.getGlobalLoadBalancerRuleId();
+ List<Long> lbRuleIds = assignToGslbCmd.getLoadBalancerRulesIds();
+
+ GlobalLoadBalancerRuleVO gslbRule = _globalLoadBalancerDao.findById(gslbRuleId);
+ if (gslbRule == null) {
+ throw new InvalidParameterValueException("Invalid GSLB rule id: " + gslbRuleId);
+ }
+
+ _accountMgr.checkAccess(caller, SecurityChecker.AccessType.ModifyEntry, true, gslbRule);
+
+ if (gslbRule.getState() == GlobalLoadBalancerRule.State.Revoke) {
+ throw new InvalidParameterValueException("GSLB rule id: " + gslbRuleId + " is in revoked state");
+ }
+
+ /* check each of the load balance rule id is
+ * valid ID
+ * caller has access to the rule
+ * check rule is not revoked
+ * no two rules are in same zone
+ */
+ if (lbRuleIds != null) {
+ List<Long> zones = new ArrayList<Long>();
+ for (Long lbRuleId : lbRuleIds) {
+ LoadBalancerVO loadBalancer = _lbDao.findById(lbRuleId);
+ if (loadBalancer == null) {
+ throw new InvalidParameterValueException("Invalid load balancer ID " + lbRuleId);
+ }
+
+ _accountMgr.checkAccess(caller, null, true, loadBalancer);
+
+ if (loadBalancer.getState() == LoadBalancer.State.Revoke) {
+ throw new InvalidParameterValueException("Load balancer ID " + lbRuleId + " is in revoke state");
+ }
+ Network network = _networkDao.findById(loadBalancer.getNetworkId());
+ if (zones.contains(network.getDataCenterId())) {
+ throw new InvalidParameterValueException("Each load balancer rule specified should be in unique zone");
+ }
+ zones.add(network.getDataCenterId());
+ }
+ }
+
+ Transaction txn = Transaction.currentTxn();
+ txn.start();
+
+ // get the persisted list of LB rules that are assigned to GSLB rule
+ List<GlobalLoadBalancerLbRuleMapVO> gslbMapVos = _gslbLbMapDao.listByGslbRuleId(gslbRuleId);
+
+ // compare intended list of lb rules with earlier assigned lb rules, to figure mapping that needs to go
+ if (gslbMapVos != null) {
+ for (GlobalLoadBalancerLbRuleMapVO gslbLbMapVo : gslbMapVos) {
+ if (lbRuleIds == null || !lbRuleIds.contains(gslbLbMapVo.getLoadBalancerId())) {
+ _gslbLbMapDao.remove(gslbLbMapVo.getId());
+ }
+ }
+ }
+
+ // persist the mapping of new Lb rule that needs to assigned to a gslb rule
+ if (lbRuleIds != null) {
+ for (Long lbRuleId : lbRuleIds) {
+ boolean mappingExists = false;
+ for (GlobalLoadBalancerLbRuleMapVO gslbLbMapVo : gslbMapVos) {
+ if (gslbLbMapVo.getGslbLoadBalancerId() == lbRuleId) {
+ mappingExists = true;
+ break;
+ }
+ }
+ if (!mappingExists) {
+ GlobalLoadBalancerLbRuleMapVO newGslbLbMap = new GlobalLoadBalancerLbRuleMapVO();
+ newGslbLbMap.setGslbLoadBalancerId(gslbRuleId);
+ newGslbLbMap.setLoadBalancerId(lbRuleId);
+ _gslbLbMapDao.persist(newGslbLbMap);
+ }
+ }
+ }
+
+ // mark the rule state as add
+ if (gslbRule.getState() == GlobalLoadBalancerRule.State.Staged) {
+ gslbRule.setState(GlobalLoadBalancerRule.State.Add);
+ _globalLoadBalancerDao.update(gslbRule.getId(), gslbRule);
+ }
+
+ txn.commit();
+
+ // apply rules on each of the GSLB providers at each site participating in the global load balancing rule
+
+ // on success set state to Active
+
return false;
}
@Override
- public GlobalLoadBalancer updateGlobalLoadBalancerRule(UpdateGlobalLoadBalancerRuleCmd updateGslbCmd) {
- return null;
+ public boolean deleteGlobalLoadBalancerRule(DeleteGlobalLoadBalancerRuleCmd deleteGslbCmd) {
+ return false;
}
@Override
- public List<GlobalLoadBalancer> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd) {
+ public GlobalLoadBalancerRule updateGlobalLoadBalancerRule(UpdateGlobalLoadBalancerRuleCmd updateGslbCmd) {
return null;
}
@Override
- public boolean assignToGlobalLoadBalancerRule(AssignToGlobalLoadBalancerRuleCmd assignToGslbCmd) {
- return false;
+ public List<GlobalLoadBalancerRule> listGlobalLoadBalancerRule(ListGlobalLoadBalancerRuleCmd listGslbCmd) {
+ return null;
}
@Override
@@ -132,4 +242,4 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
private void configureZoneGslbProvider(long zoneId, GlobalLoadBalancerConfigCommand cmd) {
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/701f4cad/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 5ac83e1..1b792c9 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -2661,6 +2661,7 @@ CREATE TABLE `cloud`.`global_load_balancing_rules` (
`region_id` int unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`description` varchar(4096) NULL COMMENT 'description',
+ `state` char(32) NOT NULL COMMENT 'current state of this rule',
`algorithm` varchar(255) NOT NULL COMMENT 'load balancing algorithm used to distribbute traffic across zones',
`persistence` varchar(255) NOT NULL COMMENT 'session persistence used across the zone',
`gslb_domain_name` varchar(255) NOT NULL COMMENT 'DNS name for the GSLB service that is used to provide a FQDN for the GSLB service',
@@ -2673,6 +2674,7 @@ CREATE TABLE `cloud`.`global_load_balancer_lb_rule_map` (
`id` bigint unsigned NOT NULL auto_increment,
`gslb_rule_id` bigint unsigned NOT NULL,
`lb_rule_id` bigint unsigned NOT NULL,
+ `revoke` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 is when rule is set for Revoke',
PRIMARY KEY (`id`),
UNIQUE KEY (`gslb_rule_id`, `lb_rule_id`),
CONSTRAINT `fk_gslb_rule_id` FOREIGN KEY(`gslb_rule_id`) REFERENCES `global_load_balancing_rules`(`id`) ON DELETE CASCADE,