Package com.vmware.bdd.specpolicy

Source Code of com.vmware.bdd.specpolicy.CommonClusterExpandPolicy

/***************************************************************************
* Copyright (c) 2012-2014 VMware, Inc. All Rights Reserved
* Licensed 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 com.vmware.bdd.specpolicy;

import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;

import com.vmware.bdd.apitypes.ClusterCreate;
import com.vmware.bdd.apitypes.Datastore.DatastoreType;
import com.vmware.bdd.apitypes.GroupType;
import com.vmware.bdd.apitypes.InstanceType;
import com.vmware.bdd.apitypes.NodeGroupCreate;
import com.vmware.bdd.entity.NodeGroupEntity;
import com.vmware.bdd.exception.ClusterConfigException;
import com.vmware.bdd.software.mgmt.plugin.intf.SoftwareManager;
import com.vmware.bdd.spectypes.HadoopDistroMap;
import com.vmware.bdd.spectypes.HadoopRole;
import com.vmware.bdd.spectypes.IronfanStack;

public class CommonClusterExpandPolicy {
   private static final Logger logger = Logger.getLogger(CommonClusterExpandPolicy.class);

   public static void expandGroupInstanceType(NodeGroupEntity ngEntity, NodeGroupCreate group,
         Set<String> sharedPattern, Set<String> localPattern, SoftwareManager softwareManager) {
      logger.debug("Expand instance type config for group " + ngEntity.getName());
      InstanceType instanceType = ngEntity.getNodeType();
      int memory = ngEntity.getMemorySize();
      int cpu = ngEntity.getCpuNum();
      if (instanceType == null && (cpu == 0 || memory == 0)) {
         throw ClusterConfigException.INSTANCE_SIZE_NOT_SET(group.getName());
      }
      if (instanceType == null) {
         logger.debug("instance type is not set.");
         if (softwareManager.hasMgmtRole(group.getRoles())) {
            instanceType = InstanceType.MEDIUM;
         } else {
            instanceType = InstanceType.SMALL;
         }
         ngEntity.setNodeType(instanceType);
      } else {
         logger.debug("instance type is " + instanceType.toString());
      }
      if (group.getStorage().getSizeGB() <= 0) {
         GroupType groupType = null;
         if (softwareManager.hasMgmtRole(group.getRoles())) {
            groupType = GroupType.MANAGEMENTGROUP;
         } else {
            groupType = GroupType.WORKGROUP;
         }
         ngEntity.setStorageSize(ExpandUtils.getStorage(instanceType, groupType));
         logger.debug("CommonClusterExpandPolicy::expandGroupInstanceType:storage size is setting to default value: "
               + ngEntity.getStorageSize());
      } else {
         ngEntity.setStorageSize(group.getStorage().getSizeGB());
      }
      if (memory == 0) {
         ngEntity.setMemorySize(instanceType.getMemoryMB());
      }
      if (cpu == 0) {
         ngEntity.setCpuNum(instanceType.getCpuNum());
      }

      // storage
      logger.debug("storage size is set to : " + ngEntity.getStorageSize());
      if (ngEntity.getStorageType() == null) {
        
         DatastoreType storeType = null;
         if (softwareManager.hasMgmtRole(group.getRoles())) {
            if (group.getRoles().contains(
                  HadoopRole.MAPR_FILESERVER_ROLE.toString())) {
               storeType = DatastoreType.LOCAL;
            } else {
               storeType = DatastoreType.SHARED;
            }
         } else {
            storeType = DatastoreType.LOCAL;
         }
         if ((sharedPattern == null || sharedPattern.isEmpty())
               && DatastoreType.SHARED == storeType) {
            storeType = DatastoreType.LOCAL;
         }
         if ((localPattern == null || localPattern.isEmpty())
               && DatastoreType.LOCAL == storeType) {
            storeType = DatastoreType.SHARED;
         }
         ngEntity.setStorageType(storeType);
      } else {
         if ((sharedPattern == null || sharedPattern.isEmpty())
               && (ngEntity.getStorageType().equals(DatastoreType.SHARED))) {
            String msg =
                  "Group "
                        + ngEntity.getName()
                        + " is type SHARED, but there are no shared datastore in Serengeti.";
            logger.error(msg);
            throw ClusterConfigException.CLUSTER_CONFIG_DATASTORE_TYPE_NONEXISTENT(msg);
         }
         if ((localPattern == null || localPattern.isEmpty())
               && (ngEntity.getStorageType().equals(DatastoreType.LOCAL))) {
            String msg = "Group " + ngEntity.getName() + "'s  type is LOCAL, but no local datastore in serengeti.";
            logger.error(msg);
            throw ClusterConfigException.CLUSTER_CONFIG_DATASTORE_TYPE_NONEXISTENT(msg);
         }
      }
   }

   public static void expandDistro(ClusterCreate clusterConfig,
         IronfanStack stack) {
      String packagesExistStatus = stack.getPackagesExistStatus();
      clusterConfig.setPackagesExistStatus(packagesExistStatus);
      switch (packagesExistStatus) {
      case "TARBALL":
         HadoopDistroMap map = new HadoopDistroMap();
         Map<String, String> distroMap = stack.getHadoopDistroMap();
         map.setHadoopUrl(distroMap.get("HadoopUrl"));
         map.setHiveUrl(distroMap.get("HiveUrl"));
         map.setPigUrl(distroMap.get("PigUrl"));
         map.setHbaseUrl(distroMap.get("HbaseUrl"));
         map.setZookeeperUrl(distroMap.get("ZookeeperUrl"));
         clusterConfig.setDistroMap(map);
         break;
      case "REPO":
         clusterConfig.setPackageRepos(stack.getPackageRepos());
         break;
      case "NONE":
         throw ClusterConfigException.MANIFEST_CONFIG_TARBALL_REPO_NONE();
      case "BOTH":
         throw ClusterConfigException.MANIFEST_CONFIG_TARBALL_REPO_COEXIST();
      }
   }
}
TOP

Related Classes of com.vmware.bdd.specpolicy.CommonClusterExpandPolicy

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.