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