Search in sources :

Example 6 with HDSJob

use of com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob in project coprhd-controller by CoprHD.

the class HDSMetaVolumeOperations method expandVolumeAsMetaVolume.

@Override
public void expandVolumeAsMetaVolume(StorageSystem storageSystem, StoragePool storagePool, Volume metaHead, List<String> newMetaMembers, String metaType, MetaVolumeTaskCompleter metaVolumeTaskCompleter) throws Exception {
    HDSApiClient hdsApiClient = hdsApiFactory.getClient(HDSUtils.getHDSServerManagementServerInfo(storageSystem), storageSystem.getSmisUserName(), storageSystem.getSmisPassword());
    String systemObjectID = HDSUtils.getSystemObjectID(storageSystem);
    LogicalUnit metaHeadVolume = hdsApiClient.getLogicalUnitInfo(systemObjectID, HDSUtils.getLogicalUnitObjectId(metaHead.getNativeId(), storageSystem));
    String metaHeadLdevId = null;
    List<String> metaMembersLdevObjectIds = new ArrayList<String>();
    // Step 1: Get LDEV id's of the meta members and format them
    if (null != newMetaMembers && !newMetaMembers.isEmpty()) {
        for (String metaMember : newMetaMembers) {
            if (null != metaMember) {
                String asyncTaskMessageId = hdsApiClient.formatLogicalUnit(systemObjectID, metaMember);
                if (asyncTaskMessageId == null) {
                    throw HDSException.exceptions.asyncTaskFailed("Unable to get async taskId from HiCommand Device Manager for the expand volume call");
                }
                HDSJob formatLUJob = new HDSJob(asyncTaskMessageId, storageSystem.getId(), metaVolumeTaskCompleter.getVolumeTaskCompleter(), "formatLogicalUnit");
                invokeMethodSynchronously(hdsApiFactory, asyncTaskMessageId, formatLUJob);
            }
            LogicalUnit metaMemberVolume = hdsApiClient.getLogicalUnitInfo(systemObjectID, metaMember);
            if (null != metaMemberVolume && !metaMemberVolume.getLdevList().isEmpty()) {
                for (LDEV ldev : metaMemberVolume.getLdevList()) {
                    // Format the logical unit. This is synchronous operation
                    // should wait it the operation completes.
                    metaMembersLdevObjectIds.add(ldev.getObjectID());
                }
            }
        }
    }
    log.info("New Meta member LDEV ids: {}", metaMembersLdevObjectIds);
    // Step 2: Get LDEV id of the meta volume head.
    if (null != metaHeadVolume && null != metaHeadVolume.getLdevList()) {
        for (LDEV ldev : metaHeadVolume.getLdevList()) {
            // will be created during expansion of volume.
            if (getLDEVID(ldev.getObjectID()).equalsIgnoreCase(metaHead.getNativeId())) {
                metaHeadLdevId = ldev.getObjectID();
                break;
            }
        }
    }
    // Step 3: Create LUSE Volume using metaHead LDEV & meta
    // members LDEV Ids.
    LogicalUnit logicalUnit = hdsApiClient.createLUSEVolume(systemObjectID, metaHeadLdevId, metaMembersLdevObjectIds);
    if (null != logicalUnit) {
        long capacityInBytes = Long.valueOf(logicalUnit.getCapacityInKB()) * 1024L;
        metaHead.setProvisionedCapacity(capacityInBytes);
        metaHead.setAllocatedCapacity(capacityInBytes);
        dbClient.persistObject(metaHead);
    }
}
Also used : HDSApiClient(com.emc.storageos.hds.api.HDSApiClient) HDSJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob) LogicalUnit(com.emc.storageos.hds.model.LogicalUnit) ArrayList(java.util.ArrayList) LDEV(com.emc.storageos.hds.model.LDEV)

Example 7 with HDSJob

use of com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob in project coprhd-controller by CoprHD.

the class HDSMirrorOperations method resumeSingleVolumeMirror.

/**
 * Resync ShadowImage pair
 */
