Search in sources :

Example 66 with ExportMask

use of com.emc.storageos.db.client.model.ExportMask in project coprhd-controller by CoprHD.

the class ExportMaskAddInitiatorCompleter method updateDatabase.

/**
 * Update the export mask and export group with the initiators are ports
 *
 * @param dbClient
 *            dbclient
 * @param uris
 *            uris of Initiators and storage ports
 */
private void updateDatabase(DbClient dbClient, Collection<URI> uris) {
    List<URI> targetURIs = _targetURIs;
    List<URI> initiatorURIs = _initiatorURIs;
    // initiators that appear in the context.
    if (uris != null && !uris.isEmpty()) {
        targetURIs = URIUtil.getURIsofType(uris, Initiator.class);
        initiatorURIs = URIUtil.getURIsofType(uris, StoragePort.class);
    }
    ExportGroup exportGroup = dbClient.queryObject(ExportGroup.class, getId());
    ExportMask exportMask = (getMask() != null) ? dbClient.queryObject(ExportMask.class, getMask()) : null;
    if (exportMask != null) {
        // Update the initiator tracking containers
        exportMask.addToUserCreatedInitiators(dbClient.queryObject(Initiator.class, initiatorURIs));
        // Save the initiators to the ExportMask
        for (URI initiatorURI : initiatorURIs) {
            Initiator initiator = dbClient.queryObject(Initiator.class, initiatorURI);
            if (initiator != null) {
                exportMask.removeFromExistingInitiators(initiator);
                exportMask.addInitiator(initiator);
                exportGroup.addInitiator(initiator);
            } else {
                _log.warn("Initiator {} does not exist.", initiatorURI);
            }
        }
        // Save the target StoragePort URIs to the ExportMask
        for (URI newTarget : targetURIs) {
            exportMask.addTarget(newTarget);
        }
        dbClient.updateObject(exportMask);
    }
    ExportUtils.reconcileExportGroupsHLUs(dbClient, exportGroup);
    dbClient.updateObject(exportGroup);
}
Also used : ExportGroup(com.emc.storageos.db.client.model.ExportGroup) Initiator(com.emc.storageos.db.client.model.Initiator) ExportMask(com.emc.storageos.db.client.model.ExportMask) StoragePort(com.emc.storageos.db.client.model.StoragePort) URI(java.net.URI)

Example 67 with ExportMask

use of com.emc.storageos.db.client.model.ExportMask in project coprhd-controller by CoprHD.

the class ExportMaskAddVolumeCompleter method complete.

