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,