Package org.apache.stratos.autoscaler.api

Source Code of org.apache.stratos.autoscaler.api.AutoScalerServiceImpl

/*
* 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.api;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
import org.apache.stratos.autoscaler.exception.NonExistingLBException;
import org.apache.stratos.autoscaler.exception.PartitionValidationException;
import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface;
import org.apache.stratos.autoscaler.partition.PartitionGroup;
import org.apache.stratos.autoscaler.partition.PartitionManager;
import org.apache.stratos.autoscaler.policy.PolicyManager;
import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;

import java.util.ArrayList;

/**
* Auto Scaler Service API is responsible getting Partitions and Policies.
*/
public class AutoScalerServiceImpl implements AutoScalerServiceInterface{

  private static final Log log = LogFactory.getLog(AutoScalerServiceImpl.class);
  PartitionManager partitionManager = PartitionManager.getInstance();

  public Partition[] getAllAvailablePartitions(){
    return partitionManager.getAllPartitions();
  }
 
  public DeploymentPolicy[] getAllDeploymentPolicies(){
    return PolicyManager.getInstance().getDeploymentPolicyList();
  }
 
  public AutoscalePolicy[] getAllAutoScalingPolicy(){
    return PolicyManager.getInstance().getAutoscalePolicyList();
  }

  @Override
  public DeploymentPolicy[] getValidDeploymentPoliciesforCartridge(String cartridgeType) {
    ArrayList<DeploymentPolicy> validPolicies = new ArrayList<DeploymentPolicy>();
   
    for(DeploymentPolicy deploymentPolicy : this.getAllDeploymentPolicies()){
      Partition[] policyPartitions = deploymentPolicy.getAllPartitions();
            try {
                // call CC API
                CloudControllerClient.getInstance().validateDeploymentPolicy(cartridgeType, deploymentPolicy);
                // if this deployment policy is valid for this cartridge, add it.
                validPolicies.add(deploymentPolicy);     
            } catch (PartitionValidationException ignoredException) {
                // if this policy doesn't valid for the given cartridge, add a debug log.
                if (log.isDebugEnabled()) {
                    log.debug("Deployment policy [id] "+deploymentPolicy.getId()
                              +" is not valid for Cartridge [type] "+cartridgeType, ignoredException);
                }
            }
    }
    return validPolicies.toArray(new DeploymentPolicy[0]);
  }

  @Override
  public boolean addPartition(Partition partition) throws InvalidPartitionException {
        return partitionManager.addNewPartition(partition);
  }

  @Override
  public boolean addDeploymentPolicy(DeploymentPolicy depPolicy) throws InvalidPolicyException {
    return PolicyManager.getInstance().deployDeploymentPolicy(depPolicy);
  }

  @Override
  public boolean addAutoScalingPolicy(AutoscalePolicy aspolicy) throws InvalidPolicyException {
    return PolicyManager.getInstance().deployAutoscalePolicy(aspolicy);
  }

  @Override
  public Partition getPartition(String partitionId) {
    return partitionManager.getPartitionById(partitionId);
  }

