Search in sources :

Example 46 with LUNs

use of org.ovirt.engine.core.common.businessentities.storage.LUNs in project ovirt-engine by oVirt.

the class BlockStorageDiscardFunctionalityHelper method logLunsBrokeStorageDomainDiscardAfterDeleteSupport.

private void logLunsBrokeStorageDomainDiscardAfterDeleteSupport(Collection<LUNs> lunsThatBreakSdDiscardAfterDeleteSupport, StorageDomain storageDomain) {
    AuditLogable auditLog = new AuditLogableImpl();
    auditLog.setStorageDomainId(storageDomain.getId());
    auditLog.setStorageDomainName(storageDomain.getName());
    auditLog.addCustomValue("LunsIds", lunsThatBreakSdDiscardAfterDeleteSupport.stream().map(LUNs::getLUNId).collect(Collectors.joining(", ")));
    auditLogDirector.log(auditLog, AuditLogType.LUNS_BROKE_SD_DISCARD_AFTER_DELETE_SUPPORT);
}
Also used : AuditLogable(org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable) AuditLogableImpl(org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl) LUNs(org.ovirt.engine.core.common.businessentities.storage.LUNs)

Example 47 with LUNs

use of org.ovirt.engine.core.common.businessentities.storage.LUNs in project ovirt-engine by oVirt.

the class BlockStorageDiscardFunctionalityHelper method logLunsBrokeStorageDomainPassDiscardSupport.

private void logLunsBrokeStorageDomainPassDiscardSupport(Collection<LUNs> lunsThatBreakSdPassDiscardSupport, StorageDomain storageDomain) {
    AuditLogable auditLog = new AuditLogableImpl();
    auditLog.setStorageDomainId(storageDomain.getId());
    auditLog.setStorageDomainName(storageDomain.getName());
    auditLog.addCustomValue("LunsIds", lunsThatBreakSdPassDiscardSupport.stream().map(LUNs::getLUNId).collect(Collectors.joining(", ")));
    auditLogDirector.log(auditLog, AuditLogType.LUNS_BROKE_SD_PASS_DISCARD_SUPPORT);
}
Also used : AuditLogable(org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable) AuditLogableImpl(org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl) LUNs(org.ovirt.engine.core.common.businessentities.storage.LUNs)

Example 48 with LUNs

use of org.ovirt.engine.core.common.businessentities.storage.LUNs in project ovirt-engine by oVirt.

the class AddDiskCommand method checkIfLunDiskCanBeAdded.

protected boolean checkIfLunDiskCanBeAdded(DiskValidator diskValidator) {
    LunDisk lunDisk = (LunDisk) getParameters().getDiskInfo();
    LUNs lun = lunDisk.getLun();
    if (!validate(diskValidator.validateConnectionsInLun(lun.getLunType()))) {
        return false;
    }
    if (!validate(diskValidator.validateLunAlreadyInUse())) {
        return false;
    }
    if (getVm() != null && !(validate(new VmValidator(getVm()).vmNotLocked()) && isVmNotInPreviewSnapshot())) {
        return false;
    }
    DiskVmElementValidator diskVmElementValidator = getDiskVmElementValidator(getParameters().getDiskInfo(), getDiskVmElement());
    if (!validate(diskVmElementValidator.isVirtIoScsiValid(getVm()))) {
        return false;
    }
    if (!validate(diskVmElementValidator.isDiskInterfaceSupported(getVm()))) {
        return false;
    }
    if (getVds() != null) {
        lunFromStorage = getLunDisk(lun, getVds());
        if (lunFromStorage == null) {
            return failValidation(EngineMessage.ACTION_TYPE_FAILED_DISK_LUN_INVALID);
        }
    }
    if (!validate(diskValidator.isUsingScsiReservationValid(getVm(), getDiskVmElement(), lunDisk))) {
        return false;
    }
    return true;
}
Also used : DiskVmElementValidator(org.ovirt.engine.core.bll.validator.storage.DiskVmElementValidator) LunDisk(org.ovirt.engine.core.common.businessentities.storage.LunDisk) LUNs(org.ovirt.engine.core.common.businessentities.storage.LUNs) VmValidator(org.ovirt.engine.core.bll.validator.VmValidator)

Example 49 with LUNs

use of org.ovirt.engine.core.common.businessentities.storage.LUNs in project ovirt-engine by oVirt.

the class ConnectAllHostsToLunCommand method executeCommand.

