Search in sources :

Example 1 with Health

use of com.emc.storageos.vnxe.models.Health in project coprhd-controller by CoprHD.

the class VNXUnityCommunicationInterface method discoverStoragePools.

/**
 * Returns the list of storage pools for the specified VNX Unity storage
 * system.
 *
 * @param system
 *            storage system information.
 * @param client
 *            VNX Unity service client
 * @param supportedProtocols
 *            calculated supportedProtocols for the array
 * @return Map of New and Existing known storage pools.
 * @throws VNXeException
 */
private Map<String, List<StoragePool>> discoverStoragePools(StorageSystem system, VNXeApiClient client, StringSet supportedProtocols, List<StoragePool> poolsToMatchWithVpool) throws VNXeException {
    Map<String, List<StoragePool>> storagePools = new HashMap<String, List<StoragePool>>();
    List<StoragePool> newPools = new ArrayList<StoragePool>();
    List<StoragePool> existingPools = new ArrayList<StoragePool>();
    _logger.info("Start storage pool discovery for storage system {}", system.getId());
    try {
        List<VNXePool> pools = client.getPools();
        for (VNXePool vnxePool : pools) {
            StoragePool pool = null;
            URIQueryResultList results = new URIQueryResultList();
            String poolNativeGuid = NativeGUIDGenerator.generateNativeGuid(system, vnxePool.getId(), NativeGUIDGenerator.POOL);
            _dbClient.queryByConstraint(AlternateIdConstraint.Factory.getStoragePoolByNativeGuidConstraint(poolNativeGuid), results);
            boolean isModified = false;
            Iterator<URI> it = results.iterator();
            if (it.hasNext()) {
                StoragePool tmpPool = _dbClient.queryObject(StoragePool.class, it.next());
                if (tmpPool.getStorageDevice().equals(system.getId())) {
                    pool = tmpPool;
                    _logger.info("Found StoragePool {} at {}", pool.getPoolName(), poolNativeGuid);
                }
            }
            if (pool == null) {
                pool = new StoragePool();
                pool.setId(URIUtil.createId(StoragePool.class));
                pool.setLabel(poolNativeGuid);
                pool.setNativeGuid(poolNativeGuid);
                pool.setPoolServiceType(PoolServiceType.block_file.toString());
                pool.setStorageDevice(system.getId());
                pool.setNativeId(vnxePool.getId());
                pool.setPoolName(vnxePool.getName());
                pool.setCompatibilityStatus(DiscoveredDataObject.CompatibilityStatus.COMPATIBLE.name());
                pool.setDiscoveryStatus(DiscoveredDataObject.DiscoveryStatus.VISIBLE.name());
                // Supported resource type indicates what type of file
                // systems are supported.
                pool.setSupportedResourceTypes(StoragePool.SupportedResourceTypes.THIN_AND_THICK.toString());
                pool.setPoolClassName(StoragePool.PoolClassNames.VNXe_Pool.name());
                pool.setPoolServiceType(StoragePool.PoolServiceType.block_file.name());
                pool.setRegistrationStatus(RegistrationStatus.REGISTERED.toString());
                _logger.info("Creating new storage pool using NativeGuid : {}", poolNativeGuid);
                newPools.add(pool);
            } else {
                // update pool attributes
                _logger.info("updating the pool: {}", poolNativeGuid);
                if (ImplicitPoolMatcher.checkPoolPropertiesChanged(pool.getProtocols(), supportedProtocols)) {
                    isModified = true;
                }
                existingPools.add(pool);
            }
            Health poolHealth = vnxePool.getHealth();
            if (poolHealth != null) {
                int value = poolHealth.getValue();
                if (value == Health.HealthEnum.OK.getValue() || value == Health.HealthEnum.OK_BUT.getValue()) {
                    pool.setOperationalStatus(StoragePool.PoolOperationalStatus.READY.name());
                } else {
                    pool.setOperationalStatus(StoragePool.PoolOperationalStatus.NOTREADY.name());
                }
            }
            pool.setProtocols(supportedProtocols);
            StringSet raidLevels = new StringSet();
            RaidTypeEnum raid = vnxePool.getRaidTypeEnum();
            if (raid != null) {
                raidLevels.add(vnxePool.getRaidTypeEnum().name());
                pool.setSupportedRaidLevels(raidLevels);
            }
            pool.setAutoTieringEnabled(getPoolAutoTieringEnabled(vnxePool, system));
            List<PoolTier> poolTiers = vnxePool.getTiers();
            StringSet driveTypes = new StringSet();
            String diskTechnologyType = null;
            if (poolTiers != null) {
                for (PoolTier poolTier : poolTiers) {
                    List<RaidGroup> raidGroups = poolTier.getRaidGroups();
                    if (raidGroups != null) {
                        for (RaidGroup raidGroup : raidGroups) {
                            VNXeBase diskGroup = raidGroup.getDiskGroup();
                            if (diskGroup != null) {
                                DiskGroup diskgroupObj = client.getDiskGroup(diskGroup.getId());
                                diskTechnologyType = diskgroupObj.getDiskTechnologyEnum().name();
                                mapDiskTypeAndAddToStringSet(diskTechnologyType, driveTypes);
                            }
                        }
                    }
                }
            }
            // Get drive types from disks
            List<Disk> disks = client.getDisksForPool(vnxePool.getId());
            if (disks != null) {
                for (Disk disk : disks) {
                    if (disk.getDiskTechnologyEnum() != null) {
                        diskTechnologyType = disk.getDiskTechnologyEnum().name();
                        mapDiskTypeAndAddToStringSet(diskTechnologyType, driveTypes);
                    }
                }
            }
            pool.setSupportedDriveTypes(driveTypes);
            double size = vnxePool.getSizeTotal();
            if (size > 0) {
                // Convert to kb
                pool.setTotalCapacity(VNXeUtils.convertDoubleSizeToViPRLong(size));
            }
            long free = VNXeUtils.convertDoubleSizeToViPRLong(vnxePool.getSizeFree());
            if (free > 0) {
                pool.setFreeCapacity(free);
                pool.setMaximumThinVolumeSize(free);
                pool.setMaximumThickVolumeSize(free);
            }
            long subscribed = VNXeUtils.convertDoubleSizeToViPRLong(vnxePool.getSizeSubscribed());
            pool.setSubscribedCapacity(subscribed);
            if (isModified || ImplicitPoolMatcher.checkPoolPropertiesChanged(pool.getCompatibilityStatus(), DiscoveredDataObject.CompatibilityStatus.COMPATIBLE.name()) || ImplicitPoolMatcher.checkPoolPropertiesChanged(pool.getDiscoveryStatus(), DiscoveryStatus.VISIBLE.name())) {
                poolsToMatchWithVpool.add(pool);
            }
            pool.setDiscoveryStatus(DiscoveryStatus.VISIBLE.name());
            pool.setCompatibilityStatus(DiscoveredDataObject.CompatibilityStatus.COMPATIBLE.name());
        }
    } catch (VNXeException e) {
        _logger.error("Discovery of storage pools failed for storage system {} for {}", system.getId(), e.getMessage());
        throw e;
    }
    for (StoragePool newPool : newPools) {
        _logger.info("New Storage Pool : " + newPool);
        _logger.info("New Storage Pool : {} : {}", newPool.getNativeGuid(), newPool.getId());
    }
    for (StoragePool pool : existingPools) {
        _logger.info("Old Storage Pool : " + pool);
        _logger.info("Old Storage Pool : {} : {}", pool.getNativeGuid(), pool.getId());
    }
    storagePools.put(NEW, newPools);
    storagePools.put(EXISTING, existingPools);
    _logger.info("Number of pools found {} : ", storagePools.size());
    _logger.info("Storage pool discovery for storage system {} complete", system.getId());
    return storagePools;
}
Also used : StoragePool(com.emc.storageos.db.client.model.StoragePool) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) RaidTypeEnum(com.emc.storageos.vnxe.models.RaidTypeEnum) PoolTier(com.emc.storageos.vnxe.models.PoolTier) URI(java.net.URI) URIQueryResultList(com.emc.storageos.db.client.constraint.URIQueryResultList) VNXeBase(com.emc.storageos.vnxe.models.VNXeBase) StringSet(com.emc.storageos.db.client.model.StringSet) List(java.util.List) ArrayList(java.util.ArrayList) URIQueryResultList(com.emc.storageos.db.client.constraint.URIQueryResultList) RaidGroup(com.emc.storageos.vnxe.models.RaidGroup) Disk(com.emc.storageos.vnxe.models.Disk) Health(com.emc.storageos.vnxe.models.Health) DiskGroup(com.emc.storageos.vnxe.models.DiskGroup) VNXePool(com.emc.storageos.vnxe.models.VNXePool) AlternateIdConstraint(com.emc.storageos.db.client.constraint.AlternateIdConstraint) VNXeException(com.emc.storageos.vnxe.VNXeException)

