Tenant Isolation - Network Partition

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/d106e8f4
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/d106e8f4
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/d106e8f4

Branch: refs/heads/tenant-isolation
Commit: d106e8f47de393269f5d0c0738d4807dd9e3b18e
Parents: f5c4c8e
Author: Dinithi <[email protected]>
Authored: Thu Jun 25 15:21:14 2015 +0530
Committer: Dinithi <[email protected]>
Committed: Thu Jun 25 15:21:14 2015 +0530

----------------------------------------------------------------------
 .../controller/domain/NetworkPartition.java     |   36 +-
 .../impl/CloudControllerServiceImpl.java        |   26 +-
 .../beans/partition/NetworkPartitionBean.java   |   18 +
 .../default/configure/network-partitions.json   |    1 +
 .../schema/configure/network-partitions.json    |    7 +-
 .../themes/theme0/partials/configure_form.hbs   |    4 +
 .../rest/endpoint/api/StratosApiV41.java        |    8 +-
 .../rest/endpoint/api/StratosApiV41Utils.java   |   21 +-
 .../util/converter/ObjectConverter.java         |    4 +
 .../main/resources/CloudControllerService.wsdl  | 1020 +++++++++---------
 10 files changed, 613 insertions(+), 532 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/NetworkPartition.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/NetworkPartition.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/NetworkPartition.java
index 85b6179..8ac69f4 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/NetworkPartition.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/NetworkPartition.java
@@ -32,13 +32,37 @@ public class NetworkPartition implements Serializable {
 
     private static final long serialVersionUID = -8043298009352097370L;
 
+    private String uuid;
     private String id;
+    private int tenantId;
     private String provider;
     private boolean activeByDefault;
     private Partition[] partitions;
     private String partitionAlgo;
     private Properties properties;
 
+    /**
+     * Gets the local Id of the network partition.
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * Sets the local Id of the network partition.
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public int getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(int tenantId) {
+        this.tenantId = tenantId;
+    }
+
     public void setPartitions(Partition[] partitions) {
         if (partitions == null) {
             this.partitions = partitions;
@@ -58,17 +82,17 @@ public class NetworkPartition implements Serializable {
     }
 
     /**
-     * Gets the value of the id.
+     * Gets the global Id network partition
      */
-    public String getId() {
-        return id;
+    public String getUuid() {
+        return uuid;
     }
 
     /**
-     * sets the value of the id.
+     * Sets the global Id network partition
      */
-    public void setId(String id) {
-        this.id = id;
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
     }
 
     public boolean isActiveByDefault() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index 4d51cc1..801f41e 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -1453,13 +1453,13 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
             InvalidNetworkPartitionException {
 
         handleNullObject(networkPartition, "Network Partition is null");
-        handleNullObject(networkPartition.getId(), "Network Partition ID is 
null");
+        handleNullObject(networkPartition.getUuid(), "Network Partition ID is 
null");
 
         if (log.isInfoEnabled()) {
-            log.info(String.format("Adding network partition: 
[network-partition-id] %s", networkPartition.getId()));
+            log.info(String.format("Adding network partition: 
[network-partition-id] %s", networkPartition.getUuid()));
         }
 
-        String networkPartitionID = networkPartition.getId();
+        String networkPartitionID = networkPartition.getUuid();
         if (cloudControllerContext.getNetworkPartition(networkPartitionID) != 
null) {
             String message = "Network partition already exists: 
[network-partition-id] " + networkPartitionID;
             log.error(message);
@@ -1471,7 +1471,7 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
                 if (partition != null) {
                     if (log.isInfoEnabled()) {
                         log.info(String.format("Validating partition: 
[network-partition-id] %s [partition-id] %s",
-                                networkPartition.getId(), partition.getId()));
+                                networkPartition.getUuid(), 
partition.getId()));
                     }
                     // Overwrites partition provider with network partition 
provider
                     partition.setProvider(networkPartition.getProvider());
@@ -1481,18 +1481,18 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
                         //Following message is shown to the end user in all 
the the API clients(GUI/CLI/Rest API)
                         throw new 
InvalidNetworkPartitionException(String.format("Network partition " +
                                         " %s, is invalid since the partition 
%s is invalid",
-                                networkPartition.getId(), partition.getId()), 
e);
+                                networkPartition.getUuid(), 
partition.getId()), e);
                     }
                     if (log.isInfoEnabled()) {
                         log.info(String.format("Partition validated 
successfully: [network-partition-id] %s " +
-                                "[partition-id] %s", networkPartition.getId(), 
partition.getId()));
+                                "[partition-id] %s", 
networkPartition.getUuid(), partition.getId()));
                     }
                 }
             }
         } else {
             //Following message is shown to the end user in all the the API 
clients(GUI/CLI/Rest API)
             throw new InvalidNetworkPartitionException(String.format("Network 
partition: " +
-                    "%s doesn't not have any partitions ", 
networkPartition.getId()));
+                    "%s doesn't not have any partitions ", 
networkPartition.getUuid()));
         }
 
         // adding network partition to CC-Context