  @Override
  public DeploymentPolicy getDeploymentPolicy(String deploymentPolicyId) {
    return PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId);
  }

  @Override
  public AutoscalePolicy getAutoscalingPolicy(String autoscalingPolicyId) {
    return PolicyManager.getInstance().getAutoscalePolicy(autoscalingPolicyId);
  }

  @Override
  public PartitionGroup[] getPartitionGroups(String deploymentPolicyId) { 
    return PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups();
  }

  public Partition[] getPartitionsOfDeploymentPolicy(String deploymentPolicyId) {
    DeploymentPolicy depPol = this.getDeploymentPolicy(deploymentPolicyId);
    if(null == depPol) {
      return null;
    }
   
    return depPol.getAllPartitions();
  }
 
  @Override
    public Partition[] getPartitionsOfGroup(String deploymentPolicyId, String groupId) {
        DeploymentPolicy depPol = this.getDeploymentPolicy(deploymentPolicyId);
        if(null == depPol) {
            return null;
        }
       
        PartitionGroup group = depPol.getPartitionGroup(groupId);
       
        if(group == null) {
            return null;
        }
       
        return group.getPartitions();
    }
 
  public void checkLBExistenceAgainstPolicy(String lbClusterId, String deploymentPolicyId) throws NonExistingLBException {
     
      boolean exist = false;
        for (PartitionGroup partitionGroup : PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups()) {

            NetworkPartitionLbHolder nwPartitionLbHolder = partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());

            if (nwPartitionLbHolder.isLBExist(lbClusterId)) {
                exist = true;
                break;
            }
        }
     
        if(!exist) {
            String msg = "LB with [cluster id] "+lbClusterId+
                    " does not exist in any network partition of [Deployment Policy] "+deploymentPolicyId;
            log.error(msg);
            throw new NonExistingLBException(msg);
        }
  }
 
  public boolean checkDefaultLBExistenceAgainstPolicy(String deploymentPolicyId) {

        for (PartitionGroup partitionGroup : PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups()) {

            NetworkPartitionLbHolder nwPartitionLbHolder = partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());

            if (!nwPartitionLbHolder.isDefaultLBExist()) {
                if (log.isDebugEnabled()) {
                    log.debug("Default LB does not exist in [network partition] " +
                              nwPartitionLbHolder.getNetworkPartitionId() + " of [Deployment Policy] " +
                              deploymentPolicyId);

                }
                return false;
            }

        }
       
        return true;
     
    }

    public String getDefaultLBClusterId (String deploymentPolicyName) {
      if(log.isDebugEnabled()) {
        log.debug("Default LB Cluster Id for Deployment Policy ["+deploymentPolicyName+"] ");
      }
        for (PartitionGroup partitionGroup : PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyName).getPartitionGroups()) {

            NetworkPartitionLbHolder nwPartitionLbHolder = partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());

            if (nwPartitionLbHolder.isDefaultLBExist()) {
                if (log.isDebugEnabled()) {
                    log.debug("Default LB does not exist in [network partition] " +
                            nwPartitionLbHolder.getNetworkPartitionId() + " of [Deployment Policy] " +
                            deploymentPolicyName);

                }
                return nwPartitionLbHolder.getDefaultLbClusterId();
            }

        }

        return null;
    }
 
  public boolean checkServiceLBExistenceAgainstPolicy(String serviceName, String deploymentPolicyId) {

        for (PartitionGroup partitionGroup : PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups()) {

                        NetworkPartitionLbHolder nwPartitionLbHolder = partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());

                if (!nwPartitionLbHolder.isServiceLBExist(serviceName)) {
                    if (log.isDebugEnabled()) {
                        log.debug("Service LB [service name] "+serviceName+" does not exist in [network partition] " +
                                  nwPartitionLbHolder.getNetworkPartitionId() + " of [Deployment Policy] " +
                                  deploymentPolicyId);

                    }
                    return false;
                }

        }
       
        return true;
       
    }

    public String getServiceLBClusterId (String serviceType, String deploymentPolicyName) {

        for (PartitionGroup partitionGroup : PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyName).getPartitionGroups()) {

            NetworkPartitionLbHolder nwPartitionLbHolder = partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());

            if (nwPartitionLbHolder.isServiceLBExist(serviceType)) {
                if (log.isDebugEnabled()) {
                    log.debug("Service LB [service name] "+serviceType+" does not exist in [network partition] " +
                            nwPartitionLbHolder.getNetworkPartitionId() + " of [Deployment Policy] " +
                            deploymentPolicyName);

                }
                return nwPartitionLbHolder.getLBClusterIdOfService(serviceType);
            }

        }

        return null;
    }
 
  public boolean checkClusterLBExistenceAgainstPolicy(String clusterId, String deploymentPolicyId) {

        for (PartitionGroup partitionGroup : PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups()) {

                        NetworkPartitionLbHolder nwPartitionLbHolder = partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());

                if (!nwPartitionLbHolder.isClusterLBExist(clusterId)) {
                    if (log.isDebugEnabled()) {
                        log.debug("Cluster LB [cluster id] "+clusterId+" does not exist in [network partition] " +
                                  nwPartitionLbHolder.getNetworkPartitionId() + " of [Deployment Policy] " +
                                  deploymentPolicyId);

                    }
                    return false;
                }

        }
       
        return true;
       
    }


}
TOP

Related Classes of org.apache.stratos.autoscaler.api.AutoScalerServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.