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/09 09:36:27 UTC

[7/8] stratos git commit: fixing group level deployment policy parsing issue

fixing group level deployment policy parsing issue


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

Branch: refs/heads/4.1.0-test
Commit: 90ae47169755c922f1b7b9b2928b292c542a937a
Parents: 408852e
Author: reka <rt...@gmail.com>
Authored: Tue Dec 9 14:02:39 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 9 14:02:50 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   | 45 ++++++++++++++------
 .../partition/GroupLevelPartitionContext.java   | 27 ++++++++++++
 .../context/partition/PartitionContext.java     |  5 +++
 .../monitor/component/GroupMonitor.java         |  5 ++-
 .../domain/applications/ParentComponent.java    | 10 +++--
 5 files changed, 72 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/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 5f20111..36edb03 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
@@ -31,6 +31,7 @@ import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
 import org.apache.stratos.autoscaler.exception.InvalidArgumentException;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
+import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.exception.kubernetes.*;
 import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.policy.InvalidPolicyException;
@@ -152,26 +153,42 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
                 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();
-                    //validating the group deployment policy against the leaf cartridges
-                    for(ClusterDataHolder clusterDataHolder : clusterDataHolders) {
-                        CloudControllerClient.getInstance().validateDeploymentPolicy(
-                                clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
+                if(application != null) {
+                    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) {
+                            CloudControllerClient.getInstance().validateDeploymentPolicy(
+                                    clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
+                        } else {
+                            String msg = "Error while retrieving the group/cluster for the Deployment " +
+                                    "policy: " + alias;
+                            log.error(msg);
+                            throw new TopologyInConsistentException(msg);
+                        }
                     }
                 } else {
-                    //Validating the cartridge level deployment policy
-                    ClusterDataHolder clusterDataHolder = application.
-                            getClusterDataHolderRecursivelyByAlias(alias);
-                    if(clusterDataHolder != null) {
-                        CloudControllerClient.getInstance().validateDeploymentPolicy(
-                                clusterDataHolder.getServiceType(), partitionList.toArray(partitions));
-                    }
+                    String msg = "Error while retrieving the application for the Deployment policy: " +
+                    deploymentPolicy.getApplicationId();
+                    log.error(msg);
+                    throw new TopologyInConsistentException(msg);
                 }
+
             } catch (PartitionValidationException e) {
                 log.error("Error while validating the deployment policy", e);
                 //TODO throw exception
+            } catch (TopologyInConsistentException e) {
+                log.error("Error while validating the deployment policy", e);
+                //TODO throw exception
             } finally {
                 ApplicationHolder.releaseReadLock();
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
index 7400415..1f5555d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
@@ -111,6 +111,33 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
         th3.start();*/
     }
 
+    public GroupLevelPartitionContext(String partitionId, String networkPartitionIid ) {
+        super(partitionId, networkPartitionIid);
+        this.pendingInstances = new ArrayList<Instance>();
+        this.activeInstances = new ArrayList<Instance>();
+        this.terminationPendingInstances = new ArrayList<Instance>();
+        this.obsoletedInstances = new ConcurrentHashMap<String, Instance>();
+        instanceStatsContexts = new ConcurrentHashMap<String, MemberStatsContext>();
+
+
+        terminationPendingStartedTime = new HashMap<String, Long>();
+        // check if a different value has been set for expiryTime
+        XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
+        pendingInstanceExpiryTime = conf.getLong(StratosConstants.PENDING_VM_MEMBER_EXPIRY_TIMEOUT, 900000);
+        obsoltedInstanceExpiryTime = conf.getLong(StratosConstants.OBSOLETED_VM_MEMBER_EXPIRY_TIMEOUT, 86400000);
+        if (log.isDebugEnabled()) {
+            log.debug("Instance expiry time is set to: " + pendingInstanceExpiryTime);
+            log.debug("Instance obsoleted expiry time is set to: " + obsoltedInstanceExpiryTime);
+        }
+
+        /*Thread th = new Thread(new PendingInstanceWatcher(this));
+        th.start();
+        Thread th2 = new Thread(new ObsoletedInstanceWatcher(this));
+        th2.start();
+        Thread th3 = new Thread(new TerminationPendingInstanceWatcher(this));
+        th3.start();*/
+    }
+
     public long getTerminationPendingStartedTimeOfInstance(String instanceId) {
         return terminationPendingStartedTime.get(instanceId);
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
index 167caea..459b971 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
@@ -59,6 +59,11 @@ public abstract class PartitionContext implements Serializable {
         this.networkPartitionId = networkPartitionId;
     }
 
+    public PartitionContext(String partitionId, String networkPartitionId) {
+        this.partitionId = partitionId;
+        this.networkPartitionId = networkPartitionId;
+    }
+
     public Partition getPartition() {
         return partition;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 8d3f42d..3f8d9e0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -379,8 +379,9 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
 
         if (policy == null) {
             if (parentPartitionId != null &&
-                    networkPartitionContext.getPartitionCtxt(parentPartitionId) != null) {
-                partitionContext = new GroupLevelPartitionContext(0);
+                    networkPartitionContext.getPartitionCtxt(parentPartitionId) == null) {
+                partitionContext = new GroupLevelPartitionContext(parentPartitionId,
+                                                networkPartitionId);
                 networkPartitionContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
                 if (log.isInfoEnabled()) {
                     log.info("[Partition] " + parentPartitionId + "has been added for the " +

http://git-wip-us.apache.org/repos/asf/stratos/blob/90ae4716/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 4dd6b34..6468eaf 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
@@ -328,10 +328,12 @@ 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());
-                }
+            }
+        }
+
+        for(Group group : groups) {
+            if (group.getGroups() != null) {
+                return getClusterDataByAlias(alias, group.getGroups());
             }
         }
         return null;