jp.primecloud.auto.component.mysql.process.MySQLPuppetComponentProcess.java Source code

Java tutorial

Introduction

Here is the source code for jp.primecloud.auto.component.mysql.process.MySQLPuppetComponentProcess.java

Source

/*
 * Copyright 2014 by SCSK Corporation.
 * 
 * This file is part of PrimeCloud Controller(TM).
 * 
 * PrimeCloud Controller(TM) is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 * 
 * PrimeCloud Controller(TM) is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with PrimeCloud Controller(TM). If not, see <http://www.gnu.org/licenses/>.
 */
package jp.primecloud.auto.component.mysql.process;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import jp.primecloud.auto.common.status.ComponentInstanceStatus;
import jp.primecloud.auto.entity.crud.AwsVolume;
import jp.primecloud.auto.entity.crud.ComponentConfig;
import jp.primecloud.auto.entity.crud.ComponentInstance;
import jp.primecloud.auto.entity.crud.Instance;
import jp.primecloud.auto.entity.crud.InstanceConfig;
import jp.primecloud.auto.exception.AutoException;

import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;

import jp.primecloud.auto.component.mysql.MySQLConstants;
import jp.primecloud.auto.process.ComponentProcessContext;
import jp.primecloud.auto.process.puppet.PuppetComponentProcess;

/**
 * <p>
 * TODO: 
 * </p>
 *
 */
public class MySQLPuppetComponentProcess extends PuppetComponentProcess {

    /**
     * TODO: 
     */
    public MySQLPuppetComponentProcess() {
        componentTypeName = MySQLConstants.COMPONENT_TYPE_NAME;
        awsVolumeDevice = MySQLConstants.AWS_VOLUME_DEVICE;
        vmwareDiskScsiId = MySQLConstants.VMWARE_DISK_SCSI_ID;
    }