@Override
public void resumeSingleVolumeMirror(StorageSystem storage, URI mirror, TaskCompleter taskCompleter) throws DeviceControllerException {
    log.info("resumeSingleVolumeMirror started");
    try {
        BlockMirror mirrorObj = dbClient.queryObject(BlockMirror.class, mirror);
        Volume sourceVolume = dbClient.queryObject(Volume.class, mirrorObj.getSource());
        hdsProtectionOperations.modifyShadowImagePair(storage, sourceVolume.getNativeId(), mirrorObj.getNativeId(), HDSApiProtectionManager.ShadowImageOperationType.resync);
        HDSJob syncjob = new HDSReplicationSyncJob(storage.getId(), sourceVolume.getNativeId(), mirrorObj.getNativeId(), ReplicationStatus.PAIR, taskCompleter);
        hdsCommandHelper.waitForAsyncHDSJob(syncjob);
        mirrorObj.setSyncState(SynchronizationState.SYNCHRONIZED.name());
        dbClient.persistObject(mirrorObj);
        taskCompleter.ready(dbClient);
    } catch (Exception e) {
        log.error("Failed to resume single volume mirror: {}", mirror, e);
        ServiceError serviceError = DeviceControllerException.errors.jobFailed(e);
        taskCompleter.error(dbClient, serviceError);
    }
    log.info("resumeSingleVolumeMirror completed");
}
Also used : HDSReplicationSyncJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSReplicationSyncJob) ServiceError(com.emc.storageos.svcs.errorhandling.model.ServiceError) BlockMirror(com.emc.storageos.db.client.model.BlockMirror) HDSJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob) Volume(com.emc.storageos.db.client.model.Volume) DeviceControllerException(com.emc.storageos.exceptions.DeviceControllerException) HDSException(com.emc.storageos.hds.HDSException)

Example 8 with HDSJob

use of com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob in project coprhd-controller by CoprHD.

the class HDSMirrorOperations method fractureSingleVolumeMirror.

/**
 * Split ShadowImage pair
 */
@Override
public void fractureSingleVolumeMirror(StorageSystem storage, URI mirror, Boolean sync, TaskCompleter taskCompleter) throws DeviceControllerException {
    log.info("fractureSingleVolumeMirror started");
    try {
        BlockMirror mirrorObj = dbClient.queryObject(BlockMirror.class, mirror);
        Volume sourceVolume = dbClient.queryObject(Volume.class, mirrorObj.getSource());
        hdsProtectionOperations.modifyShadowImagePair(storage, sourceVolume.getNativeId(), mirrorObj.getNativeId(), HDSApiProtectionManager.ShadowImageOperationType.split);
        HDSJob syncjob = new HDSReplicationSyncJob(storage.getId(), sourceVolume.getNativeId(), mirrorObj.getNativeId(), ReplicationStatus.SPLIT, taskCompleter);
        hdsCommandHelper.waitForAsyncHDSJob(syncjob);
        mirrorObj.setSyncState(SynchronizationState.FRACTURED.name());
        dbClient.persistObject(mirrorObj);
        taskCompleter.ready(dbClient);
    } catch (Exception e) {
        log.error("Failed to resume single volume mirror: {}", mirror, e);
        ServiceError serviceError = DeviceControllerException.errors.jobFailed(e);
        taskCompleter.error(dbClient, serviceError);
    }
    log.info("fractureSingleVolumeMirror completed");
}
Also used : HDSReplicationSyncJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSReplicationSyncJob) ServiceError(com.emc.storageos.svcs.errorhandling.model.ServiceError) BlockMirror(com.emc.storageos.db.client.model.BlockMirror) HDSJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob) Volume(com.emc.storageos.db.client.model.Volume) DeviceControllerException(com.emc.storageos.exceptions.DeviceControllerException) HDSException(com.emc.storageos.hds.HDSException)

Example 9 with HDSJob

use of com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob in project coprhd-controller by CoprHD.

the class HDSProtectionOperations method createSecondaryVolumeForMirror.

/**
 * Creates secondary volume for ShadowImage pair operations.
 *
 * @param storageSystem
 * @param sourceVolume
 * @param mirror
 * @throws Exception
 */
