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 2015/08/20 10:31:10 UTC

[1/4] stratos git commit: fixing monitors getting executed in order to satisfy the minimum count when the application is undeploying

Repository: stratos
Updated Branches:
  refs/heads/master bee0d764a -> d1a5ce4ae


fixing monitors getting executed in order to satisfy the minimum count when the application is undeploying


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

Branch: refs/heads/master
Commit: 2f6a191a806709d78a87ae83055589be58563c65
Parents: e59a6e1
Author: reka <rt...@gmail.com>
Authored: Thu Aug 20 12:25:06 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Aug 20 14:00:28 2015 +0530

----------------------------------------------------------------------
 .../monitor/component/ApplicationMonitor.java   |  21 ++--
 .../monitor/component/GroupMonitor.java         | 108 ++++++++++---------
 2 files changed, 69 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/2f6a191a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 41b6e1f..70ee9d4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -147,20 +147,21 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                                 new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>());
                     }
                 }
-
-                Application application = ApplicationHolder.getApplications().getApplication(appId);
-                if (application != null) {
-                    List<String> defaultNetworkPartitions = getDefaultNetworkPartitions(application);
-                    //Checking for whether minimum application instances are there.
-                    if (defaultNetworkPartitions != null) {
-                        checkForMinimumApplicationInstances(application, defaultNetworkPartitions);
-                    }
+                //When the application is getting un-deployed, need to avoid
+                // checking the minimum count sanctification
+                if (!isTerminating()) {
+                    Application application = ApplicationHolder.getApplications().getApplication(appId);
+                    if (application != null) {
+                        List<String> defaultNetworkPartitions = getDefaultNetworkPartitions(application);
+                        //Checking for whether minimum application instances are there.
+                        if (defaultNetworkPartitions != null) {
+                            checkForMinimumApplicationInstances(application, defaultNetworkPartitions);
+                        }
 
                     /*//Checking for whether any application instances need to be terminated.
                     checkForApplicationInstanceTermination(application, defaultNetworkPartitions);*/
+                    }
                 }
-
-
             }
         };
         executorService.execute(monitoringRunnable);

http://git-wip-us.apache.org/repos/asf/stratos/blob/2f6a191a/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 c3e89ee..bc3052a 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
@@ -155,65 +155,73 @@ public class GroupMonitor extends ParentComponentMonitor {
                         }
                     }
 
