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) {
