Package lcmc.host.domain

Source Code of lcmc.host.domain.HostBlockDevices

/*
* This file is part of LCMC written by Rasto Levrinc.
*
* Copyright (C) 2014, Rastislav Levrinc.
*
* The LCMC 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, or (at your option)
* any later version.
*
* The LCMC 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 LCMC; see the file COPYING.  If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/

package lcmc.host.domain;

import com.google.common.base.Optional;
import lcmc.drbd.domain.BlockDevice;

import javax.inject.Named;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

@Named
public class HostBlockDevices {
    private Set<BlockDevice> blockDevices = new LinkedHashSet<BlockDevice>();
    private ConcurrentMap<String, BlockDevice> byName = new ConcurrentHashMap<String, BlockDevice>();

    public Set<BlockDevice> getBlockDevices() {
        return new LinkedHashSet<BlockDevice>(blockDevices);
    }

    public void setBlockDevices(final Collection<BlockDevice> newBlockDevices) {
        for (final BlockDevice newBlockDevice : newBlockDevices) {
            blockDevices.add(newBlockDevice);
            byName.put(newBlockDevice.getName(), newBlockDevice);
        }
        for (final BlockDevice oldBlockDevice : new HashSet<BlockDevice>(blockDevices)) {
            if (!newBlockDevices.contains(oldBlockDevice)) {
                blockDevices.remove(oldBlockDevice);
                byName.remove(oldBlockDevice);
            }
        }
    }

    /**
     * Returns blockDevices as array list of device names. Removes the
     * ones that are in the drbd and are already used in CRM.
     */
    public Collection<String> getBlockDevicesNames() {
        final Collection<String> blockDevicesNames = new ArrayList<String>();
        for (final String bdName : byName.keySet()) {
            final BlockDevice bd = byName.get(bdName);
            if (!bd.isDrbd() && !bd.isUsedByCRM()) {
                blockDevicesNames.add(bdName);
            }
        }
        return blockDevicesNames;
    }

    /**
     * Returns blockDevices as array list of device names.
     *
     * @param otherBlockDevices
     *          list of block devices with which the intersection with
     *          block devices of this host is made.
     *
     */
    public Optional<Collection<String>> getBlockDevicesNamesIntersection(
            final Optional<Collection<String>> otherBlockDevices) {
        if (!otherBlockDevices.isPresent()) {
            return Optional.of(getBlockDevicesNames());
        }
        final Collection<String> blockDevicesIntersection = new ArrayList<String>();
        for (final String otherBlockDevice : otherBlockDevices.get()) {
            final BlockDevice blockDevice = byName.get(otherBlockDevice);
            if (blockDevice != null && !blockDevice.isDrbd()) {
                blockDevicesIntersection.add(otherBlockDevice);
            }
        }
        return Optional.of(blockDevicesIntersection);
    }

    public void resetDrbdOnBlockDevices(final boolean drbdStatus) {
        if (!drbdStatus) {
            for (final BlockDevice blockDevice : getBlockDevices()) {
                blockDevice.resetDrbd();
            }
        }
    }

    public Optional<BlockDevice> getBlockDeviceByName(final String device) {
        return Optional.fromNullable(byName.get(device));
    }

    public void setDiskSpace(final Map<String, String> diskSpaces) {
        for (final Map.Entry<String, String> entry : diskSpaces.entrySet()) {
            final BlockDevice blockDevice = byName.get(entry.getKey());
            if (blockDevice != null) {
                blockDevice.setUsed(entry.getValue());
            }
        }
    }
}
TOP

Related Classes of lcmc.host.domain.HostBlockDevices

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.