use of com.emc.storageos.db.client.model.StoragePort in project coprhd-controller by CoprHD.
the class AbstractDefaultMaskingOrchestrator method maskHasStoragePortsInExportVarray.
/**
* Check that export mask has at least one valid port from virtual array
*
* @param virtualArray
* @param mask
* @return
*/
protected boolean maskHasStoragePortsInExportVarray(VirtualArray virtualArray, ExportMask mask) {
boolean isMatched = false;
for (String uriString : mask.getStoragePorts()) {
URI uri = URI.create(uriString);
StoragePort port = _dbClient.queryObject(StoragePort.class, uri);
// Basic validation of the StoragePort
if (port == null || port.getInactive()) {
_log.info(String.format("maskHasStoragePortsInExportVarray - Could not find port or it is inactive %s", uri.toString()));
continue;
}
// StoragePort needs to be in the REGISTERED and VISIBLE status
if (!port.getRegistrationStatus().equals(StoragePort.RegistrationStatus.REGISTERED.name()) || port.getDiscoveryStatus().equals(DiscoveryStatus.NOTVISIBLE.name())) {
_log.info(String.format("maskHasStoragePortsInExportVarray - Port %s (%s) is not registered or not visible", port.getPortName(), uri.toString()));
continue;
}
// Look up the StoragePort's network
NetworkLite storagePortNetwork = BlockStorageScheduler.lookupNetworkLite(_dbClient, StorageProtocol.Transport.valueOf(port.getTransportType()), port.getPortNetworkId());
if (storagePortNetwork == null) {
_log.info(String.format("maskHasStoragePortsInExportVarray - Port %s (%s) is not associated with any network", port.getPortName(), uri.toString()));
continue;
}
// Port must belong to the VArray
if (!port.taggedToVirtualArray(virtualArray.getId())) {
_log.info(String.format("maskHasStoragePortsInExportVarray - Port %s (%s) is not tagged to VArray %s (%s)", port.getPortName(), uri.toString(), virtualArray.getLabel(), virtualArray.getId()));
// reverted the fix, as the probability of Consistent lun violation will be more.
continue;
}
// at least one port is in virtualArray
isMatched = true;
break;
}
return isMatched;
}
use of com.emc.storageos.db.client.model.StoragePort in project coprhd-controller by CoprHD.
the class NetworkZoningParam method updateZoningParamUsingFCZoneReference.
/**
* Build the zoningMap attribute of zoningParam using FCZoneReference and exportGroup
*
* @param zoningParam
* @param initsToRemoveOnlyFromZone
* @param exportGroup
*/
public static void updateZoningParamUsingFCZoneReference(List<NetworkZoningParam> zoningParam, List<URI> initsToRemoveOnlyFromZone, ExportGroup exportGroup, DbClient dbClient) {
HashMap<String, Initiator> initiatorMap = new HashMap<String, Initiator>();
for (URI initiatorURI : initsToRemoveOnlyFromZone) {
Initiator iniObject = dbClient.queryObject(Initiator.class, initiatorURI);
String iniString = iniObject.getInitiatorPort().toUpperCase();
initiatorMap.put(iniString, iniObject);
}
// Retrieve FCZoneReference zone references that have the same initiator WWN.
// These zone should be removed. since the initiator is no longer available.
List<FCZoneReference> fcRefs = NetworkUtil.getFCZoneReferencesFromExportGroup(dbClient, exportGroup);
Set<String> iniConsidered = new HashSet<String>();
for (NetworkZoningParam networkZoningParam : zoningParam) {
StringSetMap zoneMap = networkZoningParam.getZoningMap();
if (zoneMap.isEmpty()) {
for (FCZoneReference fcZoneReference : fcRefs) {
String[] initiatorAndPort = getInitiatorAndPortFromPwwnKey(fcZoneReference.getPwwnKey());
if (initiatorAndPort != null) {
String initiator = initiatorAndPort[0];
String port = initiatorAndPort[1];
Initiator iniObject = initiatorMap.get(initiator);
if (iniObject != null) {
StoragePort sp = NetworkUtil.getStoragePort(port, dbClient);
if (sp != null) {
iniConsidered.add(iniObject.getInitiatorPort());
zoneMap.put(iniObject.getId().toString(), sp.getId().toString());
}
}
} else {
_log.warn("Could not obtain initiator and port correctly from the PwwnKey {}", fcZoneReference.getPwwnKey());
}
}
// removed the initiator from map the as this initiator is considered for zone map
if (!iniConsidered.isEmpty()) {
initiatorMap.keySet().removeAll(iniConsidered);
}
}
}
}
use of com.emc.storageos.db.client.model.StoragePort in project coprhd-controller by CoprHD.
the class StoragePortService method deleteStoragePort.
/**
* Remove a storage port. The method would remove the deregistered storage port and all resources
* associated with the storage port from the database.
* Note they are not removed from the storage system physically,
* but become unavailable for the user.
*
* @param id the URN of a ViPR storage port to be removed.
*
* @brief Remove storage port from ViPR
* @return Status indicating success or failure.
*/
@POST
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Path("/{id}/deactivate")
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
public TaskResourceRep deleteStoragePort(@PathParam("id") URI id) {
ArgValidator.checkFieldUriType(id, StoragePort.class, "id");
StoragePort port = queryResource(id);
if (!RegistrationStatus.UNREGISTERED.toString().equalsIgnoreCase(port.getRegistrationStatus()) || DiscoveryStatus.VISIBLE.name().equalsIgnoreCase(port.getDiscoveryStatus())) {
throw APIException.badRequests.cannotDeactivateStoragePort();
}
String taskId = UUID.randomUUID().toString();
Operation op = _dbClient.createTaskOpStatus(StoragePool.class, id, taskId, ResourceOperationTypeEnum.DELETE_STORAGE_PORT);
PurgeRunnable.executePurging(_dbClient, _dbPurger, _asynchJobService.getExecutorService(), port, _retry_attempts, taskId, 60);
return toTask(port, taskId, op);
}
use of com.emc.storageos.db.client.model.StoragePort in project coprhd-controller by CoprHD.
the class StoragePortService method deregisterStoragePort.
/**
* Allows the user to deregister a registered storage port so that it
* is no longer used by the system. This simply sets the
* registration_status of the storage port to UNREGISTERED.
*
* @param id the URN of a ViPR storage port.
*
* @brief Unregister storage port
* @return Status response indicating success or failure
*/
@POST
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Path("/{id}/deregister")
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
public StoragePortRestRep deregisterStoragePort(@PathParam("id") URI id) {
ArgValidator.checkFieldUriType(id, StoragePort.class, "id");
StoragePort port = queryResource(id);
if (RegistrationStatus.REGISTERED.toString().equalsIgnoreCase(port.getRegistrationStatus())) {
// Setting status to UNREGISTERED.
port.setRegistrationStatus(RegistrationStatus.UNREGISTERED.toString());
_dbClient.persistObject(port);
// Record the storage port deregister event.
recordStoragePortEvent(OperationTypeEnum.STORAGE_PORT_DEREGISTER, STORAGEPORT_DEREGISTERED_DESCRIPTION, port.getId());
auditOp(OperationTypeEnum.DEREGISTER_STORAGE_PORT, true, null, port.getLabel(), port.getId().toString());
}
return MapStoragePort.getInstance(_dbClient).toStoragePortRestRep(port);
}
use of com.emc.storageos.db.client.model.StoragePort in project coprhd-controller by CoprHD.
the class StoragePortService method checkForDuplicatePortNetworkIdWithinSystem.
/**
* Check if a storage port with the same portNetworkId exists for the passed storage system.
*
* @param dbClient the db client
* @param portNetworkId the port network id
* @param systemURI the system uri
*/
public static void checkForDuplicatePortNetworkIdWithinSystem(DbClient dbClient, String portNetworkId, URI systemURI) {
URIQueryResultList portUriList = new URIQueryResultList();
dbClient.queryByConstraint(AlternateIdConstraint.Factory.getStoragePortEndpointConstraint(portNetworkId), portUriList);
Iterator<URI> storagePortIter = portUriList.iterator();
while (storagePortIter.hasNext()) {
StoragePort port = dbClient.queryObject(StoragePort.class, storagePortIter.next());
if (port != null && !port.getInactive() && port.getStorageDevice().toString().equals(systemURI.toString())) {
throw APIException.badRequests.duplicateEntityWithField("StoragePort", "portNetworkId");
}
}
}
Aggregations