You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/04 14:34:32 UTC
[1/2] stratos git commit: adding deployment policy validation support
Repository: stratos
Updated Branches:
refs/heads/master 86530242c -> 0b554d378
adding deployment policy validation support
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/17f20b37
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/17f20b37
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/17f20b37
Branch: refs/heads/master
Commit: 17f20b37a3bfaa4f597a5abf7db1f881da70b47a
Parents: 8653024
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 18:42:39 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 18:43:07 2014 +0530
----------------------------------------------------------------------
.../autoscaler/api/AutoScalerServiceImpl.java | 57 ++++++++++++++++++--
.../client/CloudControllerClient.java | 7 ++-
.../messaging/domain/applications/Group.java | 17 ++++++
.../domain/applications/ParentComponent.java | 32 +++++++++--
4 files changed, 103 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/17f20b37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 37059fe..daa439f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -41,8 +41,11 @@ import org.apache.stratos.autoscaler.pojo.Dependencies;
import org.apache.stratos.autoscaler.pojo.ServiceGroup;
import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelNetworkPartition;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition;
import org.apache.stratos.autoscaler.registry.RegistryManager;
import org.apache.stratos.autoscaler.util.AutoscalerUtil;
@@ -52,6 +55,8 @@ import org.apache.stratos.common.kubernetes.KubernetesGroup;
import org.apache.stratos.common.kubernetes.KubernetesHost;
import org.apache.stratos.common.kubernetes.KubernetesMaster;
import org.apache.stratos.messaging.domain.applications.Application;
+import org.apache.stratos.messaging.domain.applications.ClusterDataHolder;
+import org.apache.stratos.messaging.domain.applications.Group;
import org.apache.stratos.metadata.client.defaults.DefaultMetaDataServiceClient;
import org.apache.stratos.metadata.client.defaults.MetaDataServiceClient;
import org.apache.stratos.metadata.client.exception.MetaDataServiceClientException;
@@ -59,7 +64,9 @@ import org.wso2.carbon.registry.api.RegistryException;
import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
//import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
//import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager;
@@ -90,9 +97,9 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
ArrayList<DeploymentPolicy> validPolicies = new ArrayList<DeploymentPolicy>();
for (DeploymentPolicy deploymentPolicy : this.getAllDeploymentPolicies()) {
- try {
+ /*try {
// call CC API
- CloudControllerClient.getInstance().validateDeploymentPolicy(cartridgeType, deploymentPolicy);
+ //CloudControllerClient.getInstance().validateDeploymentPolicy(cartridgeType, deploymentPolicy);
// if this deployment policy is valid for this cartridge, add it.
validPolicies.add(deploymentPolicy);
} catch (PartitionValidationException ignoredException) {
@@ -101,7 +108,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
log.debug("Deployment policy [id] " + deploymentPolicy.getId()
+ " is not valid for Cartridge [type] " + cartridgeType, ignoredException);
}
- }
+ }*/
}
return validPolicies.toArray(new DeploymentPolicy[0]);
}
@@ -116,6 +123,7 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
String policyId = PolicyManager.getInstance().deployDeploymentPolicy(deploymentPolicy);
//Need to start the application Monitor after validation of the deployment policies.
//FIXME add validation
+ validateDeploymentPolicy(deploymentPolicy);
//Check whether all the clusters are there
ApplicationHolder.acquireReadLock();
boolean allClusterInitialized = false;
@@ -146,6 +154,49 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
return policyId;
}
+ private boolean validateDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
+
+ for(ChildPolicy childPolicy : deploymentPolicy.getChildPolicies()) {
+ String alias = childPolicy.getId();
+ ApplicationHolder.acquireReadLock();
+ List<Partition> partitionList = new ArrayList<Partition>();
+ for(ChildLevelNetworkPartition networkPartition : childPolicy.getChildLevelNetworkPartitions()) {
+ Partition[] partitions = deploymentPolicy.getApplicationLevelNetworkPartition(
+ networkPartition.getId()).getPartitions();
+ for(Partition partition : partitions) {
+ partitionList.add(partition);
+ }
+ }
+ try {
+ Application application = ApplicationHolder.getApplications().
+ getApplication(deploymentPolicy.getApplicationId());
+ Partition[] partitions = new Partition[partitionList.size()];
+ Group group = application.getGroupRecursively(alias);
+ if(group != null) {
+ Set<ClusterDataHolder> clusterDataHolders = group.getClusterDataHoldersOfGroup();
+ for(ClusterDataHolder clusterDataHolder : clusterDataHolders) {
+ CloudControllerClient.getInstance().validateDeploymentPolicy(
+ clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
+ }
+ } else {
+ ClusterDataHolder clusterDataHolder = application.
+ getClusterDataHolderRecursivelyByAlias(alias);
+ if(clusterDataHolder != null) {
+ CloudControllerClient.getInstance().validateDeploymentPolicy(
+ clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
+ }
+ }
+ } catch (PartitionValidationException e) {
+ log.error("Error while validating the deployment policy", e);
+ } finally {
+ ApplicationHolder.releaseReadLock();
+ }
+
+ }
+
+ return true;
+ }
+
@Override
public boolean undeployDeploymentPolicy(String applicationId) {
return ApplicationBuilder.handleApplicationPolicyUndeployed(applicationId);
http://git-wip-us.apache.org/repos/asf/stratos/blob/17f20b37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
index 308e276..8bc60fa 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
@@ -89,14 +89,13 @@ public class CloudControllerClient {
* This will validate the given partitions against the given cartridge type.
*/
- public synchronized boolean validateDeploymentPolicy(String cartridgeType, DeploymentPolicy deploymentPolicy) throws PartitionValidationException {
+ public synchronized boolean validateDeploymentPolicy(String cartridgeType, org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition[] partitions) throws PartitionValidationException {
try {
if (log.isInfoEnabled()) {
- log.info(String.format("Validating partitions of policy via cloud controller: [id] %s", deploymentPolicy.getId()));
+ log.info(String.format("Validating partitions of policy via cloud controller: [cartridge-type] %s", cartridgeType));
}
long startTime = System.currentTimeMillis();
- boolean result = stub.validateDeploymentPolicy(cartridgeType, getAllCCPartitions(deploymentPolicy.
- getAllPartitions()));
+ boolean result = stub.validateDeploymentPolicy(cartridgeType, getAllCCPartitions(partitions));
if (log.isDebugEnabled()) {
long endTime = System.currentTimeMillis();
log.debug(String.format("Service call validateDeploymentPolicy() returned in %dms", (endTime - startTime)));
http://git-wip-us.apache.org/repos/asf/stratos/blob/17f20b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
index 0be8207..1bf884b 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Group.java
@@ -127,4 +127,21 @@ public class Group extends ParentComponent<GroupInstance> {
public void setGroupMaxInstances(int groupMaxInstances) {
this.groupMaxInstances = groupMaxInstances;
}
+
+ public Set<ClusterDataHolder> getClusterDataHoldersOfGroup() {
+ Set<ClusterDataHolder> appClusterData = new HashSet<ClusterDataHolder>();
+
+ // get top level Cluster Data
+ if (this.aliasToClusterDataMap != null && !this.aliasToClusterDataMap.isEmpty()) {
+ appClusterData.addAll(this.aliasToClusterDataMap.values());
+ }
+
+ // find other nested Cluster Data (in the Groups)
+ if (getGroups() != null) {
+ getClusterData(appClusterData, getGroups());
+ }
+
+ return appClusterData;
+
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/17f20b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
index 954ebc1..af84e33 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
@@ -34,9 +34,9 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
// Dependency Order
private DependencyOrder dependencyOrder;
// Group Map, key = Group.alias
- private final Map<String, Group> aliasToGroupMap;
+ protected final Map<String, Group> aliasToGroupMap;
// Cluster Id map, key = subscription alias for the cartridge type
- private final Map<String, ClusterDataHolder> aliasToClusterDataMap;
+ protected final Map<String, ClusterDataHolder> aliasToClusterDataMap;
// Group/Cluster Instance Context map, key = instance id
protected Map<String, T> instanceIdToInstanceContextMap;
// flag for Group level scaling
@@ -120,6 +120,17 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
return null;
}
+ public ClusterDataHolder getClusterDataHolderRecursivelyByAlias(String alias) {
+ if(this.aliasToClusterDataMap.containsKey(alias)) {
+ return this.aliasToClusterDataMap.get(alias);
+ } else {
+ if(this.aliasToGroupMap != null && !this.aliasToGroupMap.isEmpty()) {
+ return getClusterDataByAlias(alias, this.aliasToGroupMap.values());
+ }
+ }
+ return null;
+ }
+
/**
* Getter for alias to Group map
* Will not search recursively in the nested levels.
@@ -284,7 +295,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
return getInstanceIdToInstanceContextMap().keySet().size();
}
- private void getClusterData (Set<ClusterDataHolder> clusterData, Collection<Group> groups) {
+ protected void getClusterData (Set<ClusterDataHolder> clusterData, Collection<Group> groups) {
for (Group group : groups) {
if (group.getClusterDataMap() != null && !group.getClusterDataMap().isEmpty()) {
@@ -296,6 +307,21 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
}
}
+ private ClusterDataHolder getClusterDataByAlias (String alias, Collection<Group> groups) {
+
+ for (Group group : groups) {
+ if (group.getClusterDataMap() != null && !group.getClusterDataMap().isEmpty()) {
+ if(group.getClusterData(alias) != null) {
+ return group.getClusterData(alias);
+ }
+ if (group.getGroups() != null) {
+ return getClusterDataByAlias(alias, group.getGroups());
+ }
+ }
+ }
+ return null;
+ }
+
public Map<String, T> getInstanceIdToInstanceContextMap() {
return instanceIdToInstanceContextMap;
}
[2/2] stratos git commit: support for validate deployment policy and
fixing partition validation issue
Posted by re...@apache.org.
support for validate deployment policy and fixing partition validation issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/0b554d37
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/0b554d37
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/0b554d37
Branch: refs/heads/master
Commit: 0b554d378f2b13284000d239425b6c3f03db83ea
Parents: 17f20b3
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 19:04:20 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 19:04:20 2014 +0530
----------------------------------------------------------------------
.../org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java | 2 ++
.../cloud/controller/services/impl/CloudControllerServiceImpl.java | 2 +-
.../stratos/messaging/domain/applications/ParentComponent.java | 1 +
3 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/0b554d37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index daa439f..bd98a76 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -174,11 +174,13 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
Group group = application.getGroupRecursively(alias);
if(group != null) {
Set<ClusterDataHolder> clusterDataHolders = group.getClusterDataHoldersOfGroup();
+ //validating the group deployment policy against the leaf cartridges
for(ClusterDataHolder clusterDataHolder : clusterDataHolders) {
CloudControllerClient.getInstance().validateDeploymentPolicy(
clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
}
} else {
+ //Validating the cartridge level deployment policy
ClusterDataHolder clusterDataHolder = application.
getClusterDataHolderRecursivelyByAlias(alias);
if(clusterDataHolder != null) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/0b554d37/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 f9c55a0..33567bd 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
@@ -1445,7 +1445,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
Map<String, Future<IaasProvider>> jobList = new HashMap<String, Future<IaasProvider>>();
for (Partition partition : partitions) {
- if (validatedPartitions.contains(partition.getId())) {
+ if (validatedPartitions != null && validatedPartitions.contains(partition.getId())) {
// partition cache hit
continue;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/0b554d37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
index af84e33..285ad2f 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java
@@ -314,6 +314,7 @@ public abstract class ParentComponent<T extends Instance> implements Serializabl
if(group.getClusterData(alias) != null) {
return group.getClusterData(alias);
}
+ } else {
if (group.getGroups() != null) {
return getClusterDataByAlias(alias, group.getGroups());
}