use of com.emc.storageos.vnxe.models.VNXeLun in project coprhd-controller by CoprHD.
the class VNXUnityArrayAffinityDiscoverer method processAllLuns.
/**
* Discover array affinity via LUNs
*
* @param system
* @param apiClient
* @param dbClient
* @param hostToVolumesMap
* @param volumeToHostsMap
* @param volumeToPoolMap
* @param hostIdToHostURIMap
* @throws Exception
*/
private void processAllLuns(StorageSystem system, VNXeApiClient apiClient, DbClient dbClient, Map<URI, List<String>> hostToVolumesMap, Map<String, Set<URI>> volumeToHostsMap, Map<String, URI> volumeToPoolMap, Map<String, URI> hostIdToHostURIMap) throws Exception {
List<VNXeLun> luns = apiClient.getAllLuns();
if (luns != null && !luns.isEmpty()) {
Map<String, StoragePool> pools = getStoragePoolMap(system, dbClient);
for (VNXeLun lun : luns) {
String nativeGuid = NativeGUIDGenerator.generateNativeGuidForVolumeOrBlockSnapShot(system.getNativeGuid(), lun.getId());
if (DiscoveryUtils.checkStorageVolumeExistsInDB(dbClient, nativeGuid) != null) {
logger.info("Skipping volume {} as it is already managed by ViPR", nativeGuid);
continue;
}
StoragePool pool = getStoragePoolOfUnManagedObject(lun.getPool().getId(), system, pools);
if (pool != null) {
// the Lun belong to a ViPR host
Set<URI> hostURIs = getHostURIs(lun, apiClient, dbClient, hostIdToHostURIMap);
volumeToHostsMap.put(lun.getId(), hostURIs);
for (URI hostURI : hostURIs) {
List<String> volumes = hostToVolumesMap.get(hostURI);
if (volumes == null) {
volumes = new ArrayList<String>();
hostToVolumesMap.put(hostURI, volumes);
}
volumes.add(lun.getId());
}
volumeToPoolMap.put(lun.getId(), pool.getId());
} else {
logger.error("Skipping volume {} as its storage pool doesn't exist in ViPR", lun.getId());
}
}
} else {
logger.info("No luns found on the system: {}", system.getId());
}
}
use of com.emc.storageos.vnxe.models.VNXeLun in project coprhd-controller by CoprHD.
the class VNXeApiClient method exportLun.
/**
* Export a lun for a given host
*
* @param host
* host
* @param lunId
* lun id
* @param newhlu
* HLU
* @return
* @throws VNXeException
*/
public VNXeExportResult exportLun(VNXeBase host, String lunId, Integer newhlu) throws VNXeException {
_logger.info("Exporting lun: {}", lunId);
VNXeLun lun = getLun(lunId);
if (lun == null) {
_logger.info("Could not find lun in the vxne: {}", lunId);
throw VNXeException.exceptions.vnxeCommandFailed("Could not find lun : " + lunId);
}
List<BlockHostAccess> hostAccesses = lun.getHostAccess();
boolean lunHostAccessExists = false;
if (hostAccesses == null) {
hostAccesses = new ArrayList<BlockHostAccess>();
} else {
// already defined for the given host with a different access mask.
for (BlockHostAccess hostAccess : hostAccesses) {
String hostId = hostAccess.getHost().getId();
if (hostId.equals(host.getId())) {
if (hostAccess.getAccessMask() == HostLUNAccessEnum.SNAPSHOT.getValue()) {
hostAccess.setAccessMask(HostLUNAccessEnum.BOTH.getValue());
lunHostAccessExists = true;
break;
} else if (hostAccess.getAccessMask() == HostLUNAccessEnum.NOACCESS.getValue()) {
hostAccess.setAccessMask(HostLUNAccessEnum.PRODUCTION.getValue());
lunHostAccessExists = true;
break;
}
}
}
}
if (!lunHostAccessExists) {
BlockHostAccess access = new BlockHostAccess();
access.setHost(host);
access.setAccessMask(BlockHostAccess.HostLUNAccessEnum.PRODUCTION.getValue());
hostAccesses.add(access);
}
LunParam lunParam = new LunParam();
lunParam.setHostAccess(hostAccesses);
LunModifyParam exportParam = new LunModifyParam();
exportParam.setLunParameters(lunParam);
int type = lun.getType();
if (type == VNXeLun.LUNTypeEnum.Standalone.getValue()) {
// if standalone lun
BlockLunRequests lunReq = new BlockLunRequests(_khClient);
lunReq.modifyLunSync(exportParam, lun.getStorageResource().getId());
} else {
// lun in a lun group
exportParam.setLun(new VNXeBase(lunId));
List<LunModifyParam> list = new ArrayList<LunModifyParam>();
list.add(exportParam);
LunGroupModifyParam groupParam = new LunGroupModifyParam();
groupParam.setLunModify(list);
if (!_khClient.isUnity()) {
LunGroupRequests lunGroupReq = new LunGroupRequests(_khClient);
lunGroupReq.modifyLunGroupSync(lun.getStorageResource().getId(), groupParam);
} else {
ConsistencyGroupRequests cgReq = new ConsistencyGroupRequests(_khClient);
cgReq.modifyConsistencyGroupSync(lun.getStorageResource().getId(), groupParam);
}
}
// get hlu
HostLunRequests hostLunReq = new HostLunRequests(_khClient);
HostLun hostLun = hostLunReq.getHostLun(lunId, host.getId(), HostLunRequests.ID_SEQUENCE_LUN);
int hluResult = hostLun.getHlu();
if (isUnityClient() && newhlu != null && newhlu.intValue() != -1) {
_logger.info("Modify hlu");
modifyHostLunHlu(host.getId(), hostLun.getId(), newhlu);
hluResult = newhlu;
}
VNXeExportResult result = new VNXeExportResult();
result.setHlu(hluResult);
result.setLunId(lunId);
result.setHostId(host.getId());
result.setNewAccess(!lunHostAccessExists);
_logger.info("Done exporting lun: {}", lunId);
return result;
}
use of com.emc.storageos.vnxe.models.VNXeLun in project coprhd-controller by CoprHD.
the class VNXeApiClient method deleteLunGroup.
/**
* Delete lun group.
* if isForceVolumeDeletion is true, it would delete all the volumes in the lun group
* and the lun group.
* if isForceVolumeDeletion is false, it would remove all the volumes from the lun group,
* then delete the lun group.
*
* @param lunGroupId
* @param isForceSnapDeletion
* @return
*/
public VNXeCommandResult deleteLunGroup(String lunGroupId, boolean isForceSnapDeletion, boolean isForceVolumeDeletion) {
if (isForceVolumeDeletion) {
DeleteStorageResourceRequest deleteReq = new DeleteStorageResourceRequest(_khClient);
return deleteReq.deleteLunGroup(lunGroupId, isForceSnapDeletion);
} else {
BlockLunRequests lunReq = new BlockLunRequests(_khClient);
List<VNXeLun> luns = lunReq.getLunsInLunGroup(lunGroupId);
if (luns != null && !luns.isEmpty()) {
List<String> lunIds = new ArrayList<String>();
for (VNXeLun lun : luns) {
lunIds.add(lun.getId());
}
removeLunsFromLunGroup(lunGroupId, lunIds);
}
DeleteStorageResourceRequest deleteReq = new DeleteStorageResourceRequest(_khClient);
return deleteReq.deleteLunGroup(lunGroupId, isForceSnapDeletion);
}
}
use of com.emc.storageos.vnxe.models.VNXeLun in project coprhd-controller by CoprHD.
the class VNXeApiClient method exportSnap.
/**
* Export a snap for a given host
*
* @param host
* host
* @param snapId
* snap id
* @param newhlu
* HLU
* @return
* @throws VNXeException
*/
public VNXeExportResult exportSnap(VNXeBase host, String snapId, Integer newhlu) throws VNXeException {
_logger.info("Exporting lun snap: {}", snapId);
String parentLunId = null;
VNXeLun parentLun = null;
if (!_khClient.isUnity()) {
VNXeLunSnap lunSnap = getLunSnapshot(snapId);
if (lunSnap == null) {
_logger.info("Could not find lun snap in the vxne: {}", snapId);
throw VNXeException.exceptions.vnxeCommandFailed("Could not find lun snap: " + snapId);
}
if (!lunSnap.getIsAttached()) {
_logger.info("Attaching the snap: {}", snapId);
attachLunSnap(snapId);
}
parentLunId = lunSnap.getLun().getId();
} else {
Snap snap = getSnapshot(snapId);
if (snap == null) {
_logger.info("Could not find snap in the vxn unity: {}", snapId);
throw VNXeException.exceptions.vnxeCommandFailed("Could not find lun snap: " + snapId);
}
VNXeBase snapGroup = snap.getSnapGroup();
parentLunId = snap.getLun().getId();
if (snapGroup == null && (!snap.isAttached())) {
_logger.info("Attaching the snap: {}", snapId);
attachSnap(snapId);
} else if (snapGroup != null && (!snap.isAttached())) {
String groupId = snapGroup.getId();
attachSnap(groupId);
}
}
// Get host access info of the parent lun
parentLun = getLun(parentLunId);
List<BlockHostAccess> hostAccesses = parentLun.getHostAccess();
boolean snapHostAccessExists = false;
if (hostAccesses == null) {
hostAccesses = new ArrayList<BlockHostAccess>();
} else {
// already defined for the given host with a different access mask.
for (BlockHostAccess hostAccess : hostAccesses) {
String hostId = hostAccess.getHost().getId();
if (hostId.equals(host.getId())) {
if (hostAccess.getAccessMask() == HostLUNAccessEnum.PRODUCTION.getValue()) {
hostAccess.setAccessMask(HostLUNAccessEnum.BOTH.getValue());
snapHostAccessExists = true;
break;
} else if (hostAccess.getAccessMask() == HostLUNAccessEnum.NOACCESS.getValue()) {
hostAccess.setAccessMask(HostLUNAccessEnum.SNAPSHOT.getValue());
snapHostAccessExists = true;
break;
}
}
}
}
if (!snapHostAccessExists) {
BlockHostAccess access = new BlockHostAccess();
access.setHost(host);
access.setAccessMask(BlockHostAccess.HostLUNAccessEnum.SNAPSHOT.getValue());
hostAccesses.add(access);
}
LunParam lunParam = new LunParam();
lunParam.setHostAccess(hostAccesses);
LunModifyParam exportParam = new LunModifyParam();
exportParam.setLunParameters(lunParam);
int type = parentLun.getType();
if (type == VNXeLun.LUNTypeEnum.Standalone.getValue()) {
// if standalone lun
BlockLunRequests lunReq = new BlockLunRequests(_khClient);
lunReq.modifyLunSync(exportParam, parentLun.getStorageResource().getId());
} else {
// parent lun in a lun group
exportParam.setLun(new VNXeBase(parentLun.getId()));
List<LunModifyParam> list = new ArrayList<LunModifyParam>();
list.add(exportParam);
LunGroupModifyParam groupParam = new LunGroupModifyParam();
groupParam.setLunModify(list);
if (!_khClient.isUnity()) {
LunGroupRequests lunGroupReq = new LunGroupRequests(_khClient);
lunGroupReq.modifyLunGroupSync(parentLun.getStorageResource().getId(), groupParam);
} else {
ConsistencyGroupRequests cgReq = new ConsistencyGroupRequests(_khClient);
cgReq.modifyConsistencyGroupSync(parentLun.getStorageResource().getId(), groupParam);
}
}
// get hlu
HostLunRequests hostLunReq = new HostLunRequests(_khClient);
HostLun hostLun = hostLunReq.getHostLun(parentLun.getId(), host.getId(), HostLunRequests.ID_SEQUENCE_SNAP);
int hluResult = hostLun.getHlu();
if (isUnityClient() && newhlu != null && newhlu.intValue() != -1) {
_logger.info("Modify hlu");
modifyHostLunHlu(host.getId(), hostLun.getId(), newhlu);
hluResult = newhlu;
}
VNXeExportResult result = new VNXeExportResult();
result.setHlu(hluResult);
result.setHostId(host.getId());
result.setNewAccess(!snapHostAccessExists);
_logger.info("Done exporting lun snap: {}", snapId);
return result;
}
use of com.emc.storageos.vnxe.models.VNXeLun in project coprhd-controller by CoprHD.
the class VNXeApiClient method getHostLUNWWNs.
/**
* Get host LUN WWN and HLU
*
* @param hostId
* @return host LUN WWN to HLU map
*/
public Map<String, Integer> getHostLUNWWNs(String hostId) {
Map<String, Integer> lunWWNToHLUs = new HashMap<>();
VNXeHost host = getHostById(hostId);
if (host != null) {
List<VNXeBase> hostLunIds = host.getHostLUNs();
if (hostLunIds != null && !hostLunIds.isEmpty()) {
for (VNXeBase hostLunId : hostLunIds) {
HostLun hostLun = getHostLun(hostLunId.getId());
String wwn = null;
if (hostLun.getType() == HostLUNTypeEnum.LUN_SNAP.getValue()) {
VNXeBase snapId = hostLun.getSnap();
wwn = getSnapWWN(snapId.getId());
} else {
VNXeBase lunId = hostLun.getLun();
VNXeLun vnxeLun = getLun(lunId.getId());
wwn = vnxeLun.getWwn();
}
lunWWNToHLUs.put(wwn, hostLun.getHlu());
}
}
}
return lunWWNToHLUs;
}
Aggregations