package com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.impl;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.IngestionRequestContext;
import com.emc.storageos.api.service.impl.resource.utils.VolumeIngestionUtil;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.BlockObject;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.ExportGroup;
import com.emc.storageos.db.client.model.ExportMask;
import com.emc.storageos.db.client.model.UnManagedDiscoveredObjects.UnManagedVolume;
public class RpVplexVolumeIngestionContext extends RecoverPointVolumeIngestionContext {
private static final Logger _logger = LoggerFactory.getLogger(RpVplexVolumeIngestionContext.class);
private VplexVolumeIngestionContext _vplexVolumeIngestionContext;
public RpVplexVolumeIngestionContext(UnManagedVolume unManagedVolume,
DbClient dbClient, IngestionRequestContext parentRequestContext) {
super(unManagedVolume, dbClient, parentRequestContext);
_vplexVolumeIngestionContext = new VplexVolumeIngestionContext(
unManagedVolume, dbClient, parentRequestContext);
}
public VplexVolumeIngestionContext getVplexVolumeIngestionContext() {
return _vplexVolumeIngestionContext;
}
/* (non-Javadoc)
* @see com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.impl.RecoverPointVolumeIngestionContext#commit()
*/
@Override
public void commit() {
// if this is an RP/VPLEX that is exported to a host or cluster, add the volume to the ExportGroup
ExportGroup rootExportGroup = getRootIngestionRequestContext().getExportGroup();
if (rootExportGroup != null &&
VolumeIngestionUtil.checkUnManagedResourceIsNonRPExported(getUnmanagedVolume())) {
_logger.info("Adding exported RP/VPLEX virtual volume {} to ExportGroup {}",
getManagedBlockObject().forDisplay(), rootExportGroup.forDisplay());
rootExportGroup.addVolume(getManagedBlockObject().getId(), ExportGroup.LUN_UNASSIGNED);
}
_vplexVolumeIngestionContext.commit();
super.commit();
}
/* (non-Javadoc)
* @see com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.impl.RecoverPointVolumeIngestionContext#rollback()
*/
@Override
public void rollback() {
_vplexVolumeIngestionContext.rollback();
super.rollback();
}
/* (non-Javadoc)
* @see com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.impl.RecoverPointVolumeIngestionContext#findCreatedBlockObject(java.lang.String)
*/
@Override
public BlockObject findCreatedBlockObject(String nativeGuid) {
BlockObject blockObject = _vplexVolumeIngestionContext.findCreatedBlockObject(nativeGuid);
if (blockObject == null) {
blockObject = super.findCreatedBlockObject(nativeGuid);
}
return blockObject;
}
/* (non-Javadoc)
* @see com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.impl.RecoverPointVolumeIngestionContext#findCreatedBlockObject(java.net.URI)
*/
@Override
public BlockObject findCreatedBlockObject(URI uri) {
BlockObject blockObject = _vplexVolumeIngestionContext.findCreatedBlockObject(uri);
if (blockObject == null) {
blockObject = super.findCreatedBlockObject(uri);
}
return blockObject;
}
/* (non-Javadoc)
* @see com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.impl.RecoverPointVolumeIngestionContext#findInUpdatedObjects(java.net.URI)
*/
@Override
public DataObject findInUpdatedObjects(URI uri) {
DataObject dataObject = _vplexVolumeIngestionContext.findInUpdatedObjects(uri);
if (dataObject == null) {
dataObject = super.findInUpdatedObjects(uri);
}
return dataObject;
}
/* (non-Javadoc)
* @see com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.IngestionRequestContext#findExportGroup(java.lang.String)
*/
@Override
public ExportGroup findExportGroup(String exportGroupLabel, URI project, URI varray, URI computeResource, String resourceType) {
ExportGroup exportGroup = _vplexVolumeIngestionContext.findExportGroup(
exportGroupLabel, project, varray, computeResource, resourceType);
if (exportGroup == null) {
exportGroup = super.findExportGroup(exportGroupLabel, project, varray, computeResource, resourceType);
}
return exportGroup;
}
/* (non-Javadoc)
* @see com.emc.storageos.api.service.impl.resource.blockingestorchestration.context.IngestionRequestContext#findAllNewExportMasks()
*/
@Override
public List<ExportMask> findAllNewExportMasks() {
List<ExportMask> newExportMasks = new ArrayList<ExportMask>();
newExportMasks.addAll(super.findAllNewExportMasks());
newExportMasks.addAll(_vplexVolumeIngestionContext.findAllNewExportMasks());
return newExportMasks;
}
}