@Override
protected void executeCommand() {
    VDS spmVds = getAllRunningVdssInPool().stream().filter(vds -> vds.getSpmStatus() == VdsSpmStatus.SPM).findFirst().orElse(null);
    final List<LUNs> luns = getHostLuns(spmVds);
    final Map<String, LUNs> lunsMap = new HashMap<>();
    for (LUNs lun : luns) {
        lunsMap.put(lun.getLUNId(), lun);
    }
    final List<LUNs> processedLunsList = new ArrayList<>();
    for (String lunId : getParameters().getLunIds()) {
        LUNs lun = lunsMap.get(lunId);
        if (lun == null) {
            // fail
            handleFailure(spmVds, lunDao.get(lunId));
            return;
        }
        lun.setVolumeGroupId(getStorageDomain().getStorage());
        processedLunsList.add(lun);
    }
    // connect all vds in pool (except spm) to lun and getDeviceList
    Pair<Boolean, Map<String, List<Guid>>> result = connectVdsToLun(processedLunsList);
    if (result.getFirst()) {
        getReturnValue().setActionReturnValue(processedLunsList);
        setCommandShouldBeLogged(false);
        setSucceeded(true);
    } else {
        // disconnect all hosts if connection is not in use by other luns
        Map<String, List<Guid>> processed = result.getSecond();
        for (Map.Entry<String, List<Guid>> entry : processed.entrySet()) {
            for (Guid vdsId : entry.getValue()) {
                LUNs lun = lunsMap.get(entry.getKey());
                storageHelperDirector.getItem(getStorageDomain().getStorageType()).disconnectStorageFromLunByVdsId(getStorageDomain(), vdsId, lun);
            }
        }
    }
}
Also used : VDS(org.ovirt.engine.core.common.businessentities.VDS) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Guid(org.ovirt.engine.core.compat.Guid) LUNs(org.ovirt.engine.core.common.businessentities.storage.LUNs) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 50 with LUNs

use of org.ovirt.engine.core.common.businessentities.storage.LUNs in project ovirt-engine by oVirt.

the class UpdateStorageServerConnectionCommand method getExclusiveLocks.

@Override
protected Map<String, Pair<String, String>> getExclusiveLocks() {
    Map<String, Pair<String, String>> locks = new HashMap<>();
    domains = getStorageDomainsByConnId(getConnection().getId());
    if (!domains.isEmpty()) {
        for (StorageDomain domain : domains) {
            locks.put(domain.getId().toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE, EngineMessage.ACTION_TYPE_FAILED_OBJECT_LOCKED));
        }
    }
    if (getConnection().getStorageType().isFileDomain()) {
        // lock the path to avoid at the same time if some other user tries to
        // add new storage connection to same path or edit another storage server connection to point to same path
        locks.put(getConnection().getConnection(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE_CONNECTION, EngineMessage.ACTION_TYPE_FAILED_OBJECT_LOCKED));
    } else {
        // for block domains, locking the target details
        locks.put(getConnection().getConnection() + ";" + getConnection().getIqn() + ";" + getConnection().getPort() + ";" + getConnection().getUserName(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE_CONNECTION, EngineMessage.ACTION_TYPE_FAILED_OBJECT_LOCKED));
        // lock lun disks and domains, not VMs , no need to load from db.
        if (getLuns() != null) {
            for (LUNs lun : getLuns()) {
                Guid diskId = lun.getDiskId();
                Guid storageDomainId = lun.getStorageDomainId();
                if (diskId != null) {
                    locks.put(diskId.toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.DISK, EngineMessage.ACTION_TYPE_FAILED_OBJECT_LOCKED));
                }
                if (storageDomainId != null) {
                    locks.put(storageDomainId.toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE, EngineMessage.ACTION_TYPE_FAILED_OBJECT_LOCKED));
                }
            }
        }
    }
    // lock connection's id to avoid editing or removing this connection at the same time
    // by another user
    locks.put(getConnection().getId(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE_CONNECTION, EngineMessage.ACTION_TYPE_FAILED_OBJECT_LOCKED));
    return locks;
}
Also used : StorageDomain(org.ovirt.engine.core.common.businessentities.StorageDomain) HashMap(java.util.HashMap) Guid(org.ovirt.engine.core.compat.Guid) LUNs(org.ovirt.engine.core.common.businessentities.storage.LUNs) Pair(org.ovirt.engine.core.common.utils.Pair)

Aggregations

LUNs (org.ovirt.engine.core.common.businessentities.storage.LUNs)105 ArrayList (java.util.ArrayList)40 Test (org.junit.Test)33 StorageServerConnections (org.ovirt.engine.core.common.businessentities.StorageServerConnections)26 Guid (org.ovirt.engine.core.compat.Guid)18 BaseCommandTest (org.ovirt.engine.core.bll.BaseCommandTest)17 List (java.util.List)16 HashMap (java.util.HashMap)14 StorageDomain (org.ovirt.engine.core.common.businessentities.StorageDomain)13 LunDisk (org.ovirt.engine.core.common.businessentities.storage.LunDisk)13 VDS (org.ovirt.engine.core.common.businessentities.VDS)12 VM (org.ovirt.engine.core.common.businessentities.VM)7 StorageType (org.ovirt.engine.core.common.businessentities.storage.StorageType)7 VDSReturnValue (org.ovirt.engine.core.common.vdscommands.VDSReturnValue)7 Map (java.util.Map)6 LUNStorageServerConnectionMap (org.ovirt.engine.core.common.businessentities.storage.LUNStorageServerConnectionMap)6 LogicalUnit (org.ovirt.engine.api.model.LogicalUnit)5 Pair (org.ovirt.engine.core.common.utils.Pair)5 GetDeviceListVDSCommandParameters (org.ovirt.engine.core.common.vdscommands.GetDeviceListVDSCommandParameters)5 HashSet (java.util.HashSet)4