public void createSecondaryVolumeForMirror(StorageSystem storageSystem, URI sourceVolume, BlockMirror mirror) throws Exception {
    log.info("SecondaryVolume for mirror creation operation started");
    String taskId = UUID.randomUUID().toString();
    TaskCompleter taskCompleter = new BlockMirrorCreateCompleter(mirror.getId(), taskId);
    String asyncTaskMessageId = null;
    HDSApiClient hdsApiClient = HDSUtils.getHDSApiClient(hdsApiFactory, storageSystem);
    String systemObjectID = HDSUtils.getSystemObjectID(storageSystem);
    StoragePool targetPool = dbClient.queryObject(StoragePool.class, mirror.getPool());
    Volume source = dbClient.queryObject(Volume.class, sourceVolume);
    TenantOrg tenant = dbClient.queryObject(TenantOrg.class, source.getTenant().getURI());
    String tenantName = tenant.getLabel();
    String targetLabelToUse = nameGenerator.generate(tenantName, mirror.getLabel(), mirror.getId().toString(), '-', HDSConstants.MAX_VOLUME_NAME_LENGTH);
    if (mirror.getThinlyProvisioned()) {
        asyncTaskMessageId = hdsApiClient.createThinVolumes(systemObjectID, targetPool.getNativeId(), mirror.getCapacity(), 1, targetLabelToUse, HDSConstants.QUICK_FORMAT_TYPE, storageSystem.getModel());
    } else {
        String poolObjectID = HDSUtils.getPoolObjectID(targetPool);
        asyncTaskMessageId = hdsApiClient.createThickVolumes(systemObjectID, poolObjectID, mirror.getCapacity(), 1, targetLabelToUse, null, storageSystem.getModel(), null);
    }
    if (asyncTaskMessageId != null) {
        HDSJob createHDSJob = new HDSBlockCreateMirrorJob(asyncTaskMessageId, mirror.getStorageController(), targetPool.getId(), taskCompleter);
        hdsCommandHelper.waitForAsyncHDSJob(createHDSJob);
    } else {
        throw HDSException.exceptions.asyncTaskFailed("Unable to get async taskId from HiCommand Device Manager for the create volume call");
    }
    log.info("SecondaryVolume for mirror creation operation completed successfully");
}
Also used : HDSApiClient(com.emc.storageos.hds.api.HDSApiClient) StoragePool(com.emc.storageos.db.client.model.StoragePool) HDSJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob) Volume(com.emc.storageos.db.client.model.Volume) TenantOrg(com.emc.storageos.db.client.model.TenantOrg) TaskCompleter(com.emc.storageos.volumecontroller.TaskCompleter) BlockMirrorCreateCompleter(com.emc.storageos.volumecontroller.impl.block.taskcompleter.BlockMirrorCreateCompleter) HDSBlockCreateMirrorJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSBlockCreateMirrorJob)

Example 10 with HDSJob

use of com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob in project coprhd-controller by CoprHD.

the class HDSProtectionOperations method createSecondaryVolumeForClone.

/**
 * Creates secondary volume for ShadowImage pair operations.
 *
 * @param storageSystem
 * @param sourceVolume
 * @param targetVolume
 * @throws Exception
 */
