You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2015/04/07 05:06:37 UTC
[07/20] stratos git commit: Deployment policy move:Update monitors
and related classes
Deployment policy move:Update monitors and related classes
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/c662b19c
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/c662b19c
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/c662b19c
Branch: refs/heads/master
Commit: c662b19cc96425712ef7d1e8d65d79b4b415bf1a
Parents: 1009773
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Tue Apr 7 08:03:25 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Tue Apr 7 08:03:25 2015 +0530
----------------------------------------------------------------------
.../autoscaler/monitor/MonitorFactory.java | 114 ++++++++-----
.../monitor/cluster/ClusterMonitor.java | 7 +-
.../monitor/component/GroupMonitor.java | 169 ++++++++-----------
3 files changed, 147 insertions(+), 143 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/c662b19c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
index e30957c..b4c83b7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
@@ -33,12 +33,13 @@ import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
import org.apache.stratos.autoscaler.monitor.component.ParentComponentMonitor;
+import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
+import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
import org.apache.stratos.autoscaler.util.AutoscalerUtil;
-import org.apache.stratos.cloud.controller.stub.domain.DeploymentPolicy;
-import org.apache.stratos.cloud.controller.stub.domain.NetworkPartition;
-import org.apache.stratos.cloud.controller.stub.domain.NetworkPartitionRef;
-import org.apache.stratos.cloud.controller.stub.domain.Partition;
+import org.apache.stratos.common.Property;
import org.apache.stratos.common.client.CloudControllerServiceClient;
+import org.apache.stratos.common.partition.NetworkPartition;
+import org.apache.stratos.common.partition.Partition;
import org.apache.stratos.messaging.domain.application.Application;
import org.apache.stratos.messaging.domain.application.Group;
import org.apache.stratos.messaging.domain.application.ScalingDependentList;
@@ -137,7 +138,7 @@ public class MonitorFactory {
} else {
groupMonitor.setHasStartupDependents(false);
}
- groupMonitor.startScheduler();
+ groupMonitor.startScheduler();
}
} finally {
ApplicationHolder.releaseReadLock();
@@ -223,8 +224,8 @@ public class MonitorFactory {
* @throws org.apache.stratos.autoscaler.exception.partition.PartitionValidationException
*/
public static ClusterMonitor getClusterMonitor(ParentComponentMonitor parentMonitor,
- ClusterChildContext context,
- List<String> parentInstanceIds)
+ ClusterChildContext context,
+ List<String> parentInstanceIds)
throws PolicyValidationException,
PartitionValidationException,
TopologyInConsistentException {
@@ -249,46 +250,38 @@ public class MonitorFactory {
serviceName, clusterId);
throw new RuntimeException(msg);
}
-
-
+
+
// deployment policy validation
String deploymentPolicyId = AutoscalerUtil.getDeploymentPolicyIdByAlias(parentMonitor.appId, AutoscalerUtil.getAliasFromClusterId(clusterId));
DeploymentPolicy deploymentPolicy = null;
- try {
- deploymentPolicy = CloudControllerServiceClient.getInstance().getDeploymentPolicy(deploymentPolicyId);
- } catch (Exception e) {
- String msg = String.format("Error while getting deployment policy from cloud controller [deployment-policy-id] %s", deploymentPolicyId);
- log.error(msg, e);
- throw new RuntimeException(msg, e);
- }
-
+ try {
+ deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId);
+ } catch (Exception e) {
+ String msg = String.format("Error while getting deployment policy from cloud controller [deployment-policy-id] %s", deploymentPolicyId);
+ log.error(msg, e);
+ throw new RuntimeException(msg, e);
+ }
+
List<Partition> partitionList = new ArrayList<Partition>();
- for (NetworkPartitionRef networkPartitionRef : deploymentPolicy.getNetworkPartitionsRef()) {
-
- if (networkPartitionRef != null) {
- NetworkPartition networkPartition = null;
- try {
- networkPartition = CloudControllerServiceClient.getInstance().getNetworkPartition(networkPartitionRef.getId());
- } catch (Exception e) {
- String msg = String.format("Error while getting deployment policy from cloud controller [network-partition-id] %s", networkPartitionRef.getId());
- log.error(msg, e);
- throw new RuntimeException(msg, e);
- }
-
- if (networkPartition != null) {
- for (Partition partition : networkPartition.getPartitions()) {
- partitionList.add(partition);
- }
- }
-
- try {
- CloudControllerServiceClient.getInstance().validateDeploymentPolicy(serviceName, partitionList.toArray(new Partition[partitionList.size()]));
- } catch (Exception e) {
- String msg = String.format("Error while validating deployment policy from cloud controller [network-partition-id] %s", networkPartitionRef.getId());
- log.error(msg, e);
- throw new RuntimeException(msg, e);
- }
- }
+ for (NetworkPartition networkPartition : deploymentPolicy.getNetworkPartitions()) {
+
+ if (networkPartition != null) {
+
+ for (Partition partition : networkPartition.getPartitions()) {
+ partitionList.add(partition);
+ }
+
+ try {
+ org.apache.stratos.cloud.controller.stub.domain.Partition[] partitions
+ = convertPartitionsToCCPartitions(partitionList.toArray(new Partition[partitionList.size()]));
+ CloudControllerServiceClient.getInstance().validateDeploymentPolicy(serviceName, networkPartition.getId());
+ } catch (Exception e) {
+ String msg = String.format("Error while validating deployment policy from cloud controller [network-partition-id] %s", networkPartition.getId());
+ log.error(msg, e);
+ throw new RuntimeException(msg, e);
+ }
+ }
}
// deployment policy validation ends
@@ -339,6 +332,39 @@ public class MonitorFactory {
}
}
+ private static org.apache.stratos.cloud.controller.stub.domain.Partition[] convertPartitionsToCCPartitions(
+ Partition[] partitions) {
+
+ org.apache.stratos.cloud.controller.stub.domain.Partition[] ccPartitions
+ = new org.apache.stratos.cloud.controller.stub.domain.Partition[partitions.length];
+ for(int i = 0; i < partitions.length; i++){
+ org.apache.stratos.cloud.controller.stub.domain.Partition ccPartition
+ = new org.apache.stratos.cloud.controller.stub.domain.Partition();
+ ccPartition.setId(partitions[i].getId());
+ ccPartition.setDescription(partitions[i].getDescription());
+ ccPartition.setIsPublic(partitions[i].getIsPublic());
+ ccPartition.setKubernetesClusterId(partitions[i].getKubernetesClusterId());
+ ccPartition.setProperties(AutoscalerUtil.toStubProperties(partitions[i].getProperties()));
+ ccPartition.setProvider(partitions[i].getProvider());
+ ccPartitions[i] = ccPartition;
+ }
+ return ccPartitions;
+ }
+
+// private static org.apache.stratos.cloud.controller.stub.Properties convertPropertiesToCCProperties(
+// Properties properties) {
+//
+// org.apache.stratos.cloud.controller.stub.Properties ccProperties
+// = new org.apache.stratos.cloud.controller.stub.Properties();
+// Property[] propertyArray = properties.getProperties();
+// for(int i = 0; i < propertyArray.length; i++){
+//
+// ccProperties.getProperties()[i].setName(properties.getProperties()[i].getName());
+// ccProperties.getProperties()[i].setValue(properties.getProperties()[i].getValue());
+// }
+// return ccProperties;
+// }
+
private static boolean findIfChildIsInGroupScalingEnabledSubTree(GroupMonitor groupMonitor) {
boolean groupScalingEnabledSubtree = false;
ParentComponentMonitor parentComponentMonitor = groupMonitor.getParent();
@@ -350,4 +376,4 @@ public class MonitorFactory {
}
return groupScalingEnabledSubtree;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/c662b19c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index c29521d..8fd5ec8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -45,10 +45,7 @@ import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusActiveProcessor;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusInactiveProcessor;
import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusTerminatedProcessor;
-import org.apache.stratos.autoscaler.util.AutoscalerConstants;
-import org.apache.stratos.autoscaler.util.AutoscalerUtil;
-import org.apache.stratos.autoscaler.util.ConfUtil;
-import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
+import org.apache.stratos.autoscaler.util.*;
import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
import org.apache.stratos.common.Properties;
import org.apache.stratos.common.Property;
@@ -437,7 +434,7 @@ public class ClusterMonitor extends Monitor implements Runnable {
}
private boolean isPrimaryMember(MemberContext memberContext) {
- Properties props = AutoscalerUtil.toCommonProperties(memberContext.getProperties());
+ Properties props = AutoscalerObjectConverter.convertCCPropertiesToProperties(memberContext.getProperties());
if (log.isDebugEnabled()) {
log.debug(" Properties [" + props + "] ");
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/c662b19c/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 bbc19df..f7b5798 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
@@ -45,14 +45,13 @@ import org.apache.stratos.autoscaler.monitor.events.ScalingDownBeyondMinEvent;
import org.apache.stratos.autoscaler.monitor.events.ScalingEvent;
import org.apache.stratos.autoscaler.monitor.events.ScalingUpBeyondMaxEvent;
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;
import org.apache.stratos.autoscaler.util.AutoscalerConstants;
import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
-import org.apache.stratos.cloud.controller.stub.CloudControllerServiceDeploymentPolicyNotExistsExceptionException;
-import org.apache.stratos.cloud.controller.stub.domain.DeploymentPolicy;
-import org.apache.stratos.cloud.controller.stub.domain.NetworkPartitionRef;
-import org.apache.stratos.cloud.controller.stub.domain.PartitionRef;
-import org.apache.stratos.common.client.CloudControllerServiceClient;
+import org.apache.stratos.common.partition.NetworkPartition;
+import org.apache.stratos.common.partition.Partition;
import org.apache.stratos.common.threading.StratosThreadPool;
import org.apache.stratos.messaging.domain.application.Application;
import org.apache.stratos.messaging.domain.application.ApplicationStatus;
@@ -189,7 +188,7 @@ public class GroupMonitor extends ParentComponentMonitor {
nwPartitionContext).getMinInstanceCount();
float factor = (nwPartitionContext.getNonTerminatedInstancesCount() - 1)/minInstances;
ScalingEvent scalingEvent = new ScalingEvent(this.id, nwPartitionContext.getId(),
- instanceContext.getId(),factor);
+ instanceContext.getId(),factor);
this.parent.onChildScalingEvent(scalingEvent);
} else {
//Parent has to handle this scale down as by dependent scale down
@@ -437,7 +436,7 @@ public class GroupMonitor extends ParentComponentMonitor {
if (instance != null) {
if (log.isInfoEnabled()) {
log.info(String.format("Publishing Group terminating event for [application] %s [group] %s " +
- "[instance] %s", appId, id, instanceId));
+ "[instance] %s", appId, id, instanceId));
}
ApplicationBuilder.handleGroupTerminatingEvent(appId, id, instanceId);
} else {
@@ -479,7 +478,7 @@ public class GroupMonitor extends ParentComponentMonitor {
float factor = scalingEvent.getFactor();
int currentInstances = networkPartitionContext.getNonTerminatedInstancesCount();
float requiredInstances = factor * ((GroupLevelNetworkPartitionContext)
- networkPartitionContext).getMinInstanceCount();
+ networkPartitionContext).getMinInstanceCount();
int ceilingRequiredInstances = (int) Math.ceil(requiredInstances);
if(ceilingRequiredInstances > currentInstances) {
@@ -546,42 +545,31 @@ public class GroupMonitor extends ParentComponentMonitor {
Instance parentInstanceContext) {
GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext;
String deploymentPolicyId = AutoscalerUtil.getDeploymentPolicyIdByAlias(appId, groupAlias);
- DeploymentPolicy deploymentPolicy = null;
- try {
- deploymentPolicy = CloudControllerServiceClient.getInstance().getDeploymentPolicy(deploymentPolicyId);
- } catch (CloudControllerServiceDeploymentPolicyNotExistsExceptionException e) {
- //ignore it
- String msg = String.format("Deployment policy not exists [deployment-policy-id] %s ", deploymentPolicyId);
- log.warn(msg);
- } catch (Exception e) {
- String msg = String.format("Error occured while getting deployment policy [%s] from cloud controller service %s", deploymentPolicyId, e);
- log.error(msg, e);
- throw new org.apache.stratos.autoscaler.exception.AutoScalerException(msg, e);
- }
-
+ DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId);
+
String networkPartitionId = parentInstanceContext.getNetworkPartitionId();
if (this.networkPartitionCtxts.containsKey(networkPartitionId)) {
groupLevelNetworkPartitionContext = (GroupLevelNetworkPartitionContext) this.networkPartitionCtxts.
get(networkPartitionId);
} else {
if (deploymentPolicy != null) {
- NetworkPartitionRef[] networkPartitionRefs = deploymentPolicy.getNetworkPartitionsRef();
- NetworkPartitionRef networkPartitionRef = null;
- for (int i = 0; i < networkPartitionRefs.length; i++) {
- if (networkPartitionRefs[i].getId().equals(networkPartitionId)) {
- networkPartitionRef = networkPartitionRefs[i];
- }
- }
-
- if (networkPartitionRef != null) {
- groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
- networkPartitionId,
- networkPartitionRef.getPartitionAlgo());
- } else {
- groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
- networkPartitionId);
- }
-
+ NetworkPartition[] networkPartitions = deploymentPolicy.getNetworkPartitions();
+ NetworkPartition networkPartition = null;
+ for (int i = 0; i < networkPartitions.length; i++) {
+ if (networkPartitions[i].getId().equals(networkPartitionId)) {
+ networkPartition = networkPartitions[i];
+ }
+ }
+
+ if (networkPartition != null) {
+ groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
+ networkPartitionId,
+ networkPartition.getPartitionAlgo());
+ } else {
+ groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
+ networkPartitionId);
+ }
+
} else {
groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
networkPartitionId);
@@ -611,62 +599,55 @@ public class GroupMonitor extends ParentComponentMonitor {
List<GroupLevelPartitionContext> childPartitionContexts = new ArrayList<GroupLevelPartitionContext>();
String deploymentPolicyId = AutoscalerUtil.getDeploymentPolicyIdByAlias(appId, groupAlias);
- DeploymentPolicy deploymentPolicy = null;
- try {
- deploymentPolicy = CloudControllerServiceClient.getInstance().getDeploymentPolicy(deploymentPolicyId);
- } catch (CloudControllerServiceDeploymentPolicyNotExistsExceptionException e) {
- //ignore it
- String msg = String.format("Deployment policy not exists [deployment-policy-id] %s ", deploymentPolicyId);
- log.warn(msg);
- } catch (Exception e) {
- String msg = String.format("Error occured while getting deployment policy [%s] from cloud controller service %s", deploymentPolicyId, e);
- log.error(msg, e);
- throw new org.apache.stratos.autoscaler.exception.AutoScalerException(msg, e);
- }
-
- if (deploymentPolicy == null) {
-
- String parentPartitionId = parentInstanceContext.getPartitionId();
- if (parentPartitionId != null && networkPartitionContext.getPartitionCtxt(parentPartitionId) == null) {
- GroupLevelPartitionContext partitionContext = new GroupLevelPartitionContext(parentPartitionId, networkPartitionId);
- networkPartitionContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
- if (log.isInfoEnabled()) {
- log.info("[Partition] " + parentPartitionId + "has been added for the " + "[Group] " + this.id);
- }
- }
-
- } else {
-
- NetworkPartitionRef[] networkPartitionRefs = deploymentPolicy.getNetworkPartitionsRef();
- NetworkPartitionRef networkPartitionRef = null;
- if (networkPartitionRefs != null && networkPartitionRefs.length != 0) {
- for (NetworkPartitionRef i : networkPartitionRefs) {
- if (i.getId().equals(networkPartitionId)) {
- networkPartitionRef = i;
- }
- }
- }
-
- if (networkPartitionRef != null) {
- if (networkPartitionContext.getPartitionCtxts().isEmpty()) {
- PartitionRef[] partitionRefs = networkPartitionRef.getPartitions();
- if (partitionRefs != null && partitionRefs.length != 0) {
- for (PartitionRef partitionRef : partitionRefs) {
- if (networkPartitionContext.getPartitionCtxt(partitionRef.getId()) == null) {
- GroupLevelPartitionContext groupLevelPartitionContext = new GroupLevelPartitionContext(partitionRef.getMax(),
- partitionRef.getId(), networkPartitionId);
- childPartitionContexts.add(groupLevelPartitionContext);
- networkPartitionContext.addPartitionContext(groupLevelPartitionContext);
- if (log.isInfoEnabled()) {
- log.info(String.format("[Partition] %s has been added for the [Group] %s",
- partitionRef.getId(), this.id));
- }
- }
- }
- }
- }
- }
- }
+ DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId);
+
+ if (deploymentPolicy == null) {
+
+ String parentPartitionId = parentInstanceContext.getPartitionId();
+ if (parentPartitionId != null && networkPartitionContext.getPartitionCtxt(parentPartitionId) == null) {
+ GroupLevelPartitionContext partitionContext = new GroupLevelPartitionContext(parentPartitionId, networkPartitionId);
+ networkPartitionContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
+ if (log.isInfoEnabled()) {
+ log.info("[Partition] " + parentPartitionId + "has been added for the " + "[Group] " + this.id);
+ }
+ }
+
+ } else {
+
+ NetworkPartition[] networkPartitions = deploymentPolicy.getNetworkPartitions();
+ NetworkPartition networkPartition = null;
+ if (networkPartitions != null && networkPartitions.length != 0) {
+ for (NetworkPartition i : networkPartitions) {
+ if (i.getId().equals(networkPartitionId)) {
+ networkPartition = i;
+ }
+ }
+ }
+
+ if (networkPartition != null) {
+ if (networkPartitionContext.getPartitionCtxts().isEmpty()) {
+ Partition[] partitions = networkPartition.getPartitions();
+ if (partitions != null && partitions.length != 0) {
+ for (Partition partition : partitions) {
+
+ if (networkPartitionContext.getPartitionCtxt(partition.getId()) == null) {
+
+ GroupLevelPartitionContext groupLevelPartitionContext = new GroupLevelPartitionContext(
+ networkPartition.getPartition(partition.getId()).getPartitionMax()
+ , partition.getId(), networkPartitionId);
+
+ childPartitionContexts.add(groupLevelPartitionContext);
+ networkPartitionContext.addPartitionContext(groupLevelPartitionContext);
+ if (log.isInfoEnabled()) {
+ log.info(String.format("[Partition] %s has been added for the [Group] %s",
+ partition.getId(), this.id));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
/**