    @Override
    protected void configureInstances(Long componentNo, ComponentProcessContext context, boolean start,
            List<Long> instanceNos) {
        // Master?Slave??
        List<Long> masterInstanceNos = new ArrayList<Long>();
        List<Long> slaveInstanceNos = new ArrayList<Long>();
        Map<Long, Long> masterInstanceNoMap = createMasterInstanceNoMap(componentNo, context, start);
        for (Entry<Long, Long> entry : masterInstanceNoMap.entrySet()) {
            if (entry.getValue() == null) {
                masterInstanceNos.add(entry.getKey());
            } else {
                slaveInstanceNos.add(entry.getKey());
            }
        }

        if (start) {
            // Master????????
            if (!masterInstanceNos.isEmpty()) {
                super.configureInstances(componentNo, context, start, masterInstanceNos);
            }

            // Slave????????
            if (!slaveInstanceNos.isEmpty()) {
                super.configureInstances(componentNo, context, start, slaveInstanceNos);
            }
        } else {
            // Slave????????
            if (!slaveInstanceNos.isEmpty()) {
                super.configureInstances(componentNo, context, start, slaveInstanceNos);
            }

            // Master????????
            if (!masterInstanceNos.isEmpty()) {
                super.configureInstances(componentNo, context, start, masterInstanceNos);
            }
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    protected void configureInstance(Long componentNo, ComponentProcessContext context, boolean start,
            Long instanceNo, Map<String, Object> rootMap) {
        // Slave?????????Master?????????????
        if (start) {
            Map<Long, Long> masterInstanceNoMap = (Map<Long, Long>) rootMap.get("masterInstanceNoMap");
            Long masterInstanceNo = masterInstanceNoMap.get(instanceNo);
            if (masterInstanceNo != null) {
                AwsVolume awsVolume = awsVolumeDao.readByComponentNoAndInstanceNo(componentNo, instanceNo);
                if (awsVolume == null) {
                    ComponentInstance master = componentInstanceDao.read(componentNo, masterInstanceNo);
                    if (master == null || ComponentInstanceStatus
                            .fromStatus(master.getStatus()) != ComponentInstanceStatus.RUNNING) {
                        throw new AutoException("EPROCESS-200101", instanceNo, masterInstanceNo);
                    }
                }
            }
        }

        super.configureInstance(componentNo, context, start, instanceNo, rootMap);
    }

    protected Map<Long, Long> createMasterInstanceNoMap(Long componentNo, ComponentProcessContext context,
            boolean start) {
        Map<Long, Long> masterInstanceNoMap = new HashMap<Long, Long>();
        List<Long> instanceNos;
        if (start) {
            instanceNos = context.getEnableInstanceNoMap().get(componentNo);
        } else {
            instanceNos = context.getDisableInstanceNoMap().get(componentNo);
        }
        if (instanceNos != null) {
            for (Long instanceNo : instanceNos) {
                InstanceConfig config = instanceConfigDao.readByInstanceNoAndComponentNoAndConfigName(instanceNo,
                        componentNo, MySQLConstants.CONFIG_NAME_MASTER_INSTANCE_NO);
                Long masterInstanceNo = null;
                if (config != null && StringUtils.isNotEmpty(config.getConfigValue())) {
                    masterInstanceNo = Long.valueOf(config.getConfigValue());
                }
                masterInstanceNoMap.put(instanceNo, masterInstanceNo);
            }
        }

        return masterInstanceNoMap;
    }

    @Override
    protected Map<String, Object> createComponentMap(Long componentNo, ComponentProcessContext context,
            boolean start) {
        Map<String, Object> map = super.createComponentMap(componentNo, context, start);

        // masterInstanceNoMap
        Map<Long, Long> masterInstanceNoMap = createMasterInstanceNoMap(componentNo, context, start);
        map.put("masterInstanceNoMap", masterInstanceNoMap);

        // phpMyAdmin
        ComponentConfig componentConfig = componentConfigDao.readByComponentNoAndConfigName(componentNo,
                MySQLConstants.CONFIG_NAME_PHP_MY_ADMIN);
        if (componentConfig != null) {
            boolean phpMyAdmin = BooleanUtils.toBoolean(componentConfig.getConfigValue());
            map.put("phpMyAdmin", phpMyAdmin);
        }

        return map;
    }

    @Override
    @SuppressWarnings("unchecked")
    protected Map<String, Object> createInstanceMap(Long componentNo, ComponentProcessContext context,
            boolean start, Long instanceNo, Map<String, Object> rootMap) {
        Map<String, Object> map = super.createInstanceMap(componentNo, context, start, instanceNo, rootMap);

        // Master??Slave????????
        Map<Long, Long> masterInstanceNoMap = (Map<Long, Long>) rootMap.get("masterInstanceNoMap");
        Long masterInstanceNo = masterInstanceNoMap.get(instanceNo);
        if (masterInstanceNo == null) {
            // Master???
            map.put("mysqlType", "MASTER");

            // Slave?Instances
            List<Instance> slaveInstances = new ArrayList<Instance>();
            for (Entry<Long, Long> entry : masterInstanceNoMap.entrySet()) {
                if (instanceNo.equals(entry.getValue())) {
                    Instance instance = instanceDao.read(entry.getKey());
                    slaveInstances.add(instance);
                }
            }
            map.put("slaveInstances", slaveInstances);
        } else {
            // Slave???
            map.put("mysqlType", "SLAVE");
            map.put("masterInstanceNo", masterInstanceNo);

            // Master?Instance
            ComponentInstance master = componentInstanceDao.read(componentNo, masterInstanceNo);
            if (master != null
                    && ComponentInstanceStatus.fromStatus(master.getStatus()) == ComponentInstanceStatus.RUNNING) {
                Instance masterInstance = instanceDao.read(masterInstanceNo);
                map.put("masterInstance", masterInstance);
            }
        }

        return map;
    }

}