public void createSecondaryVolumeForClone(StorageSystem storageSystem, URI sourceVolume, Volume targetVolume) throws Exception {
    log.info("SecondaryVolume creation operation started");
    String taskId = UUID.randomUUID().toString();
    TaskCompleter taskCompleter = new VolumeCreateCompleter(targetVolume.getId(), taskId);
    String asyncTaskMessageId = null;
    HDSApiClient hdsApiClient = HDSUtils.getHDSApiClient(hdsApiFactory, storageSystem);
    String systemObjectID = HDSUtils.getSystemObjectID(storageSystem);
    BlockObject sourceObj = BlockObject.fetch(dbClient, sourceVolume);
    URI tenantUri = null;
    StoragePool targetPool = dbClient.queryObject(StoragePool.class, targetVolume.getPool());
    if (sourceObj instanceof BlockSnapshot) {
        // In case of snapshot, get the tenant from its parent volume
        NamedURI parentVolUri = ((BlockSnapshot) sourceObj).getParent();
        Volume parentVolume = dbClient.queryObject(Volume.class, parentVolUri);
        tenantUri = parentVolume.getTenant().getURI();
        TenantOrg tenantOrg = dbClient.queryObject(TenantOrg.class, tenantUri);
    // String cloneLabel = generateLabel(tenantOrg, cloneObj);
    } else {
        // This is a default flow
        tenantUri = ((Volume) sourceObj).getTenant().getURI();
    }
    if (targetVolume.getThinlyProvisioned()) {
        asyncTaskMessageId = hdsApiClient.createThinVolumes(systemObjectID, targetPool.getNativeId(), targetVolume.getCapacity(), 1, targetVolume.getLabel(), HDSConstants.QUICK_FORMAT_TYPE, storageSystem.getModel());
    } else {
        String poolObjectID = HDSUtils.getPoolObjectID(targetPool);
        asyncTaskMessageId = hdsApiClient.createThickVolumes(systemObjectID, poolObjectID, targetVolume.getCapacity(), 1, targetVolume.getLabel(), null, storageSystem.getModel(), null);
    }
    if (asyncTaskMessageId != null) {
        HDSJob createHDSJob = new HDSCreateVolumeJob(asyncTaskMessageId, targetVolume.getStorageController(), targetPool.getId(), taskCompleter);
        hdsCommandHelper.waitForAsyncHDSJob(createHDSJob);
    } else {
        throw HDSException.exceptions.asyncTaskFailed("Unable to get async taskId from HiCommand Device Manager for the create volume call");
    }
    log.info("SecondaryVolume creation operation completed successfully");
}
Also used : HDSApiClient(com.emc.storageos.hds.api.HDSApiClient) StoragePool(com.emc.storageos.db.client.model.StoragePool) HDSJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob) HDSCreateVolumeJob(com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSCreateVolumeJob) NamedURI(com.emc.storageos.db.client.model.NamedURI) BlockSnapshot(com.emc.storageos.db.client.model.BlockSnapshot) NamedURI(com.emc.storageos.db.client.model.NamedURI) URI(java.net.URI) Volume(com.emc.storageos.db.client.model.Volume) VolumeCreateCompleter(com.emc.storageos.volumecontroller.impl.block.taskcompleter.VolumeCreateCompleter) TenantOrg(com.emc.storageos.db.client.model.TenantOrg) TaskCompleter(com.emc.storageos.volumecontroller.TaskCompleter) BlockObject(com.emc.storageos.db.client.model.BlockObject)

Aggregations

HDSJob (com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSJob)13 HDSApiClient (com.emc.storageos.hds.api.HDSApiClient)9 Volume (com.emc.storageos.db.client.model.Volume)8 DeviceControllerException (com.emc.storageos.exceptions.DeviceControllerException)7 HDSException (com.emc.storageos.hds.HDSException)7 ServiceError (com.emc.storageos.svcs.errorhandling.model.ServiceError)7 TaskCompleter (com.emc.storageos.volumecontroller.TaskCompleter)5 QueueJob (com.emc.storageos.volumecontroller.impl.job.QueueJob)4 BlockMirror (com.emc.storageos.db.client.model.BlockMirror)3 TenantOrg (com.emc.storageos.db.client.model.TenantOrg)3 DatabaseException (com.emc.storageos.db.exceptions.DatabaseException)3 LDEV (com.emc.storageos.hds.model.LDEV)3 LogicalUnit (com.emc.storageos.hds.model.LogicalUnit)3 InternalException (com.emc.storageos.svcs.errorhandling.resources.InternalException)3 HDSReplicationSyncJob (com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSReplicationSyncJob)3 NamedURI (com.emc.storageos.db.client.model.NamedURI)2 StoragePool (com.emc.storageos.db.client.model.StoragePool)2 ServiceCoded (com.emc.storageos.svcs.errorhandling.model.ServiceCoded)2 HDSCreateVolumeJob (com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSCreateVolumeJob)2 HDSModifyVolumeJob (com.emc.storageos.volumecontroller.impl.hds.prov.job.HDSModifyVolumeJob)2