You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ga...@apache.org on 2015/07/06 10:43:35 UTC
[02/41] stratos git commit: Tenant Isolation - Network Partition
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/tenantisolation
Commit: d106e8f47de393269f5d0c0738d4807dd9e3b18e
Parents: f5c4c8e
Author: Dinithi <di...@wso2.com>
Authored: Thu Jun 25 15:21:14 2015 +0530
Committer: Dinithi <di...@wso2.com>
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()));
}