You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2015/05/11 10:29:22 UTC

[3/4] stratos git commit: Refactoring ParentComponentMonitor

Refactoring ParentComponentMonitor


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/efe12d96
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/efe12d96
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/efe12d96

Branch: refs/heads/master
Commit: efe12d969759fcafedae6c39d06e7f125a19e480
Parents: 015e89b
Author: reka <rt...@gmail.com>
Authored: Mon May 11 12:48:36 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Mon May 11 13:58:44 2015 +0530

----------------------------------------------------------------------
 .../component/ParentComponentMonitor.java       | 157 ++++++++++---------
 1 file changed, 87 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/efe12d96/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 0265501..97beb56 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
@@ -33,7 +33,6 @@ import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetwork
 import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
-import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
 import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
@@ -88,8 +87,6 @@ public abstract class ParentComponentMonitor extends Monitor {
     protected Map<String, NetworkPartitionContext> networkPartitionCtxts;
     //Executor service to maintain the thread pool
     private ExecutorService executorService;
-    //Monitoring interval of the monitor
-    private int monitoringIntervalMilliseconds = 60000;     //TODO get this from config file
 
     public ParentComponentMonitor(ParentComponent component) throws DependencyBuilderException {
         aliasToActiveChildMonitorsMap = new ConcurrentHashMap<String, Monitor>();
@@ -120,9 +117,14 @@ public abstract class ParentComponentMonitor extends Monitor {
      * Starting the scheduler for the monitor
      */
     public void startScheduler() {
-        schedulerFuture = scheduler.scheduleAtFixedRate(this, 0, monitoringIntervalMilliseconds, TimeUnit.MILLISECONDS);
+        int monitoringIntervalMilliseconds = 60000;
+        schedulerFuture = scheduler.scheduleAtFixedRate(this, 0,
+                monitoringIntervalMilliseconds, TimeUnit.MILLISECONDS);
     }
 
+    /**
+     * This will stop the scheduler which is running for the monitor
+     */
     protected void stopScheduler() {
         schedulerFuture.cancel(true);
     }
@@ -160,7 +162,6 @@ public abstract class ParentComponentMonitor extends Monitor {
      * @param componentId alias/clusterId of which receive the activated event
      * @param instanceId  instance id of the instance
      * @return whether the instance has created or not
-     * @throws MonitorNotFoundException if the monitor is not there
      */
     public boolean startDependency(String componentId, String instanceId) {
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
@@ -339,7 +340,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().
                     process(this.id, this.appId, instanceId);
         } else {
-            log.info("started a child: " + startDep + " upon activation of " + childId +
+            log.info("started a child upon activation of " + childId +
                     " for [application] " + appId + " [" + getMonitorType() + "] " + id);
         }
 
@@ -559,11 +560,8 @@ public abstract class ParentComponentMonitor extends Monitor {
                     try {
                         ApplicationHolder.acquireReadLock();
                         //verify whether the GroupInstance is active or not
-                        if (verifyGroupStatus(context1.getId(), instanceId, GroupStatus.Active)) {
-                            parentsActive = true;
-                        } else {
-                            parentsActive = false;
-                        }
+                        parentsActive = verifyGroupStatus(context1.getId(), instanceId,
+                                GroupStatus.Active);
                     } finally {
                         ApplicationHolder.releaseReadLock();
                     }
@@ -574,12 +572,8 @@ public abstract class ParentComponentMonitor extends Monitor {
                                 monitor1.getClusterId());
                         ClusterInstance clusterInstance = (ClusterInstance) monitor1.
                                 getInstance(instanceId);
-                        if (clusterInstance != null && clusterInstance.getStatus()
-                                == ClusterStatus.Active) {
-                            parentsActive = true;
-                        } else {
-                            parentsActive = false;
-                        }
+                        parentsActive = clusterInstance != null &&
+                                clusterInstance.getStatus() == ClusterStatus.Active;
                     } finally {
                         TopologyManager.releaseReadLockForCluster(monitor1.getServiceId(),
                                 monitor1.getClusterId());
@@ -609,11 +603,7 @@ public abstract class ParentComponentMonitor extends Monitor {
         if (groupInstance == null) {
             groupInstances = monitor.getInstancesByParentInstanceId(instanceId);
         } else {
-            if (groupInstance.getStatus() == requiredStatus) {
-                return true;
-            } else {
-                return false;
-            }
+            return groupInstance.getStatus() == requiredStatus;
         }
 
         String networkPartitionId = null;
@@ -651,8 +641,9 @@ public abstract class ParentComponentMonitor extends Monitor {
     /**
      * handling the dependent scaling
      *
-     * @param instanceContext
-     * @param networkPartitionContext
+     * @param instanceContext         instance-context of the Instance which receives
+     *                                the scale notification from the child
+     * @param networkPartitionContext network-partition-context which belongs to the instance
      */
     protected void handleDependentScaling(InstanceContext instanceContext,
                                           NetworkPartitionContext networkPartitionContext) {
@@ -712,14 +703,20 @@ public abstract class ParentComponentMonitor extends Monitor {
                                 monitor.onParentScalingEvent(scalingEvent);
                             }
                         }
+                        break;
                     }
-                    break;
+
                 }
             }
         }
     }
 
-    // move to inactive monitors list to use in the Terminated event
+    /**
+     * move to inactive monitors list to use in the Terminated event
+     *
+     * @param childId    id of the child where the instance resides
+     * @param instanceId instance id of the instance which has state change
+     */
     protected synchronized void markInstanceAsInactive(String childId, String instanceId) {
         if (this.inactiveInstancesMap.containsKey(childId)) {
             this.inactiveInstancesMap.get(childId).add(instanceId);
@@ -730,8 +727,14 @@ public abstract class ParentComponentMonitor extends Monitor {
         }
     }
 
-    // move to inactive monitors list to use in the Terminated event
-    protected synchronized void removeInstanceFromFromInactiveMap(String childId, String instanceId) {
+    /**
+     * move to inactive monitors list to use in the Terminated event
+     *
+     * @param childId    id of the child where the instance resides
+     * @param instanceId instance id of the instance which has state change
+     */
+    protected synchronized void removeInstanceFromFromInactiveMap(String childId,
+                                                                  String instanceId) {
         if (this.inactiveInstancesMap.containsKey(childId) &&
                 this.inactiveInstancesMap.get(childId).contains(instanceId)) {
             this.inactiveInstancesMap.get(childId).remove(instanceId);
@@ -741,7 +744,12 @@ public abstract class ParentComponentMonitor extends Monitor {
         }
     }
 
-    // move to inactive monitors list to use in the Terminated event
+    /**
+     * move to inactive monitors list to use in the Terminated event
+     *
+     * @param childId    id of the child where the instance resides
+     * @param instanceId instance id of the instance which has state change
+     */
     protected synchronized void removeInstanceFromFromTerminatingMap(String childId, String instanceId) {
         if (this.terminatingInstancesMap.containsKey(childId) &&
                 this.terminatingInstancesMap.get(childId).contains(instanceId)) {
@@ -752,7 +760,12 @@ public abstract class ParentComponentMonitor extends Monitor {
         }
     }
 
-    // move to inactive monitors list to use in the Terminated event
+    /**
+     * move to inactive monitors list to use in the Terminated event
+     *
+     * @param childId    id of the child where the instance resides
+     * @param instanceId instance id of the instance which has state change
+     */
     protected synchronized void markInstanceAsTerminating(String childId, String instanceId) {
         if (this.inactiveInstancesMap.containsKey(childId) &&
                 this.inactiveInstancesMap.get(childId).contains(instanceId)) {
@@ -768,6 +781,13 @@ public abstract class ParentComponentMonitor extends Monitor {
     }
 
 
+    /**
+     * Utility method to start the monitor thread for the children
+     *
+     * @param parent            The parent monitor which starting its own children
+     * @param context           the child context which used to start the specific child
+     * @param parentInstanceIds the instance-ids of the parent instance
+     */
     protected synchronized void startMonitor(ParentComponentMonitor parent,
                                              ApplicationChildContext context, List<String> parentInstanceIds) {
         if (!this.aliasToActiveChildMonitorsMap.containsKey(context.getId())) {
@@ -780,58 +800,41 @@ public abstract class ParentComponentMonitor extends Monitor {
         }
     }
 
+    /**
+     * This will return the child monitors map
+     *
+     * @return child monitors map
+     */
     public Map<String, Monitor> getAliasToActiveChildMonitorsMap() {
         return aliasToActiveChildMonitorsMap;
     }
 
-    public void setAliasToActiveChildMonitorsMap(Map<String, Monitor> aliasToActiveChildMonitorsMap) {
-        this.aliasToActiveChildMonitorsMap = aliasToActiveChildMonitorsMap;
-    }
-
-    public boolean hasActiveMonitors() {
-        boolean hasMonitor = false;
-        if ((this.aliasToActiveChildMonitorsMap != null && !this.aliasToActiveChildMonitorsMap.isEmpty())) {
-            hasMonitor = true;
-        }
-        return hasMonitor;
-    }
-
+    /**
+     * This will return the specific child monitor
+     *
+     * @param childId id of the child
+     * @return child monitor
+     */
     public Monitor getMonitor(String childId) {
         return this.aliasToActiveChildMonitorsMap.get(childId);
     }
 
+    /**
+     * Whether the monitor has child monitors or not
+     *
+     * @return true if the monitor has child monitors
+     */
     public boolean hasMonitors() {
 
         return this.aliasToActiveChildMonitorsMap != null;
     }
 
-    public boolean hasIndependentChild() {
-        boolean hasInDepChild = false;
-        for (Monitor monitor : this.aliasToActiveChildMonitorsMap.values()) {
-            if (!monitor.hasStartupDependents()) {
-                hasInDepChild = true;
-                break;
-            }
-        }
-        return hasInDepChild;
-    }
-
-    public Map<String, List<String>> getAliasToInactiveMonitorsMap() {
-        return this.inactiveInstancesMap;
-    }
-
-    public void setAliasToInactiveMonitorsMap(Map<String, List<String>> inactiveMonitorsList) {
-        this.inactiveInstancesMap = inactiveMonitorsList;
-    }
-
-    public Map<String, List<String>> getTerminatingInstancesMap() {
-        return terminatingInstancesMap;
-    }
-
-    public void setTerminatingInstancesMap(Map<String, List<String>> terminatingInstancesMap) {
-        this.terminatingInstancesMap = terminatingInstancesMap;
-    }
-
+    /**
+     * This will give the algorithm for the partitions for this monitor
+     *
+     * @param partitionAlgorithm algorithm name to be used for the partitions
+     * @return partition-algorithm instance of relevant partition algorithm
+     */
     public PartitionAlgorithm getAutoscaleAlgorithm(String partitionAlgorithm) {
         PartitionAlgorithm autoscaleAlgorithm = null;
         if (log.isDebugEnabled()) {
@@ -851,18 +854,33 @@ public abstract class ParentComponentMonitor extends Monitor {
         return autoscaleAlgorithm;
     }
 
+    /**
+     * Scale dependencies from the children
+     * @return scale dependencies
+     */
     public Set<ScalingDependentList> getScalingDependencies() {
         return scalingDependencies;
     }
 
+    /**
+     * Startup-order tree built among the children according to the specified startup-order
+     * @return startup-dependency-tree
+     */
     public DependencyTree getStartupDependencyTree() {
         return startupDependencyTree;
     }
 
+    /**
+     * This will give the network partitions used by this monitor
+     * @return network-partition-contexts
+     */
     public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts() {
         return networkPartitionCtxts;
     }
 
+    /**
+     * Inner class used a Thread to start the relevant child monitor in a asynchronous manner
+     */
     private class MonitorAdder implements Runnable {
 
         private final ApplicationChildContext context;
@@ -926,7 +944,6 @@ public abstract class ParentComponentMonitor extends Monitor {
                     String msg = String.format("Monitor creation failed even after retrying for " +
                             "5 times: [type] %s [component] %s ", monitorTypeStr, context.getId());
                     log.error(msg);
-                    //TODO parent.notify();
                     throw new RuntimeException(msg);
                 }