-                    Collection<Instance> parentInstances = parent.getInstances();
-
-                    for (Instance parentInstance : parentInstances) {
-                        if (parentInstance.getNetworkPartitionId().equals(networkPartitionContext.getId())) {
-                            int nonTerminatedInstancesCount = networkPartitionContext.
-                                    getNonTerminatedInstancesCount(parentInstance.getInstanceId());
-                            int minInstances = networkPartitionContext.
-                                    getMinInstanceCount();
-                            int maxInstances = networkPartitionContext.
-                                    getMaxInstanceCount();
-                            int activeInstances = networkPartitionContext.
-                                    getActiveInstancesCount(parentInstance.getInstanceId());
-
-                            if (nonTerminatedInstancesCount < minInstances) {
-                                int instancesToBeCreated = minInstances - nonTerminatedInstancesCount;
-                                for (int i = 0; i < instancesToBeCreated; i++) {
-                                    for (InstanceContext parentInstanceContext : parent.
-                                            getNetworkPartitionContext(networkPartitionContext.getId()).
-                                            getInstanceIdToInstanceContextMap().values()) {
-                                        //keep on scale-up/scale-down only if the application is active
-                                        ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
-                                                getAppMonitor(appId);
-                                        int activeAppInstances = appMonitor.
+                    ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().
+                            getAppMonitor(appId);
+
+                    //When the application is getting un-deployed, need to avoid
+                    // checking the minimum count sanctification
+                    if (!applicationMonitor.isTerminating()) {
+                        Collection<Instance> parentInstances = parent.getInstances();
+
+                        for (Instance parentInstance : parentInstances) {
+                            if (parentInstance.getNetworkPartitionId().equals(networkPartitionContext.getId())) {
+                                int nonTerminatedInstancesCount = networkPartitionContext.
+                                        getNonTerminatedInstancesCount(parentInstance.getInstanceId());
+                                int minInstances = networkPartitionContext.
+                                        getMinInstanceCount();
+                                int maxInstances = networkPartitionContext.
+                                        getMaxInstanceCount();
+                                int activeInstances = networkPartitionContext.
+                                        getActiveInstancesCount(parentInstance.getInstanceId());
+
+                                if (nonTerminatedInstancesCount < minInstances) {
+                                    int instancesToBeCreated = minInstances - nonTerminatedInstancesCount;
+                                    for (int i = 0; i < instancesToBeCreated; i++) {
+                                        for (InstanceContext parentInstanceContext : parent.
                                                 getNetworkPartitionContext(networkPartitionContext.getId()).
-                                                getActiveInstancesCount();
-                                        if (activeAppInstances > 0) {
-                                            //Creating new group instance based on the existing parent instances
-                                            log.info("Creating a group instance of [application] "
-                                                    + appId + " [group] " + id +
-                                                    " as the the minimum required instances are not met");
-
-                                            createInstanceOnDemand(parentInstanceContext.getId());
+                                                getInstanceIdToInstanceContextMap().values()) {
+                                            //keep on scale-up/scale-down only if the application is active
+                                            ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
+                                                    getAppMonitor(appId);
+                                            int activeAppInstances = appMonitor.
+                                                    getNetworkPartitionContext(networkPartitionContext.getId()).
+                                                    getActiveInstancesCount();
+                                            if (activeAppInstances > 0) {
+                                                //Creating new group instance based on the existing parent instances
+                                                log.info("Creating a group instance of [application] "
+                                                        + appId + " [group] " + id +
+                                                        " as the the minimum required instances are not met");
+
+                                                createInstanceOnDemand(parentInstanceContext.getId());
+                                            }
                                         }
-                                    }
 
+                                    }
                                 }
-                            }
-                            //If the active instances are higher than the max instances,
-                            // the group instance has to get terminated
-                            if (activeInstances > maxInstances) {
-                                int instancesToBeTerminated = activeInstances - maxInstances;
-                                List<InstanceContext> contexts =
-                                        networkPartitionContext.getInstanceIdToInstanceContextMap(
-                                                parentInstance.getInstanceId());
-                                List<InstanceContext> contextList = new ArrayList<InstanceContext>(contexts);
-                                for (int i = 0; i < instancesToBeTerminated; i++) {
-                                    InstanceContext instanceContext = contextList.get(i);
-                                    //scale down only when extra instances found
-                                    log.info("Terminating a group instance of [application] "
-                                            + appId + " [group] " + id + " as it exceeded the " +
-                                            "maximum no of instances by " + instancesToBeTerminated);
-
-                                    handleScalingDownBeyondMin((ParentInstanceContext) instanceContext,
-                                            networkPartitionContext, true);
+                                //If the active instances are higher than the max instances,
+                                // the group instance has to get terminated
+                                if (activeInstances > maxInstances) {
+                                    int instancesToBeTerminated = activeInstances - maxInstances;
+                                    List<InstanceContext> contexts =
+                                            networkPartitionContext.getInstanceIdToInstanceContextMap(
+                                                    parentInstance.getInstanceId());
+                                    List<InstanceContext> contextList = new ArrayList<InstanceContext>(contexts);
+                                    for (int i = 0; i < instancesToBeTerminated; i++) {
+                                        InstanceContext instanceContext = contextList.get(i);
+                                        //scale down only when extra instances found
+                                        log.info("Terminating a group instance of [application] "
+                                                + appId + " [group] " + id + " as it exceeded the " +
+                                                "maximum no of instances by " + instancesToBeTerminated);
+
+                                        handleScalingDownBeyondMin((ParentInstanceContext) instanceContext,
+                                                networkPartitionContext, true);
 
+                                    }
                                 }
                             }
                         }
                     }
+
                 }
             }
         };


[3/4] stratos git commit: fixing the application deployment unnecessary wait time

Posted by re...@apache.org.
fixing the application deployment unnecessary wait time


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

Branch: refs/heads/master
Commit: 0c794b098e1f28414cc9330eb68fe6aa12231ead
Parents: 2f6a191
Author: reka <rt...@gmail.com>
Authored: Thu Aug 20 13:47:19 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Aug 20 14:00:29 2015 +0530

----------------------------------------------------------------------
 .../AutoscalerTopologyEventReceiver.java        | 69 +++++++++-----------
 .../services/impl/AutoscalerServiceImpl.java    | 12 ++--
 2 files changed, 37 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0c794b09/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 3a8c457..2573991 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -132,47 +132,38 @@ public class AutoscalerTopologyEventReceiver {
                     ApplicationClustersCreatedEvent applicationClustersCreatedEvent =
                             (ApplicationClustersCreatedEvent) event;
                     String appId = applicationClustersCreatedEvent.getAppId();
-                    boolean appMonitorCreationTriggered = false;
-                    int retries = 30;
-                    while (!appMonitorCreationTriggered && retries > 0) {
-                        try {
-                            //acquire read lock
-                            ApplicationHolder.acquireReadLock();
-                            //start the application monitor
-                            ApplicationContext applicationContext = AutoscalerContext.getInstance().
-                                    getApplicationContext(appId);
-                            if (applicationContext != null &&
-                                    applicationContext.getStatus().
-                                            equals(ApplicationContext.STATUS_DEPLOYED)) {
-                                if (!AutoscalerContext.getInstance().
-                                        containsApplicationPendingMonitor(appId)) {
-                                    appMonitorCreationTriggered = true;
-                                    AutoscalerUtil.getInstance().startApplicationMonitor(appId);
-                                    break;
-                                }
+                    try {
+                        //acquire read lock
+                        ApplicationHolder.acquireReadLock();
+                        //start the application monitor
+                        ApplicationContext applicationContext = AutoscalerContext.getInstance().
+                                getApplicationContext(appId);
+                        if (applicationContext != null &&
+                                applicationContext.getStatus().
+                                        equals(ApplicationContext.STATUS_DEPLOYED)) {
+                            if (!AutoscalerContext.getInstance().
+                                    containsApplicationPendingMonitor(appId)) {
+                                AutoscalerUtil.getInstance().startApplicationMonitor(appId);
                             }
-                        } catch (Exception e) {
-                            String msg = "Error processing event " + e.getLocalizedMessage();
-                            log.error(msg, e);
-                        } finally {
-                            //release read lock
-                            ApplicationHolder.releaseReadLock();
-                        }
-
-                        try {
-                            retries--;
-                            Thread.sleep(1000);
-                        } catch (InterruptedException e) {
+                        } else {
+                            String status;
+                            if(applicationContext == null) {
+                                status = null;
+                            } else {
+                                status = applicationContext.getStatus();
+                            }
+                            log.error("Error while creating the application monitor due to " +
+                                    "in-consistent persistence of [application] " +
+                                    applicationClustersCreatedEvent.getAppId() + ", " +
+                                    "the [application-context] " + applicationContext +
+                            " status of [application-context] " + status);
                         }
-                    }
-
-                    // Reason is to re-try 5 time is because application status might not become "deployed" yet, refer deployApplication API for more information.
-                    // Reason why not throwing error after 5 times is because this not the only place we trigger app-monitor creation.
-                    if (!appMonitorCreationTriggered) {
-                        String msg = String.format("Application monitor creation is not triggered on application "
-                                + "clusters created event even after 5 retries [application-id] %s. "
-                                + "Possible cause is either application context is null or application status didn't become %s yet.", appId, ApplicationContext.STATUS_DEPLOYED);
-                        log.warn(msg);
+                    } catch (Exception e) {
+                        String msg = "Error processing event " + e.getLocalizedMessage();
+                        log.error(msg, e);
+                    } finally {
+                        //release read lock
+                        ApplicationHolder.releaseReadLock();
                     }
                 } catch (ClassCastException e) {
                     String msg = "Error while casting the event " + e.getLocalizedMessage();

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c794b09/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index f75fbc5..f0e797f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -245,10 +245,6 @@ public class AutoscalerServiceImpl implements AutoscalerService {
             // validating application policy against the application
             AutoscalerUtil.validateApplicationPolicyAgainstApplication(applicationId, applicationPolicyId);
 
-            // Create application clusters in cloud controller and send application created event
-            ApplicationBuilder.handleApplicationDeployment(application,
-                    applicationContext.getComponents().getApplicationClusterContexts());
-
             // Setting application policy id in application object
             try {
                 ApplicationHolder.acquireWriteLock();
@@ -272,7 +268,13 @@ public class AutoscalerServiceImpl implements AutoscalerService {
             applicationContext.setStatus(ApplicationContext.STATUS_DEPLOYED);
             AutoscalerContext.getInstance().updateApplicationContext(applicationContext);
 
-            log.info("Waiting for application clusters to be created: [application-id] " + applicationId);
+            // Create application clusters in cloud controller and send application created event
+            ApplicationBuilder.handleApplicationDeployment(application,
+                    applicationContext.getComponents().getApplicationClusterContexts());
+
+            log.info("Waiting for application clusters to be created: [application-id] " +
+                    applicationId);
+
             return true;
         } catch (Exception e) {
             ApplicationContext applicationContext = RegistryManager.getInstance().


[4/4] stratos git commit: code formatting

Posted by re...@apache.org.
code formatting


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

Branch: refs/heads/master
Commit: d1a5ce4ae00370fe9150a0c9c71ef6bb296678e2
Parents: 0c794b0
Author: reka <rt...@gmail.com>
Authored: Thu Aug 20 13:47:42 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Aug 20 14:00:29 2015 +0530

----------------------------------------------------------------------
 .../integration/tests/application/GroupStartupOrderTest.java | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d1a5ce4a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
index dd30def..4b68695 100644
--- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
+++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
@@ -27,8 +27,6 @@ import org.apache.stratos.integration.tests.TopologyHandler;
 import org.apache.stratos.messaging.domain.application.ApplicationStatus;
 import org.testng.annotations.Test;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 
 import static junit.framework.Assert.*;
@@ -313,7 +311,7 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
         Map<String, Long> activeMembers = TopologyHandler.getInstance().getActivateddMembers();
         Map<String, Long> createdMembers = TopologyHandler.getInstance().getCreatedMembers();
         //Active member should be available at the time cluster is started to create.
-        while(!activeMembers.containsKey(firstNodeId)) {
+        while (!activeMembers.containsKey(firstNodeId)) {
             try {
                 Thread.sleep(1000);
             } catch (InterruptedException e) {
@@ -325,7 +323,7 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
         }
         assertTrue(activeMembers.containsKey(firstNodeId));
 
-        while(!createdMembers.containsKey(secondNodeId)) {
+        while (!createdMembers.containsKey(secondNodeId)) {
             try {
                 Thread.sleep(1000);
             } catch (InterruptedException e) {
@@ -347,7 +345,7 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
         Map<String, Long> createdMembers = TopologyHandler.getInstance().getCreatedMembers();
         //Active member should be available at the time cluster is started to create.
 
-        while(!(createdMembers.containsKey(firstNodeId) && createdMembers.containsKey(firstNodeId))) {
+        while (!(createdMembers.containsKey(firstNodeId) && createdMembers.containsKey(firstNodeId))) {
             try {
                 Thread.sleep(1000);
             } catch (InterruptedException e) {


[2/4] stratos git commit: fixing startup order test cases issues

Posted by re...@apache.org.
fixing startup order test cases issues


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

Branch: refs/heads/master
Commit: e59a6e1c791908101e330042e7f6c6d3790af974
Parents: bee0d76
Author: reka <rt...@gmail.com>
Authored: Thu Aug 20 10:39:06 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Aug 20 14:00:28 2015 +0530

----------------------------------------------------------------------
 .../application/GroupStartupOrderTest.java      | 207 +++++++++----------
 ...ication-policy-group-startup-order-test.json |   7 +-
 .../applications/group-startup-order-test.json  |  82 +++++---
 .../esb-php-group-startup-order-test.json       |  19 --
 .../group8-group-startup-order-test.json        |   2 +-
 .../src/test/resources/stratos-testing.xml      |  10 +-
 6 files changed, 152 insertions(+), 175 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e59a6e1c/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
index d565e4f..dd30def 100644
--- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
+++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupStartupOrderTest.java
@@ -27,6 +27,7 @@ import org.apache.stratos.integration.tests.TopologyHandler;
 import org.apache.stratos.messaging.domain.application.ApplicationStatus;
 import org.testng.annotations.Test;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -39,6 +40,7 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
     private static final Log log = LogFactory.getLog(SampleApplicationsTest.class);
     private static final String RESOURCES_PATH = "/group-startup-order-test";
     private static final int GROUP_ACTIVE_TIMEOUT = 300000;
+    private static final int NODES_START_PARALLEL_TIMEOUT = 30000;
 
 
     @Test
@@ -82,11 +84,6 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
                     RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME);
             assertTrue(addedC8);
 
-            boolean addedG1 = restClient.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGE_GROUPS_PATH +
-                            "/" + "esb-php-group-startup-order-test.json", RestConstants.CARTRIDGE_GROUPS,
-                    RestConstants.CARTRIDGE_GROUPS_NAME);
-            assertTrue(addedG1);
-
             boolean addedG2 = restClient.addEntity(RESOURCES_PATH + RestConstants.CARTRIDGE_GROUPS_PATH +
                             "/" + "group6-group-startup-order-test.json", RestConstants.CARTRIDGE_GROUPS,
                     RestConstants.CARTRIDGE_GROUPS_NAME);
@@ -128,60 +125,83 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
                     RestConstants.APPLICATIONS_NAME);
             assertTrue(deployed);
 
-            //Application active handling
-            topologyHandler.assertApplicationStatus(bean.getApplicationId(),
-                    ApplicationStatus.Active);
-            String groupId = topologyHandler.generateId(bean.getApplicationId(),
-                    "g-G1-1x0-group-startup-order-test", bean.getApplicationId() + "-1");
+            String group6 = topologyHandler.generateId(bean.getApplicationId(),
+                    "my-group6-group-startup-order-test", bean.getApplicationId() + "-1");
 
-            String clusterIdC3 = topologyHandler.
+            String group8 = topologyHandler.generateId(bean.getApplicationId(),
+                    "my-group8-group-startup-order-test", bean.getApplicationId() + "-1");
+
+            String lb = topologyHandler.
                     getClusterIdFromAlias(bean.getApplicationId(),
-                            "c3-1x0-group-startup-order-test");
+                            "my-stratos-lb-group-startup-order-test");
 
-            String clusterIdC4 = topologyHandler.
+            String tomcat = topologyHandler.
                     getClusterIdFromAlias(bean.getApplicationId(),
-                            "c4-1x0-group-startup-order-test");
+                            "my-tomcat-group-startup-order-test");
+
+            assertCreationOfNodes(lb, tomcat);
+
+            assertCreationOfNodes(tomcat, group6);
+
+            assertCreationOfNodesInParallel(group6, group8);
+
+            assertCreationOfNodes(tomcat, group8);
 
-            String clusterIdC2 = topologyHandler.
+            String group7 = topologyHandler.generateId(bean.getApplicationId(),
+                    "my-group7-group-startup-order-test", bean.getApplicationId() + "-1");
+
+            String groupTom2 = topologyHandler.generateId(bean.getApplicationId(),
+                    "my-group6-group-tom2-group-startup-order-test", bean.getApplicationId() + "-1");
+
+            assertCreationOfNodesInParallel(group7, groupTom2);
+
+            String group7Tomcat = topologyHandler.
                     getClusterIdFromAlias(bean.getApplicationId(),
-                            "c2-1x0-group-startup-order-test");
+                            "my-group7-tomcat-group-startup-order-test");
 
-            /*assertCreationOfNodes(groupId, clusterIdC2);
-            assertCreationOfNodes(clusterIdC3, clusterIdC4);
+            String group7Tomcat1 = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "my-group7-tomcat1-group-startup-order-test");
 
-            //Group active handling
-            topologyHandler.assertGroupActivation(bean.getApplicationId());
+            assertCreationOfNodes(group7Tomcat, group7Tomcat1);
 
-            //Cluster active handling
-            topologyHandler.assertClusterActivation(bean.getApplicationId());
+            String groupTom2Tomcat2 = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "my-group-tom2-tomcat2-group-startup-order-test");
 
-            List<String> clusterIds = new ArrayList<String>();
-            clusterIds.add(clusterIdC3);
-            clusterIds.add(clusterIdC4);
-            clusterIds.add(clusterIdC2);
+            String groupTom2Tomcat3 = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "my-group-tom2-tomcat3-group-startup-order-test");
 
-            assertGroupInactive(groupId, clusterIdC3);
+            assertCreationOfNodes(groupTom2Tomcat2, groupTom2Tomcat3);
 
-            assertTerminatingOfNodes(groupId, clusterIds);
+            String group8Tomcat2 = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "my-tomcat2-group8-group-startup-order-test");
 
-            assertTerminationOfNodes(groupId, clusterIds);
+            String group8Tomcat = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "my-tomcat-group8-group-startup-order-test");
+
+            assertCreationOfNodesInParallel(group8Tomcat2, group8Tomcat);
 
             //Application active handling
             topologyHandler.assertApplicationStatus(bean.getApplicationId(),
                     ApplicationStatus.Active);
 
-            assertCreationOfNodes(groupId, clusterIdC2);
-
-            assertCreationOfNodes(clusterIdC3, clusterIdC4);
-
             //Group active handling
             topologyHandler.assertGroupActivation(bean.getApplicationId());
 
             //Cluster active handling
-            topologyHandler.assertClusterActivation(bean.getApplicationId());*/
+            topologyHandler.assertClusterActivation(bean.getApplicationId());
 
             boolean removedGroup = restClient.removeEntity(RestConstants.CARTRIDGE_GROUPS,
-                    "g-sc-G4-group-startup-order-test",
+                    "group6-group-startup-order-test",
+                    RestConstants.CARTRIDGE_GROUPS_NAME);
+            assertFalse(removedGroup);
+
+            removedGroup = restClient.removeEntity(RestConstants.CARTRIDGE_GROUPS,
+                    "group8-group-startup-order-test",
                     RestConstants.CARTRIDGE_GROUPS_NAME);
             assertFalse(removedGroup);
 
@@ -230,26 +250,35 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
             assertNull(beanRemoved);
 
             removedGroup = restClient.removeEntity(RestConstants.CARTRIDGE_GROUPS,
-                    "g-sc-G4-group-startup-order-test",
+                    "group6-group-startup-order-test",
+                    RestConstants.CARTRIDGE_GROUPS_NAME);
+            assertTrue(removedGroup);
+
+            removedGroup = restClient.removeEntity(RestConstants.CARTRIDGE_GROUPS,
+                    "group8-group-startup-order-test",
                     RestConstants.CARTRIDGE_GROUPS_NAME);
             assertTrue(removedGroup);
 
-            boolean removedC1 = restClient.removeEntity(RestConstants.CARTRIDGES, "c1-group-startup-order-test",
+            boolean removedC1 = restClient.removeEntity(RestConstants.CARTRIDGES, "stratos-lb-group-startup-order-test",
                     RestConstants.CARTRIDGES_NAME);
             assertTrue(removedC1);
 
-            boolean removedC2 = restClient.removeEntity(RestConstants.CARTRIDGES, "c2-group-startup-order-test",
+            boolean removedC2 = restClient.removeEntity(RestConstants.CARTRIDGES, "tomcat-group-startup-order-test",
                     RestConstants.CARTRIDGES_NAME);
             assertTrue(removedC2);
 
-            boolean removedC3 = restClient.removeEntity(RestConstants.CARTRIDGES, "c3-group-startup-order-test",
+            boolean removedC3 = restClient.removeEntity(RestConstants.CARTRIDGES, "tomcat1-group-startup-order-test",
                     RestConstants.CARTRIDGES_NAME);
             assertTrue(removedC3);
 
-            boolean removedC4 = restClient.removeEntity(RestConstants.CARTRIDGES, "c4-group-startup-order-test",
+            boolean removedC4 = restClient.removeEntity(RestConstants.CARTRIDGES, "tomcat2-group-startup-order-test",
                     RestConstants.CARTRIDGES_NAME);
             assertTrue(removedC4);
 
+            boolean removedC5 = restClient.removeEntity(RestConstants.CARTRIDGES, "tomcat3-group-startup-order-test",
+                    RestConstants.CARTRIDGES_NAME);
+            assertTrue(removedC5);
+
             removedAuto = restClient.removeEntity(RestConstants.AUTOSCALING_POLICIES,
                     autoscalingPolicyId, RestConstants.AUTOSCALING_POLICIES_NAME);
             assertTrue(removedAuto);
@@ -278,108 +307,58 @@ public class GroupStartupOrderTest extends StratosTestServerManager {
         }
     }
 
-    private void assertGroupInactive(String groupId, String clusterId) {
+    private void assertCreationOfNodes(String firstNodeId, String secondNodeId) {
+        //group1 started first, then cluster started later
         long startTime = System.currentTimeMillis();
-        Map<String, Long> inActiveMap = TopologyHandler.getInstance().getInActiveMembers();
-
-        while (!inActiveMap.containsKey(clusterId)) {
+        Map<String, Long> activeMembers = TopologyHandler.getInstance().getActivateddMembers();
+        Map<String, Long> createdMembers = TopologyHandler.getInstance().getCreatedMembers();
+        //Active member should be available at the time cluster is started to create.
+        while(!activeMembers.containsKey(firstNodeId)) {
             try {
                 Thread.sleep(1000);
-            } catch (InterruptedException ignore) {
+            } catch (InterruptedException e) {
             }
-            inActiveMap = TopologyHandler.getInstance().getInActiveMembers();
+            activeMembers = TopologyHandler.getInstance().getActivateddMembers();
             if ((System.currentTimeMillis() - startTime) > GROUP_ACTIVE_TIMEOUT) {
                 break;
             }
         }
-        assertTrue(inActiveMap.containsKey(clusterId));
+        assertTrue(activeMembers.containsKey(firstNodeId));
 
-        while (!inActiveMap.containsKey(groupId)) {
+        while(!createdMembers.containsKey(secondNodeId)) {
             try {
                 Thread.sleep(1000);
-            } catch (InterruptedException ignore) {
+            } catch (InterruptedException e) {
             }
-            inActiveMap = TopologyHandler.getInstance().getInActiveMembers();
+            createdMembers = TopologyHandler.getInstance().getCreatedMembers();
             if ((System.currentTimeMillis() - startTime) > GROUP_ACTIVE_TIMEOUT) {
                 break;
             }
         }
-        assertTrue(inActiveMap.containsKey(groupId));
 
-    }
-
-    private void assertTerminatingOfNodes(String groupId, List<String> clusterIds) {
-        Map<String, Long> terminatingMembers = TopologyHandler.getInstance().getTerminatingMembers();
-        for (String clusterId : clusterIds) {
-            long startTime = System.currentTimeMillis();
-            while (!terminatingMembers.containsKey(clusterId)) {
-                try {
-                    Thread.sleep(1000);
-                } catch (InterruptedException ignore) {
-                }
-                terminatingMembers = TopologyHandler.getInstance().getTerminatingMembers();
-                if ((System.currentTimeMillis() - startTime) > GROUP_ACTIVE_TIMEOUT) {
-                    break;
-                }
-            }
-            assertTrue(terminatingMembers.containsKey(groupId));
-        }
-        long startTime = System.currentTimeMillis();
-        while (!terminatingMembers.containsKey(groupId)) {
-            try {
-                Thread.sleep(1000);
-            } catch (InterruptedException ignore) {
-            }
-            terminatingMembers = TopologyHandler.getInstance().getTerminatingMembers();
-            if ((System.currentTimeMillis() - startTime) > GROUP_ACTIVE_TIMEOUT) {
-                break;
-            }
-        }
-        assertTrue(terminatingMembers.containsKey(groupId));
+        assertTrue(createdMembers.containsKey(secondNodeId));
 
+        assertTrue(createdMembers.get(secondNodeId) > activeMembers.get(firstNodeId));
     }
 
-    private void assertTerminationOfNodes(String groupId, List<String> clusterIds) {
+    private void assertCreationOfNodesInParallel(String firstNodeId, String secondNodeId) {
+        //group1 started first, then cluster started later
         long startTime = System.currentTimeMillis();
-        Map<String, Long> terminatedMembers = TopologyHandler.getInstance().getTerminatedMembers();
-
-        for (String clusterId : clusterIds) {
-            while (!terminatedMembers.containsKey(clusterId)) {
-                try {
-                    Thread.sleep(1000);
-                } catch (InterruptedException ignore) {
-                }
-                terminatedMembers = TopologyHandler.getInstance().getTerminatedMembers();
-                if ((System.currentTimeMillis() - startTime) > GROUP_ACTIVE_TIMEOUT) {
-                    break;
-                }
-            }
-            assertTrue(terminatedMembers.containsKey(clusterId));
-        }
+        Map<String, Long> createdMembers = TopologyHandler.getInstance().getCreatedMembers();
+        //Active member should be available at the time cluster is started to create.
 
-        while (!terminatedMembers.containsKey(groupId)) {
+        while(!(createdMembers.containsKey(firstNodeId) && createdMembers.containsKey(firstNodeId))) {
             try {
                 Thread.sleep(1000);
-            } catch (InterruptedException ignore) {
+            } catch (InterruptedException e) {
             }
-            terminatedMembers = TopologyHandler.getInstance().getTerminatedMembers();
-            if ((System.currentTimeMillis() - startTime) > GROUP_ACTIVE_TIMEOUT) {
+            createdMembers = TopologyHandler.getInstance().getCreatedMembers();
+            if ((System.currentTimeMillis() - startTime) > NODES_START_PARALLEL_TIMEOUT) {
                 break;
             }
         }
+        assertTrue(createdMembers.containsKey(firstNodeId));
+        assertTrue(createdMembers.containsKey(firstNodeId));
 
-        assertTrue(terminatedMembers.containsKey(groupId));
-    }
-
-    private void assertCreationOfNodes(String firstNodeId, String secondNodeId) {
-        //group1 started first, then cluster started later
-
-        Map<String, Long> activeMembers = TopologyHandler.getInstance().getActivateddMembers();
-        Map<String, Long> createdMembers = TopologyHandler.getInstance().getCreatedMembers();
-        //Active member should be available at the time cluster is started to create.
-        assertTrue(activeMembers.containsKey(firstNodeId));
-        assertTrue(createdMembers.containsKey(secondNodeId));
-
-        assertTrue(createdMembers.get(secondNodeId) > activeMembers.get(firstNodeId));
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e59a6e1c/products/stratos/modules/integration/src/test/resources/group-startup-order-test/application-policies/application-policy-group-startup-order-test.json
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/application-policies/application-policy-group-startup-order-test.json b/products/stratos/modules/integration/src/test/resources/group-startup-order-test/application-policies/application-policy-group-startup-order-test.json
index 7bc9c2d..e7d80a5 100644
--- a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/application-policies/application-policy-group-startup-order-test.json
+++ b/products/stratos/modules/integration/src/test/resources/group-startup-order-test/application-policies/application-policy-group-startup-order-test.json
@@ -2,15 +2,10 @@
     "id": "application-policy-group-startup-order-test",
     "algorithm": "one-after-another",
     "networkPartitions": [
-        "network-partition-group-startup-order-test-1",
-        "network-partition-group-startup-order-test-2"
+        "network-partition-group-startup-order-test-1"
     ],
     "properties": [
         {
-            "name": "networkPartitionGroups",
-            "value": "network-partition-group-startup-order-test-1|network-partition-group-startup-order-test-2"
-        },
-        {
             "name": "key-2",
             "value": "value-2"
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e59a6e1c/products/stratos/modules/integration/src/test/resources/group-startup-order-test/applications/group-startup-order-test.json
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/applications/group-startup-order-test.json b/products/stratos/modules/integration/src/test/resources/group-startup-order-test/applications/group-startup-order-test.json
index 156553f..60ed310 100644
--- a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/applications/group-startup-order-test.json
+++ b/products/stratos/modules/integration/src/test/resources/group-startup-order-test/applications/group-startup-order-test.json
@@ -8,11 +8,11 @@
                 "alias": "my-group6-group-startup-order-test",
                 "groupMinInstances": 1,
                 "groupMaxInstances": 1,
-                "deploymentPolicy": "deployment-policy-group-startup-order-test",
                 "groups": [
                     {
                         "name": "group7-group-startup-order-test",
                         "alias": "my-group7-group-startup-order-test",
+                        "deploymentPolicy": "deployment-policy-group-startup-order-test",
                         "groupMinInstances": 1,
                         "groupMaxInstances": 1,
                         "cartridges": [
@@ -47,38 +47,45 @@
                                 }
                             }
                         ]
-                    }
-                ],
-                "cartridges": [
-                    {
-                        "type": "tomcat2-group-startup-order-test",
-                        "cartridgeMin": 1,
-                        "cartridgeMax": 2,
-                        "subscribableInfo": {
-                            "alias": "my-group-tom2-tomcat2-group-startup-order-test",
-                            "autoscalingPolicy": "autoscaling-policy-group-startup-order-test",
-                            "artifactRepository": {
-                                "privateRepo": false,
-                                "repoUrl": "https://github.com/imesh/stratos-tomcat2-applications.git",
-                                "repoUsername": "",
-                                "repoPassword": ""
-                            }
-                        }
                     },
                     {
-                        "type": "tomcat3-group-startup-order-test",
-                        "cartridgeMin": 1,
-                        "cartridgeMax": 2,
-                        "subscribableInfo": {
-                            "alias": "my-group-tom2-tomcat3-group-startup-order-test",
-                            "autoscalingPolicy": "autoscaling-policy-group-startup-order-test",
-                            "artifactRepository": {
-                                "privateRepo": false,
-                                "repoUrl": "https://github.com/imesh/stratos-tomcat2-applications.git",
-                                "repoUsername": "",
-                                "repoPassword": ""
+                        "name": "group-tom2-group-startup-order-test",
+                        "alias": "my-group6-group-tom2-group-startup-order-test",
+                        "deploymentPolicy": "deployment-policy-group-startup-order-test",
+                        "groupMinInstances": 1,
+                        "groupMaxInstances": 1,
+                        "cartridges": [
+                            {
+                                "type": "tomcat2-group-startup-order-test",
+                                "cartridgeMin": 1,
+                                "cartridgeMax": 2,
+                                "subscribableInfo": {
+                                    "alias": "my-group-tom2-tomcat2-group-startup-order-test",
+                                    "autoscalingPolicy": "autoscaling-policy-group-startup-order-test",
+                                    "artifactRepository": {
+                                        "privateRepo": false,
+                                        "repoUrl": "https://github.com/imesh/stratos-tomcat2-applications.git",
+                                        "repoUsername": "",
+                                        "repoPassword": ""
+                                    }
+                                }
+                            },
+                            {
+                                "type": "tomcat3-group-startup-order-test",
+                                "cartridgeMin": 1,
+                                "cartridgeMax": 2,
+                                "subscribableInfo": {
+                                    "alias": "my-group-tom2-tomcat3-group-startup-order-test",
+                                    "autoscalingPolicy": "autoscaling-policy-group-startup-order-test",
+                                    "artifactRepository": {
+                                        "privateRepo": false,
+                                        "repoUrl": "https://github.com/imesh/stratos-tomcat2-applications.git",
+                                        "repoUsername": "",
+                                        "repoPassword": ""
+                                    }
+                                }
                             }
-                        }
+                        ]
                     }
                 ]
             },
@@ -128,6 +135,21 @@
                                 "repoPassword": ""
                             }
                         }
+                    },
+                    {
+                        "type": "tomcat-group-startup-order-test",
+                        "cartridgeMin": 1,
+                        "cartridgeMax": 2,
+                        "subscribableInfo": {
+                            "alias": "my-tomcat-group8-group-startup-order-test",
+                            "autoscalingPolicy": "autoscaling-policy-group-startup-order-test",
+                            "artifactRepository": {
+                                "privateRepo": false,
+                                "repoUrl": "https://github.com/imesh/stratos-tomcat2-applications.git",
+                                "repoUsername": "",
+                                "repoPassword": ""
+                            }
+                        }
                     }
                 ]
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e59a6e1c/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/esb-php-group-startup-order-test.json
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/esb-php-group-startup-order-test.json b/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/esb-php-group-startup-order-test.json
deleted file mode 100644
index 0079c66..0000000
--- a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/esb-php-group-startup-order-test.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-    "name": "esb-php-group-startup-order-test",
-    "cartridges": [
-        "esb-group-startup-order-test",
-        "php-group-startup-order-test"
-    ],
-    "dependencies": {
-        "startupOrders": [
-            {
-                "aliases": [
-                    "cartridge.my-esb-group-startup-order-test",
-                    "cartridge.my-php-group-startup-order-test"
-                ]
-            }
-        ],
-        "terminationBehaviour": "terminate-none"
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/stratos/blob/e59a6e1c/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/group8-group-startup-order-test.json
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/group8-group-startup-order-test.json b/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/group8-group-startup-order-test.json
index 9bd63d9..c83b1ce 100644
--- a/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/group8-group-startup-order-test.json
+++ b/products/stratos/modules/integration/src/test/resources/group-startup-order-test/cartridges-groups/group8-group-startup-order-test.json
@@ -9,7 +9,7 @@
         }
     ],
     "cartridges": [
-        "tomcat2-group-startup-order-test"
+        "tomcat2-group-startup-order-test","tomcat-group-startup-order-test"
     ],
     "dependencies": {
         "terminationBehaviour": "terminate-all"

http://git-wip-us.apache.org/repos/asf/stratos/blob/e59a6e1c/products/stratos/modules/integration/src/test/resources/stratos-testing.xml
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/src/test/resources/stratos-testing.xml b/products/stratos/modules/integration/src/test/resources/stratos-testing.xml
index 0680485..23f3766 100644
--- a/products/stratos/modules/integration/src/test/resources/stratos-testing.xml
+++ b/products/stratos/modules/integration/src/test/resources/stratos-testing.xml
@@ -76,14 +76,14 @@
             <class name="org.apache.stratos.integration.tests.application.PartitionRoundRobinClusterTest" />
         </classes>
     </test>
-    <test name="GroupTerminationBehaviorTest">
+    <test name="GroupStartupOrderTest">
         <classes>
-            <class name="org.apache.stratos.integration.tests.application.GroupTerminationBehaviorTest" />
+            <class name="org.apache.stratos.integration.tests.application.GroupStartupOrderTest" />
         </classes>
     </test>
-    <!--test name="GroupStartupOrderTest">
+    <test name="GroupTerminationBehaviorTest">
         <classes>
-            <class name="org.apache.stratos.integration.tests.application.GroupStartupOrderTest" />
+            <class name="org.apache.stratos.integration.tests.application.GroupTerminationBehaviorTest" />
         </classes>
-    </test-->
+    </test>
 </suite>