Repository: stratos
Updated Branches:
  refs/heads/master 34c5cabb1 -> 3f1119674


adding startup-order validation and removing pending members while the cluster 
is in terminating


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

Branch: refs/heads/master
Commit: 3f1119674e881133a6a605a1ea427d1bd1bad55f
Parents: 34c5cab
Author: reka <[email protected]>
Authored: Wed Jun 17 18:05:39 2015 +0530
Committer: reka <[email protected]>
Committed: Wed Jun 17 18:05:39 2015 +0530

----------------------------------------------------------------------
 .../applications/parser/ParserUtils.java        | 31 ++++++++++++++++++++
 .../partition/ClusterLevelPartitionContext.java | 11 ++++++-
 .../ParentLevelNetworkPartitionContext.java     | 21 -------------
 3 files changed, 41 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/3f111967/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ParserUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ParserUtils.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ParserUtils.java
index 460a57b..904ab53 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ParserUtils.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ParserUtils.java
@@ -22,6 +22,7 @@ package org.apache.stratos.autoscaler.applications.parser;
 import org.apache.stratos.autoscaler.applications.pojo.CartridgeContext;
 import org.apache.stratos.autoscaler.applications.pojo.GroupContext;
 import 
org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
+import org.apache.stratos.autoscaler.util.AutoscalerConstants;
 import org.apache.stratos.messaging.domain.application.ScalingDependentList;
 import org.apache.stratos.messaging.domain.application.StartupOrder;
 
@@ -71,6 +72,36 @@ public class ParserUtils {
         for (String commaSeparatedStartupOrder : startupOrderArr) {
             // convertStartupOrder all Startup Orders to aliases-based
             List<String> components = 
Arrays.asList(commaSeparatedStartupOrder.split(","));
+            for(String component : components) {
+                boolean aliasFound = false;
+                if(component.startsWith(AutoscalerConstants.GROUP)) {
+                    String groupAlias = 
component.substring(AutoscalerConstants.GROUP.length() + 1);
+                    if(groupContext.getGroupContexts() != null) {
+                        for(GroupContext context : 
groupContext.getGroupContexts()) {
+                            if(context.getAlias().equals(groupAlias)) {
+                                aliasFound = true;
+                            }
+                        }
+                    }
+
+                } else {
+                    String cartridgeAlias = component.substring(
+                            AutoscalerConstants.CARTRIDGE.length() + 1);
+                    if(groupContext.getCartridgeContexts() != null) {
+                        for(CartridgeContext context : 
groupContext.getCartridgeContexts()) {
+                            
if(context.getSubscribableInfoContext().getAlias().equals(cartridgeAlias)) {
+                                aliasFound = true;
+                            }
+                        }
+                    }
+                }
+                if(!aliasFound) {
+                    String msg = "The startup-order defined in the [group] " + 
groupContext.getName()
+                            + " is not correct. [startup-order-alias] " + 
component +
+                            " is not there in the application.";
+                    throw new ApplicationDefinitionException(msg);
+                }
+            }
             StartupOrder startupOrder = new StartupOrder(components);
             startupOrders.add(startupOrder);
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/3f111967/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index df839bb..c6a1626 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -29,6 +29,8 @@ import 
org.apache.stratos.cloud.controller.stub.domain.MemberContext;
 import org.apache.stratos.common.client.CloudControllerServiceClient;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.common.partition.PartitionRef;
+import org.apache.stratos.messaging.domain.topology.ClusterStatus;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
 import java.io.Serializable;
 import java.util.*;
@@ -654,12 +656,18 @@ public class ClusterLevelPartitionContext extends 
PartitionContext implements Se
                     Iterator<MemberContext> iterator = 
pendingMembers.listIterator();
                     while (iterator.hasNext()) {
                         MemberContext pendingMember = iterator.next();
+                        String clusterInstanceId = 
pendingMember.getClusterInstanceId();
+                        String clusterId = pendingMember.getClusterId();
+                        String serviceName = pendingMember.getCartridgeType();
+                        ClusterStatus status = TopologyManager.getTopology().
+                                getService(serviceName).getCluster(clusterId).
+                                
getInstanceContexts(clusterInstanceId).getStatus();
 
                         if (pendingMember == null) {
                             continue;
                         }
                         long pendingTime = System.currentTimeMillis() - 
pendingMember.getInitTime();
-                        if (pendingTime >= expiryTime) {
+                        if (pendingTime >= expiryTime || 
status.equals(ClusterStatus.Terminating)) {
 
                             log.info(String.format("Pending state of member 
expired, member will be moved to obsolete list. " +
                                             "[pending member] %s [expiry time] 
%s [cluster] %s " + "[cluster instance] %s",
@@ -773,6 +781,7 @@ public class ClusterLevelPartitionContext extends 
PartitionContext implements Se
                 while (iterator.hasNext()) {
 
                     MemberContext terminationPendingMember = iterator.next();
+
                     if (terminationPendingMember == null) {
                         continue;
                     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/3f111967/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
index 50bdb78..d6d7d0e 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
@@ -34,8 +34,6 @@ import java.util.List;
 public class ParentLevelNetworkPartitionContext extends 
NetworkPartitionContext implements Serializable {
     private static final Log log = 
LogFactory.getLog(ParentLevelNetworkPartitionContext.class);
     private int scaleDownRequestsCount = 0;
-    private float averageRequestsServedPerInstance;
-    private int pendingMembersFailureCount = 0;
 
     private int minInstanceCount = 0, maxInstanceCount = 0;
     private int requiredInstanceCountBasedOnStats;
@@ -196,25 +194,6 @@ public class ParentLevelNetworkPartitionContext extends 
NetworkPartitionContext
         partitionContexts.add(partitionContext);
     }
 
-    public int getNonTerminatedMemberCountOfPartition(String partitionId) {
-
-        for (GroupLevelPartitionContext partitionContext : partitionContexts) {
-            if (partitionContext.getPartitionId().equals(partitionId)) {
-                return partitionContext.getNonTerminatedInstanceCount();
-            }
-        }
-        return 0;
-    }
-
-    public int getActiveMemberCount(String currentPartitionId) {
-
-        for (GroupLevelPartitionContext partitionContext : partitionContexts) {
-            if (partitionContext.getPartitionId().equals(currentPartitionId)) {
-                return partitionContext.getActiveInstanceCount();
-            }
-        }
-        return 0;
-    }
 
     public GroupLevelPartitionContext getPartitionContextById(String 
partitionId) {
         for (GroupLevelPartitionContext partitionContext : partitionContexts) {

Reply via email to