Example 2 with Health

use of com.emc.storageos.vnxe.models.Health in project coprhd-controller by CoprHD.

the class VNXUnityCommunicationInterface method discoverIscsiPorts.

/**
 * Discover iscsiPorts
 *
 * @param system
 * @param client
 * @param spIdMap
 *            storage processors VNXeId and ViPR URI map
 * @return
 * @throws VNXeException
 */
private HashMap<String, List<StoragePort>> discoverIscsiPorts(StorageSystem system, VNXeApiClient client, Map<String, URI> spIdMap) throws VNXeException {
    HashMap<String, List<StoragePort>> storagePorts = new HashMap<String, List<StoragePort>>();
    List<StoragePort> newStoragePorts = new ArrayList<StoragePort>();
    List<StoragePort> existingStoragePorts = new ArrayList<StoragePort>();
    _logger.info("Start iSCSI storage port discovery for storage system {}", system.getId());
    // Retrieve the list of iscsi ports
    List<VNXeIscsiNode> ports = client.getAllIscsiPorts();
    if (ports == null || ports.isEmpty()) {
        _logger.info("No iSCSI ports found for the system: {} ", system.getId());
        return storagePorts;
    }
    _logger.info("Number iSCSI ports found: {}", ports.size());
    // Create the list of storage ports.
    for (VNXeIscsiNode node : ports) {
        StoragePort port = null;
        VNXeEthernetPort eport = node.getEthernetPort();
        if (eport == null) {
            _logger.info("No ethernet port found for the iscsi node: {}", node.getId());
            continue;
        }
        VNXeBase spId = eport.getStorageProcessor();
        if (spId == null) {
            _logger.info("No storage processor info for the iscsi node: {}", node.getId());
            continue;
        }
        String spIdStr = spId.getId();
        URI haDomainUri = spIdMap.get(spIdStr);
        if (haDomainUri == null) {
            _logger.info("The sp {} has not been discovered.", spIdStr);
            continue;
        }
        // Check if storage port was already discovered
        String portNativeGuid = NativeGUIDGenerator.generateNativeGuid(system, node.getName(), NativeGUIDGenerator.PORT);
        URIQueryResultList results = new URIQueryResultList();
        _dbClient.queryByConstraint(AlternateIdConstraint.Factory.getStoragePortByNativeGuidConstraint(portNativeGuid), results);
        Iterator<URI> it = results.iterator();
        if (it.hasNext()) {
            _logger.info("cross verifying for duplicate port");
            StoragePort tmpPort = _dbClient.queryObject(StoragePort.class, it.next());
            _logger.info(String.format("Actual StorageDevice %s : PortGroup found for port %s - Actual PortGroup %s", system.getId(), tmpPort.getPortNetworkId(), tmpPort.getPortGroup()));
            if (tmpPort.getStorageDevice().equals(system.getId()) && tmpPort.getPortGroup().equals(spIdStr)) {
                port = tmpPort;
                _logger.info("found duplicate iscsi port {}", node.getName());
            }
        }
        // If iscsi port was not previously discovered, add new storage port
        if (port == null) {
            port = new StoragePort();
            port.setId(URIUtil.createId(StoragePort.class));
            port.setLabel(portNativeGuid);
            port.setTransportType("IP");
            port.setNativeGuid(portNativeGuid);
            port.setStorageDevice(system.getId());
            port.setRegistrationStatus(RegistrationStatus.REGISTERED.toString());
            port.setPortName(eport.getId());
            port.setPortNetworkId(node.getName());
            port.setPortGroup(spIdStr);
            port.setStorageHADomain(haDomainUri);
            VNXeIscsiPortal portal = node.getIscsiPortal();
            if (portal != null) {
                port.setIpAddress(portal.getIpAddress());
            }
            _logger.info("Creating new storage port using NativeGuid : {}, IQN:", portNativeGuid, node.getName());
            newStoragePorts.add(port);
        } else {
            existingStoragePorts.add(port);
        }
        Health health = node.getEthernetPort().getHealth();
        if (health != null && health.getValue() == Health.HealthEnum.OK.getValue()) {
            port.setOperationalStatus(StoragePort.OperationalStatus.OK.name());
        } else {
            port.setOperationalStatus(StoragePort.OperationalStatus.NOT_OK.name());
        }
        port.setDiscoveryStatus(DiscoveryStatus.VISIBLE.name());
        port.setCompatibilityStatus(DiscoveredDataObject.CompatibilityStatus.COMPATIBLE.name());
    }
    _logger.info("iSCSI port discovery for storage system {} complete", system.getId());
    storagePorts.put(NEW, newStoragePorts);
    storagePorts.put(EXISTING, existingStoragePorts);
    return storagePorts;
}
Also used : HashMap(java.util.HashMap) Health(com.emc.storageos.vnxe.models.Health) StoragePort(com.emc.storageos.db.client.model.StoragePort) ArrayList(java.util.ArrayList) VNXeEthernetPort(com.emc.storageos.vnxe.models.VNXeEthernetPort) URI(java.net.URI) URIQueryResultList(com.emc.storageos.db.client.constraint.URIQueryResultList) VNXeBase(com.emc.storageos.vnxe.models.VNXeBase) VNXeIscsiNode(com.emc.storageos.vnxe.models.VNXeIscsiNode) VNXeIscsiPortal(com.emc.storageos.vnxe.models.VNXeIscsiPortal) List(java.util.List) ArrayList(java.util.ArrayList) URIQueryResultList(com.emc.storageos.db.client.constraint.URIQueryResultList)

