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));
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
     }
 
     /**