http://git-wip-us.apache.org/repos/asf/stratos/blob/d9c323a2/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java deleted file mode 100644 index 1ef3a58..0000000 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java +++ /dev/null @@ -1,1246 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.stratos.autoscaler.monitor.cluster; - -import org.apache.commons.configuration.XMLConfiguration; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.client.CloudControllerClient; -import org.apache.stratos.autoscaler.context.InstanceContext; -import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory; -import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext; -import org.apache.stratos.autoscaler.context.cluster.VMClusterContext; -import org.apache.stratos.autoscaler.context.member.MemberStatsContext; -import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext; -import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext; -import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher; -import org.apache.stratos.autoscaler.event.publisher.InstanceNotificationPublisher; -import org.apache.stratos.autoscaler.exception.InvalidArgumentException; -import org.apache.stratos.autoscaler.exception.cartridge.TerminationException; -import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException; -import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException; -import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; -import org.apache.stratos.autoscaler.monitor.events.ScalingEvent; -import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent; -import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder; -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.cloud.controller.stub.domain.MemberContext; -import org.apache.stratos.common.Properties; -import org.apache.stratos.common.Property; -import org.apache.stratos.common.constants.StratosConstants; -import org.apache.stratos.messaging.domain.applications.ApplicationStatus; -import org.apache.stratos.messaging.domain.applications.GroupStatus; -import org.apache.stratos.messaging.domain.instance.ClusterInstance; -import org.apache.stratos.messaging.domain.instance.GroupInstance; -import org.apache.stratos.messaging.domain.instance.Instance; -import org.apache.stratos.messaging.domain.topology.Cluster; -import org.apache.stratos.messaging.domain.topology.ClusterStatus; -import org.apache.stratos.messaging.domain.topology.Member; -import org.apache.stratos.messaging.domain.topology.Service; -import org.apache.stratos.messaging.event.health.stat.*; -import org.apache.stratos.messaging.event.topology.*; -import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; - -import java.util.*; - -/** - * Is responsible for monitoring a service cluster. This runs periodically - * and perform minimum instance check and scaling check using the underlying - * rules engine. - */ -public class VMClusterMonitor extends AbstractClusterMonitor { - - private static final Log log = LogFactory.getLog(VMClusterMonitor.class); - private Map<String, ClusterLevelNetworkPartitionContext> networkPartitionIdToClusterLevelNetworkPartitionCtxts; - private boolean hasPrimary; - private float scalingFactorBasedOnDependencies = 1.0f; - - - protected VMClusterMonitor(Cluster cluster, boolean hasScalingDependents, boolean groupScalingEnabledSubtree) { - super(cluster, hasScalingDependents, groupScalingEnabledSubtree); - this.networkPartitionIdToClusterLevelNetworkPartitionCtxts = new HashMap<String, ClusterLevelNetworkPartitionContext>(); - readConfigurations(); - autoscalerRuleEvaluator = new AutoscalerRuleEvaluator(); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.VM_SCALE_CHECK_DROOL_FILE); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.VM_MIN_CHECK_DROOL_FILE); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.DEPENDENT_SCALE_CHECK_DROOL_FILE); - - this.obsoleteCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE); - this.scaleCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.VM_SCALE_CHECK_DROOL_FILE); - this.minCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.VM_MIN_CHECK_DROOL_FILE); - this.dependentScaleCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.DEPENDENT_SCALE_CHECK_DROOL_FILE); - } - - private static void terminateMember(String memberId) { - try { - CloudControllerClient.getInstance().terminate(memberId); - - } catch (TerminationException e) { - log.error("Unable to terminate member [member id ] " + memberId, e); - } - } - - private static void createClusterInstance(String serviceType, String clusterId, String alias, - String instanceId, String partitionId, String networkPartitionId) { - CloudControllerClient.getInstance().createClusterInstance(serviceType, clusterId, alias, - instanceId, partitionId, networkPartitionId); - } - - public void addClusterLevelNWPartitionContext(ClusterLevelNetworkPartitionContext clusterLevelNWPartitionCtxt) { - networkPartitionIdToClusterLevelNetworkPartitionCtxts.put(clusterLevelNWPartitionCtxt.getId(), clusterLevelNWPartitionCtxt); - } - - public ClusterLevelNetworkPartitionContext getClusterLevelNWPartitionContext(String nwPartitionId) { - return networkPartitionIdToClusterLevelNetworkPartitionCtxts.get(nwPartitionId); - } - - @Override - public void handleAverageLoadAverageEvent( - AverageLoadAverageEvent averageLoadAverageEvent) { - - String networkPartitionId = averageLoadAverageEvent.getNetworkPartitionId(); - String clusterId = averageLoadAverageEvent.getClusterId(); - String instanceId = averageLoadAverageEvent.getInstanceId(); - float value = averageLoadAverageEvent.getValue(); - - if (log.isDebugEnabled()) { - log.debug(String.format("Avg load avg event: [cluster] %s [network-partition] %s [value] %s", - clusterId, networkPartitionId, value)); - } - - ClusterInstanceContext clusterInstanceContext = getClusterInstanceContext(networkPartitionId, - instanceId); - if (null != clusterInstanceContext) { - clusterInstanceContext.setAverageLoadAverage(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void run() { - while (!isDestroyed()) { - try { - if (log.isDebugEnabled()) { - log.debug("Cluster monitor is running.. " + this.toString()); - } - monitor(); - } catch (Exception e) { - log.error("Cluster monitor: Monitor failed." + this.toString(), e); - } - try { - Thread.sleep(getMonitorIntervalMilliseconds()); - } catch (InterruptedException ignore) { - } - } - - - } - - private boolean isPrimaryMember(MemberContext memberContext) { - Properties props = AutoscalerUtil.toCommonProperties(memberContext.getProperties()); - if (log.isDebugEnabled()) { - log.debug(" Properties [" + props + "] "); - } - if (props != null && props.getProperties() != null) { - for (Property prop : props.getProperties()) { - if (prop.getName().equals("PRIMARY")) { - if (Boolean.parseBoolean(prop.getValue())) { - log.debug("Adding member id [" + memberContext.getMemberId() + "] " + - "member instance id [" + memberContext.getInstanceId() + "] as a primary member"); - return true; - } - } - } - } - return false; - } - - public synchronized void monitor() { - - for (ClusterLevelNetworkPartitionContext networkPartitionContext : getNetworkPartitionCtxts()) { - - final Collection<InstanceContext> clusterInstanceContexts = networkPartitionContext. - getInstanceIdToInstanceContextMap().values(); - - for (final InstanceContext pInstanceContext : clusterInstanceContexts) { - final ClusterInstanceContext instanceContext = (ClusterInstanceContext) pInstanceContext; - ClusterInstance instance = (ClusterInstance) this.instanceIdToInstanceMap. - get(instanceContext.getId()); - - if ((instance.getStatus().getCode() <= ClusterStatus.Active.getCode()) || - (instance.getStatus() == ClusterStatus.Inactive && !hasStartupDependents) - && !this.hasFaultyMember) { - - Runnable monitoringRunnable = new Runnable() { - @Override - public void run() { - - if (log.isDebugEnabled()) { - log.debug("Monitor is running for [cluster] : " + getClusterId()); - } - // store primary members in the cluster instance context - List<String> primaryMemberListInClusterInstance = new ArrayList<String>(); - - for (ClusterLevelPartitionContext partitionContext : - instanceContext.getPartitionCtxts()) { - - // get active primary members in this cluster instance context - for (MemberContext memberContext : partitionContext.getActiveMembers()) { - if (isPrimaryMember(memberContext)) { - primaryMemberListInClusterInstance.add(memberContext.getMemberId()); - } - } - - // get pending primary members in this cluster instance context - for (MemberContext memberContext : partitionContext.getPendingMembers()) { - if (isPrimaryMember(memberContext)) { - primaryMemberListInClusterInstance.add(memberContext.getMemberId()); - } - } - - obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate( - getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, partitionContext); - - } - - getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInClusterInstance); - getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); - getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary); - //FIXME when parent chosen the partition - String paritionAlgo = instanceContext.getPartitionAlgorithm(); - - getMinCheckKnowledgeSession().setGlobal("algorithmName", - paritionAlgo); - - if (log.isDebugEnabled()) { - log.debug(String.format("Running minimum check for cluster instance %s ", - instanceContext.getId() + " for the cluster: " + clusterId)); - } - - minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(), - minCheckFactHandle, instanceContext); - - - //checking the status of the cluster - boolean rifReset = instanceContext.isRifReset(); - boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset(); - boolean loadAverageReset = instanceContext.isLoadAverageReset(); - boolean averageRequestServedPerInstanceReset - = instanceContext.isAverageRequestServedPerInstanceReset(); - - if (log.isDebugEnabled()) { - log.debug("Execution point of scaling Rule, [Is rif Reset] : " + rifReset - + " [Is memoryConsumption Reset] : " + memoryConsumptionReset - + " [Is loadAverage Reset] : " + loadAverageReset); - } - - if (rifReset || memoryConsumptionReset || loadAverageReset) { - - log.info("Executing scaling rule as statistics have been reset"); - VMClusterContext vmClusterContext = (VMClusterContext) clusterContext; - - getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); - getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset); - getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset); - getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset); - getScaleCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary); - getScaleCheckKnowledgeSession().setGlobal("algorithmName", paritionAlgo); - getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy", - vmClusterContext.getAutoscalePolicy()); - getScaleCheckKnowledgeSession().setGlobal("arspiReset", - averageRequestServedPerInstanceReset); - getScaleCheckKnowledgeSession().setGlobal("primaryMembers", - primaryMemberListInClusterInstance); - - if (log.isDebugEnabled()) { - log.debug(String.format("Running scale check for [cluster instance context] %s ", - instanceContext.getId())); - log.debug(" Primary members : " + primaryMemberListInClusterInstance); - } - - scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getScaleCheckKnowledgeSession() - , scaleCheckFactHandle, instanceContext); - - instanceContext.setRifReset(false); - instanceContext.setMemoryConsumptionReset(false); - instanceContext.setLoadAverageReset(false); - } else if (log.isDebugEnabled()) { - log.debug(String.format("Scale rule will not run since the LB statistics have not " + - "received before this cycle for [cluster instance context] %s [cluster] %s", - instanceContext.getId(), clusterId)); - } - - } - }; - monitoringRunnable.run(); - } - - for (final ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) { - Runnable monitoringRunnable = new Runnable() { - @Override - public void run() { - obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate( - getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, partitionContext); - } - }; - - monitoringRunnable.run(); - - } - - } - } - } - - @Override - protected void readConfigurations() { - XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration(); - int monitorInterval = conf.getInt(AutoScalerConstants.VMService_Cluster_MONITOR_INTERVAL, 90000); - setMonitorIntervalMilliseconds(monitorInterval); - if (log.isDebugEnabled()) { - log.debug("VMClusterMonitor task interval set to : " + getMonitorIntervalMilliseconds()); - } - } - - @Override - public void destroy() { - getMinCheckKnowledgeSession().dispose(); - getObsoleteCheckKnowledgeSession().dispose(); - getScaleCheckKnowledgeSession().dispose(); - setDestroyed(true); - stopScheduler(); - if (log.isDebugEnabled()) { - log.debug("VMClusterMonitor Drools session has been disposed. " + this.toString()); - } - } - - @Override - public String toString() { - return "VMClusterMonitor [clusterId=" + getClusterId() + - ", hasPrimary=" + hasPrimary + " ]"; - } - - public boolean isHasPrimary() { - return hasPrimary; - } - - public void setHasPrimary(boolean hasPrimary) { - this.hasPrimary = hasPrimary; - } - - @Override - public void onChildStatusEvent(MonitorStatusEvent statusEvent) { - - } - - @Override - public void onParentStatusEvent(MonitorStatusEvent statusEvent) { - String instanceId = statusEvent.getInstanceId(); - // send the ClusterTerminating event - if (statusEvent.getStatus() == GroupStatus.Terminating || statusEvent.getStatus() == - ApplicationStatus.Terminating) { - if (log.isInfoEnabled()) { - log.info("Publishing Cluster terminating event for [application] " + appId + - " [cluster] " + this.getClusterId() + " [instance] " + instanceId); - } - ClusterStatusEventPublisher.sendClusterTerminatingEvent(getAppId(), getServiceId(), getClusterId(), instanceId); - } - } - - @Override - public void onChildScalingEvent(ScalingEvent scalingEvent) { - - } - - @Override - public void onChildScalingOverMaxEvent(ScalingOverMaxEvent scalingOverMaxEvent) { - - } - - @Override - public void onParentScalingEvent(ScalingEvent scalingEvent) { - - if (log.isDebugEnabled()) { - log.debug("Parent scaling event received to [cluster]: " + this.getClusterId() - + ", [network partition]: " + scalingEvent.getNetworkPartitionId() - + ", [event] " + scalingEvent.getId() + ", [group instance] " + scalingEvent.getInstanceId()); - } - - this.scalingFactorBasedOnDependencies = scalingEvent.getFactor(); - VMClusterContext vmClusterContext = (VMClusterContext) clusterContext; - String instanceId = scalingEvent.getInstanceId(); - - ClusterInstanceContext clusterInstanceContext = - getClusterInstanceContext(scalingEvent.getNetworkPartitionId(), instanceId); - - - // store primary members in the cluster instance context - List<String> primaryMemberListInClusterInstance = new ArrayList<String>(); - - for (ClusterLevelPartitionContext partitionContext : clusterInstanceContext.getPartitionCtxts()) { - - // get active primary members in this cluster instance context - for (MemberContext memberContext : partitionContext.getActiveMembers()) { - if (isPrimaryMember(memberContext)) { - primaryMemberListInClusterInstance.add(memberContext.getMemberId()); - } - } - - // get pending primary members in this cluster instance context - for (MemberContext memberContext : partitionContext.getPendingMembers()) { - if (isPrimaryMember(memberContext)) { - primaryMemberListInClusterInstance.add(memberContext.getMemberId()); - } - } - } - - - //TODO get min instance count from instance context - float requiredInstanceCount = clusterInstanceContext.getMinInstanceCount() * scalingFactorBasedOnDependencies; - int roundedRequiredInstanceCount = getRoundedInstanceCount(requiredInstanceCount, - vmClusterContext.getAutoscalePolicy().getInstanceRoundingFactor()); - clusterInstanceContext.setRequiredInstanceCountBasedOnDependencies(roundedRequiredInstanceCount); - - getDependentScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); - getDependentScaleCheckKnowledgeSession().setGlobal("roundedRequiredInstanceCount", roundedRequiredInstanceCount); - getDependentScaleCheckKnowledgeSession().setGlobal("algorithmName", clusterInstanceContext.getPartitionAlgorithm()); - getDependentScaleCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary); - - dependentScaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getDependentScaleCheckKnowledgeSession() - , dependentScaleCheckFactHandle, clusterInstanceContext); - - } - - public void sendClusterScalingEvent(String networkPartitionId, String instanceId, float factor) { - - MonitorStatusEventBuilder.handleClusterScalingEvent(this.parent, networkPartitionId, instanceId, factor, this.id); - } - - public void sendScalingOverMaxEvent(String networkPartitionId, String instanceId) { - - MonitorStatusEventBuilder.handleScalingOverMaxEvent(this.parent, networkPartitionId, instanceId, - this.id); - } - - @Override - public void handleGradientOfLoadAverageEvent( - GradientOfLoadAverageEvent gradientOfLoadAverageEvent) { - - String networkPartitionId = gradientOfLoadAverageEvent.getNetworkPartitionId(); - String clusterId = gradientOfLoadAverageEvent.getClusterId(); - String instanceId = gradientOfLoadAverageEvent.getInstanceId(); - float value = gradientOfLoadAverageEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Grad of load avg event: [cluster] %s [network-partition] %s [value] %s", - clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setLoadAverageGradient(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void handleSecondDerivativeOfLoadAverageEvent( - SecondDerivativeOfLoadAverageEvent secondDerivativeOfLoadAverageEvent) { - - String networkPartitionId = secondDerivativeOfLoadAverageEvent.getNetworkPartitionId(); - String clusterId = secondDerivativeOfLoadAverageEvent.getClusterId(); - String instanceId = secondDerivativeOfLoadAverageEvent.getInstanceId(); - float value = secondDerivativeOfLoadAverageEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Second Derivation of load avg event: [cluster] %s " - + "[network-partition] %s [value] %s", clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setLoadAverageSecondDerivative(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void handleAverageMemoryConsumptionEvent( - AverageMemoryConsumptionEvent averageMemoryConsumptionEvent) { - - String networkPartitionId = averageMemoryConsumptionEvent.getNetworkPartitionId(); - String clusterId = averageMemoryConsumptionEvent.getClusterId(); - String instanceId = averageMemoryConsumptionEvent.getInstanceId(); - float value = averageMemoryConsumptionEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Avg Memory Consumption event: [cluster] %s [network-partition] %s " - + "[value] %s", clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setAverageMemoryConsumption(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String - .format("Network partition context is not available for :" - + " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void handleGradientOfMemoryConsumptionEvent( - GradientOfMemoryConsumptionEvent gradientOfMemoryConsumptionEvent) { - - String networkPartitionId = gradientOfMemoryConsumptionEvent.getNetworkPartitionId(); - String clusterId = gradientOfMemoryConsumptionEvent.getClusterId(); - String instanceId = gradientOfMemoryConsumptionEvent.getInstanceId(); - float value = gradientOfMemoryConsumptionEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Grad of Memory Consumption event: [cluster] %s " - + "[network-partition] %s [value] %s", clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setMemoryConsumptionGradient(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void handleSecondDerivativeOfMemoryConsumptionEvent( - SecondDerivativeOfMemoryConsumptionEvent secondDerivativeOfMemoryConsumptionEvent) { - - String networkPartitionId = secondDerivativeOfMemoryConsumptionEvent.getNetworkPartitionId(); - String clusterId = secondDerivativeOfMemoryConsumptionEvent.getClusterId(); - String instanceId = secondDerivativeOfMemoryConsumptionEvent.getInstanceId(); - float value = secondDerivativeOfMemoryConsumptionEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Second Derivation of Memory Consumption event: [cluster] %s " - + "[network-partition] %s [value] %s", clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setMemoryConsumptionSecondDerivative(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - public void handleAverageRequestsServingCapabilityEvent( - AverageRequestsServingCapabilityEvent averageRequestsServingCapabilityEvent) { - - String clusterId = averageRequestsServingCapabilityEvent.getClusterId(); - String instanceId = averageRequestsServingCapabilityEvent.getInstanceId(); - String networkPartitionId = averageRequestsServingCapabilityEvent.getNetworkPartitionId(); - Float floatValue = averageRequestsServingCapabilityEvent.getValue(); - - if (log.isDebugEnabled()) { - log.debug(String.format("Average Requests Served per Instance event: [cluster] %s [network-partition] %s [value] %s", - clusterId, networkPartitionId, floatValue)); - } - - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setAverageRequestsServedPerInstance(floatValue); - - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - - } - - @Override - public void handleAverageRequestsInFlightEvent( - AverageRequestsInFlightEvent averageRequestsInFlightEvent) { - - String networkPartitionId = averageRequestsInFlightEvent.getNetworkPartitionId(); - String clusterId = averageRequestsInFlightEvent.getClusterId(); - String instanceId = averageRequestsInFlightEvent.getInstanceId(); - Float servedCount = averageRequestsInFlightEvent.getServedCount(); - Float activeInstances = averageRequestsInFlightEvent.getActiveInstances(); - Float requestsServedPerInstance = servedCount / activeInstances; - if (requestsServedPerInstance.isInfinite()) { - requestsServedPerInstance = 0f; - } - float value = averageRequestsInFlightEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Average Rif event: [cluster] %s [network-partition] %s [value] %s", - clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setAverageRequestsInFlight(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void handleGradientOfRequestsInFlightEvent( - GradientOfRequestsInFlightEvent gradientOfRequestsInFlightEvent) { - - String networkPartitionId = gradientOfRequestsInFlightEvent.getNetworkPartitionId(); - String clusterId = gradientOfRequestsInFlightEvent.getClusterId(); - String instanceId = gradientOfRequestsInFlightEvent.getInstanceId(); - float value = gradientOfRequestsInFlightEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Gradient of Rif event: [cluster] %s [network-partition] %s [value] %s", - clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setRequestsInFlightGradient(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void handleSecondDerivativeOfRequestsInFlightEvent( - SecondDerivativeOfRequestsInFlightEvent secondDerivativeOfRequestsInFlightEvent) { - - String networkPartitionId = secondDerivativeOfRequestsInFlightEvent.getNetworkPartitionId(); - String clusterId = secondDerivativeOfRequestsInFlightEvent.getClusterId(); - String instanceId = secondDerivativeOfRequestsInFlightEvent.getInstanceId(); - float value = secondDerivativeOfRequestsInFlightEvent.getValue(); - if (log.isDebugEnabled()) { - log.debug(String.format("Second derivative of Rif event: [cluster] %s " - + "[network-partition] %s [value] %s", clusterId, networkPartitionId, value)); - } - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - if (null != clusterLevelNetworkPartitionContext) { - clusterLevelNetworkPartitionContext.setRequestsInFlightSecondDerivative(value); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("Network partition context is not available for :" + - " [network partition] %s", networkPartitionId)); - } - } - } - - @Override - public void handleMemberAverageMemoryConsumptionEvent( - MemberAverageMemoryConsumptionEvent memberAverageMemoryConsumptionEvent) { - - String instanceId = memberAverageMemoryConsumptionEvent.getInstanceId(); - String memberId = memberAverageMemoryConsumptionEvent.getMemberId(); - Member member = getMemberByMemberId(memberId); - String networkPartitionId = getNetworkPartitionIdByMemberId(memberId); - ClusterInstanceContext networkPartitionCtxt = getClusterInstanceContext(networkPartitionId, - instanceId); - ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt( - member.getPartitionId()); - MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId); - if (null == memberStatsContext) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member context is not available for : [member] %s", memberId)); - } - return; - } - float value = memberAverageMemoryConsumptionEvent.getValue(); - memberStatsContext.setAverageMemoryConsumption(value); - } - - @Override - public void handleMemberGradientOfMemoryConsumptionEvent( - MemberGradientOfMemoryConsumptionEvent memberGradientOfMemoryConsumptionEvent) { - - String instanceId = memberGradientOfMemoryConsumptionEvent.getInstanceId(); - String memberId = memberGradientOfMemoryConsumptionEvent.getMemberId(); - Member member = getMemberByMemberId(memberId); - String networkPartitionId = getNetworkPartitionIdByMemberId(memberId); - ClusterInstanceContext networkPartitionCtxt = getClusterInstanceContext(networkPartitionId, - instanceId); - ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt( - member.getPartitionId()); - MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId); - if (null == memberStatsContext) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member context is not available for : [member] %s", memberId)); - } - return; - } - float value = memberGradientOfMemoryConsumptionEvent.getValue(); - memberStatsContext.setGradientOfMemoryConsumption(value); - } - - @Override - public void handleMemberSecondDerivativeOfMemoryConsumptionEvent( - MemberSecondDerivativeOfMemoryConsumptionEvent memberSecondDerivativeOfMemoryConsumptionEvent) { - - } - - @Override - public void handleMemberAverageLoadAverageEvent( - MemberAverageLoadAverageEvent memberAverageLoadAverageEvent) { - - String instanceId = memberAverageLoadAverageEvent.getInstanceId(); - String memberId = memberAverageLoadAverageEvent.getMemberId(); - Member member = getMemberByMemberId(memberId); - String networkPartitionId = getNetworkPartitionIdByMemberId(memberId); - ClusterInstanceContext networkPartitionCtxt = getClusterInstanceContext(networkPartitionId, - instanceId); - ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt( - member.getPartitionId()); - MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId); - if (null == memberStatsContext) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member context is not available for : [member] %s", memberId)); - } - return; - } - float value = memberAverageLoadAverageEvent.getValue(); - memberStatsContext.setAverageLoadAverage(value); - } - - @Override - public void handleMemberGradientOfLoadAverageEvent( - MemberGradientOfLoadAverageEvent memberGradientOfLoadAverageEvent) { - - String instanceId = memberGradientOfLoadAverageEvent.getInstanceId(); - String memberId = memberGradientOfLoadAverageEvent.getMemberId(); - Member member = getMemberByMemberId(memberId); - String networkPartitionId = getNetworkPartitionIdByMemberId(memberId); - ClusterInstanceContext networkPartitionCtxt = getClusterInstanceContext(networkPartitionId, - instanceId); - ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt( - member.getPartitionId()); - MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId); - if (null == memberStatsContext) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member context is not available for : [member] %s", memberId)); - } - return; - } - float value = memberGradientOfLoadAverageEvent.getValue(); - memberStatsContext.setGradientOfLoadAverage(value); - } - - @Override - public void handleMemberSecondDerivativeOfLoadAverageEvent( - MemberSecondDerivativeOfLoadAverageEvent memberSecondDerivativeOfLoadAverageEvent) { - - String instanceId = memberSecondDerivativeOfLoadAverageEvent.getInstanceId(); - String memberId = memberSecondDerivativeOfLoadAverageEvent.getMemberId(); - Member member = getMemberByMemberId(memberId); - String networkPartitionId = getNetworkPartitionIdByMemberId(memberId); - - ClusterInstanceContext networkPartitionCtxt = getClusterInstanceContext(networkPartitionId, - instanceId); - ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt( - member.getPartitionId()); - MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId); - if (null == memberStatsContext) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member context is not available for : [member] %s", memberId)); - } - return; - } - float value = memberSecondDerivativeOfLoadAverageEvent.getValue(); - memberStatsContext.setSecondDerivativeOfLoadAverage(value); - } - - @Override - public void handleMemberFaultEvent(MemberFaultEvent memberFaultEvent) { - - String memberId = memberFaultEvent.getMemberId(); - String clusterId = memberFaultEvent.getClusterId(); - Member member = getMemberByMemberId(memberId); - String instanceId = memberFaultEvent.getInstanceId(); - String networkPartitionId = memberFaultEvent.getNetworkPartitionId(); - if (null == member) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member not found in the Topology: [member] %s", memberId)); - } - return; - } - if (!member.isActive()) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member activated event has not received for the member %s. " - + "Therefore ignoring" + " the member fault health stat", memberId)); - } - return; - } - - ClusterInstanceContext nwPartitionCtxt; - nwPartitionCtxt = getClusterInstanceContext(networkPartitionId, instanceId); - String partitionId = getPartitionOfMember(memberId); - ClusterLevelPartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId); - if (!partitionCtxt.activeMemberExist(memberId)) { - if (log.isDebugEnabled()) { - log.debug(String.format("Could not find the active member in partition context, " - + "[member] %s ", memberId)); - } - return; - } - - // move member to obsolete list - synchronized (this) { - partitionCtxt.moveMemberToObsoleteList(memberId); - } - if (log.isDebugEnabled()) { - log.debug(String.format("Faulty member is added to obsolete list and removed from the active members list: " - + "[member] %s [partition] %s [cluster] %s ", memberId, partitionId, clusterId)); - } - - ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().process( - ClusterStatusInactiveProcessor.class.getName(), clusterId, instanceId); - } - - @Override - public void handleMemberStartedEvent( - MemberStartedEvent memberStartedEvent) { - - } - - @Override - public void handleMemberActivatedEvent( - MemberActivatedEvent memberActivatedEvent) { - - String instanceId = memberActivatedEvent.getInstanceId(); - String clusterId = memberActivatedEvent.getClusterId(); - String networkPartitionId = memberActivatedEvent.getNetworkPartitionId(); - String partitionId = memberActivatedEvent.getPartitionId(); - String memberId = memberActivatedEvent.getMemberId(); - ClusterInstanceContext networkPartitionCtxt = getClusterInstanceContext(networkPartitionId, instanceId); - ClusterLevelPartitionContext clusterLevelPartitionContext; - clusterLevelPartitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId); - clusterLevelPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId)); - if (log.isDebugEnabled()) { - log.debug(String.format("Member stat context has been added successfully: " - + "[member] %s", memberId)); - } - clusterLevelPartitionContext.movePendingMemberToActiveMembers(memberId); - ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().process( - ClusterStatusActiveProcessor.class.getName(), clusterId, instanceId); - } - - @Override - public void handleMemberMaintenanceModeEvent( - MemberMaintenanceModeEvent maintenanceModeEvent) { - - String networkPartitionId = maintenanceModeEvent.getNetworkPartitionId(); - String partitionId = maintenanceModeEvent.getPartitionId(); - String memberId = maintenanceModeEvent.getMemberId(); - String instanceId = maintenanceModeEvent.getInstanceId(); - ClusterInstanceContext networkPartitionCtxt = getClusterInstanceContext(networkPartitionId, - instanceId); - ClusterLevelPartitionContext clusterMonitorPartitionContext = networkPartitionCtxt. - getPartitionCtxt(partitionId); - clusterMonitorPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId)); - if (log.isDebugEnabled()) { - log.debug(String.format("Member has been moved as pending termination: " - + "[member] %s", memberId)); - } - clusterMonitorPartitionContext.moveActiveMemberToTerminationPendingMembers(memberId); - } - - @Override - public void handleMemberReadyToShutdownEvent(MemberReadyToShutdownEvent memberReadyToShutdownEvent) { - - ClusterInstanceContext nwPartitionCtxt; - String networkPartitionId = memberReadyToShutdownEvent.getNetworkPartitionId(); - String instanceId = memberReadyToShutdownEvent.getInstanceId(); - nwPartitionCtxt = getClusterInstanceContext(networkPartitionId, instanceId); - - // start a new member in the same Partition - String memberId = memberReadyToShutdownEvent.getMemberId(); - String partitionId = getPartitionOfMember(memberId); - ClusterLevelPartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId); - - try { - String clusterId = memberReadyToShutdownEvent.getClusterId(); - //move member to pending termination list - if (partitionCtxt.getPendingTerminationMember(memberId) != null) { - partitionCtxt.movePendingTerminationMemberToObsoleteMembers(memberId); - if (log.isDebugEnabled()) { - log.debug(String.format("Member is removed from the pending termination members " + - "and moved to obsolete list: [member] %s " + - "[partition] %s [cluster] %s ", memberId, partitionId, clusterId)); - } - } else if (partitionCtxt.getObsoleteMember(memberId) != null) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member is in obsolete list: [member] %s " + - "[partition] %s [cluster] %s ", memberId, partitionId, clusterId)); - } - } //TODO else part - - //when no more members are there to terminate Invoking it monitor directly - // to speed up the termination process - if (partitionCtxt.getTotalMemberCount() == 0) { - this.monitor(); - } - - - } catch (Exception e) { - String msg = "Error processing event " + e.getLocalizedMessage(); - log.error(msg, e); - } - } - - @Override - public void handleMemberTerminatedEvent( - MemberTerminatedEvent memberTerminatedEvent) { - - String networkPartitionId = memberTerminatedEvent.getNetworkPartitionId(); - String memberId = memberTerminatedEvent.getMemberId(); - String clusterId = memberTerminatedEvent.getClusterId(); - String instanceId = memberTerminatedEvent.getInstanceId(); - String partitionId = memberTerminatedEvent.getPartitionId(); - ClusterInstanceContext clusterLevelNetworkPartitionContext = getClusterInstanceContext( - networkPartitionId, instanceId); - ClusterLevelPartitionContext clusterMonitorPartitionContext = - clusterLevelNetworkPartitionContext.getPartitionCtxt(partitionId); - clusterMonitorPartitionContext.removeMemberStatsContext(memberId); - - if (clusterMonitorPartitionContext.removeTerminationPendingMember(memberId)) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member is removed from termination pending members list: " - + "[member] %s", memberId)); - } - } else if (clusterMonitorPartitionContext.removePendingMember(memberId)) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member is removed from pending members list: " - + "[member] %s", memberId)); - } - } else if (clusterMonitorPartitionContext.removeActiveMemberById(memberId)) { - log.warn(String.format("Member is in the wrong list and it is removed from " - + "active members list: %s", memberId)); - } else if (clusterMonitorPartitionContext.removeObsoleteMember(memberId)) { - log.warn(String.format("Obsolete member has either been terminated or its obsolete time out has expired and" - + " it is removed from obsolete members list: %s", memberId)); - } else { - log.warn(String.format("Member is not available in any of the list active, " - + "pending and termination pending: %s", memberId)); - } - - if (log.isDebugEnabled()) { - log.debug(String.format("Member stat context has been removed successfully: " - + "[member] %s", memberId)); - } - //Checking whether the cluster state can be changed either from in_active to created/terminating to terminated - ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().process( - ClusterStatusTerminatedProcessor.class.getName(), clusterId, instanceId); - } - - @Override - public void handleClusterRemovedEvent( - ClusterRemovedEvent clusterRemovedEvent) { - - } - - @Override - public void handleDynamicUpdates(Properties properties) throws InvalidArgumentException { - - } - - private String getNetworkPartitionIdByMemberId(String memberId) { - for (Service service : TopologyManager.getTopology().getServices()) { - for (Cluster cluster : service.getClusters()) { - if (cluster.memberExists(memberId)) { - return cluster.getMember(memberId).getNetworkPartitionId(); - } - } - } - return null; - } - - private Member getMemberByMemberId(String memberId) { - try { - TopologyManager.acquireReadLock(); - for (Service service : TopologyManager.getTopology().getServices()) { - for (Cluster cluster : service.getClusters()) { - if (cluster.memberExists(memberId)) { - return cluster.getMember(memberId); - } - } - } - return null; - } finally { - TopologyManager.releaseReadLock(); - } - } - - public String getPartitionOfMember(String memberId) { - for (Service service : TopologyManager.getTopology().getServices()) { - for (Cluster cluster : service.getClusters()) { - if (cluster.memberExists(memberId)) { - return cluster.getMember(memberId).getPartitionId(); - } - } - } - return null; - } - - @Override - public void terminateAllMembers(final String instanceId, final String networkPartitionId) { - final VMClusterMonitor monitor = this; - Thread memberTerminator = new Thread(new Runnable() { - public void run() { - - ClusterInstanceContext instanceContext = - (ClusterInstanceContext) getAllNetworkPartitionCtxts().get(networkPartitionId) - .getInstanceContext(instanceId); - boolean allMovedToObsolete = true; - for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) { - if (log.isInfoEnabled()) { - log.info("Starting to terminate all members in cluster [" + getClusterId() + "] " + - "Network Partition [" + instanceContext.getNetworkPartitionId() + "], Partition [" + - partitionContext.getPartitionId() + "]"); - } - // need to terminate active, pending and obsolete members - //FIXME to traverse concurrent - // active members - List<String> activeMembers = new ArrayList<String>(); - Iterator<MemberContext> iterator = partitionContext.getActiveMembers().listIterator(); - while (iterator.hasNext()) { - MemberContext activeMemberCtxt = iterator.next(); - activeMembers.add(activeMemberCtxt.getMemberId()); - - } - for (String memberId : activeMembers) { - log.info("Sending instance cleanup event for the active member: [member-id] " + memberId); - partitionContext.moveActiveMemberToTerminationPendingMembers(memberId); - InstanceNotificationPublisher.getInstance(). - sendInstanceCleanupEventForMember(memberId); - } - Iterator<MemberContext> pendingIterator = partitionContext.getPendingMembers().listIterator(); - - List<String> pendingMembers = new ArrayList<String>(); - while (pendingIterator.hasNext()) { - MemberContext activeMemberCtxt = pendingIterator.next(); - pendingMembers.add(activeMemberCtxt.getMemberId()); - - } - for (String memberId : pendingMembers) { - MemberContext pendingMemberCtxt = pendingIterator.next(); - // pending members - String memeberId = pendingMemberCtxt.getMemberId(); - if (log.isDebugEnabled()) { - log.debug("Moving pending member [member id] " + memeberId + " to obsolete list"); - } - partitionContext.movePendingMemberToObsoleteMembers(memeberId); - } - if(partitionContext.getTotalMemberCount() == 0) { - allMovedToObsolete = allMovedToObsolete && true; - } else { - allMovedToObsolete = false; - } - } - - if(allMovedToObsolete) { - monitor.monitor(); - } - } - }, "Member Terminator - [cluster id] " + getClusterId()); - - memberTerminator.start(); - } - - public Map<String, ClusterLevelNetworkPartitionContext> getAllNetworkPartitionCtxts() { - return ((VMClusterContext) this.clusterContext).getNetworkPartitionCtxts(); - } - - public ClusterInstanceContext getClusterInstanceContext(String networkPartitionId, String instanceId) { - Map<String, ClusterLevelNetworkPartitionContext> clusterLevelNetworkPartitionContextMap = - ((VMClusterContext) this.clusterContext).getNetworkPartitionCtxts(); - ClusterLevelNetworkPartitionContext networkPartitionContext = - clusterLevelNetworkPartitionContextMap.get(networkPartitionId); - ClusterInstanceContext instanceContext = (ClusterInstanceContext) networkPartitionContext. - getInstanceContext(instanceId); - return instanceContext; - } - - public Collection<ClusterLevelNetworkPartitionContext> getNetworkPartitionCtxts() { - return ((VMClusterContext) this.clusterContext).getNetworkPartitionCtxts().values(); - } - - public void createClusterInstance(List<String> parentInstanceIds, Cluster cluster) - throws PolicyValidationException, PartitionValidationException { - for (String parentInstanceId : parentInstanceIds) { - createInstance(parentInstanceId, cluster); - } - - } - - public boolean createInstanceOnDemand(String instanceId) { - Cluster cluster = TopologyManager.getTopology().getService(this.serviceType). - getCluster(this.clusterId); - try { - return createInstance(instanceId, cluster); - //TODO exception - } catch (PolicyValidationException e) { - log.error("Error while creating the cluster instance", e); - } catch (PartitionValidationException e) { - log.error("Error while creating the cluster instance", e); - - } - return false; - - } - - private boolean createInstance(String parentInstanceId, Cluster cluster) - throws PolicyValidationException, PartitionValidationException { - Instance parentMonitorInstance = this.parent.getInstance(parentInstanceId); - String partitionId = null; - if (parentMonitorInstance instanceof GroupInstance) { - partitionId = parentMonitorInstance.getPartitionId(); - } - if (parentMonitorInstance != null) { - - ClusterInstance clusterInstance = cluster.getInstanceContexts(parentInstanceId); - if (clusterInstance != null) { - - // Cluster instance is already there. No need to create one. - VMClusterContext clusterContext = (VMClusterContext) this.getClusterContext(); - if (clusterContext == null) { - - clusterContext = ClusterContextFactory.getVMClusterContext(clusterInstance.getInstanceId(), cluster, - hasScalingDependents()); - this.setClusterContext(clusterContext); - } - - // create VMClusterContext and then add all the instanceContexts - clusterContext.addInstanceContext(parentInstanceId, cluster, hasScalingDependents(), - groupScalingEnabledSubtree()); - if (this.getInstance(clusterInstance.getInstanceId()) == null) { - this.addInstance(clusterInstance); - } - // Checking the current status of the cluster instance - boolean stateChanged = - ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain() - .process("", cluster.getClusterId(), clusterInstance.getInstanceId()); - if (!stateChanged && clusterInstance.getStatus() != ClusterStatus.Created) { - this.notifyParentMonitor(clusterInstance.getStatus(), - clusterInstance.getInstanceId()); - - if (this.hasMonitoringStarted().compareAndSet(false, true)) { - this.startScheduler(); - log.info("Monitoring task for Cluster Monitor with cluster id " + - cluster.getClusterId() + " started successfully"); - } - } - } else { - createClusterInstance(cluster.getServiceName(), cluster.getClusterId(), null, parentInstanceId, partitionId, - parentMonitorInstance.getNetworkPartitionId()); - - } - return true; - - } else { - return false; - - } - - } - - /** - * Move all the members of the cluster instance to termiantion pending - * - * @param instanceId - */ - public void moveMembersFromActiveToPendingTermination(String instanceId) { - - //TODO take read lock for network partition context - //FIXME to iterate properly - for (ClusterLevelNetworkPartitionContext networkPartitionContext : - ((VMClusterContext) this.clusterContext).getNetworkPartitionCtxts().values()) { - ClusterInstanceContext clusterInstanceContext = - (ClusterInstanceContext) networkPartitionContext.getInstanceContext(instanceId); - if (clusterInstanceContext != null) { - for (ClusterLevelPartitionContext partitionContext : clusterInstanceContext.getPartitionCtxts()) { - List<String> members = new ArrayList<String>(); - - Iterator<MemberContext> iterator = partitionContext.getActiveMembers().listIterator(); - while (iterator.hasNext()) { - MemberContext activeMember = iterator.next(); - members.add(activeMember.getMemberId()); - } - - for (String memberId : members) { - partitionContext.moveActiveMemberToTerminationPendingMembers( - memberId); - } - List<String> pendingMembers = new ArrayList<String>(); - - Iterator<MemberContext> pendingIterator = partitionContext.getPendingMembers().listIterator(); - while (pendingIterator.hasNext()) { - MemberContext activeMember = pendingIterator.next(); - pendingMembers.add(activeMember.getMemberId()); - } - for (String memberId : members) { - // pending members - if (log.isDebugEnabled()) { - log.debug("Moving pending member [member id] " + memberId + " the obsolete list"); - } - partitionContext.movePendingMemberToObsoleteMembers(memberId); - } - } - } - } - } - - -}
http://git-wip-us.apache.org/repos/asf/stratos/blob/d9c323a2/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java deleted file mode 100644 index a69d3bd..0000000 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java +++ /dev/null @@ -1,194 +0,0 @@ -///* -// * Licensed to the Apache Software Foundation (ASF) under one -// * or more contributor license agreements. See the NOTICE file -// * distributed with this work for additional information -// * regarding copyright ownership. The ASF licenses this file -// * to you under the Apache License, Version 2.0 (the -// * "License"); you may not use this file except in compliance -// * with the License. You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, -// * software distributed under the License is distributed on an -// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// * KIND, either express or implied. See the License for the -// * specific language governing permissions and limitations -// * under the License. -// */ -//package org.apache.stratos.autoscaler.monitor.cluster; -// -//import java.util.List; -//import java.util.Map; -//import java.util.Set; -// -//import org.apache.commons.configuration.XMLConfiguration; -//import org.apache.commons.logging.Log; -//import org.apache.commons.logging.LogFactory; -//import org.apache.stratos.autoscaler.*; -//import org.apache.stratos.autoscaler.context.cluster.AbstractClusterContext; -//import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext; -//import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext; -//import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent; -//import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.PartitionManager; -//import org.apache.stratos.autoscaler.pojo.policy.PolicyManager; -//import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy; -//import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; -//import org.apache.stratos.autoscaler.util.AutoScalerConstants; -//import org.apache.stratos.autoscaler.util.ConfUtil; -//import org.apache.stratos.common.constants.StratosConstants; -//import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent; -// -///** -// * Is responsible for monitoring a service cluster. This runs periodically -// * and perform minimum instance check and scaling check using the underlying -// * rules engine. -// */ -//public class VMLbClusterMonitor extends VMClusterMonitor { -// -// private static final Log log = LogFactory.getLog(VMLbClusterMonitor.class); -// -// public VMLbClusterMonitor(String serviceType, String clusterId) { -// super(serviceType, clusterId, new AutoscalerRuleEvaluator( StratosConstants.VM_MIN_CHECK_DROOL_FILE, -// StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE, StratosConstants.VM_SCALE_CHECK_DROOL_FILE)); -// readConfigurations(); -// } -// -// @Override -// public void run() { -// -// while (!isDestroyed()) { -// if (log.isDebugEnabled()) { -// log.debug("Cluster monitor is running.. " + this.toString()); -// } -// try { -// //TODO ******** if (!ClusterStatus.Inactive.equals(getStatus())) { -// monitor(); -// /*} else { -// if (log.isDebugEnabled()) { -// log.debug("LB Cluster monitor is suspended as the cluster is in " + -// ClusterStatus.Inactive + " mode......"); -// } -// }*/ -// } catch (Exception e) { -// log.error("Cluster monitor: Monitor failed. " + this.toString(), e); -// } -// try { -// Thread.sleep(getMonitorIntervalMilliseconds()); -// } catch (InterruptedException ignore) { -// } -// } -// } -// -// @Override -// protected void monitor() { -// -// Set<Map.Entry<String, AbstractClusterContext>> instanceIdToClusterCtxtEntries = instanceIdToClusterContextMap.entrySet(); -// for (final Map.Entry<String, AbstractClusterContext> instanceIdToClusterCtxtEntry : instanceIdToClusterCtxtEntries) { -// Runnable monitoringRunnable = new Runnable() { -// -// @Override -// public void run() { -// for (ClusterLevelNetworkPartitionContext networkPartitionContext : getNetworkPartitionCtxts(instanceIdToClusterCtxtEntry.getKey()).values()) { -// -// // minimum check per partition -// for (ClusterLevelPartitionContext partitionContext : networkPartitionContext.getPartitionCtxts() -// .values()) { -// -// if (partitionContext != null) { -// getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); -// getMinCheckKnowledgeSession().setGlobal("isPrimary", false); -// -// if (log.isDebugEnabled()) { -// log.debug(String.format("Running minimum check for partition %s ", -// partitionContext.getPartitionId())); -// } -// -// minCheckFactHandle = -// AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(), -// minCheckFactHandle, -// partitionContext); -// obsoleteCheckFactHandle = -// AutoscalerRuleEvaluator.evaluateObsoleteCheck(getObsoleteCheckKnowledgeSession(), -// obsoleteCheckFactHandle, partitionContext); -// // start only in the first partition context -// break; -// } -// -// } -// -// } -// } -// }; -// -// monitoringRunnable.run(); -// } -// } -// -// @Override -// public void destroy() { -// getMinCheckKnowledgeSession().dispose(); -// getObsoleteCheckKnowledgeSession().dispose(); -// getMinCheckKnowledgeSession().dispose(); -// setDestroyed(true); -// stopScheduler(); -// if (log.isDebugEnabled()) { -// log.debug("VMLbClusterMonitor Drools session has been disposed. " + this.toString()); -// } -// } -// -// @Override -// protected void readConfigurations() { -// XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration(); -// int monitorInterval = conf.getInt(AutoScalerConstants.VMLb_Cluster_MONITOR_INTERVAL, 90000); -// setMonitorIntervalMilliseconds(monitorInterval); -// if (log.isDebugEnabled()) { -// log.debug("VMLbClusterMonitor task interval set to : " + getMonitorIntervalMilliseconds()); -// } -// } -// -// @Override -// public void handleClusterRemovedEvent( -// ClusterRemovedEvent clusterRemovedEvent) { -// -// String deploymentPolicy = clusterRemovedEvent.getDeploymentPolicy(); -// String clusterId = clusterRemovedEvent.getClusterId(); -// DeploymentPolicy depPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicy); -// if (depPolicy != null) { -// List<NetworkPartitionLbHolder> lbHolders = PartitionManager.getInstance() -// .getNetworkPartitionLbHolders(depPolicy); -// -// for (NetworkPartitionLbHolder networkPartitionLbHolder : lbHolders) { -// // removes lb cluster ids -// boolean isRemoved = networkPartitionLbHolder.removeLbClusterId(clusterId); -// if (isRemoved) { -// log.info("Removed the lb cluster [id]:" -// + clusterId -// + " reference from Network Partition [id]: " -// + networkPartitionLbHolder -// .getNetworkPartitionId()); -// -// } -// if (log.isDebugEnabled()) { -// log.debug(networkPartitionLbHolder); -// } -// -// } -// } -// } -// -// @Override -// public String toString() { -// return "VMLbClusterMonitor [clusterId=" + getClusterId() + "]"; -// } -// -// @Override -// public void onChildScalingEvent(MonitorScalingEvent scalingEvent) { -// -// } -// -// @Override -// public void onParentScalingEvent(MonitorScalingEvent scalingEvent) { -// -// } -//} http://git-wip-us.apache.org/repos/asf/stratos/blob/d9c323a2/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 668aac4..957e0d3 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 @@ -33,7 +33,7 @@ import org.apache.stratos.autoscaler.exception.application.DependencyBuilderExce import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException; import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException; import org.apache.stratos.autoscaler.monitor.Monitor; -import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor; +import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor; import org.apache.stratos.autoscaler.monitor.events.GroupStatusEvent; import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; import org.apache.stratos.autoscaler.monitor.events.ScalingEvent; @@ -327,7 +327,7 @@ public class GroupMonitor extends ParentComponentMonitor { Monitor monitor = aliasToActiveMonitorsMap.get( scalingDependentListComponent); if (monitor instanceof GroupMonitor || - monitor instanceof VMClusterMonitor) { + monitor instanceof ClusterMonitor) { ScalingEvent childScalingEvent = new ScalingEvent(monitor.getId(), monitor.getId(), scalingEvent.getInstanceId(), http://git-wip-us.apache.org/repos/asf/stratos/blob/d9c323a2/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 d927223..6b635f6 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 @@ -30,7 +30,6 @@ import org.apache.stratos.autoscaler.applications.dependency.DependencyTree; import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext; import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder; import org.apache.stratos.autoscaler.context.InstanceContext; -import org.apache.stratos.autoscaler.context.partition.network.ApplicationLevelNetworkPartitionContext; 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; @@ -41,7 +40,7 @@ import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException; import org.apache.stratos.autoscaler.monitor.Monitor; import org.apache.stratos.autoscaler.monitor.MonitorFactory; import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor; -import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor; +import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor; import org.apache.stratos.autoscaler.monitor.events.ScalingEvent; import org.apache.stratos.autoscaler.monitor.events.ScalingOverMaxEvent; import org.apache.stratos.autoscaler.util.ServiceReferenceHolder; @@ -611,7 +610,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable Monitor monitor = aliasToActiveMonitorsMap.get( scalingDependentListComponent); if (monitor instanceof GroupMonitor || - monitor instanceof VMClusterMonitor) { + monitor instanceof ClusterMonitor) { ScalingEvent scalingEvent = new ScalingEvent(monitor.getId(), networkPartitionContext.getId(), instanceContext.getId(), http://git-wip-us.apache.org/repos/asf/stratos/blob/d9c323a2/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 512ed41..1374358 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 @@ -47,65 +47,21 @@ public class AutoscalerRuleEvaluator { private static final Log log = LogFactory.getLog(AutoscalerRuleEvaluator.class); -// //vm drool files as default -// private String minCheckDroolFileName = StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE; -// private String obsoleteCheckDroolFileName = StratosConstants.CONTAINER_OBSOLETE_CHECK_DROOL_FILE; -// private String scaleCheckDroolFileName = StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE; -// -// private static KnowledgeBase minCheckKbase; -// private static KnowledgeBase obsoleteCheckKbase; -// private static KnowledgeBase scaleCheckKbase; - private static Map<String, KnowledgeBase> knowledgeBases; public AutoscalerRuleEvaluator(){ - knowledgeBases = new HashMap<String, KnowledgeBase>(); -// if (minCheckDroolFileName != null && !minCheckDroolFileName.isEmpty()) { -// this.minCheckDroolFileName = minCheckDroolFileName; -// } -// -// if (obsoleteCheckDroolFileName != null && !obsoleteCheckDroolFileName.isEmpty()) { -// this.obsoleteCheckDroolFileName = obsoleteCheckDroolFileName; -// } -// -// if (scaleCheckDroolFileName != null && !scaleCheckDroolFileName.isEmpty()) { -// this.scaleCheckDroolFileName = scaleCheckDroolFileName; -// } -// -// minCheckKbase = readKnowledgeBase(this.minCheckDroolFileName); -// -// if (log.isDebugEnabled()) { -// log.debug("Minimum check rule is parsed successfully : " + this.minCheckDroolFileName); -// } -// -// obsoleteCheckKbase = readKnowledgeBase(this.obsoleteCheckDroolFileName); -// -// if (log.isDebugEnabled()) { -// log.debug("Obsolete check rule is parsed successfully : " + this.obsoleteCheckDroolFileName); -// } -// -// scaleCheckKbase = readKnowledgeBase(this.scaleCheckDroolFileName); -// -// if (log.isDebugEnabled()) { -// log.debug("Scale check rule is parsed successfully : " + this.scaleCheckDroolFileName); -// } -// } public void parseAndBuildKnowledgeBaseForDroolsFile(String drlFileName){ - knowledgeBases.put(drlFileName, readKnowledgeBase(drlFileName)); if (log.isDebugEnabled()) { log.debug("Drools file is parsed successfully : " + drlFileName); } - } public static FactHandle evaluate(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { - - if (handle == null) { ksession.setGlobal("delegator", new RuleTasksDelegator()); handle = ksession.insert(obj); @@ -118,82 +74,6 @@ public class AutoscalerRuleEvaluator { } return handle; } -// -// public static FactHandle evaluateObsoleteCheck(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { -// if (handle == null) { -// ksession.setGlobal("delegator", new RuleTasksDelegator()); -// handle = ksession.insert(obj); -// } else { -// ksession.update(handle, obj); -// } -// ksession.fireAllRules(); -// if(log.isDebugEnabled()){ -// log.debug(String.format("Obsolete check executed for : %s ", obj)); -// } -// return handle; -// } -// -// public static FactHandle evaluateScaleCheck(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { -// if (handle == null) { -// ksession.setGlobal("delegator", new RuleTasksDelegator()); -// handle = ksession.insert(obj); -// } else { -// ksession.update(handle, obj); -// } -// ksession.fireAllRules(); -// if(log.isDebugEnabled()){ -// log.debug(String.format("Scale check executed for : %s ", obj)); -// } -// return handle; -// } -// -// public static FactHandle evaluateDependentScaleCheck(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { -// if (handle == null) { -// ksession.setGlobal("delegator", new RuleTasksDelegator()); -// handle = ksession.insert(obj); -// } else { -// ksession.update(handle, obj); -// } -// ksession.fireAllRules(); -// if(log.isDebugEnabled()){ -// log.debug(String.format("Dependent scale check executed for : %s ", obj)); -// } -// return handle; -// } -// -// public static FactHandle evaluateTerminateAll(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { -// if (handle == null) { -// ksession.setGlobal("delegator", new RuleTasksDelegator()); -// handle = ksession.insert(obj); -// } else { -// ksession.update(handle, obj); -// } -// ksession.fireAllRules(); -// if(log.isDebugEnabled()){ -// log.debug(String.format("Terminate all check executed for : %s ", obj)); -// } -// return handle; -// } -// -// public static FactHandle evaluateTerminateDependency(StatefulKnowledgeSession ksession, FactHandle handle, Object obj) { -// if(log.isDebugEnabled()){ -// log.debug(String.format("Terminate dependency check executing for : %s ", obj)); -// } -// if (handle == null) { -// ksession.setGlobal("delegator", new RuleTasksDelegator()); -// handle = ksession.insert(obj); -// } else { -// ksession.update(handle, obj); -// } -// if(log.isDebugEnabled()){ -// log.debug(String.format("Terminate dependency check firing rules for : %s ", ksession)); -// } -// ksession.fireAllRules(); -// if(log.isDebugEnabled()){ -// log.debug(String.format("Terminate dependency check executed for : %s ", obj)); -// } -// return handle; -// } public StatefulKnowledgeSession getStatefulSession(String drlFileName) { StatefulKnowledgeSession ksession; @@ -201,48 +81,6 @@ public class AutoscalerRuleEvaluator { ksession.setGlobal("log", RuleLog.getInstance()); return ksession; } - -// public StatefulKnowledgeSession getObsoleteCheckStatefulSession() { -// StatefulKnowledgeSession ksession; -// ksession = obsoleteCheckKbase.newStatefulKnowledgeSession(); -// ksession.setGlobal("log", RuleLog.getInstance()); -// return ksession; -// } -// -// public StatefulKnowledgeSession getScaleCheckStatefulSession() { -// StatefulKnowledgeSession ksession; -// ksession = scaleCheckKbase.newStatefulKnowledgeSession(); -// ksession.setGlobal("log", RuleLog.getInstance()); -// return ksession; -// } -// -// public StatefulKnowledgeSession getTerminateAllStatefulSession() { -// StatefulKnowledgeSession ksession; -// ksession = scaleCheckKbase.newStatefulKnowledgeSession(); -// ksession.setGlobal("log", RuleLog.getInstance()); -// return ksession; -// } - -// public static String getLbClusterId(ClusterLevelPartitionContext clusterMonitorPartitionContext, String nwpartitionId) { -// Properties props = clusterMonitorPartitionContext.getProperties(); -// String value = -// (String) props.get(org.apache.stratos.messaging.util.Constants.LOAD_BALANCER_REF); -// -// if (value == null){ -// return null; -// } -// -// String lbClusterId = null; -// -// NetworkPartitionLbHolder networkPartitionLbHolder = PartitionManager.getInstance().getNetworkPartitionLbHolder(nwpartitionId); -// if (value.equals(org.apache.stratos.messaging.util.Constants.DEFAULT_LOAD_BALANCER)) { -// lbClusterId = networkPartitionLbHolder.getDefaultLbClusterId(); -// } else if (value.equals(org.apache.stratos.messaging.util.Constants.SERVICE_AWARE_LOAD_BALANCER)) { -// String serviceName = clusterMonitorPartitionContext.getServiceName(); -// lbClusterId = networkPartitionLbHolder.getLBClusterIdOfService(serviceName); -// } -// return lbClusterId; -// } private static KnowledgeBase readKnowledgeBase(String drlFileName) { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