Example 3 with Health

use of com.emc.storageos.vnxe.models.Health in project coprhd-controller by CoprHD.

the class VNXUnityCommunicationInterface method discoverFcPorts.

/**
 * Discover fcPorts
 *
 * @param system
 * @param client
 * @param spIdMap
 *            storage processors VNXeId and ViPR URI map
 * @return
 * @throws VNXeException
 */
private HashMap<String, List<StoragePort>> discoverFcPorts(StorageSystem system, VNXeApiClient client, Map<String, URI> spIdMap) throws VNXeException {
    HashMap<String, List<StoragePort>> storagePorts = new HashMap<String, List<StoragePort>>();
    List<StoragePort> newStoragePorts = new ArrayList<StoragePort>();
    List<StoragePort> existingStoragePorts = new ArrayList<StoragePort>();
    _logger.info("Start FC storage port discovery for storage system {}", system.getId());
    // Retrieve the list of iscsi ports
    List<VNXeFCPort> ports = client.getAllFcPorts();
    if (ports == null || ports.isEmpty()) {
        _logger.info("No FC ports found for the system: {} ", system.getId());
        storagePorts.put(NEW, newStoragePorts);
        storagePorts.put(EXISTING, existingStoragePorts);
        return storagePorts;
    }
    // Create the list of storage ports.
    for (VNXeFCPort fcPort : ports) {
        StoragePort port = null;
        VNXeBase spId = fcPort.getStorageProcessor();
        if (spId == null) {
            _logger.info("No storage processor info for the fcPort: {}", fcPort.getId());
            continue;
        }
        String spIdStr = spId.getId();
        URI haDomainUri = spIdMap.get(spIdStr);
        if (haDomainUri == null) {
            _logger.info("The sp {} has not been discovered.", spIdStr);
            continue;
        }
        // Check if storage port was already discovered
        String portNativeGuid = NativeGUIDGenerator.generateNativeGuid(system, fcPort.getWwn(), NativeGUIDGenerator.PORT);
        URIQueryResultList results = new URIQueryResultList();
        _dbClient.queryByConstraint(AlternateIdConstraint.Factory.getStoragePortByNativeGuidConstraint(portNativeGuid), results);
        Iterator<URI> it = results.iterator();
        if (it.hasNext()) {
            _logger.debug("cross verifying for duplicate port");
            StoragePort tmpPort = _dbClient.queryObject(StoragePort.class, it.next());
            _logger.info(String.format("Actual StorageDevice %s : PortGroup found for port %s - Actual PortGroup %s", system.getId(), tmpPort.getPortNetworkId(), tmpPort.getPortGroup()));
            if (tmpPort.getStorageDevice().equals(system.getId()) && tmpPort.getPortGroup().equals(spIdStr)) {
                port = tmpPort;
                _logger.debug("found duplicate fc port {}", fcPort.getWwn());
            }
        }
        // port
        if (port == null) {
            port = new StoragePort();
            port.setId(URIUtil.createId(StoragePort.class));
            port.setLabel(portNativeGuid);
            port.setTransportType("FC");
            port.setNativeGuid(portNativeGuid);
            port.setStorageDevice(system.getId());
            port.setRegistrationStatus(RegistrationStatus.REGISTERED.toString());
            port.setPortName(fcPort.getId());
            port.setPortNetworkId(fcPort.getPortWwn());
            port.setPortGroup(spIdStr);
            port.setStorageHADomain(haDomainUri);
            _logger.info("Creating new storage port using NativeGuid : {}, WWN:", portNativeGuid, fcPort.getWwn());
            newStoragePorts.add(port);
        } else {
            existingStoragePorts.add(port);
        }
        Health portHealth = fcPort.getHealth();
        if (portHealth != null) {
            int healthValue = portHealth.getValue();
            if (healthValue == Health.HealthEnum.OK.getValue()) {
                port.setOperationalStatus(StoragePort.OperationalStatus.OK.name());
            } else {
                port.setOperationalStatus(StoragePort.OperationalStatus.NOT_OK.name());
            }
        }
        port.setDiscoveryStatus(DiscoveryStatus.VISIBLE.name());
        port.setCompatibilityStatus(DiscoveredDataObject.CompatibilityStatus.COMPATIBLE.name());
    }
    _logger.info("FC port discovery for storage system {} complete", system.getId());
    storagePorts.put(NEW, newStoragePorts);
    storagePorts.put(EXISTING, existingStoragePorts);
    return storagePorts;
}
Also used : HashMap(java.util.HashMap) Health(com.emc.storageos.vnxe.models.Health) StoragePort(com.emc.storageos.db.client.model.StoragePort) ArrayList(java.util.ArrayList) URI(java.net.URI) URIQueryResultList(com.emc.storageos.db.client.constraint.URIQueryResultList) AlternateIdConstraint(com.emc.storageos.db.client.constraint.AlternateIdConstraint) VNXeFCPort(com.emc.storageos.vnxe.models.VNXeFCPort) VNXeBase(com.emc.storageos.vnxe.models.VNXeBase) List(java.util.List) ArrayList(java.util.ArrayList) URIQueryResultList(com.emc.storageos.db.client.constraint.URIQueryResultList)

