fixing group scaling issue and adding comments

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

Branch: refs/heads/master
Commit: 29ac5f0ae5a76cd2b8b708018d4911acb93ccf46
Parents: 885c752
Author: reka <[email protected]>
Authored: Tue Apr 28 16:07:10 2015 +0530
Committer: reka <[email protected]>
Committed: Wed Apr 29 00:05:46 2015 +0530

----------------------------------------------------------------------
 .../dependency/DependencyBuilder.java           |   1 +
 .../applications/dependency/DependencyTree.java |   7 +-
 .../context/ApplicationChildContext.java        |   9 ++
 .../stratos/autoscaler/monitor/Monitor.java     |  40 ++++---
 .../monitor/component/ApplicationMonitor.java   | 112 +++++++++++++++----
 .../monitor/component/GroupMonitor.java         |  14 ++-
 6 files changed, 140 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/29ac5f0a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
index fe14f7f..8df87c3 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyBuilder.java
@@ -111,6 +111,7 @@ public class DependencyBuilder {
                                                 
applicationChildContext.getId(), parentContext.getId(), dependencyTree));
                                     }
                                     parentContext = applicationChildContext;
+                                    
applicationChildContext.setParent(parentContext);
                                 } else {
                                     // This is the first element, add it as 
the root
                                     
dependencyTree.addPrimaryApplicationContext(applicationChildContext);

http://git-wip-us.apache.org/repos/asf/stratos/blob/29ac5f0a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
index 8d97542..f489158 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
@@ -114,13 +114,16 @@ public class DependencyTree {
                                                             
List<ApplicationChildContext> contexts) {
         for (ApplicationChildContext context : contexts) {
             //TODO check for the status
-            if (context.getId().equals(id)) {
+            if (context.getParent() != null && context.getParent().equals(id)) 
{
                 return context;
             }
         }
         //if not found in the top level search recursively
         for (ApplicationChildContext context : 
this.primaryApplicationContextList) {
-            return findParentContextWithId(context, id, 
context.getApplicationChildContextList());
+            if(context.getApplicationChildContextList() != null &&
+                    !context.getApplicationChildContextList().isEmpty()) {
+                return findParentContextWithId(context, id, 
context.getApplicationChildContextList());
+            }
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/29ac5f0a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContext.java
index b5a4a39..1e4f3fd 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/context/ApplicationChildContext.java
@@ -35,6 +35,7 @@ public abstract class ApplicationChildContext {
     private ClusterStatus status;
     private Stack<ClusterStatus> statusLifeCycle;
     private List<ApplicationChildContext> applicationChildContextList;
+    private ApplicationChildContext parent;
 
     protected boolean hasStartupDependents;
     protected boolean isGroupScalingEnabled;
@@ -117,4 +118,12 @@ public abstract class ApplicationChildContext {
     public void setGroupScalingEnabled(boolean isDependent) {
         this.isGroupScalingEnabled = isDependent;
     }
+
+    public ApplicationChildContext getParent() {
+        return parent;
+    }
+
+    public void setParent(ApplicationChildContext parent) {
+        this.parent = parent;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/29ac5f0a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
index d13ae4c..0a9d7f1 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
@@ -27,11 +27,13 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * Abstract class for the monitoring functionality in autoscaler.
+ * Abstract class for the monitoring functionality in Autoscaler.
  */
 public abstract class Monitor implements EventHandler {
-
-    public enum MonitorType {Application, Group, Cluster}
+    //Monitor types
+    public enum MonitorType {
+        Application, Group, Cluster
+    }
 
     //Id of the monitor, cluster=clusterId, group=group-alias, 
application=app-alias
     protected String id;
@@ -44,13 +46,23 @@ public abstract class Monitor implements EventHandler {
     //monitors map, key=InstanceId and 
value=ClusterInstance/GroupInstance/ApplicationInstance
     protected Map<String, Instance> instanceIdToInstanceMap;
 
+    public Monitor() {
+        this.instanceIdToInstanceMap = new HashMap<String, Instance>();
+    }
+
+    /**
+     * This will destroy the monitor thread
+     */
     public abstract void destroy();
 
+    /**
+     * This will create Instance on demand as requested by monitors
+     *
+     * @param instanceId instance Id of the instance to be created
+     * @return whether it is created or not
+     */
     public abstract boolean createInstanceOnDemand(String instanceId);
 
-    public Monitor() {
-        this.instanceIdToInstanceMap = new HashMap<String, Instance>();
-    }
 
     /**
      * Return the id of the monitor
@@ -64,14 +76,14 @@ public abstract class Monitor implements EventHandler {
     /**
      * Return the type of the monitor.
      *
-     * @return
+     * @return monitor type
      */
     public abstract MonitorType getMonitorType();
 
     /**
      * Set the id of the monitor
      *
-     * @param id
+     * @param id id of the monitor
      */
     public void setId(String id) {
         this.id = id;
@@ -89,7 +101,7 @@ public abstract class Monitor implements EventHandler {
     /**
      * To set the app id of the monitor
      *
-     * @param appId
+     * @param appId application id
      */
     public void setAppId(String appId) {
         this.appId = appId;
@@ -107,7 +119,7 @@ public abstract class Monitor implements EventHandler {
     /**
      * To set the parent of the monitor
      *
-     * @param parent
+     * @param parent parent of the monitor
      */
     public void setParent(ParentComponentMonitor parent) {
         this.parent = parent;
@@ -126,7 +138,7 @@ public abstract class Monitor implements EventHandler {
     /**
      * To set whether monitor has any startup dependencies
      *
-     * @param hasDependent
+     * @param hasDependent whether monitor has dependent or not
      */
     public void setHasStartupDependents(boolean hasDependent) {
         this.hasStartupDependents = hasDependent;
@@ -183,10 +195,6 @@ public abstract class Monitor implements EventHandler {
      * @return true/false
      */
     public boolean hasInstance() {
-        if (this.instanceIdToInstanceMap.isEmpty()) {
-            return false;
-        } else {
-            return true;
-        }
+        return !instanceIdToInstanceMap.isEmpty();
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/29ac5f0a/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 68b4d28..84f82e3 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
@@ -241,7 +241,8 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
                 get(instanceId);
 
         if (applicationInstance == null) {
-            log.warn("The required application [instance] " + instanceId + " 
not found in the AppMonitor");
+            log.warn("The required application [instance] " + instanceId + " 
not found " +
+                    "in the AppMonitor");
         } else {
             if (applicationInstance.getStatus() != status) {
                 applicationInstance.setStatus(status);
@@ -250,7 +251,8 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
 
         //notify the children about the state change
         try {
-            MonitorStatusEventBuilder.notifyChildren(this, new 
ApplicationStatusEvent(status, appId, instanceId));
+            MonitorStatusEventBuilder.notifyChildren(this, new 
ApplicationStatusEvent(status,
+                    appId, instanceId));
         } catch (MonitorNotFoundException e) {
             log.error("Error while notifying the children from [application] " 
+ appId, e);
             //TODO revert siblings
@@ -305,48 +307,72 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
 
     }
 
+    /**
+     * This will start the minimum dependencies
+     *
+     * @param application the application which used to create monitors
+     * @return whether monitor created or not
+     * @throws TopologyInConsistentException
+     * @throws PolicyValidationException
+     */
     public boolean startMinimumDependencies(Application application)
             throws TopologyInConsistentException, PolicyValidationException {
 
         return createInstanceAndStartDependency(application);
     }
 
+    /**
+     * Utility to create application instance by parsing the deployment policy 
for a monitor
+     *
+     * @param application the application
+     * @return whether the instance created or not
+     * @throws TopologyInConsistentException
+     * @throws PolicyValidationException
+     */
     private boolean createInstanceAndStartDependency(Application application)
             throws TopologyInConsistentException, PolicyValidationException {
         boolean initialStartup = true;
         List<String> instanceIds = new ArrayList<String>();
         String instanceId;
 
-        ApplicationPolicy applicationPolicy = 
PolicyManager.getInstance().getApplicationPolicy(application.getApplicationPolicyId());
+        ApplicationPolicy applicationPolicy = PolicyManager.getInstance().
+                getApplicationPolicy(application.getApplicationPolicyId());
         if (applicationPolicy == null) {
-            String msg = String.format("Application policy not found in 
registry or in-memory [application-id] %s", appId);
+            String msg = String.format("Application policy not found in 
registry or " +
+                    "in-memory [application-id] %s", appId);
             log.error(msg);
             throw new RuntimeException(msg);
         }
 
-        NetworkPartitionAlgorithmContext algorithmContext = 
AutoscalerContext.getInstance().getNetworkPartitionAlgorithmContext(appId);
+        NetworkPartitionAlgorithmContext algorithmContext = 
AutoscalerContext.getInstance().
+                getNetworkPartitionAlgorithmContext(appId);
         if (algorithmContext == null) {
-            String msg = String.format("Network partition algorithm context 
not found in registry or in-memory [application-id] %s", appId);
+            String msg = String.format("Network partition algorithm context 
not found " +
+                    "in registry or in-memory [application-id] %s", appId);
             log.error(msg);
             throw new RuntimeException(msg);
         }
 
         String networkPartitionAlgorithmName = 
applicationPolicy.getAlgorithm();
         if (log.isDebugEnabled()) {
-            String msg = String.format("Network partition algorithm is %s 
[application-id] %s", networkPartitionAlgorithmName, appId);
+            String msg = String.format("Network partition algorithm is %s 
[application-id] %s",
+                    networkPartitionAlgorithmName, appId);
             log.debug(msg);
         }
 
-        NetworkPartitionAlgorithm algorithm = 
getNetworkPartitionAlgorithm(networkPartitionAlgorithmName);
+        NetworkPartitionAlgorithm algorithm = getNetworkPartitionAlgorithm(
+                networkPartitionAlgorithmName);
         if (algorithm == null) {
-            String msg = String.format("Coudln't create network partition 
algorithm [application-id] %s", appId);
+            String msg = String.format("Coudln't create network partition 
algorithm " +
+                    "[application-id] %s", appId);
             log.error(msg);
             throw new RuntimeException(msg);
         }
 
         List<String> nextNetworkPartitions = 
algorithm.getNextNetworkPartitions(algorithmContext);
         if (nextNetworkPartitions == null || nextNetworkPartitions.isEmpty()) {
-            String msg = String.format("No network partitions available for 
application bursting [application-id] %s", appId);
+            String msg = String.format("No network partitions available for 
application bursting " +
+                    "[application-id] %s", appId);
             log.warn(msg);
             return false;
         }
@@ -376,6 +402,15 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         return initialStartup;
     }
 
+    /**
+     * Utility method to create application instance inside a network 
partition and
+     * add data structure to monitor
+     *
+     * @param application   the application where the application instance 
needs to be created
+     * @param context       networkPartition where instance needs to be created
+     * @param instanceExist whether application instance exists or not
+     * @return instance Id
+     */
     private String handleApplicationInstanceCreation(Application application,
                                                      
ApplicationLevelNetworkPartitionContext context,
                                                      ApplicationInstance 
instanceExist) {
@@ -405,6 +440,13 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         return instanceId;
     }
 
+    /**
+     * Handling the application bursting into available network partition
+     *
+     * @throws TopologyInConsistentException
+     * @throws PolicyValidationException
+     * @throws MonitorNotFoundException
+     */
     public void handleApplicationBursting() throws 
TopologyInConsistentException,
             PolicyValidationException,
             MonitorNotFoundException {
@@ -418,36 +460,44 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         boolean burstNPFound = false;
         String instanceId = null;
 
-        ApplicationPolicy applicationPolicy = 
PolicyManager.getInstance().getApplicationPolicy(application.getApplicationPolicyId());
+        ApplicationPolicy applicationPolicy = PolicyManager.getInstance().
+                getApplicationPolicy(application.getApplicationPolicyId());
         if (applicationPolicy == null) {
-            String msg = String.format("Application policy not found in 
registry or in-memory [application-id] %s", appId);
+            String msg = String.format("Application policy not found in 
registry or in-memory " +
+                    "[application-id] %s", appId);
             log.error(msg);
             throw new RuntimeException(msg);
         }
 
-        NetworkPartitionAlgorithmContext algorithmContext = 
AutoscalerContext.getInstance().getNetworkPartitionAlgorithmContext(appId);
+        NetworkPartitionAlgorithmContext algorithmContext = 
AutoscalerContext.getInstance().
+                getNetworkPartitionAlgorithmContext(appId);
         if (algorithmContext == null) {
-            String msg = String.format("Network partition algorithm context 
not found in registry or in-memory [application-id] %s", appId);
+            String msg = String.format("Network partition algorithm context 
not found in" +
+                    " registry or in-memory [application-id] %s", appId);
             log.error(msg);
             throw new RuntimeException(msg);
         }
 
         String networkPartitionAlgorithmName = 
applicationPolicy.getAlgorithm();
         if (log.isDebugEnabled()) {
-            String msg = String.format("Network partition algorithm is %s 
[application-id] %s", networkPartitionAlgorithmName, appId);
+            String msg = String.format("Network partition algorithm is %s 
[application-id] %s",
+                    networkPartitionAlgorithmName, appId);
             log.debug(msg);
         }
 
-        NetworkPartitionAlgorithm algorithm = 
getNetworkPartitionAlgorithm(networkPartitionAlgorithmName);
+        NetworkPartitionAlgorithm algorithm = getNetworkPartitionAlgorithm(
+                networkPartitionAlgorithmName);
         if (algorithm == null) {
-            String msg = String.format("Coudln't create network partition 
algorithm [application-id] %s", appId);
+            String msg = String.format("Coudln't create network partition 
algorithm " +
+                    "[application-id] %s", appId);
             log.error(msg);
             throw new RuntimeException(msg);
         }
 
         List<String> nextNetworkPartitions = 
algorithm.getNextNetworkPartitions(algorithmContext);
         if (nextNetworkPartitions == null || nextNetworkPartitions.isEmpty()) {
-            String msg = String.format("No network partitions available for 
application bursting [application-id] %s", appId);
+            String msg = String.format("No network partitions available for 
application " +
+                    "bursting [application-id] %s", appId);
             log.warn(msg);
             return;
         }
@@ -455,7 +505,8 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         for (String networkPartitionId : nextNetworkPartitions) {
             if 
(!this.getNetworkPartitionCtxts().containsKey(networkPartitionId)) {
 
-                ApplicationLevelNetworkPartitionContext context = new 
ApplicationLevelNetworkPartitionContext(networkPartitionId);
+                ApplicationLevelNetworkPartitionContext context = new
+                        
ApplicationLevelNetworkPartitionContext(networkPartitionId);
 
                 //Setting flags saying that it has been created by burst
                 context.setCreatedOnBurst(true);
@@ -481,13 +532,25 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         }
     }
 
-    private ApplicationInstance createApplicationInstance(Application 
application, String networkPartitionId) {
+    /**
+     * Creating application instance into applications Topology
+     *
+     * @param application        application where instance needs to be added
+     * @param networkPartitionId network partition of the application Instance
+     * @return the create application instance in the topology
+     */
+    private ApplicationInstance createApplicationInstance(Application 
application,
+                                                          String 
networkPartitionId) {
         //String instanceId = this.generateInstanceId(application);
         ApplicationInstance instance = 
ApplicationBuilder.handleApplicationInstanceCreatedEvent(
                 appId, networkPartitionId);
         return instance;
     }
 
+    /**
+     * Whether application is in-terminating or not
+     * @return application state
+     */
     public boolean isTerminating() {
         return isTerminating;
     }
@@ -515,14 +578,16 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
 
         if 
(algorithmName.equals(StratosConstants.NETWORK_PARTITION_ONE_AFTER_ANOTHER_ALGORITHM_ID))
 {
             if (log.isDebugEnabled()) {
-                String msg = String.format("Network partition algorithm is set 
to %s in applicatioin policy",
+                String msg = String.format("Network partition algorithm is set 
to %s in " +
+                                "applicatioin policy",
                         
StratosConstants.NETWORK_PARTITION_ONE_AFTER_ANOTHER_ALGORITHM_ID);
                 log.debug(msg);
             }
             return new OneAfterAnotherAlgorithm();
         } else if 
(algorithmName.equals(StratosConstants.NETWORK_PARTITION_ALL_AT_ONCE_ALGORITHM_ID))
 {
             if (log.isDebugEnabled()) {
-                String msg = String.format("Network partition algorithm is set 
to %s in applicatioin policy",
+                String msg = String.format("Network partition algorithm is set 
to %s " +
+                                "in applicatioin policy",
                         
StratosConstants.NETWORK_PARTITION_ALL_AT_ONCE_ALGORITHM_ID);
                 log.debug(msg);
             }
@@ -530,7 +595,8 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         }
 
         if (log.isDebugEnabled()) {
-            String msg = String.format("Invalid network partition algorithm %s 
found in applicatioin policy",
+            String msg = String.format("Invalid network partition algorithm %s 
found " +
+                            "in applicatioin policy",
                     
StratosConstants.NETWORK_PARTITION_ALL_AT_ONCE_ALGORITHM_ID);
             log.debug(msg);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/29ac5f0a/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 e8da232..426c169 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
@@ -23,6 +23,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.algorithms.PartitionAlgorithm;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.context.InstanceContext;
 import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
 import 
org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
@@ -47,6 +48,7 @@ import 
org.apache.stratos.messaging.domain.application.Application;
 import org.apache.stratos.messaging.domain.application.ApplicationStatus;
 import org.apache.stratos.messaging.domain.application.Group;
 import org.apache.stratos.messaging.domain.application.GroupStatus;
+import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
 import org.apache.stratos.messaging.domain.instance.GroupInstance;
 import org.apache.stratos.messaging.domain.instance.Instance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
@@ -151,8 +153,16 @@ public class GroupMonitor extends ParentComponentMonitor {
                             for (InstanceContext parentInstanceContext : 
parent.
                                     
getNetworkPartitionContext(networkPartitionContext.getId()).
                                     
getInstanceIdToInstanceContextMap().values()) {
-                                //Creating new group instance based on the 
existing parent instances
-                                
createInstanceOnDemand(parentInstanceContext.getId());
+                                //keep on scaleup/scaledown 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
+                                    
createInstanceOnDemand(parentInstanceContext.getId());
+                                }
                             }
 
                         }

Reply via email to