@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
    try {
        ExportGroup exportGroup = dbClient.queryObject(ExportGroup.class, getId());
        ExportMask exportMask = (getMask() != null) ? dbClient.queryObject(ExportMask.class, getMask()) : null;
        if (exportMask == null) {
            _log.warn("Export mask was null for task {}", getOpId());
            return;
        }
        if (shouldUpdateDatabase(status)) {
            for (URI volumeURI : _volumes) {
                BlockObject volume = BlockObject.fetch(dbClient, volumeURI);
                _log.info(String.format("Done ExportMaskAddVolume - Id: %s, OpId: %s, status: %s", getId().toString(), getOpId(), status.name()));
                exportMask.removeFromExistingVolumes(volume);
                exportMask.addToUserCreatedVolumes(volume);
            }
            exportMask.setCreatedBySystem(true);
            ExportMaskUtils.setExportMaskResource(dbClient, exportGroup, exportMask);
            exportMask.addVolumes(_volumeMap);
            if (getExportGroups() != null && !getExportGroups().isEmpty()) {
                List<ExportGroup> egs = dbClient.queryObject(ExportGroup.class, getExportGroups());
                for (ExportGroup eg : egs) {
                    eg.addExportMask(exportMask.getId());
                    ExportUtils.reconcileHLUs(dbClient, eg, exportMask, _volumeMap);
                }
                dbClient.updateObject(egs);
            } else {
                exportGroup.addExportMask(exportMask.getId());
                ExportUtils.reconcileHLUs(dbClient, exportGroup, exportMask, _volumeMap);
                dbClient.updateObject(exportGroup);
            }
            dbClient.updateObject(exportMask);
            updatePortGroupVolumeCount(exportMask.getPortGroup(), dbClient);
            // on rollback if subsequent steps in the workflow fail.
            if (_forgetStepId != null) {
                @SuppressWarnings("unchecked") Set<URI> maskedVolumeURIs = (Set<URI>) WorkflowService.getInstance().loadWorkflowData(_forgetStepId, "forget");
                if (maskedVolumeURIs == null) {
                    maskedVolumeURIs = new HashSet<>();
                    maskedVolumeURIs.addAll(_volumes);
                } else {
                    maskedVolumeURIs.addAll(_volumes);
                }
                WorkflowService.getInstance().storeWorkflowData(_forgetStepId, "forget", maskedVolumeURIs);
            }
        }
    } catch (Exception e) {
        _log.error(String.format("Failed updating status for ExportMaskAddVolume - Id: %s, OpId: %s", getId().toString(), getOpId()), e);
    } finally {
        super.complete(dbClient, status, coded);
    }
}
Also used : ExportGroup(com.emc.storageos.db.client.model.ExportGroup) Set(java.util.Set) HashSet(java.util.HashSet) ExportMask(com.emc.storageos.db.client.model.ExportMask) URI(java.net.URI) BlockObject(com.emc.storageos.db.client.model.BlockObject) DeviceControllerException(com.emc.storageos.exceptions.DeviceControllerException)

Example 68 with ExportMask

use of com.emc.storageos.db.client.model.ExportMask in project coprhd-controller by CoprHD.

the class ExportMaskCreateCompleter method complete.

@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
    try {
        ExportGroup exportGroup = dbClient.queryObject(ExportGroup.class, getId());
        ExportMask exportMask = (getMask() != null) ? dbClient.queryObject(ExportMask.class, getMask()) : null;
        if (exportMask != null && status == Operation.Status.ready) {
            List<Initiator> initiators = dbClient.queryObject(Initiator.class, _initiatorURIs);
            exportMask.addInitiators(initiators);
            StorageSystem system = dbClient.queryObject(StorageSystem.class, exportMask.getStorageDevice());
            exportMask.addToUserCreatedInitiators(initiators);
            exportMask.addVolumes(_volumeMap);
            if (Type.xtremio.toString().equalsIgnoreCase(system.getSystemType())) {
                // XtremIO case, wwn's are updated only during export.
                // Clean up the existing volumes in export Mask which will have dummy wwns after provisioning.
                // The code below this method addToUserCreatedVolumes adds back the volumes with right wwns.
                _log.info("Cleaning existing xtremio volumes with dummy wwns");
                exportMask.getUserAddedVolumes().clear();
            }
            for (URI boURI : _volumeMap.keySet()) {
                BlockObject blockObject = BlockObject.fetch(dbClient, boURI);
                exportMask.addToUserCreatedVolumes(blockObject);
                // CTRL-11544: Set the hlu in the export group too
                if (exportMask.getCreatedBySystem() && exportMask.getVolumes() != null) {
                    String hlu = exportMask.getVolumes().get(boURI.toString());
                    exportGroup.addVolume(boURI, Integer.parseInt(hlu));
                }
            }
            ExportUtils.reconcileHLUs(dbClient, exportGroup, exportMask, _volumeMap);
            dbClient.updateObject(exportMask);
            exportGroup.addExportMask(exportMask.getId());
            dbClient.updateObject(exportGroup);
            updatePortGroupVolumeCount(exportMask.getPortGroup(), dbClient);
        }
        _log.info(String.format("Done ExportMaskCreate - Id: %s, OpId: %s, status: %s", getId().toString(), getOpId(), status.name()));
    } catch (Exception e) {
        _log.error(String.format("Failed updating status for ExportMaskCreate - Id: %s, OpId: %s", getId().toString(), getOpId()), e);
    } finally {
        super.complete(dbClient, status, coded);
    }
}
Also used : ExportGroup(com.emc.storageos.db.client.model.ExportGroup) Initiator(com.emc.storageos.db.client.model.Initiator) ExportMask(com.emc.storageos.db.client.model.ExportMask) URI(java.net.URI) BlockObject(com.emc.storageos.db.client.model.BlockObject) DeviceControllerException(com.emc.storageos.exceptions.DeviceControllerException) StorageSystem(com.emc.storageos.db.client.model.StorageSystem)

