Repository: stratos
Updated Branches:
  refs/heads/master 412d5c8da -> b59adf8f9


fixing instance id handling in processor and improving monitor startup to check 
whether clusters are there


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

Branch: refs/heads/master
Commit: 95dd15426542dfc114afc39c87f26542e6311808
Parents: 563fd43
Author: reka <[email protected]>
Authored: Wed Dec 3 17:53:24 2014 +0530
Committer: reka <[email protected]>
Committed: Wed Dec 3 17:53:35 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |  1 +
 .../autoscaler/context/AutoscalerContext.java   |  2 ++
 .../ClusterLevelNetworkPartitionContext.java    |  7 +++-
 .../monitor/cluster/VMClusterMonitor.java       |  4 ++-
 .../monitor/component/ApplicationMonitor.java   | 31 ++++++++----------
 .../monitor/component/GroupMonitor.java         | 34 ++++++--------------
 .../ClusterStatusTerminatedProcessor.java       | 19 ++++++-----
 7 files changed, 47 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 8270ab0..5fc9a3a 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -123,6 +123,7 @@ public class AutoScalerServiceImpl implements 
AutoScalerServiceInterface {
             Application application = ApplicationHolder.getApplications().
                     getApplication(deploymentPolicy.getApplicationId());
             if(application != null) {
+
                 allClusterInitialized = 
AutoscalerUtil.allClustersInitialized(application);
             }
         } finally {

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
index ca6efb4..51fad05 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
@@ -20,6 +20,7 @@
  */
 package org.apache.stratos.autoscaler.context;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -44,6 +45,7 @@ public class AutoscalerContext {
     private AutoscalerContext() {
         setClusterMonitors(new HashMap<String, AbstractClusterMonitor>());
         setApplicationMonitors(new HashMap<String, ApplicationMonitor>());
+        pendingApplicationMonitors = new ArrayList<String>();
     }
 
     public static AutoscalerContext getInstance() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
index 45dd636..036228d 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ClusterLevelNetworkPartitionContext.java
@@ -103,10 +103,15 @@ public class ClusterLevelNetworkPartitionContext extends 
NetworkPartitionContext
         return instanceIdToClusterInstanceContextMap;
     }
 
-    public void setInstanceIdToClusterInstanceContextMap(Map<String, 
ClusterInstanceContext> instanceIdToClusterInstanceContextMap) {
+    public void setInstanceIdToClusterInstanceContextMap(
+            Map<String, ClusterInstanceContext> 
instanceIdToClusterInstanceContextMap) {
         this.instanceIdToClusterInstanceContextMap = 
instanceIdToClusterInstanceContextMap;
     }
 
+    public boolean containsClusterInstanceContext(String instanceId) {
+        return 
this.instanceIdToClusterInstanceContextMap.containsKey(instanceId);
+    }
+
     public int getMin() {
         return min;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index 5162d4c..e55377b 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -34,6 +34,7 @@ import 
org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
 import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
 import 
org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
+import 
org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusTerminatedProcessor;
 import org.apache.stratos.autoscaler.util.StatusChecker;
 import 
org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusActiveProcessor;
 import 
org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusInActiveProcessor;
@@ -916,7 +917,8 @@ public class VMClusterMonitor extends 
AbstractClusterMonitor {
                     + "[member] %s", memberId));
         }
         //Checking whether the cluster state can be changed either from 
in_active to created/terminating to terminated
-        StatusChecker.getInstance().onMemberTermination(clusterId, instanceId);
+        
ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().process(
+                ClusterStatusTerminatedProcessor.class.getName(), clusterId, 
instanceId);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 e174560..ca70ba5 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
@@ -36,10 +36,12 @@ import 
org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBu
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
 import 
org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ApplicationLevelNetworkPartition;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.instance.GroupInstance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
 
@@ -137,18 +139,6 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
             //mark the child monitor as inActive in the map
             this.markMonitorAsTerminating(id);
 
-        } else if (status1 == ClusterStatus.Created || status1 == 
GroupStatus.Created) {
-            if (this.terminatingMonitorsList.contains(id)) {
-                this.terminatingMonitorsList.remove(id);
-                this.aliasToActiveMonitorsMap.remove(id);
-            }
-            //TODO
-            /*if (this.status == ApplicationStatus.Terminating) {
-                StatusChecker.getInstance().onChildStatusChange(id, this.id, 
this.appId);
-            } else {
-                onChildTerminatedEvent(id);
-            }*/
-
         } else if (status1 == ClusterStatus.Terminated || status1 == 
GroupStatus.Terminated) {
             //Check whether all dependent goes Terminated and then start them 
in parallel.
             if (this.terminatingMonitorsList.contains(id)) {
@@ -157,11 +147,18 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
             } else {
                 log.warn("[monitor] " + id + " cannot be found in the inActive 
monitors list");
             }
-            //TODO
-            /*if (this.status == ApplicationStatus.Terminating || this.status 
== ApplicationStatus.Terminated) {
-                StatusChecker.getInstance().onChildStatusChange(id, this.id, 
this.appId);
-                log.info("Executing the un-subscription request for the 
[monitor] " + id);
-            }*/
+            ApplicationInstance instance = 
(ApplicationInstance)instanceIdToInstanceMap.get(instanceId);
+            if (instance != null) {
+                if(instance.getStatus() == ApplicationStatus.Terminating) {
+                    
ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+                            appId, instanceId);
+                } else {
+                    onChildTerminatedEvent(id, instanceId);
+                }
+            } else {
+                log.warn("The required instance cannot be found in the the 
[GroupMonitor] " +
+                        this.id);
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/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 63d0295..2334916 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
@@ -181,14 +181,6 @@ public class GroupMonitor extends ParentComponentMonitor 
implements Runnable {
             this.markMonitorAsInactive(instanceId);
             onChildInactiveEvent(id, instanceId);
 
-        } else if (status1 == ClusterStatus.Created || status1 == 
GroupStatus.Created) {
-            if (this.terminatingMonitorsList.contains(instanceId)) {
-                this.terminatingMonitorsList.remove(instanceId);
-                this.aliasToActiveMonitorsMap.remove(instanceId);
-                if 
(AutoscalerContext.getInstance().getClusterMonitors().containsKey(id)) {
-                    AutoscalerContext.getInstance().removeClusterMonitor(id);
-                }
-            }
         } else if (status1 == ClusterStatus.Terminating || status1 == 
GroupStatus.Terminating) {
             //mark the child monitor as inActive in the map
             this.markMonitorAsTerminating(instanceId);
@@ -201,23 +193,17 @@ public class GroupMonitor extends ParentComponentMonitor 
implements Runnable {
             } else {
                 log.warn("[monitor] " + id + " cannot be found in the inActive 
monitors list");
             }
-            //If cluster monitor, need to terminate the existing one
-            ApplicationHolder.releaseReadLock();
-            GroupStatus instanceStatus;
-            try {
-                Group group = ApplicationHolder.getApplications().
-                        getApplication(appId).getGroupRecursively(this.id);
-                instanceStatus = 
group.getInstanceContexts(instanceId).getStatus();
-
-            } finally {
-                ApplicationHolder.releaseReadLock();
-            }
-
-            if (instanceStatus == GroupStatus.Terminating) {
-                
ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
-                        appId, instanceId);
+            GroupInstance instance = 
(GroupInstance)this.instanceIdToInstanceMap.get(instanceId);
+            if (instance != null) {
+                if(instance.getStatus() == GroupStatus.Terminating) {
+                    
ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+                            appId, instanceId);
+                } else {
+                    onChildTerminatedEvent(id, instanceId);
+                }
             } else {
-                onChildTerminatedEvent(id, instanceId);
+                log.warn("The required instance cannot be found in the the 
[GroupMonitor] " +
+                    this.id);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/95dd1542/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
index 00abe34..52b5f36 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
@@ -71,7 +71,7 @@ public class ClusterStatusTerminatedProcessor extends 
ClusterStatusProcessor {
     private boolean doProcess(String clusterId, String instanceId) {
         VMClusterMonitor monitor = (VMClusterMonitor) 
AutoscalerContext.getInstance().
                 getClusterMonitor(clusterId);
-        boolean clusterMonitorHasMembers = clusterMonitorHasMembers(monitor);
+        boolean clusterMonitorHasMembers = clusterInstanceHasMembers(monitor, 
instanceId);
         boolean clusterTerminated = false;
         try {
             TopologyManager.acquireReadLockForCluster(monitor.getServiceId(), 
monitor.getClusterId());
@@ -83,10 +83,11 @@ public class ClusterStatusTerminatedProcessor extends 
ClusterStatusProcessor {
                 if (cluster != null) {
                     try {
                         ApplicationHolder.acquireReadLock();
-                        Application application = 
ApplicationHolder.getApplications().getApplication(appId);
-                        //if all members removed from the cluster and cluster 
is in terminating,
-                        // either it has to be terminated or Reset
-                        if (!clusterMonitorHasMembers && 
cluster.getStatus(null) == ClusterStatus.Terminating) {
+                        /**
+                         * if all members removed from the cluster and cluster 
is in terminating,
+                         * either it has to be terminated or Reset
+                         */
+                        if (!clusterMonitorHasMembers) {
                             if (log.isInfoEnabled()) {
                                 log.info("Publishing Cluster terminated event 
for [application]: " + appId +
                                         " [cluster]: " + clusterId);
@@ -119,17 +120,19 @@ public class ClusterStatusTerminatedProcessor extends 
ClusterStatusProcessor {
      * @param monitor the cluster monitor
      * @return whether has members or not
      */
-    private boolean clusterMonitorHasMembers(VMClusterMonitor monitor) {
+    private boolean clusterInstanceHasMembers(VMClusterMonitor monitor, String 
instanceId) {
         boolean hasMember = false;
         for (ClusterLevelNetworkPartitionContext 
clusterLevelNetworkPartitionContext :
                                                 
monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
-            for(ClusterInstanceContext clusterInstanceContext :
-                    
clusterLevelNetworkPartitionContext.getClusterInstanceContextMap().values()) {
+            
if(clusterLevelNetworkPartitionContext.containsClusterInstanceContext(instanceId))
 {
+            ClusterInstanceContext clusterInstanceContext = 
clusterLevelNetworkPartitionContext.
+                                                            
getClusterInstanceContext(instanceId);
                 for (ClusterLevelPartitionContext partitionContext :
                         clusterInstanceContext.getPartitionCtxts()) {
                     if (partitionContext.getNonTerminatedMemberCount() > 0) {
                         hasMember = true;
+                        return hasMember;
                     } else {
                         hasMember = false;
                     }

Reply via email to