@@ -1501,7 +1501,7 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
         CloudControllerContext.getInstance().persist();
         if (log.isInfoEnabled()) {
             log.info(String.format("Network partition added successfully: 
[network-partition-id] %s",
-                    networkPartition.getId()));
+                    networkPartition.getUuid()));
         }
         return true;
     }
@@ -1540,10 +1540,10 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
     public boolean updateNetworkPartition(NetworkPartition networkPartition) 
throws NetworkPartitionNotExistsException {
         try {
             handleNullObject(networkPartition, "Network Partition is null");
-            handleNullObject(networkPartition.getId(), "Network Partition ID 
is null");
+            handleNullObject(networkPartition.getUuid(), "Network Partition ID 
is null");
 
             if (log.isInfoEnabled()) {
-                log.info(String.format("Updating network partition: 
[network-partition-id] %s", networkPartition.getId()));
+                log.info(String.format("Updating network partition: 
[network-partition-id] %s", networkPartition.getUuid()));
             }
 
             String networkPartitionID = networkPartition.getId();
@@ -1558,14 +1558,14 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
                     if (partition != null) {
                         if (log.isInfoEnabled()) {
                             log.info(String.format("Validating partition: 
[network-partition-id] %s [partition-id] %s",
-                                    networkPartition.getId(), 
partition.getId()));
+                                    networkPartition.getUuid(), 
partition.getId()));
                         }
                         // Overwrites partition provider with network 
partition provider
                         partition.setProvider(networkPartition.getProvider());
                         validatePartition(partition);
                         if (log.isInfoEnabled()) {
                             log.info(String.format("Partition validated 
successfully: [network-partition-id] %s " +
-                                    "[partition-id] %s", 
networkPartition.getId(), partition.getId()));
+                                    "[partition-id] %s", 
networkPartition.getUuid(), partition.getId()));
                         }
                     }
                 }
@@ -1577,7 +1577,7 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
             CloudControllerContext.getInstance().persist();
             if (log.isInfoEnabled()) {
                 log.info(String.format("Network partition updated 
successfully: [network-partition-id] %s",
-                        networkPartition.getId()));
+                        networkPartition.getUuid()));
             }
             return true;
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/partition/NetworkPartitionBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/partition/NetworkPartitionBean.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/partition/NetworkPartitionBean.java
index 3a31903..fe9305d 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/partition/NetworkPartitionBean.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/partition/NetworkPartitionBean.java
@@ -27,11 +27,29 @@ import java.util.List;
 @XmlRootElement
 public class NetworkPartitionBean {
 
+    private String uuid;
+    private int tenantId;
     private String id;
     private String provider;
     private List<PartitionBean> partitions;
     private List<PropertyBean> properties;
 
+    public int getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(int tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/network-partitions.json
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/network-partitions.json
 
b/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/network-partitions.json
index 0ad6424..70f2899 100644
--- 
a/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/network-partitions.json
+++ 
b/components/org.apache.stratos.manager.console/console/controllers/forms/default/configure/network-partitions.json
@@ -1,4 +1,5 @@
 {
+    "uuid": "",
     "id": "network-partition-1",
     "provider": "mock",
     "partitions": [

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/network-partitions.json
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/network-partitions.json
 
b/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/network-partitions.json
index 22d781a..85bcfab 100644
--- 
a/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/network-partitions.json
+++ 
b/components/org.apache.stratos.manager.console/console/controllers/forms/schema/configure/network-partitions.json
@@ -1,6 +1,6 @@
 {
     "$schema": "http://json-schema.org/draft-04/schema#";,
-    "id": "root",
+    "uuid": "root",
     "type": "object",
     "title": "Network Partition Definition",
     "name": "Network Partition Policy",
@@ -9,6 +9,11 @@
         "disable_collapse": true
     },
     "properties": {
+        "uuid": {
+            "id": "root/uuid",
+            "type": "string",
+            "title": "UUID"
+        },
         "id": {
             "id": "root/id",
             "type": "string",

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.manager.console/console/themes/theme0/partials/configure_form.hbs
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager.console/console/themes/theme0/partials/configure_form.hbs
 
b/components/org.apache.stratos.manager.console/console/themes/theme0/partials/configure_form.hbs
index 2071a60..36d4893 100644
--- 
a/components/org.apache.stratos.manager.console/console/themes/theme0/partials/configure_form.hbs
+++ 
b/components/org.apache.stratos.manager.console/console/themes/theme0/partials/configure_form.hbs
@@ -434,6 +434,10 @@ $(document).ready(function () {
             }else if(editor.getEditor('root.type')){
                 editor.getEditor('root.type').disable();
             }
+
+            if(editor.getEditor('root.uuid')){
+                editor.getEditor('root.uuid').disable();
+            }
        {{/if}}
 
         //    Hook up the validation indicator to update its

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 9712980..8075e50 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -63,6 +63,7 @@ import java.net.URI;
 import java.rmi.RemoteException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * Stratos API v4.1 for Stratos 4.1.0 release.
@@ -611,6 +612,11 @@ public class StratosApiV41 extends AbstractApi {
     public Response addNetworkPartition(
             NetworkPartitionBean networkPartitionBean) throws RestAPIException 
{
         String networkPartitionId = networkPartitionBean.getId();
+        networkPartitionBean.setUuid(UUID.randomUUID().toString());
+
+        PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
+        networkPartitionBean.setTenantId(carbonContext.getTenantId());
+
         try {
             StratosApiV41Utils.addNetworkPartition(networkPartitionBean);
         } catch 
(CloudControllerServiceNetworkPartitionAlreadyExistsExceptionException e) {
@@ -627,7 +633,7 @@ public class StratosApiV41 extends AbstractApi {
         }
         URI url = 
uriInfo.getAbsolutePathBuilder().path(networkPartitionId).build();
         return Response.created(url).entity(new 
ResponseMessageBean(ResponseMessageBean.SUCCESS,
-                String.format("Network partition added successfully: 
[network-partition] %s", networkPartitionId)))
+                String.format("Network partition added successfully: 
[network-partition-uuid] %s", networkPartitionId)))
                 .build();
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 0d685bf..5b12e59 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -30,6 +30,7 @@ import 
org.apache.stratos.autoscaler.stub.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.stub.pojo.ServiceGroup;
 import org.apache.stratos.cloud.controller.stub.*;
 import org.apache.stratos.cloud.controller.stub.domain.Cartridge;
+import org.apache.stratos.cloud.controller.stub.domain.NetworkPartition;
 import org.apache.stratos.common.beans.IaasProviderInfoBean;
 import org.apache.stratos.common.beans.PropertyBean;
 import org.apache.stratos.common.beans.TenantInfoBean;
@@ -2521,7 +2522,7 @@ public class StratosApiV41Utils {
         }
 
         if (!application.isMultiTenant()) {
-            throw new RestAPIException("Application singups not available for 
single-tenant applications");
+            throw new RestAPIException("Application signups not available for 
single-tenant applications");
         }
 
         int tenantId = 
CarbonContext.getThreadLocalCarbonContext().getTenantId();
@@ -2695,7 +2696,23 @@ public class StratosApiV41Utils {
             CloudControllerServiceClient serviceClient = 
CloudControllerServiceClient.getInstance();
             org.apache.stratos.cloud.controller.stub.domain.NetworkPartition[] 
networkPartitions =
                     serviceClient.getNetworkPartitions();
-            return 
ObjectConverter.convertCCStubNetworkPartitionsToNetworkPartitions(networkPartitions);
+
+            NetworkPartition[] networkPartitionsForTenantArray = new 
NetworkPartition[0];
+
+            if (networkPartitions != null) {
+                PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
+                List<NetworkPartition> networkPartitionsForTenant = new 
ArrayList<NetworkPartition>();
+                for (NetworkPartition networkPartition : networkPartitions) {
+                    if (carbonContext.getTenantId() == 
networkPartition.getTenantId()) {
+                        networkPartitionsForTenant.add(networkPartition);
+                    }
+                }
+                if (networkPartitionsForTenant.size() != 0) {
+                    networkPartitionsForTenantArray = 
networkPartitionsForTenant.toArray(new
+                            
NetworkPartition[networkPartitionsForTenant.size()]);
+                }
+            }
+            return 
ObjectConverter.convertCCStubNetworkPartitionsToNetworkPartitions(networkPartitionsForTenantArray);
         } catch (RemoteException e) {
             String message = e.getMessage();
             log.error(message);

http://git-wip-us.apache.org/repos/asf/stratos/blob/d106e8f4/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
index 035c32d..5f4b3d9 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
@@ -452,7 +452,9 @@ public class ObjectConverter {
 
         NetworkPartitionBean networkPartition = new NetworkPartitionBean();
         networkPartition.setId(stubNetworkPartition.getId());
+        networkPartition.setUuid(stubNetworkPartition.getUuid());
         networkPartition.setProvider(stubNetworkPartition.getProvider());
+        networkPartition.setTenantId(stubNetworkPartition.getTenantId());
         if (stubNetworkPartition.getPartitions() != null) {
             List<PartitionBean> partitionList = new ArrayList<PartitionBean>();
             for (org.apache.stratos.cloud.controller.stub.domain.Partition 
stubPartition : stubNetworkPartition.getPartitions()) {
@@ -585,6 +587,8 @@ public class ObjectConverter {
                 = new 
org.apache.stratos.cloud.controller.stub.domain.NetworkPartition();
         networkPartition.setId(networkPartitionBean.getId());
         networkPartition.setProvider(networkPartitionBean.getProvider());
+        networkPartition.setUuid(networkPartitionBean.getUuid());
+        networkPartition.setTenantId(networkPartitionBean.getTenantId());
         if (networkPartitionBean.getPartitions() != null && 
!networkPartitionBean.getPartitions().isEmpty()) {
             
networkPartition.setPartitions(convertToStubPartitions(networkPartitionBean.getPartitions()));
         }

Reply via email to