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/01 19:40:40 UTC
stratos git commit: fixing monitor starts up issue with global
deployment policy
Repository: stratos
Updated Branches:
refs/heads/master d0214f479 -> 7ccfa6f55
fixing monitor starts up issue with global deployment policy
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/7ccfa6f5
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/7ccfa6f5
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/7ccfa6f5
Branch: refs/heads/master
Commit: 7ccfa6f55cc747ff79d184b4afa76339914779cb
Parents: d0214f4
Author: reka <rt...@gmail.com>
Authored: Tue Dec 2 00:09:58 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 2 00:09:58 2014 +0530
----------------------------------------------------------------------
.../autoscaler/context/InstanceContext.java | 38 +++++
.../application/ApplicationInstanceContext.java | 31 +++++
.../context/cluster/ClusterContextFactory.java | 8 +-
.../context/cluster/ClusterInstanceContext.java | 60 +++-----
.../context/cluster/VMClusterContext.java | 36 +++--
.../cluster/VMServiceClusterContext.java | 1 +
.../context/group/GroupInstanceContext.java | 81 +++++++++++
.../partition/GroupLevelPartitionContext.java | 18 +--
...ApplicationLevelNetworkPartitionContext.java | 15 +-
.../GroupLevelNetworkPartitionContext.java | 61 +++-----
.../AutoscalerTopologyEventReceiver.java | 138 +++++++++----------
.../monitor/component/ApplicationMonitor.java | 18 +--
.../monitor/component/GroupMonitor.java | 29 ++--
.../pojo/policy/deployment/ChildPolicy.java | 10 ++
.../policy/deployment/DeploymentPolicy.java | 9 ++
15 files changed, 347 insertions(+), 206 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/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
new file mode 100644
index 0000000..ce23ec3
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/InstanceContext.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.context;
+
+/**
+ * This will hold the instances related info.
+ */
+public abstract class InstanceContext {
+ protected String id;
+
+ public InstanceContext(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/application/ApplicationInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/application/ApplicationInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/application/ApplicationInstanceContext.java
new file mode 100644
index 0000000..6606efe
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/application/ApplicationInstanceContext.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.context.application;
+
+import org.apache.stratos.autoscaler.context.InstanceContext;
+
+/**
+ * This will hold the application instance related info.
+ */
+public class ApplicationInstanceContext extends InstanceContext {
+
+ public ApplicationInstanceContext(String id) {
+ super(id);
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
index 3c60432..23d703e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
@@ -28,7 +28,9 @@ import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
//import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager;
import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
import org.apache.stratos.common.Properties;
import org.apache.stratos.common.Property;
@@ -60,14 +62,14 @@ public class ClusterContextFactory {
if (log.isDebugEnabled()) {
log.debug("Autoscaler policy name: " + autoscalePolicyName);
}
- String deploymentPolicyName;
DeploymentPolicy deploymentPolicy;
ApplicationHolder.acquireReadLock();
try {
Application application = ApplicationHolder.getApplications().
getApplication(cluster.getAppId());
- deploymentPolicyName = application.getDeploymentPolicy();
- deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyName);
+ deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(cluster.getAppId());
+ ChildPolicy policy = deploymentPolicy.
+ getChildPolicy(AutoscalerUtil.getAliasFromClusterId(cluster.getClusterId()));
} finally {
ApplicationHolder.releaseReadLock();
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
index f2c13b9..0c4bf58 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
@@ -20,31 +20,28 @@ package org.apache.stratos.autoscaler.context.cluster;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.context.InstanceContext;
import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
-import org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
-import org.apache.stratos.autoscaler.context.partition.PartitionContext;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.LoadAverage;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.MemoryConsumption;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.RequestsInFlight;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelNetworkPartition;
-import org.apache.stratos.cloud.controller.stub.domain.Partition;
import org.apache.stratos.messaging.domain.topology.Member;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
/*
* It holds the runtime data of a VM cluster
*/
-public class ClusterInstanceContext {
+public class ClusterInstanceContext extends InstanceContext {
private static final Log log = LogFactory.getLog(ClusterInstanceContext.class);
- private final String id;
-
-
private final String partitionAlgorithm;
-
+ // Map<PartitionId, Partition Context>
+ protected List<ClusterLevelPartitionContext> partitionCtxts;
//boolean values to keep whether the requests in flight parameters are reset or not
private boolean rifReset = false, averageRifReset = false, gradientRifReset = false, secondDerivativeRifRest = false;
//boolean values to keep whether the memory consumption parameters are reset or not
@@ -55,37 +52,25 @@ public class ClusterInstanceContext {
secondDerivativeLoadAverageRest = false;
//boolean values to keep whether average requests served per instance parameters are reset or not
private boolean averageRequestServedPerInstanceReset = false;
-
-
-
//Following information will keep events details
private RequestsInFlight requestsInFlight;
private MemoryConsumption memoryConsumption;
private LoadAverage loadAverage;
-
private int scaleDownRequestsCount = 0;
private float averageRequestsServedPerInstance;
private float requestsServedPerInstance;
-
private int minInstanceCount = 0, maxInstanceCount = 0;
private int requiredInstanceCountBasedOnStats;
private int requiredInstanceCountBasedOnDependencies;
-
private int min;
-
-
//details required for partition selection algorithms
private int currentPartitionIndex;
-
- // Map<PartitionId, Partition Context>
- protected List<ClusterLevelPartitionContext> partitionCtxts;
-
private ChildLevelPartition[] partitions;
public ClusterInstanceContext(String clusterInstanceId, String partitionAlgo, ChildLevelPartition[] partitions,
int min) {
- this.id = clusterInstanceId;
+ super(clusterInstanceId);
this.min = min;
if (partitions == null) {
this.partitions = new ChildLevelPartition[0];
@@ -107,27 +92,27 @@ public class ClusterInstanceContext {
}
- public List<ClusterLevelPartitionContext> getPartitionCtxts(){
+ public List<ClusterLevelPartitionContext> getPartitionCtxts() {
return partitionCtxts;
}
- public ClusterLevelPartitionContext[] getPartitionCtxtsAsAnArray(){
-
- return partitionCtxts.toArray(new ClusterLevelPartitionContext[0]);
+ public void setPartitionCtxts(List<ClusterLevelPartitionContext> partitionCtxt) {
+ this.partitionCtxts = partitionCtxt;
}
// public ClusterLevelPartitionContext getNetworkPartitionCtxt(String PartitionId) {
// return partitionCtxts.get(PartitionId);
// }
- public void setPartitionCtxts(List<ClusterLevelPartitionContext> partitionCtxt) {
- this.partitionCtxts = partitionCtxt;
+ public ClusterLevelPartitionContext[] getPartitionCtxtsAsAnArray() {
+
+ return partitionCtxts.toArray(new ClusterLevelPartitionContext[0]);
}
public boolean partitionCtxtAvailable(String partitionId) {
- for(ClusterLevelPartitionContext partitionContext : partitionCtxts){
- if(partitionContext.getPartitionId().equals(partitionId)){
+ for (ClusterLevelPartitionContext partitionContext : partitionCtxts) {
+ if (partitionContext.getPartitionId().equals(partitionId)) {
return true;
}
}
@@ -140,8 +125,8 @@ public class ClusterInstanceContext {
public ClusterLevelPartitionContext getPartitionCtxt(String id) {
- for(ClusterLevelPartitionContext partitionContext : partitionCtxts){
- if(partitionContext.getPartitionId().equals(id)){
+ for (ClusterLevelPartitionContext partitionContext : partitionCtxts) {
+ if (partitionContext.getPartitionId().equals(id)) {
return partitionContext;
}
}
@@ -152,8 +137,8 @@ public class ClusterInstanceContext {
log.info("Getting [Partition] " + member.getPartitionId());
String partitionId = member.getPartitionId();
- for(ClusterLevelPartitionContext partitionContext : partitionCtxts){
- if(partitionContext.getPartitionId().equals(partitionId)){
+ for (ClusterLevelPartitionContext partitionContext : partitionCtxts) {
+ if (partitionContext.getPartitionId().equals(partitionId)) {
log.info("Returning partition context, of [partition] " + partitionId);
return partitionContext;
}
@@ -390,11 +375,6 @@ public class ClusterInstanceContext {
this.secondDerivativeLoadAverageRest = loadAverageReset;
}
-
- public String getId() {
- return id;
- }
-
/* public Map<String, ClusterLevelPartitionContext> getPartitionCtxts() {
return partitionCtxts;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
index 9fb91ac..3ad1050 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
@@ -27,9 +27,10 @@ import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetwo
import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelNetworkPartition;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Partition;
import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
@@ -123,14 +124,17 @@ public class VMClusterContext extends AbstractClusterContext {
networkPartitionContext = this.networkPartitionCtxts.get(
clusterInstance.getNetworkPartitionId());
}
+
if (clusterInstance.getPartitionId() != null) {
//Need to add partition Context based on the given one from the parent
- networkPartitionContext = addPartition(clusterInstance, cluster,
- this.deploymentPolicy, networkPartitionContext);
+ networkPartitionContext = addPartition(clusterInstance, cluster, networkPartitionContext);
} else {
+ ChildPolicy policy = this.deploymentPolicy.
+ getChildPolicy(
+ AutoscalerUtil.getAliasFromClusterId(clusterId));
networkPartitionContext = parseDeploymentPolicy(clusterInstance, cluster,
- this.deploymentPolicy, networkPartitionContext);
+ policy, networkPartitionContext);
}
if (!networkPartitionCtxts.containsKey(clusterInstance.getNetworkPartitionId())) {
this.networkPartitionCtxts.put(clusterInstance.getNetworkPartitionId(),
@@ -146,7 +150,7 @@ public class VMClusterContext extends AbstractClusterContext {
private ClusterLevelNetworkPartitionContext parseDeploymentPolicy(
ClusterInstance instance,
Cluster cluster,
- DeploymentPolicy deploymentPolicy,
+ ChildPolicy deploymentPolicy,
ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext)
throws PolicyValidationException, PartitionValidationException {
if (log.isDebugEnabled()) {
@@ -159,8 +163,11 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
- Partition[] allPartitions = deploymentPolicy.getAllPartitions();
- if (allPartitions == null) {
+ ChildLevelPartition[] childLevelPartitions = deploymentPolicy.
+ getChildLevelNetworkPartition(
+ clusterLevelNetworkPartitionContext.getId()).
+ getChildLevelPartitions();
+ if (childLevelPartitions == null) {
String msg =
"Partitions are null in deployment policy: [policy-name]: " +
deploymentPolicy.getId();
@@ -168,8 +175,13 @@ public class VMClusterContext extends AbstractClusterContext {
throw new PolicyValidationException(msg);
}
- CloudControllerClient.getInstance().validateDeploymentPolicy(cluster.getServiceName(),
- deploymentPolicy);
+ for(ChildLevelPartition childLevelPartition : childLevelPartitions) {
+ Partition partition = this.deploymentPolicy.
+ getApplicationLevelNetworkPartition(clusterLevelNetworkPartitionContext.getId()).
+ getPartition(childLevelPartition.getPartitionId());
+ CloudControllerClient.getInstance().validatePartition(convertTOCCPartition(partition));
+ }
+
ChildLevelNetworkPartition networkPartition;
networkPartition = deploymentPolicy.getChildLevelNetworkPartition(instance.getNetworkPartitionId());
@@ -195,8 +207,9 @@ public class VMClusterContext extends AbstractClusterContext {
clusterLevelPartitionContext.setProperties(cluster.getProperties());
clusterLevelPartitionContext.setNetworkPartitionId(networkPartition.getId());
//add members to partition Context
- Partition partition1 = deploymentPolicy.
- getApplicationLevelNetworkPartition(networkPartitionId).getPartition(partition.getPartitionId());
+ Partition partition1 = this.deploymentPolicy.
+ getApplicationLevelNetworkPartition(clusterLevelNetworkPartitionContext.getId()).
+ getPartition(partition.getPartitionId());
addMembersFromTopology(cluster, partition1, clusterLevelPartitionContext);
@@ -217,7 +230,6 @@ public class VMClusterContext extends AbstractClusterContext {
private ClusterLevelNetworkPartitionContext addPartition(
ClusterInstance clusterInstance,
Cluster cluster,
- DeploymentPolicy deploymentPolicy,
ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext)
throws PolicyValidationException, PartitionValidationException {
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMServiceClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMServiceClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMServiceClusterContext.java
index 9e982cf..b865e85 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMServiceClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMServiceClusterContext.java
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
import java.util.Map;
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java
new file mode 100644
index 0000000..072fc04
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/group/GroupInstanceContext.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.context.group;
+
+import org.apache.stratos.autoscaler.context.InstanceContext;
+import org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This will hold the group instance related info
+ */
+public class GroupInstanceContext extends InstanceContext {
+
+ //partitions of this network partition
+ private final List<GroupLevelPartitionContext> partitionCtxts;
+
+ public GroupInstanceContext(String id) {
+ super(id);
+ partitionCtxts = new ArrayList<GroupLevelPartitionContext>();
+
+ }
+
+ public List<GroupLevelPartitionContext> getPartitionCtxts() {
+
+ return partitionCtxts;
+ }
+
+ public GroupLevelPartitionContext getPartitionCtxt(String partitionId) {
+
+
+ for(GroupLevelPartitionContext partitionContext : partitionCtxts){
+ if(partitionContext.getPartitionId().equals(partitionId)){
+ return partitionContext;
+ }
+ }
+ return null;
+ }
+
+ public void addPartitionContext(GroupLevelPartitionContext partitionContext) {
+ partitionCtxts.add(partitionContext);
+ }
+
+ public int getNonTerminatedMemberCountOfPartition(String partitionId) {
+
+ for(GroupLevelPartitionContext partitionContext : partitionCtxts){
+ if(partitionContext.getPartitionId().equals(partitionId)){
+ return partitionContext.getNonTerminatedInstanceCount();
+ }
+ }
+ return 0;
+ }
+
+ public int getActiveMemberCount(String currentPartitionId) {
+
+ for(GroupLevelPartitionContext partitionContext : partitionCtxts){
+ if(partitionContext.getPartitionId().equals(currentPartitionId)){
+ return partitionContext.getActiveInstanceCount();
+ }
+ }
+ return 0;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
index 6b7f23a..8cf5e61 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
@@ -21,6 +21,7 @@ package org.apache.stratos.autoscaler.context.partition;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
import org.apache.stratos.autoscaler.context.member.MemberStatsContext;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
import org.apache.stratos.autoscaler.util.ConfUtil;
@@ -75,9 +76,6 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
//Keep statistics come from CEP
private Map<String, MemberStatsContext> instanceStatsContexts;
- //group instances kept inside a partition
- private Map<String, Instance> instanceIdToInstanceContextMap;
-
// for the use of tests
public GroupLevelPartitionContext(long instanceExpiryTime) {
@@ -97,7 +95,6 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
this.terminationPendingInstances = new ArrayList<Instance>();
this.obsoletedInstances = new ConcurrentHashMap<String, Instance>();
instanceStatsContexts = new ConcurrentHashMap<String, MemberStatsContext>();
- instanceIdToInstanceContextMap = new HashMap<String, Instance>();
terminationPendingStartedTime = new HashMap<String, Long>();
@@ -122,19 +119,6 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
return terminationPendingStartedTime.get(instanceId);
}
- public Map<String, Instance> getInstanceIdToInstanceContextMap() {
- return instanceIdToInstanceContextMap;
- }
-
- public void setInstanceIdToInstanceContextMap(Map<String, Instance> instanceIdToInstanceContextMap) {
- this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
- }
-
- public void addInstanceContext(Instance context) {
- this.instanceIdToInstanceContextMap.put(context.getInstanceId(), context);
-
- }
-
public List<Instance> getPendingInstances() {
return pendingInstances;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
index 73d6555..9a427c2 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
@@ -20,9 +20,11 @@ package org.apache.stratos.autoscaler.context.partition.network;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.context.application.ApplicationInstanceContext;
import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
import java.io.Serializable;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -35,22 +37,23 @@ public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionCon
private boolean createdOnBurst;
//group instances kept inside a partition
- private Map<String, ApplicationInstance> instanceIdToInstanceContextMap;
+ private Map<String, ApplicationInstanceContext> instanceIdToInstanceContextMap;
public ApplicationLevelNetworkPartitionContext(String id) {
this.id = id;
+ this.instanceIdToInstanceContextMap = new HashMap<String, ApplicationInstanceContext>();
}
- public Map<String, ApplicationInstance> getInstanceIdToInstanceContextMap() {
+ public Map<String, ApplicationInstanceContext> getInstanceIdToInstanceContextMap() {
return instanceIdToInstanceContextMap;
}
- public void setInstanceIdToInstanceContextMap(Map<String, ApplicationInstance> instanceIdToInstanceContextMap) {
+ public void setInstanceIdToInstanceContextMap(Map<String, ApplicationInstanceContext> instanceIdToInstanceContextMap) {
this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
}
- public void addInstanceContext(ApplicationInstance context) {
- this.instanceIdToInstanceContextMap.put(context.getInstanceId(), context);
+ public void addInstanceContext(ApplicationInstanceContext context) {
+ this.instanceIdToInstanceContextMap.put(context.getId(), context);
}
@@ -102,4 +105,4 @@ public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionCon
public void setCreatedOnBurst(boolean createdOnBurst) {
this.createdOnBurst = createdOnBurst;
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
index 2248a68..402bbfa 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
@@ -20,6 +20,7 @@ package org.apache.stratos.autoscaler.context.partition.network;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
import org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
import org.apache.stratos.cloud.controller.stub.domain.Partition;
@@ -48,8 +49,8 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
//details required for partition selection algorithms
private int currentPartitionIndex;
- //partitions of this network partition
- private final List<GroupLevelPartitionContext> partitionCtxts;
+ //group instances kept inside a partition
+ private Map<String, GroupInstanceContext> instanceIdToInstanceContextMap;
public GroupLevelNetworkPartitionContext(String id, String partitionAlgo, Partition[] partitions) {
this.id = id;
@@ -59,13 +60,27 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
} else {
this.partitions = Arrays.copyOf(partitions, partitions.length);
}
- partitionCtxts = new ArrayList<GroupLevelPartitionContext>();
for (Partition partition : partitions) {
minInstanceCount += partition.getPartitionMin();
maxInstanceCount += partition.getPartitionMax();
}
requiredInstanceCountBasedOnStats = minInstanceCount;
requiredInstanceCountBasedOnDependencies = minInstanceCount;
+ instanceIdToInstanceContextMap = new HashMap<String, GroupInstanceContext>();
+
+
+ }
+
+ public Map<String, GroupInstanceContext> getInstanceIdToInstanceContextMap() {
+ return instanceIdToInstanceContextMap;
+ }
+
+ public void setInstanceIdToInstanceContextMap(Map<String, GroupInstanceContext> instanceIdToInstanceContextMap) {
+ this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
+ }
+
+ public void addInstanceContext(GroupInstanceContext context) {
+ this.instanceIdToInstanceContextMap.put(context.getId(), context);
}
@@ -134,26 +149,8 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
return id;
}
- public List<GroupLevelPartitionContext> getPartitionCtxts() {
-
- return partitionCtxts;
- }
-
- public GroupLevelPartitionContext getPartitionCtxt(String partitionId) {
- for(GroupLevelPartitionContext partitionContext : partitionCtxts){
- if(partitionContext.getPartitionId().equals(partitionId)){
- return partitionContext;
- }
- }
- return null;
- }
-
- public void addPartitionContext(GroupLevelPartitionContext partitionContext) {
- partitionCtxts.add(partitionContext);
- }
-
public String getPartitionAlgorithm() {
return partitionAlgorithm;
}
@@ -162,26 +159,6 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
return partitions;
}
- public int getNonTerminatedMemberCountOfPartition(String partitionId) {
-
- for(GroupLevelPartitionContext partitionContext : partitionCtxts){
- if(partitionContext.getPartitionId().equals(partitionId)){
- return partitionContext.getNonTerminatedInstanceCount();
- }
- }
- return 0;
- }
-
- public int getActiveMemberCount(String currentPartitionId) {
-
- for(GroupLevelPartitionContext partitionContext : partitionCtxts){
- if(partitionContext.getPartitionId().equals(currentPartitionId)){
- return partitionContext.getActiveInstanceCount();
- }
- }
- return 0;
- }
-
public int getScaleDownRequestsCount() {
return scaleDownRequestsCount;
}
@@ -212,4 +189,4 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/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 98c0afa..7f8af6f 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
@@ -146,7 +146,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
DeploymentPolicy policy = PolicyManager.getInstance().
getDeploymentPolicyByApplication(
application.getUniqueIdentifier());
- if(policy != null) {
+ if (policy != null) {
AutoscalerUtil.getInstance().
startApplicationMonitor(application.getUniqueIdentifier());
} else {
@@ -442,74 +442,74 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
});
topologyEventReceiver.addEventListener(new ClusterInstanceCreatedEventListener() {
- @Override
- protected void onEvent(Event event) {
-
- ClusterInstanceCreatedEvent clusterInstanceCreatedEvent =
- (ClusterInstanceCreatedEvent) event;
- AbstractClusterMonitor clusterMonitor = AutoscalerContext.getInstance().
- getClusterMonitor(clusterInstanceCreatedEvent.getClusterId());
- String instanceId = ((ClusterInstanceCreatedEvent) event).getInstanceId();
- //FIXME to take lock when clusterMonitor is running
- if (clusterMonitor != null) {
- TopologyManager.acquireReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
- clusterInstanceCreatedEvent.getClusterId());
-
- try {
- Service service = TopologyManager.getTopology().
- getService(clusterInstanceCreatedEvent.getServiceName());
-
- if (service != null) {
- Cluster cluster = service.getCluster(clusterInstanceCreatedEvent.getClusterId());
- if (cluster != null) {
- try {
- if (cluster.isKubernetesCluster()) {
- clusterMonitor.setClusterContext(
- ClusterContextFactory.getKubernetesClusterContext(
- instanceId,
- cluster));
- } else {
- VMClusterContext clusterContext =
- (VMClusterContext) clusterMonitor.getClusterContext();
- if (clusterContext == null) {
- clusterMonitor.setClusterContext(
- ClusterContextFactory.
- getVMServiceClusterContext(instanceId,
- cluster));
- } else {
- clusterContext.addInstanceContext(instanceId, cluster);
- }
-
- }
- if (clusterMonitor.hasMonitoringStarted().compareAndSet(false, true)) {
- clusterMonitor.startScheduler();
- log.info("Monitoring task for Cluster Monitor with cluster id " +
- clusterInstanceCreatedEvent.getClusterId() + " started successfully");
- }
- } catch (PolicyValidationException e) {
- log.error(e.getMessage(), e);
- } catch (PartitionValidationException e) {
- log.error(e.getMessage(), e);
- }
- }
-
- } else {
- log.error("Service " + clusterInstanceCreatedEvent.getServiceName() +
- " not found, no cluster instance added to ClusterMonitor " +
- clusterInstanceCreatedEvent.getClusterId());
- }
-
- } finally {
- TopologyManager.releaseReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
- clusterInstanceCreatedEvent.getClusterId());
- }
-
- } else {
- log.error("No Cluster Monitor found for cluster id " +
- clusterInstanceCreatedEvent.getClusterId());
- }
- }
- }
+ @Override
+ protected void onEvent(Event event) {
+
+ ClusterInstanceCreatedEvent clusterInstanceCreatedEvent =
+ (ClusterInstanceCreatedEvent) event;
+ AbstractClusterMonitor clusterMonitor = AutoscalerContext.getInstance().
+ getClusterMonitor(clusterInstanceCreatedEvent.getClusterId());
+ String instanceId = ((ClusterInstanceCreatedEvent) event).getInstanceId();
+ //FIXME to take lock when clusterMonitor is running
+ if (clusterMonitor != null) {
+ TopologyManager.acquireReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
+ clusterInstanceCreatedEvent.getClusterId());
+
+ try {
+ Service service = TopologyManager.getTopology().
+ getService(clusterInstanceCreatedEvent.getServiceName());
+
+ if (service != null) {
+ Cluster cluster = service.getCluster(clusterInstanceCreatedEvent.getClusterId());
+ if (cluster != null) {
+ try {
+ if (cluster.isKubernetesCluster()) {
+ clusterMonitor.setClusterContext(
+ ClusterContextFactory.getKubernetesClusterContext(
+ instanceId,
+ cluster));
+ } else {
+ VMClusterContext clusterContext =
+ (VMClusterContext) clusterMonitor.getClusterContext();
+ if (clusterContext == null) {
+ clusterMonitor.setClusterContext(
+ ClusterContextFactory.
+ getVMServiceClusterContext(instanceId,
+ cluster));
+ } else {
+ clusterContext.addInstanceContext(instanceId, cluster);
+ }
+
+ }
+ if (clusterMonitor.hasMonitoringStarted().compareAndSet(false, true)) {
+ clusterMonitor.startScheduler();
+ log.info("Monitoring task for Cluster Monitor with cluster id " +
+ clusterInstanceCreatedEvent.getClusterId() + " started successfully");
+ }
+ } catch (PolicyValidationException e) {
+ log.error(e.getMessage(), e);
+ } catch (PartitionValidationException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+
+ } else {
+ log.error("Service " + clusterInstanceCreatedEvent.getServiceName() +
+ " not found, no cluster instance added to ClusterMonitor " +
+ clusterInstanceCreatedEvent.getClusterId());
+ }
+
+ } finally {
+ TopologyManager.releaseReadLockForCluster(clusterInstanceCreatedEvent.getServiceName(),
+ clusterInstanceCreatedEvent.getClusterId());
+ }
+
+ } else {
+ log.error("No Cluster Monitor found for cluster id " +
+ clusterInstanceCreatedEvent.getClusterId());
+ }
+ }
+ }
);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/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 b332b15..0e5f751 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
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
+import org.apache.stratos.autoscaler.context.application.ApplicationInstanceContext;
import org.apache.stratos.autoscaler.context.partition.network.ApplicationLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException;
@@ -212,7 +213,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
ApplicationLevelNetworkPartitionContext context =
new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
instanceId = createApplicationInstance(application, networkPartition.getId());
- context.addInstanceContext(application.getInstanceContexts(instanceId));
+ ApplicationInstanceContext instanceContext = new ApplicationInstanceContext(instanceId);
+ context.addInstanceContext(instanceContext);
this.networkPartitionCtxts.put(context.getId(), context);
@@ -251,7 +253,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
context.setCreatedOnBurst(true);
instanceId = createApplicationInstance(application, networkPartition.getId());
- context.addInstanceContext(application.getInstanceContexts(instanceId));
+
+ ApplicationInstanceContext instanceContext = new ApplicationInstanceContext(instanceId);
+ context.addInstanceContext(instanceContext);
this.networkPartitionCtxts.put(context.getId(), context);
burstNPFound = true;
}
@@ -270,12 +274,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
private DeploymentPolicy getDeploymentPolicy(Application application) throws PolicyValidationException {
String deploymentPolicyName = application.getDeploymentPolicy();
- /*if (deploymentPolicyName == null) {
- String msg = "Deployment Policy is not specified to the [Application]:" + appId;
- log.error(msg);
- throw new PolicyValidationException(msg);
- }
-*/ DeploymentPolicy deploymentPolicy = null;
+ DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().
+ getDeploymentPolicyByApplication(application.getUniqueIdentifier());
if(deploymentPolicyName != null) {
deploymentPolicy = PolicyManager.getInstance()
.getDeploymentPolicy(deploymentPolicyName);
@@ -284,7 +284,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
log.error(msg);
throw new PolicyValidationException(msg);
}
- }
+ }
return deploymentPolicy;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/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 c64bccb..9ec04d7 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
@@ -26,6 +26,7 @@ import org.apache.stratos.autoscaler.applications.dependency.context.Application
import org.apache.stratos.autoscaler.applications.dependency.context.GroupChildContext;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException;
@@ -36,6 +37,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.pojo.policy.PolicyManager;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelNetworkPartition;
import org.apache.stratos.messaging.domain.applications.Application;
@@ -47,7 +49,10 @@ import org.apache.stratos.messaging.domain.instance.Instance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* This is GroupMonitor to monitor the group which consists of
@@ -372,7 +377,10 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
//Partition partition = algorithm.getNextScaleUpPartitionContext(groupLevelNetworkPartitionContext, this.id);
//TODO need to find the partition. partitionId=?
}
+
instanceId = createGroupInstance(group, parentInstanceId, partitionId, networkPartitionId);
+ GroupInstanceContext instanceContext = new GroupInstanceContext(instanceId);
+ //TODO to add new partitionContext
instanceIds.add(instanceId);
}
startDependency(group, instanceIds);
@@ -411,16 +419,21 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
String partitionId = null;
String networkPartitionId = parentInstanceContext.getNetworkPartitionId();
- if (deploymentPolicyName != null) {
- DeploymentPolicy deploymentPolicy = PolicyManager.getInstance()
- .getDeploymentPolicy(deploymentPolicyName);
- ChildLevelNetworkPartition networkPartition = deploymentPolicy.
- getChildLevelNetworkPartition(parentInstanceContext.getNetworkPartitionId());
+ ChildPolicy policy = PolicyManager.getInstance().
+ getDeploymentPolicyByApplication(group.getApplicationId()).
+ getChildPolicy(group.getUniqueIdentifier());
+
+ ChildLevelNetworkPartition networkPartition = policy.
+ getChildLevelNetworkPartition(parentInstanceContext.getNetworkPartitionId());
+
+ if(policy != null) {
AutoscaleAlgorithm algorithm = this.getAutoscaleAlgorithm(networkPartition.getPartitionAlgo());
- //Partition partition = algorithm.getNextScaleUpPartitionContext(groupLevelNetworkPartitionContext, this.id);
- //TODO need to find the partition. partitionId=?
+ /*Partition partition = algorithm.getNextScaleUpPartitionContext(networkPartition.getChildLevelPartitions());
+ //TODO need to find the partition. partitionId=? */
}
+
+
instanceId = createGroupInstance(group, parentInstanceId, partitionId, networkPartitionId);
startDependency(group, instanceId);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
index 9d78dcf..7a08ce9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/ChildPolicy.java
@@ -45,4 +45,14 @@ public class ChildPolicy implements Serializable {
public void setChildLevelNetworkPartitions(ChildLevelNetworkPartition[] childLevelNetworkPartitions) {
this.childLevelNetworkPartitions = childLevelNetworkPartitions;
}
+
+ public ChildLevelNetworkPartition getChildLevelNetworkPartition(String id) {
+ for(ChildLevelNetworkPartition partition : childLevelNetworkPartitions) {
+ if(partition.getId().equals(id)) {
+ return partition;
+ }
+ }
+
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/7ccfa6f5/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
index ef3eacd..fb63c02 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/DeploymentPolicy.java
@@ -231,4 +231,13 @@ public class DeploymentPolicy implements Serializable{
public void setApplicationId(String applicationId) {
this.applicationId = applicationId;
}
+
+ public ChildPolicy getChildPolicy(String id) {
+ for(ChildPolicy childPolicy : childPolicies) {
+ if (childPolicy.getId().equals(id)) {
+ return childPolicy;
+ }
+ }
+ return null;
+ }
}