Aggregations

URIQueryResultList (com.emc.storageos.db.client.constraint.URIQueryResultList)3 Health (com.emc.storageos.vnxe.models.Health)3 VNXeBase (com.emc.storageos.vnxe.models.VNXeBase)3 URI (java.net.URI)3 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 List (java.util.List)3 AlternateIdConstraint (com.emc.storageos.db.client.constraint.AlternateIdConstraint)2 StoragePort (com.emc.storageos.db.client.model.StoragePort)2 StoragePool (com.emc.storageos.db.client.model.StoragePool)1 StringSet (com.emc.storageos.db.client.model.StringSet)1 VNXeException (com.emc.storageos.vnxe.VNXeException)1 Disk (com.emc.storageos.vnxe.models.Disk)1 DiskGroup (com.emc.storageos.vnxe.models.DiskGroup)1 PoolTier (com.emc.storageos.vnxe.models.PoolTier)1 RaidGroup (com.emc.storageos.vnxe.models.RaidGroup)1 RaidTypeEnum (com.emc.storageos.vnxe.models.RaidTypeEnum)1 VNXeEthernetPort (com.emc.storageos.vnxe.models.VNXeEthernetPort)1 VNXeFCPort (com.emc.storageos.vnxe.models.VNXeFCPort)1 VNXeIscsiNode (com.emc.storageos.vnxe.models.VNXeIscsiNode)1