/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller;
import java.util.List;
import com.emc.storageos.db.client.model.StoragePool;
import com.emc.storageos.db.client.model.StorageSystem;
import com.emc.storageos.db.client.model.Volume;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.volumecontroller.impl.block.taskcompleter.MetaVolumeTaskCompleter;
import com.emc.storageos.volumecontroller.impl.utils.VirtualPoolCapabilityValuesWrapper;
/**
*
* This interface defines all the meta volume supported operations. This should
* be implemented by specific device meta volume operations and implement the
* device specific logic.
*
*/
public interface MetaVolumeOperations {
/**
* Create meta volume head device. Meta volume is represented by its head.
* We create it as a regular bound volume.
*
* @param storageSystem
* @param storagePool
* @param metaHead
* @param capacity
* @param capabilities
* @param metaVolumeTaskCompleter
* @throws Exception
*/
public void createMetaVolumeHead(StorageSystem storageSystem,
StoragePool storagePool, Volume metaHead, long capacity,
VirtualPoolCapabilityValuesWrapper capabilities,
MetaVolumeTaskCompleter metaVolumeTaskCompleter) throws Exception;
/**
* Create meta volume member devices. These devices provide capacity to meta
* volume. SMI-S requires that these devices be created unbound form a pool.
*
* @param storageSystem
* @param storagePool
* @param metaHead
* @param memberCount
* @param memberCapacity
* @param metaVolumeTaskCompleter
* @return list of native ids of meta member devices
* @throws Exception
*/
public List<String> createMetaVolumeMembers(StorageSystem storageSystem,
StoragePool storagePool, Volume metaHead, int memberCount,
long memberCapacity, MetaVolumeTaskCompleter metaVolumeTaskCompleter)
throws Exception;
/**
* Create meta volume from provided meta head and meta members
*
* @param storageSystem
* storageSystem
* @param metaHead
* meta head
* @param metaMembers
* list of native ids of meta volume members (not including meta
* head)
* @param metaType
* meta volume type to create, concatenate or stripe
* @param capabilities
* capabilities
* @param metaVolumeTaskCompleter
* task completer
*/
public void createMetaVolume(StorageSystem storageSystem, StoragePool storagePool,
Volume metaHead, List<String> metaMembers, String metaType,
VirtualPoolCapabilityValuesWrapper capabilities,
MetaVolumeTaskCompleter metaVolumeTaskCompleter) throws Exception;
/**
* Create multiple meta volumes with the same characteristics.
*
* @param storageSystem
* @param storagePool
* @param volumes
* @param capabilities
* @param taskCompleter
* @throws Exception
*/
public void createMetaVolumes(StorageSystem storageSystem, StoragePool storagePool, List<Volume> volumes,
VirtualPoolCapabilityValuesWrapper capabilities, TaskCompleter taskCompleter) throws Exception;
/**
* Expand meta volume.
*
* @param storageSystem
* @param storagePool
* @param metaHead
* @param newMetaMembers
* @param metaVolumeTaskCompleter
* @throws DeviceControllerException
*/
public void expandMetaVolume(StorageSystem storageSystem, StoragePool storagePool,
Volume metaHead, List<String> newMetaMembers, MetaVolumeTaskCompleter metaVolumeTaskCompleter)
throws Exception;
/**
* Expand volume as meta volume.
*
* @param storageSystem
* @param storagePool
* @param metaHead
* @param metaMembers
* @param metaType
* @param metaVolumeTaskCompleter
* @throws Exception
*/
void expandVolumeAsMetaVolume(StorageSystem storageSystem, StoragePool storagePool,
Volume metaHead, List<String> metaMembers, String metaType,
MetaVolumeTaskCompleter metaVolumeTaskCompleter) throws Exception;
/**
* Defines meta volume type for volume expansion.
*
* @param storageSystem
* @param volume
* @param metaVolumeType
* @param metaVolumeTaskCompleter
* @return
* @throws Exception
*/
public String defineExpansionType(StorageSystem storageSystem, Volume volume,
String metaVolumeType, MetaVolumeTaskCompleter metaVolumeTaskCompleter)
throws Exception;
public void deleteBCVHelperVolume(StorageSystem storageSystem, Volume volume)
throws Exception;
}