Repository: stratos
Updated Branches:
  refs/heads/master 4b5a381bb -> a2749a9ec


http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
index 105d3aa..98e97cf 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
@@ -70,8 +70,6 @@ public abstract class ParentComponentMonitor extends Monitor {
     //Scheduler executor service to execute this monitor in a thread
     private final ScheduledExecutorService scheduler = 
StratosThreadPool.getScheduledExecutorService(
             "autoscaler.monitor.scheduler.thread.pool", 100);
-    // future to cancel it when destroying monitors
-    private ScheduledFuture<?> schedulerFuture;
     //The monitors dependency tree with all the start-able/kill-able 
dependencies
     protected DependencyTree startupDependencyTree;
     //The monitors dependency tree with all the scaling dependencies
@@ -86,6 +84,8 @@ public abstract class ParentComponentMonitor extends Monitor {
     protected Map<String, List<String>> terminatingInstancesMap;
     //network partition contexts
     protected Map<String, NetworkPartitionContext> networkPartitionContextsMap;
+    // future to cancel it when destroying monitors
+    private ScheduledFuture<?> schedulerFuture;
     //Executor service to maintain the thread pool
     private ExecutorService executorService;
 
@@ -207,7 +207,7 @@ public abstract class ParentComponentMonitor extends 
Monitor {
                 //starting a new instance of the child
                 Monitor monitor = 
aliasToActiveChildMonitorsMap.get(context.getId());
                 //Creating the new instance
-                if(monitor instanceof ParentComponentMonitor) {
+                if (monitor instanceof ParentComponentMonitor) {
                     ((ParentComponentMonitor) 
monitor).createInstanceOnTermination(instanceId);
                 } else {
                     monitor.createInstanceOnDemand(instanceId);
@@ -244,12 +244,12 @@ public abstract class ParentComponentMonitor extends 
Monitor {
                     Monitor monitor = 
aliasToActiveChildMonitorsMap.get(context.getId());
                     // Creating new instance
                     for (String instanceId : parentInstanceIds) {
-                        if(monitor.getInstancesByParentInstanceId(instanceId) 
== null ||
+                        if (monitor.getInstancesByParentInstanceId(instanceId) 
== null ||
                                 
monitor.getInstancesByParentInstanceId(instanceId).isEmpty()) {
                             monitor.createInstanceOnDemand(instanceId);
                         } else {
                             log.info(String.format("Instance has already 
exists for [application] " +
-                                    "%s [component] %s [instance-id] %s", 
getAppId(),
+                                            "%s [component] %s [instance-id] 
%s", getAppId(),
                                     context.getId(), instanceId));
                         }
                     }
@@ -275,7 +275,7 @@ public abstract class ParentComponentMonitor extends 
Monitor {
         if (networkPartitionContext != null) {
             InstanceContext instanceContext = networkPartitionContext.
                     getInstanceContext(instanceId);
-            ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext)instanceContext;
+            ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext) instanceContext;
             if (instanceContext != null) {
                 if (parentInstanceContext.containsScalingEvent(id)) {
                     parentInstanceContext.removeScalingEvent(id);
@@ -302,7 +302,7 @@ public abstract class ParentComponentMonitor extends 
Monitor {
         String instanceId = scalingDownBeyondMinEvent.getInstanceId();
         InstanceContext instanceContext = 
getNetworkPartitionContext(networkPartitionId).
                 getInstanceContext(instanceId);
-        
((ParentInstanceContext)instanceContext).addScalingDownBeyondMinEvent(scalingDownBeyondMinEvent);
+        ((ParentInstanceContext) 
instanceContext).addScalingDownBeyondMinEvent(scalingDownBeyondMinEvent);
     }
 
     @Override
@@ -323,7 +323,7 @@ public abstract class ParentComponentMonitor extends 
Monitor {
             InstanceContext instanceContext = networkPartitionContext.
                     getInstanceContext(instanceId);
             if (instanceContext != null) {
-                ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext)instanceContext;
+                ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext) instanceContext;
                 if (parentInstanceContext.containsScalingEvent(id)) {
                     parentInstanceContext.removeScalingOverMaxEvent(id);
                     
parentInstanceContext.addScalingOverMaxEvent(scalingUpBeyondMaxEvent);
@@ -362,18 +362,18 @@ public abstract class ParentComponentMonitor extends 
Monitor {
             // no need to invoke start dependencies.
 
             Monitor childMonitor = aliasToActiveChildMonitorsMap.get(childId);
-            if(childMonitor != null) {
+            if (childMonitor != null) {
                 Instance instance = childMonitor.getInstance(instanceId);
                 boolean firstIteration = false;
-                if(instance != null) {
-                    if(instance instanceof GroupInstance) {
-                        GroupInstance groupInstance = (GroupInstance)instance;
+                if (instance != null) {
+                    if (instance instanceof GroupInstance) {
+                        GroupInstance groupInstance = (GroupInstance) instance;
                         firstIteration = groupInstance.getPreviousState() == 
GroupStatus.Created;
-                    } else if(instance instanceof ClusterInstance) {
-                        ClusterInstance clusterInstance = 
(ClusterInstance)instance;
+                    } else if (instance instanceof ClusterInstance) {
+                        ClusterInstance clusterInstance = (ClusterInstance) 
instance;
                         firstIteration = clusterInstance.getPreviousState() == 
ClusterStatus.Created;
                     }
-                    if(firstIteration || childMonitor.hasStartupDependents()) {
+                    if (firstIteration || childMonitor.hasStartupDependents()) 
{
                         startDep = startDependency(childId, instanceId);
                     }
                 } else {
@@ -666,9 +666,9 @@ public abstract class ParentComponentMonitor extends 
Monitor {
             }
         }
 
-        if(log.isDebugEnabled()) {
+        if (log.isDebugEnabled()) {
             log.debug(String.format("Calculating the group instances status 
for [application] " +
-                    "%s [group] %s [group-instance] %s [required-status] %s 
[no-of-instances] %s",
+                            "%s [group] %s [group-instance] %s 
[required-status] %s [no-of-instances] %s",
                     appId, childId, instanceId, requiredStatus.toString(),
                     noOfInstancesOfRequiredStatus));
         }
@@ -681,14 +681,14 @@ public abstract class ParentComponentMonitor extends 
Monitor {
             //if terminated all the instances in this instances map should be 
in terminated state
             if (noOfInstancesOfRequiredStatus == 
this.inactiveInstancesMap.size() &&
                     requiredStatus == GroupStatus.Terminated) {
-                if(log.isDebugEnabled()) {
+                if (log.isDebugEnabled()) {
                     log.debug(String.format("Group instances in required 
status for [application] " +
                                     "%s [group] %s [group-instance] %s 
[required-status] %s",
                             appId, childId, instanceId, 
GroupStatus.Terminated.toString()));
                 }
                 return true;
             } else if (noOfInstancesOfRequiredStatus >= minInstances) {
-                if(log.isDebugEnabled()) {
+                if (log.isDebugEnabled()) {
                     log.debug(String.format("Group instances in required 
status for [application] " +
                                     "%s [group] %s [group-instance] %s 
[required-status] %s",
                             appId, childId, instanceId, 
requiredStatus.toString()));
@@ -697,7 +697,7 @@ public abstract class ParentComponentMonitor extends 
Monitor {
             } else {
                 //of only one is inActive implies that the whole group is 
Inactive
                 if (requiredStatus == GroupStatus.Inactive && 
noOfInstancesOfRequiredStatus >= 1) {
-                    if(log.isDebugEnabled()) {
+                    if (log.isDebugEnabled()) {
                         log.debug(String.format("Group instances in required 
status for [application] " +
                                         "%s [group] %s [group-instance] %s 
[required-status] %s",
                                 appId, childId, instanceId, 
GroupStatus.Inactive.toString()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
index e7fc57c..3336776 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/PolicyManager.java
@@ -55,8 +55,12 @@ public class PolicyManager {
 
     private static Map<String, ApplicationPolicy> applicationPolicyListMap;
 
-    public Collection<DeploymentPolicy> getDeploymentPolicies() {
-        return deploymentPolicyListMap.values();
+    private PolicyManager() {
+        // Initialize distributed object provider
+        DistributedObjectProvider distributedObjectProvider = 
ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
+        autoscalePolicyListMap = 
distributedObjectProvider.getMap(AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP);
+        deploymentPolicyListMap = 
distributedObjectProvider.getMap(DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP);
+        applicationPolicyListMap = 
distributedObjectProvider.getMap(APPLICATION_ID_TO_APPLICATION_POLICY_MAP);
     }
 
     /* An instance of a PolicyManager is created when the class is loaded.
@@ -64,20 +68,12 @@ public class PolicyManager {
      * PolicyManager is created only once. Hence it is singleton.
      */
 
-    private static class InstanceHolder {
-        private static final PolicyManager INSTANCE = new PolicyManager();
-    }
-
     public static PolicyManager getInstance() {
         return InstanceHolder.INSTANCE;
     }
 
-    private PolicyManager() {
-        // Initialize distributed object provider
-        DistributedObjectProvider distributedObjectProvider = 
ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
-        autoscalePolicyListMap = 
distributedObjectProvider.getMap(AS_POLICY_ID_TO_AUTOSCALE_POLICY_MAP);
-        deploymentPolicyListMap = 
distributedObjectProvider.getMap(DEPLOYMENT_POLICY_ID_TO_DEPLOYMENT_POLICY_MAP);
-        applicationPolicyListMap = 
distributedObjectProvider.getMap(APPLICATION_ID_TO_APPLICATION_POLICY_MAP);
+    public Collection<DeploymentPolicy> getDeploymentPolicies() {
+        return deploymentPolicyListMap.values();
     }
 
     // Add the policy to information model and persist.
@@ -120,7 +116,6 @@ public class PolicyManager {
         return true;
     }
 
-
     /**
      * Add deployment policy to in memory map and persist.
      *
@@ -276,7 +271,6 @@ public class PolicyManager {
         return autoscalePolicyListMap.get(id);
     }
 
-
     private void addDeploymentPolicyToPolicyListMap(DeploymentPolicy policy) {
         if (StringUtils.isEmpty(policy.getDeploymentPolicyID())) {
             throw new RuntimeException("Application id is not found in the 
deployment policy");
@@ -347,7 +341,6 @@ public class PolicyManager {
         return deploymentPolicyListMap.get(id);
     }
 
-
     public void addApplicationPolicy(ApplicationPolicy applicationPolicy) 
throws InvalidApplicationPolicyException {
         String applicationPolicyId = applicationPolicy.getId();
         if (log.isInfoEnabled()) {
@@ -426,4 +419,8 @@ public class PolicyManager {
     public ApplicationPolicy[] getApplicationPolicies() {
         return applicationPolicyListMap.values().toArray(new 
ApplicationPolicy[0]);
     }
+
+    private static class InstanceHolder {
+        private static final PolicyManager INSTANCE = new PolicyManager();
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
index 3688c6b..b871e97 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
@@ -41,9 +41,8 @@ import java.util.Map;
 public class AutoscalerRuleEvaluator {
 
     private static final Log log = 
LogFactory.getLog(AutoscalerRuleEvaluator.class);
-
-    private Map<String, KnowledgeBase> knowledgeBases;
     private static volatile AutoscalerRuleEvaluator instance;
+    private Map<String, KnowledgeBase> knowledgeBases;
 
     private AutoscalerRuleEvaluator() {
         knowledgeBases = new HashMap<String, KnowledgeBase>();
@@ -67,6 +66,24 @@ public class AutoscalerRuleEvaluator {
         return instance;
     }
 
+    private static KnowledgeBase readKnowledgeBase(String drlFileName) {
+        KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
+        String configDir = CarbonUtils.getCarbonConfigDirPath();
+        String droolsDir = configDir + File.separator + 
StratosConstants.DROOLS_DIR_NAME;
+        Resource resource = ResourceFactory.newFileResource(droolsDir + 
File.separator + drlFileName);
+        kbuilder.add(resource, ResourceType.DRL);
+        KnowledgeBuilderErrors errors = kbuilder.getErrors();
+        if (errors.size() > 0) {
+            for (KnowledgeBuilderError error : errors) {
+                log.error(error.getMessage());
+            }
+            throw new IllegalArgumentException("Could not parse knowledge");
+        }
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+        return kbase;
+    }
+
     public void parseAndBuildKnowledgeBaseForDroolsFile(String drlFileName) {
         KnowledgeBase knowledgeBase = readKnowledgeBase(drlFileName);
         if (knowledgeBase == null) {
@@ -87,22 +104,4 @@ public class AutoscalerRuleEvaluator {
         ksession.setGlobal("log", RuleLog.getInstance());
         return ksession;
     }
-
-    private static KnowledgeBase readKnowledgeBase(String drlFileName) {
-        KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
-        String configDir = CarbonUtils.getCarbonConfigDirPath();
-        String droolsDir = configDir + File.separator + 
StratosConstants.DROOLS_DIR_NAME;
-        Resource resource = ResourceFactory.newFileResource(droolsDir + 
File.separator + drlFileName);
-        kbuilder.add(resource, ResourceType.DRL);
-        KnowledgeBuilderErrors errors = kbuilder.getErrors();
-        if (errors.size() > 0) {
-            for (KnowledgeBuilderError error : errors) {
-                log.error(error.getMessage());
-            }
-            throw new IllegalArgumentException("Could not parse knowledge");
-        }
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
-        return kbase;
-    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index 89633f7..1a8bfc9 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -43,9 +43,8 @@ import org.apache.stratos.common.constants.StratosConstants;
  */
 public class RuleTasksDelegator {
 
-    private static boolean arspiIsSet = false;
-
     private static final Log log = LogFactory.getLog(RuleTasksDelegator.class);
+    private static boolean arspiIsSet = false;
 
     public double getPredictedValueForNextMinute(float average, float 
gradient, float secondDerivative, int timeInterval) {
         double predictedValue;

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 52c8dbe..f75fbc5 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -491,7 +491,7 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
                     return false;
                 } else {
                     log.info(String.format("Previous graceful un-deployment is 
in progress for " +
-                            "[application-id] %s , thus  terminating instances 
directly",
+                                    "[application-id] %s , thus  terminating 
instances directly",
                             applicationId));
                     appMonitor.setForce(true);
                     terminateAllMembersAndClustersForcefully(applicationId);
@@ -926,15 +926,15 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
             //Stopping the cluster monitor thread
             ClusterMonitor clusterMonitor = AutoscalerContext.getInstance().
                     getClusterMonitor(clusterId);
-            if(clusterMonitor != null) {
+            if (clusterMonitor != null) {
                 clusterMonitor.destroy();
             } else {
-                if(log.isDebugEnabled()) {
+                if (log.isDebugEnabled()) {
                     log.debug(String.format("Cluster monitor cannot be found 
for [application] %s " +
                             "[cluster] %s", applicationId, clusterId));
                 }
             }
-            if(cluster != null) {
+            if (cluster != null) {
                 Collection<ClusterInstance> allClusterInstances = 
cluster.getClusterInstances();
                 for (ClusterInstance clusterInstance : allClusterInstances) {
                     
ClusterStatusEventPublisher.sendClusterTerminatedEvent(applicationId, 
cluster.getServiceName(),
@@ -1132,7 +1132,7 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
                 for (NetworkPartitionRef networkPartition : 
deploymentPolicy.getNetworkPartitionRefs()) {
                     NetworkPartitionContext clusterLevelNetworkPartitionContext
                             = 
clusterMonitor.getClusterContext().getNetworkPartitionCtxt(networkPartition.getId());
-                    if(clusterLevelNetworkPartitionContext != null) {
+                    if (clusterLevelNetworkPartitionContext != null) {
                         try {
                             
addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, 
networkPartition,
                                     deploymentPolicy.getDeploymentPolicyID(), 
clusterMonitor.getClusterContext().getServiceId());

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index b76322c..24a4e07 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -80,10 +80,6 @@ public class AutoscalerUtil {
         return Holder.INSTANCE;
     }
 
-    private static class Holder {
-        private static final AutoscalerUtil INSTANCE = new AutoscalerUtil();
-    }
-
     public static Applications getApplications() {
 
         Applications applications;
@@ -266,80 +262,6 @@ public class AutoscalerUtil {
         return toCommonProperties(properties);
     }
 
-    public synchronized void startApplicationMonitor(String applicationId) {
-
-        AutoscalerContext autoscalerContext = AutoscalerContext.getInstance();
-        if (autoscalerContext.getAppMonitor(applicationId) == null) {
-            autoscalerContext.addApplicationPendingMonitor(applicationId);
-            
ServiceReferenceHolder.getInstance().getExecutorService().submit(new 
ApplicationMonitorAdder(applicationId));
-
-            log.info(String.format("Monitor scheduled: [application] %s ", 
applicationId));
-        } else {
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Application monitor thread already 
exists: " +
-                        "[application] %s ", applicationId));
-            }
-        }
-    }
-
-    private class ApplicationMonitorAdder implements Runnable {
-        private String applicationId;
-
-        public ApplicationMonitorAdder(String applicationId) {
-            this.applicationId = applicationId;
-        }
-
-        public void run() {
-            long startTime = System.currentTimeMillis();
-            long endTime = startTime;
-            int retries = 5;
-            boolean success = false;
-            ApplicationMonitor applicationMonitor = null;
-            while (!success && retries != 0) {
-
-                try {
-                    startTime = System.currentTimeMillis();
-                    log.info("Starting monitor: [application] " + 
applicationId);
-                    try {
-                        applicationMonitor = 
MonitorFactory.getApplicationMonitor(applicationId);
-                    } catch (PolicyValidationException e) {
-                        String msg = "Monitor creation failed: [application] " 
+ applicationId;
-                        log.warn(msg, e);
-                        retries--;
-                    }
-                    success = true;
-                    endTime = System.currentTimeMillis();
-                } catch (DependencyBuilderException e) {
-                    String msg = "Monitor creation failed: [application] " + 
applicationId;
-                    log.warn(msg, e);
-                    retries--;
-                } catch (TopologyInConsistentException e) {
-                    String msg = "Monitor creation failed: [application] " + 
applicationId;
-                    log.warn(msg, e);
-                    retries--;
-                }
-            }
-
-            if (applicationMonitor == null) {
-                String msg = "Monitor creation failed, even after retrying for 
5 times: "
-                        + "[application] " + applicationId;
-                log.error(msg);
-                throw new RuntimeException(msg);
-            }
-            AutoscalerContext autoscalerContext = 
AutoscalerContext.getInstance();
-            autoscalerContext.removeApplicationPendingMonitor(applicationId);
-            autoscalerContext.removeAppMonitor(applicationId);
-            autoscalerContext.addAppMonitor(applicationMonitor);
-
-            long startupTime = ((endTime - startTime) / 1000);
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Monitor started successfully: 
[application] %s [dependents] %s " +
-                                "[startup-time] %d seconds", 
applicationMonitor.getId(),
-                        applicationMonitor.getStartupDependencyTree(), 
startupTime));
-            }
-        }
-    }
-
     public static Monitor.MonitorType findMonitorType(ApplicationChildContext 
context) {
         if (context instanceof GroupChildContext) {
             return Monitor.MonitorType.Group;
@@ -711,7 +633,6 @@ public class AutoscalerUtil {
         }
     }
 
-
     /**
      * Validates an application policy against the application
      *
@@ -787,6 +708,150 @@ public class AutoscalerUtil {
         return false;
     }
 
+    public static void validateStartupOrders(String groupName, String[] 
startupOrders) throws InvalidServiceGroupException {
+
+        if (startupOrders == null || startupOrders.length == 0) {
+            if (log.isDebugEnabled()) {
+                log.debug("No Startup Order defined for group " + groupName);
+            }
+            return;
+        }
+
+        for (String startupOrder : startupOrders) {
+            // split comma separated startup orders
+            String[] splittedStartupOrders = startupOrder.split(",");
+            for (String splittedStartupOrder : splittedStartupOrders) {
+                if (!splittedStartupOrder.trim().startsWith("cartridge.") && 
!splittedStartupOrder.trim().startsWith("group.")) {
+                    // invalid startup order; should prefixed by either 
'cartridge.' or 'group.'
+                    throw new InvalidServiceGroupException("Invalid cartridge 
group: startup order [" + startupOrder +
+                            "] for group " + groupName +
+                            ", should prefixed by either 'cartridge.' or 
'group.'");
+                }
+            }
+        }
+    }
+
+    public static void validateScalingDependencies(String groupName, String[] 
scalingDependents) throws InvalidServiceGroupException {
+
+        if (scalingDependents == null || scalingDependents.length == 0) {
+            if (log.isDebugEnabled()) {
+                log.debug("No Scaling Dependents defined for group " + 
groupName);
+            }
+            return;
+        }
+
+        for (String scalingDependent : scalingDependents) {
+            // split comma separated scaling dependents
+            String[] splittedDependents = scalingDependent.split(",");
+            for (String splittedDependent : splittedDependents) {
+                if (!splittedDependent.trim().startsWith("cartridge.") && 
!splittedDependent.trim().startsWith("group.")) {
+                    // invalid startup order; should prefixed by either 
'cartridge.' or 'group.'
+                    throw new InvalidServiceGroupException("Invalid cartridge 
group: Scaling Dependency [" +
+                            scalingDependent + "] for group " + groupName +
+                            ", should prefixed by either 'cartridge.' or 
'group.'");
+                }
+            }
+        }
+    }
+
+    /**
+     * Validate the Auto Scalar policy removal
+     *
+     * @param autoscalePolicyId Auto Scalar policy id boolean
+     * @return
+     */
+    public static boolean removableAutoScalerPolicy(String autoscalePolicyId) {
+        Collection<ApplicationContext> applicationContexts = 
AutoscalerContext.getInstance().
+                getApplicationContexts();
+        for (ApplicationContext applicationContext : applicationContexts) {
+            if (applicationContext.getComponents().getCartridgeContexts() != 
null) {
+                for (CartridgeContext cartridgeContext : 
applicationContext.getComponents().
+                        getCartridgeContexts()) {
+                    if 
(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
+                            getAutoscalingPolicy())) {
+                        return false;
+                    }
+                }
+            }
+
+            if (applicationContext.getComponents().getGroupContexts() != null) 
{
+                return 
findAutoscalingPolicyInGroup(applicationContext.getComponents().getGroupContexts(),
+                        autoscalePolicyId);
+            }
+        }
+        return true;
+    }
+
+    public static boolean findAutoscalingPolicyInGroup(GroupContext[] 
groupContexts,
+                                                       String 
autoscalePolicyId) {
+        for (GroupContext groupContext : groupContexts) {
+            if (groupContext.getCartridgeContexts() != null) {
+                for (CartridgeContext cartridgeContext : 
groupContext.getCartridgeContexts()) {
+                    if 
(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
+                            getAutoscalingPolicy())) {
+                        return false;
+                    }
+                }
+
+            }
+            if (groupContext.getGroupContexts() != null) {
+                return 
findAutoscalingPolicyInGroup(groupContext.getGroupContexts(),
+                        autoscalePolicyId);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Validate the deployment policy removal
+     *
+     * @param deploymentPolicyId
+     * @return
+     */
+    public static boolean removableDeploymentPolicy(String deploymentPolicyId) 
{
+        boolean canRemove = true;
+        Map<String, Application> applications = 
ApplicationHolder.getApplications().getApplications();
+        for (Application application : applications.values()) {
+            List<String> deploymentPolicyIdsReferredInApplication = 
AutoscalerUtil.
+                    
getDeploymentPolicyIdsReferredInApplication(application.getUniqueIdentifier());
+            for (String deploymentPolicyIdInApp : 
deploymentPolicyIdsReferredInApplication) {
+                if (deploymentPolicyId.equals(deploymentPolicyIdInApp)) {
+                    canRemove = false;
+                }
+            }
+        }
+        return canRemove;
+    }
+
+    public static void readApplicationContextsFromRegistry() {
+        String[] resourcePaths = 
RegistryManager.getInstance().getApplicationContextResourcePaths();
+        if ((resourcePaths == null) || (resourcePaths.length == 0)) {
+            return;
+        }
+
+        for (String resourcePath : resourcePaths) {
+            ApplicationContext applicationContext = 
RegistryManager.getInstance().
+                    getApplicationContextByResourcePath(resourcePath);
+            
AutoscalerContext.getInstance().addApplicationContext(applicationContext);
+        }
+    }
+
+    public synchronized void startApplicationMonitor(String applicationId) {
+
+        AutoscalerContext autoscalerContext = AutoscalerContext.getInstance();
+        if (autoscalerContext.getAppMonitor(applicationId) == null) {
+            autoscalerContext.addApplicationPendingMonitor(applicationId);
+            
ServiceReferenceHolder.getInstance().getExecutorService().submit(new 
ApplicationMonitorAdder(applicationId));
+
+            log.info(String.format("Monitor scheduled: [application] %s ", 
applicationId));
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug(String.format("Application monitor thread already 
exists: " +
+                        "[application] %s ", applicationId));
+            }
+        }
+    }
+
     public void updateApplicationsTopology(Application application)
             throws ApplicationDefinitionException {
         Application existingApplication = ApplicationHolder.getApplications().
@@ -889,133 +954,66 @@ public class AutoscalerUtil {
         }
     }
 
-    public static void validateStartupOrders(String groupName, String[] 
startupOrders) throws InvalidServiceGroupException {
-
-        if (startupOrders == null || startupOrders.length == 0) {
-            if (log.isDebugEnabled()) {
-                log.debug("No Startup Order defined for group " + groupName);
-            }
-            return;
-        }
-
-        for (String startupOrder : startupOrders) {
-            // split comma separated startup orders
-            String[] splittedStartupOrders = startupOrder.split(",");
-            for (String splittedStartupOrder : splittedStartupOrders) {
-                if (!splittedStartupOrder.trim().startsWith("cartridge.") && 
!splittedStartupOrder.trim().startsWith("group.")) {
-                    // invalid startup order; should prefixed by either 
'cartridge.' or 'group.'
-                    throw new InvalidServiceGroupException("Invalid cartridge 
group: startup order [" + startupOrder +
-                            "] for group " + groupName +
-                            ", should prefixed by either 'cartridge.' or 
'group.'");
-                }
-            }
-        }
+    private static class Holder {
+        private static final AutoscalerUtil INSTANCE = new AutoscalerUtil();
     }
 
-    public static void validateScalingDependencies(String groupName, String[] 
scalingDependents) throws InvalidServiceGroupException {
+    private class ApplicationMonitorAdder implements Runnable {
+        private String applicationId;
 
-        if (scalingDependents == null || scalingDependents.length == 0) {
-            if (log.isDebugEnabled()) {
-                log.debug("No Scaling Dependents defined for group " + 
groupName);
-            }
-            return;
+        public ApplicationMonitorAdder(String applicationId) {
+            this.applicationId = applicationId;
         }
 
-        for (String scalingDependent : scalingDependents) {
-            // split comma separated scaling dependents
-            String[] splittedDependents = scalingDependent.split(",");
-            for (String splittedDependent : splittedDependents) {
-                if (!splittedDependent.trim().startsWith("cartridge.") && 
!splittedDependent.trim().startsWith("group.")) {
-                    // invalid startup order; should prefixed by either 
'cartridge.' or 'group.'
-                    throw new InvalidServiceGroupException("Invalid cartridge 
group: Scaling Dependency [" +
-                            scalingDependent + "] for group " + groupName +
-                            ", should prefixed by either 'cartridge.' or 
'group.'");
-                }
-            }
-        }
-    }
+        public void run() {
+            long startTime = System.currentTimeMillis();
+            long endTime = startTime;
+            int retries = 5;
+            boolean success = false;
+            ApplicationMonitor applicationMonitor = null;
+            while (!success && retries != 0) {
 
-    /**
-     * Validate the Auto Scalar policy removal
-     *
-     * @param autoscalePolicyId Auto Scalar policy id boolean
-     * @return
-     */
-    public static boolean removableAutoScalerPolicy(String autoscalePolicyId) {
-        Collection<ApplicationContext> applicationContexts = 
AutoscalerContext.getInstance().
-                getApplicationContexts();
-        for (ApplicationContext applicationContext : applicationContexts) {
-            if(applicationContext.getComponents().getCartridgeContexts() != 
null) {
-                for(CartridgeContext cartridgeContext : 
applicationContext.getComponents().
-                        getCartridgeContexts()) {
-                    
if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
-                            getAutoscalingPolicy())) {
-                        return false;
+                try {
+                    startTime = System.currentTimeMillis();
+                    log.info("Starting monitor: [application] " + 
applicationId);
+                    try {
+                        applicationMonitor = 
MonitorFactory.getApplicationMonitor(applicationId);
+                    } catch (PolicyValidationException e) {
+                        String msg = "Monitor creation failed: [application] " 
+ applicationId;
+                        log.warn(msg, e);
+                        retries--;
                     }
+                    success = true;
+                    endTime = System.currentTimeMillis();
+                } catch (DependencyBuilderException e) {
+                    String msg = "Monitor creation failed: [application] " + 
applicationId;
+                    log.warn(msg, e);
+                    retries--;
+                } catch (TopologyInConsistentException e) {
+                    String msg = "Monitor creation failed: [application] " + 
applicationId;
+                    log.warn(msg, e);
+                    retries--;
                 }
             }
 
-            if(applicationContext.getComponents().getGroupContexts() != null) {
-                return 
findAutoscalingPolicyInGroup(applicationContext.getComponents().getGroupContexts(),
-                        autoscalePolicyId);
-            }
-        }
-        return true;
-    }
-
-    public static boolean findAutoscalingPolicyInGroup(GroupContext[] 
groupContexts,
-                                                String autoscalePolicyId) {
-        for(GroupContext groupContext : groupContexts) {
-            if(groupContext.getCartridgeContexts() != null) {
-                for(CartridgeContext cartridgeContext : 
groupContext.getCartridgeContexts()) {
-                    
if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
-                            getAutoscalingPolicy())) {
-                        return false;
-                    }
-                }
-
-            }
-            if(groupContext.getGroupContexts() != null) {
-                return 
findAutoscalingPolicyInGroup(groupContext.getGroupContexts(),
-                        autoscalePolicyId);
+            if (applicationMonitor == null) {
+                String msg = "Monitor creation failed, even after retrying for 
5 times: "
+                        + "[application] " + applicationId;
+                log.error(msg);
+                throw new RuntimeException(msg);
             }
-        }
-        return true;
-    }
-
+            AutoscalerContext autoscalerContext = 
AutoscalerContext.getInstance();
+            autoscalerContext.removeApplicationPendingMonitor(applicationId);
+            autoscalerContext.removeAppMonitor(applicationId);
+            autoscalerContext.addAppMonitor(applicationMonitor);
 
-    /**
-     * Validate the deployment policy removal
-     *
-     * @param deploymentPolicyId
-     * @return
-     */
-    public static boolean removableDeploymentPolicy(String deploymentPolicyId) 
{
-        boolean canRemove = true;
-        Map<String, Application> applications = 
ApplicationHolder.getApplications().getApplications();
-        for (Application application : applications.values()) {
-            List<String> deploymentPolicyIdsReferredInApplication = 
AutoscalerUtil.
-                    
getDeploymentPolicyIdsReferredInApplication(application.getUniqueIdentifier());
-            for (String deploymentPolicyIdInApp : 
deploymentPolicyIdsReferredInApplication) {
-                if (deploymentPolicyId.equals(deploymentPolicyIdInApp)) {
-                    canRemove = false;
-                }
+            long startupTime = ((endTime - startTime) / 1000);
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Monitor started successfully: 
[application] %s [dependents] %s " +
+                                "[startup-time] %d seconds", 
applicationMonitor.getId(),
+                        applicationMonitor.getStartupDependencyTree(), 
startupTime));
             }
         }
-        return canRemove;
-    }
-
-    public static void readApplicationContextsFromRegistry() {
-        String[] resourcePaths = 
RegistryManager.getInstance().getApplicationContextResourcePaths();
-        if ((resourcePaths == null) || (resourcePaths.length == 0)) {
-            return;
-        }
-
-        for (String resourcePath : resourcePaths) {
-            ApplicationContext applicationContext = 
RegistryManager.getInstance().
-                    getApplicationContextByResourcePath(resourcePath);
-            AutoscalerContext.getInstance().addApplicationContext( 
applicationContext);
-        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
index 28c5f66..969490e 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
@@ -34,12 +34,10 @@ import java.util.HashMap;
 public class ConfUtil {
 
     private static Log log = LogFactory.getLog(ConfUtil.class);
-
-    private XMLConfiguration config;
-
     //To maintain the map of config files
     private static HashMap<String, ConfUtil> instanceMap = new HashMap<String, 
ConfUtil>();
     private static Object mutex = new Object();
+    private XMLConfiguration config;
 
     private ConfUtil(String configFilePath) {
         try {

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
index 36b048e..4cc175c 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ServiceReferenceHolder.java
@@ -60,38 +60,38 @@ public class ServiceReferenceHolder {
         return instance;
     }
 
-    public void setAxisConfiguration(AxisConfiguration axisConfiguration) {
-        this.axisConfiguration = axisConfiguration;
-    }
-
     public AxisConfiguration getAxisConfiguration() {
         return axisConfiguration;
     }
 
-    public void setDistributedObjectProvider(DistributedObjectProvider 
distributedObjectProvider) {
-        this.distributedObjectProvider = distributedObjectProvider;
+    public void setAxisConfiguration(AxisConfiguration axisConfiguration) {
+        this.axisConfiguration = axisConfiguration;
     }
 
     public DistributedObjectProvider getDistributedObjectProvider() {
         return distributedObjectProvider;
     }
 
-    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
-        this.hazelcastInstance = hazelcastInstance;
+    public void setDistributedObjectProvider(DistributedObjectProvider 
distributedObjectProvider) {
+        this.distributedObjectProvider = distributedObjectProvider;
     }
 
     public HazelcastInstance getHazelcastInstance() {
         return hazelcastInstance;
     }
 
-    public void setRegistry(UserRegistry governanceSystemRegistry) {
-        registry = governanceSystemRegistry;
+    public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        this.hazelcastInstance = hazelcastInstance;
     }
 
     public Registry getRegistry() {
         return registry;
     }
 
+    public void setRegistry(UserRegistry governanceSystemRegistry) {
+        registry = governanceSystemRegistry;
+    }
+
     public TaskService getTaskService() {
         return taskService;
     }
@@ -116,19 +116,19 @@ public class ServiceReferenceHolder {
         this.groupStatusProcessorChain = groupStatusProcessorChain;
     }
 
-    public void setExecutorService(ExecutorService executorService) {
-        this.executorService = executorService;
-    }
-
     public ExecutorService getExecutorService() {
         return executorService;
     }
 
-    public void setComponentStartUpSynchronizer(ComponentStartUpSynchronizer 
componentStartUpSynchronizer) {
-        this.componentStartUpSynchronizer = componentStartUpSynchronizer;
+    public void setExecutorService(ExecutorService executorService) {
+        this.executorService = executorService;
     }
 
     public ComponentStartUpSynchronizer getComponentStartUpSynchronizer() {
         return componentStartUpSynchronizer;
     }
+
+    public void setComponentStartUpSynchronizer(ComponentStartUpSynchronizer 
componentStartUpSynchronizer) {
+        this.componentStartUpSynchronizer = componentStartUpSynchronizer;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
 
b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
index 2f65281..c676ed1 100644
--- 
a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
+++ 
b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
@@ -79,7 +79,7 @@ public class AutoscalerUtilTest {
     @Test
     public void testRemovalOfAutoscalingPolicy() {
         List<CartridgeContext> cartridgeContexts = new 
ArrayList<CartridgeContext>();
-        for(int i = 0; i < 12; i++) {
+        for (int i = 0; i < 12; i++) {
             CartridgeContext cartridgeContext = new CartridgeContext();
             SubscribableInfoContext subscribableContext = new 
SubscribableInfoContext();
             subscribableContext.setAlias("cart-" + i);
@@ -89,12 +89,12 @@ public class AutoscalerUtilTest {
             cartridgeContexts.add(cartridgeContext);
         }
         List<GroupContext> groupContextList = new ArrayList<GroupContext>();
-        for(int i = 0; i < 5; i++) {
+        for (int i = 0; i < 5; i++) {
             GroupContext groupContext = new GroupContext();
             groupContext.setAlias("group-" + i);
             CartridgeContext[] cartridgeContexts1 = new CartridgeContext[2];
             cartridgeContexts1[0] = cartridgeContexts.get(i);
-            cartridgeContexts1[1] = cartridgeContexts.get(i+5);
+            cartridgeContexts1[1] = cartridgeContexts.get(i + 5);
 
             groupContext.setCartridgeContexts(cartridgeContexts1);
             groupContextList.add(groupContext);
@@ -123,7 +123,7 @@ public class AutoscalerUtilTest {
         canRemove = AutoscalerUtil.removableAutoScalerPolicy("test");
         assertEquals(canRemove, true);
 
-        for(int i = 0; i < 12; i ++) {
+        for (int i = 0; i < 12; i++) {
             canRemove = AutoscalerUtil.removableAutoScalerPolicy("auto-" + i);
             assertEquals(canRemove, false);
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
 
b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
index 2928d2d..e140209 100644
--- 
a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
+++ 
b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
@@ -45,6 +45,10 @@ public class TestMinimumRule {
     private StatefulKnowledgeSession ksession;
     private XMLConfiguration conf;
 
+    public static String get() {
+        return "null";
+    }
+
     @Before
     public void setUp() {
         KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -95,8 +99,4 @@ public class TestMinimumRule {
         assertEquals(true, TestDelegator.isMinRuleFired());
 
     }
-
-    public static String get() {
-        return "null";
-    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a2749a9e/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
 
b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
index 2654529..bd75a63 100644
--- 
a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
+++ 
b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
@@ -46,6 +46,10 @@ public class TestObsoletedMemberRule {
     private StatefulKnowledgeSession ksession;
     private XMLConfiguration conf;
 
+    public static String get() {
+        return "null";
+    }
+
     @Before
     public void setUp() {
         KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -171,8 +175,4 @@ public class TestObsoletedMemberRule {
 
 
     }
-
-    public static String get() {
-        return "null";
-    }
 }

Reply via email to