Example 69 with ExportMask

use of com.emc.storageos.db.client.model.ExportMask in project coprhd-controller by CoprHD.

the class ExportMaskDeleteCompleter method complete.

@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
    try {
        ExportMask exportMask = (getMask() != null) ? dbClient.queryObject(ExportMask.class, getMask()) : null;
        if ((status == Operation.Status.error) && (isRollingBack()) && (coded instanceof ServiceError)) {
            ServiceError error = (ServiceError) coded;
            String originalMessage = error.getMessage();
            StorageSystem storageSystem = exportMask != null ? dbClient.queryObject(StorageSystem.class, exportMask.getStorageDevice()) : null;
            String additionMessage = String.format("Rollback encountered problems cleaning up export mask %s on storage system %s and may require manual clean up", exportMask.getMaskName(), storageSystem != null ? storageSystem.forDisplay() : "Unknown");
            String updatedMessage = String.format("%s\n%s", originalMessage, additionMessage);
            error.setMessage(updatedMessage);
        }
        if (exportMask != null && (status == Operation.Status.ready || (Operation.isTerminalState(status) && isRollingBack()))) {
            URI pgURI = exportMask.getPortGroup();
            ExportUtils.cleanupAssociatedMaskResources(dbClient, exportMask);
            dbClient.markForDeletion(exportMask);
            updatePortGroupVolumeCount(pgURI, dbClient);
        }
        _log.info(String.format("Done ExportMaskDelete - EG: %s, OpId: %s, status: %s", getId().toString(), getOpId(), status.name()));
    } catch (Exception e) {
        _log.error(String.format("Failed updating status for ExportMaskDelete - EG: %s, OpId: %s", getId().toString(), getOpId()), e);
    } finally {
        super.complete(dbClient, status, coded);
    }
}
Also used : ServiceError(com.emc.storageos.svcs.errorhandling.model.ServiceError) ExportMask(com.emc.storageos.db.client.model.ExportMask) URI(java.net.URI) DeviceControllerException(com.emc.storageos.exceptions.DeviceControllerException) StorageSystem(com.emc.storageos.db.client.model.StorageSystem)

Example 70 with ExportMask

use of com.emc.storageos.db.client.model.ExportMask in project coprhd-controller by CoprHD.

the class ExportMaskRemoveInitiatorCompleter method complete.

