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 <[email protected]> Authored: Fri Feb 22 14:53:06 2013 +0530 Committer: Murali Reddy <[email protected]> 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,
