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);
}
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);
}
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;
}
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);
}
}
}
}
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;
}
Aggregations