@Override
protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded) throws DeviceControllerException {
    try {
        ExportGroup exportGroup = dbClient.queryObject(ExportGroup.class, getId());
        ExportMask exportMask = (getMask() != null) ? dbClient.queryObject(ExportMask.class, getMask()) : null;
        boolean isRollback = WorkflowService.getInstance().isStepInRollbackState(getOpId());
        if ((status == Operation.Status.error) && (isRollback) && (coded instanceof ServiceError)) {
            ServiceError error = (ServiceError) coded;
            String originalMessage = error.getMessage();
            StorageSystem storageSystem = exportMask != null ? dbClient.queryObject(StorageSystem.class, exportMask.getStorageDevice()) : null;
            List<Initiator> initiators = dbClient.queryObject(Initiator.class, _initiatorURIs);
            StringBuffer initiatorsJoined = new StringBuffer();
            if (initiators != null && !initiators.isEmpty()) {
                Iterator<Initiator> initIter = initiators.iterator();
                while (initIter.hasNext()) {
                    Initiator initiator = initIter.next();
                    initiatorsJoined.append(initiator.forDisplay());
                    if (initIter.hasNext()) {
                        initiatorsJoined.append(",");
                    }
                }
            }
            String additionMessage = String.format("Rollback encountered problems removing initiator(s) %s from export mask %s on storage system %s and may require manual clean up", initiatorsJoined.toString(), exportMask.getMaskName(), storageSystem != null ? storageSystem.forDisplay() : "Unknown");
            String updatedMessage = String.format("%s\n%s", originalMessage, additionMessage);
            error.setMessage(updatedMessage);
        }
        if (exportMask != null && (status == Operation.Status.ready || isRollback)) {
            List<Initiator> initiators = dbClient.queryObject(Initiator.class, _initiatorURIs);
            List<URI> targetPorts = ExportUtils.getRemoveInitiatorStoragePorts(exportMask, initiators, dbClient);
            exportMask.removeInitiators(initiators);
            exportMask.removeFromUserCreatedInitiators(initiators);
            if (exportMask.getExistingInitiators() != null && exportMask.getExistingInitiators().isEmpty()) {
                exportMask.setExistingInitiators(null);
            }
            if (exportMask.getInitiators() == null || exportMask.getInitiators().isEmpty()) {
                exportGroup.removeExportMask(exportMask.getId());
                dbClient.removeObject(exportMask);
                dbClient.updateObject(exportGroup);
            } else {
                if (targetPorts != null && !targetPorts.isEmpty()) {
                    for (URI targetPort : targetPorts) {
                        exportMask.removeTarget(targetPort);
                    }
                }
                removeUnusedTargets(exportMask);
                dbClient.updateObject(exportMask);
            }
            _log.info(String.format("Done ExportMaskRemoveInitiator - Id: %s, OpId: %s, status: %s", getId().toString(), getOpId(), status.name()));
        }
    } catch (Exception e) {
        _log.error(String.format("Failed updating status for ExportMaskRemoveInitiator - Id: %s, OpId: %s", getId().toString(), getOpId()), e);
    } finally {
        super.complete(dbClient, status, coded);
    }
}
Also used : ServiceError(com.emc.storageos.svcs.errorhandling.model.ServiceError) ExportMask(com.emc.storageos.db.client.model.ExportMask) URI(java.net.URI) DeviceControllerException(com.emc.storageos.exceptions.DeviceControllerException) ExportGroup(com.emc.storageos.db.client.model.ExportGroup) Initiator(com.emc.storageos.db.client.model.Initiator) StorageSystem(com.emc.storageos.db.client.model.StorageSystem)

Aggregations

ExportMask (com.emc.storageos.db.client.model.ExportMask)368 URI (java.net.URI)274 ArrayList (java.util.ArrayList)224 Initiator (com.emc.storageos.db.client.model.Initiator)155 DeviceControllerException (com.emc.storageos.exceptions.DeviceControllerException)140 ExportGroup (com.emc.storageos.db.client.model.ExportGroup)134 HashMap (java.util.HashMap)128 HashSet (java.util.HashSet)121 ServiceError (com.emc.storageos.svcs.errorhandling.model.ServiceError)107 StorageSystem (com.emc.storageos.db.client.model.StorageSystem)102 List (java.util.List)79 StringSet (com.emc.storageos.db.client.model.StringSet)68 URIQueryResultList (com.emc.storageos.db.client.constraint.URIQueryResultList)65 Map (java.util.Map)65 StringMap (com.emc.storageos.db.client.model.StringMap)60 BlockObject (com.emc.storageos.db.client.model.BlockObject)56 NamedURI (com.emc.storageos.db.client.model.NamedURI)56 Workflow (com.emc.storageos.workflow.Workflow)54 Set (java.util.Set)51 Volume (com.emc.storageos.db.client.model.Volume)44