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 2014/12/22 14:24:22 UTC

[1/2] stratos git commit: fixing concurrent modification issue and refactoring

Repository: stratos
Updated Branches:
  refs/heads/master d5511c204 -> b4bf1c75d


fixing concurrent modification issue and refactoring


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

Branch: refs/heads/master
Commit: 50f80b31cb5d6137364880bf7fcee4d45d7ea28e
Parents: d5511c2
Author: reka <rt...@gmail.com>
Authored: Mon Dec 22 18:16:32 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Mon Dec 22 18:16:32 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/context/InstanceContext.java        |  7 ++++---
 .../monitor/component/ApplicationMonitor.java      | 17 ++++++++++-------
 .../autoscaler/monitor/component/GroupMonitor.java | 11 ++++++-----
 .../monitor/component/ParentComponentMonitor.java  |  2 +-
 4 files changed, 21 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/50f80b31/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
index e87b34a..c1f9fff 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
@@ -24,6 +24,7 @@ import org.apache.stratos.autoscaler.monitor.events.ScalingUpBeyondMaxEvent;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * This will hold the instances related info.
@@ -43,9 +44,9 @@ public abstract class InstanceContext {
 
     public InstanceContext(String id) {
         this.id = id;
-        setIdToScalingEvent(new HashMap<String, ScalingEvent>());
-        setIdToScalingOverMaxEvent(new HashMap<String, ScalingUpBeyondMaxEvent>());
-        setIdToScalingDownBeyondMinEvent(new HashMap<String, ScalingDownBeyondMinEvent>());
+        setIdToScalingEvent(new ConcurrentHashMap<String, ScalingEvent>());
+        setIdToScalingOverMaxEvent(new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>());
+        setIdToScalingDownBeyondMinEvent(new ConcurrentHashMap<String, ScalingDownBeyondMinEvent>());
 
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/50f80b31/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 89b452f..a19a4fa 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
@@ -31,10 +31,7 @@ import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundExcept
 import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
 import org.apache.stratos.autoscaler.monitor.Monitor;
-import org.apache.stratos.autoscaler.monitor.events.ApplicationStatusEvent;
-import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
-import org.apache.stratos.autoscaler.monitor.events.ScalingDownBeyondMinEvent;
-import org.apache.stratos.autoscaler.monitor.events.ScalingEvent;
+import org.apache.stratos.autoscaler.monitor.events.*;
 import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
@@ -48,6 +45,7 @@ import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
 
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * ApplicationMonitor is to control the child monitors
@@ -96,7 +94,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                             //Gives priority to scaling max out rather than dependency scaling
                             if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
                                //handling the scaling max out of the children
-                                handleScalingMaxOut(networkPartitionContext);
+                                handleScalingMaxOut(instanceContext, networkPartitionContext);
 
                             } else if(!instanceContext.getIdToScalingEvent().isEmpty()) {
                                 //handling the dependent scaling for application
@@ -114,7 +112,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         monitoringRunnable.run();
     }
 
-    private void handleScalingMaxOut(NetworkPartitionContext networkPartitionContext) {
+    private void handleScalingMaxOut(InstanceContext instanceContext,
+                                     NetworkPartitionContext networkPartitionContext) {
         if (networkPartitionContext.getPendingInstancesCount() == 0) {
             //handling the application bursting only when there are no pending instances found
             try {
@@ -137,6 +136,10 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                         "Hence waiting for it to become active");
             }
         }
+        //Resetting the values
+        instanceContext.setIdToScalingOverMaxEvent(
+                new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>());
+
     }
 
     private void handleScalingDownBeyondMin(InstanceContext instanceContext,
@@ -161,7 +164,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
 
         //Resetting the events
         instanceContext.setIdToScalingDownBeyondMinEvent(
-                new HashMap<String, ScalingDownBeyondMinEvent>());
+                new ConcurrentHashMap<String, ScalingDownBeyondMinEvent>());
 
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/50f80b31/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 750ec7b..2502d12 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
@@ -53,6 +53,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * This is GroupMonitor to monitor the group which consists of
@@ -112,7 +113,7 @@ public class GroupMonitor extends ParentComponentMonitor {
                             //Gives priority to scaling max out rather than dependency scaling
                             if (!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
                                 //handling the max out of the children
-                                handleScalingMaxOut(networkPartitionContext, instanceContext);
+                                handleScalingMaxOut(instanceContext, networkPartitionContext);
 
                             } else if (!instanceContext.getIdToScalingEvent().isEmpty()) {
                                 //handling the dependent scaling
@@ -130,8 +131,8 @@ public class GroupMonitor extends ParentComponentMonitor {
         monitoringRunnable.run();
     }
 
-    private void handleScalingMaxOut(NetworkPartitionContext networkPartitionContext,
-                                     InstanceContext instanceContext) {
+    private void handleScalingMaxOut(InstanceContext instanceContext,
+                                     NetworkPartitionContext networkPartitionContext) {
         if (!hasScalingDependents) {
             //handling the group scaling and if pending instances found,
             // reject the max
@@ -142,7 +143,7 @@ public class GroupMonitor extends ParentComponentMonitor {
         }
         //Resetting the max events
         instanceContext.setIdToScalingOverMaxEvent(
-                new HashMap<String, ScalingUpBeyondMaxEvent>());
+                new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>());
     }
 
     private void handleScalingDownBeyondMin(InstanceContext instanceContext,
@@ -197,7 +198,7 @@ public class GroupMonitor extends ParentComponentMonitor {
         }
         //Resetting the events
         instanceContext.setIdToScalingDownBeyondMinEvent(
-                new HashMap<String, ScalingDownBeyondMinEvent>());
+                new ConcurrentHashMap<String, ScalingDownBeyondMinEvent>());
     }
 
     private void createGroupInstanceOnScaling(final NetworkPartitionContext networkPartitionContext,

http://git-wip-us.apache.org/repos/asf/stratos/blob/50f80b31/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
index 949cfe4..fd6dc69 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
@@ -640,7 +640,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
             }
         }
         //Resetting the events
-        instanceContext.setIdToScalingEvent(new HashMap<String, ScalingEvent>());
+        instanceContext.setIdToScalingEvent(new ConcurrentHashMap<String, ScalingEvent>());
     }
 
     // move to inactive monitors list to use in the Terminated event


[2/2] stratos git commit: adding null check

Posted by re...@apache.org.
adding null check


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

Branch: refs/heads/master
Commit: b4bf1c75dfc676ab3ac37c0c6c31b13e3f2903d6
Parents: 50f80b3
Author: reka <rt...@gmail.com>
Authored: Mon Dec 22 18:54:03 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Mon Dec 22 18:54:03 2014 +0530

----------------------------------------------------------------------
 .../rest/endpoint/api/StratosApiV41Utils.java   | 76 +++++++++++---------
 1 file changed, 44 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b4bf1c75/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index cefa3c4..adaf3a9 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -1171,14 +1171,17 @@ public class StratosApiV41Utils {
     private static void addGroupsInstancesToApplicationInstanceBean(ApplicationInstanceBean applicationInstanceBean,
                                                                     Application application) {
         Collection<Group> groups = application.getGroups();
-        for (Group group : groups) {
-            List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.convertGroupToGroupInstancesBean(
-                                                applicationInstanceBean.getInstanceId(), group);
-            for(GroupInstanceBean groupInstanceBean : groupInstanceBeans) {
-                setSubGroupInstances(group, groupInstanceBean);
-                applicationInstanceBean.getGroupInstances().add(groupInstanceBean);
+        if(groups != null && !groups.isEmpty()) {
+            for (Group group : groups) {
+                List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.convertGroupToGroupInstancesBean(
+                        applicationInstanceBean.getInstanceId(), group);
+                for(GroupInstanceBean groupInstanceBean : groupInstanceBeans) {
+                    setSubGroupInstances(group, groupInstanceBean);
+                    applicationInstanceBean.getGroupInstances().add(groupInstanceBean);
+                }
             }
         }
+
     }
 
     private static void addClustersToApplicationBean(ApplicationBean applicationBean, Application application) {
@@ -1197,32 +1200,38 @@ public class StratosApiV41Utils {
             ApplicationInstanceBean applicationInstanceBean,
             Application application) {
         Map<String, ClusterDataHolder> topLevelClusterDataMap = application.getClusterDataMap();
-        for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
-            ClusterDataHolder clusterDataHolder = entry.getValue();
-            String clusterId = clusterDataHolder.getClusterId();
-            String serviceType = clusterDataHolder.getServiceType();
-            TopologyManager.acquireReadLockForCluster(serviceType, clusterId);
-            Cluster topLevelCluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
-            applicationInstanceBean.getClusterInstances().add(ObjectConverter.
-                    convertClusterToClusterInstanceBean(applicationInstanceBean.getInstanceId(),
-                            topLevelCluster, entry.getKey()));
+        if(topLevelClusterDataMap != null) {
+            for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
+                ClusterDataHolder clusterDataHolder = entry.getValue();
+                String clusterId = clusterDataHolder.getClusterId();
+                String serviceType = clusterDataHolder.getServiceType();
+                TopologyManager.acquireReadLockForCluster(serviceType, clusterId);
+                Cluster topLevelCluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
+                applicationInstanceBean.getClusterInstances().add(ObjectConverter.
+                        convertClusterToClusterInstanceBean(applicationInstanceBean.getInstanceId(),
+                                topLevelCluster, entry.getKey()));
+            }
         }
+
     }
 
     private static void addClustersInstancesToGroupInstanceBean(
             GroupInstanceBean groupInstanceBean,
             Group group) {
         Map<String, ClusterDataHolder> topLevelClusterDataMap = group.getClusterDataMap();
-        for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
-            ClusterDataHolder clusterDataHolder = entry.getValue();
-            String clusterId = clusterDataHolder.getClusterId();
-            String serviceType = clusterDataHolder.getServiceType();
-            TopologyManager.acquireReadLockForCluster(serviceType, clusterId);
-            Cluster topLevelCluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
-            groupInstanceBean.getClusterInstances().add(ObjectConverter.
-                    convertClusterToClusterInstanceBean(groupInstanceBean.getInstanceId(),
-                            topLevelCluster, entry.getKey()));
+        if(topLevelClusterDataMap != null && !topLevelClusterDataMap.isEmpty()) {
+            for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
+                ClusterDataHolder clusterDataHolder = entry.getValue();
+                String clusterId = clusterDataHolder.getClusterId();
+                String serviceType = clusterDataHolder.getServiceType();
+                TopologyManager.acquireReadLockForCluster(serviceType, clusterId);
+                Cluster topLevelCluster = TopologyManager.getTopology().getService(serviceType).getCluster(clusterId);
+                groupInstanceBean.getClusterInstances().add(ObjectConverter.
+                        convertClusterToClusterInstanceBean(groupInstanceBean.getInstanceId(),
+                                topLevelCluster, entry.getKey()));
+            }
         }
+
     }
 
 
@@ -1239,16 +1248,19 @@ public class StratosApiV41Utils {
     private static void setSubGroupInstances(Group group, GroupInstanceBean groupInstanceBean) {
         Collection<Group> subgroups = group.getGroups();
         addClustersInstancesToGroupInstanceBean(groupInstanceBean, group);
-        for (Group subGroup : subgroups) {
-            List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.
-                    convertGroupToGroupInstancesBean(groupInstanceBean.getInstanceId(),
-                            subGroup);
-            for(GroupInstanceBean groupInstanceBean1 : groupInstanceBeans) {
-                setSubGroupInstances(subGroup, groupInstanceBean1);
-                groupInstanceBean.getGroupInstances().add(groupInstanceBean1);
-            }
+        if(subgroups != null && !subgroups.isEmpty()) {
+            for (Group subGroup : subgroups) {
+                List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.
+                        convertGroupToGroupInstancesBean(groupInstanceBean.getInstanceId(),
+                                subGroup);
+                for(GroupInstanceBean groupInstanceBean1 : groupInstanceBeans) {
+                    setSubGroupInstances(subGroup, groupInstanceBean1);
+                    groupInstanceBean.getGroupInstances().add(groupInstanceBean1);
+                }
 
+            }
         }
+
     }
 
     private static void addClustersToGroupBean(Group group, GroupBean groupBean) {