use of org.ovirt.engine.core.common.businessentities.StorageDomainStatic in project ovirt-engine by oVirt.
the class BackendStorageDomainResource method isAttached.
@Override
public Response isAttached(Action action) {
validateParameters(action, "host.id|name");
Guid hostId = getHostId(action);
org.ovirt.engine.core.common.businessentities.StorageDomain storageDomainToAttach = getEntity(org.ovirt.engine.core.common.businessentities.StorageDomain.class, QueryType.GetStorageDomainById, new IdQueryParameters(guid), guid.toString());
StorageDomainsAndStoragePoolIdQueryParameters parameters = new StorageDomainsAndStoragePoolIdQueryParameters(storageDomainToAttach, null, hostId);
parameters.setCheckStoragePoolStatus(false);
List<StorageDomainStatic> attachedStorageDomains = getEntity(List.class, QueryType.GetStorageDomainsWithAttachedStoragePoolGuid, parameters, guid.toString(), true);
// This is an atypical action, as it doesn't invoke a backend action, but a query. As a result we need to
// create and populate the returned action object so that it looks like a real action result.
Action result = new Action();
result.setIsAttached(!attachedStorageDomains.isEmpty());
result.setStatus(CreationStatus.COMPLETE.value());
return Response.ok().entity(result).build();
}
use of org.ovirt.engine.core.common.businessentities.StorageDomainStatic in project ovirt-engine by oVirt.
the class UpdateStoragePoolCommand method validate.
@Override
protected boolean validate() {
StoragePoolValidator spValidator = createStoragePoolValidator();
if (!validate(spValidator.exists())) {
return false;
}
// Name related validations
if (!StringUtils.equals(getOldStoragePool().getName(), getStoragePool().getName()) && !isStoragePoolUnique(getStoragePool().getName())) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_STORAGE_POOL_NAME_ALREADY_EXIST);
}
if (!checkStoragePoolNameLengthValid()) {
return false;
}
List<StorageDomainStatic> poolDomains = storageDomainStaticDao.getAllForStoragePool(getStoragePool().getId());
if (getOldStoragePool().isLocal() && !getStoragePool().isLocal() && poolDomains.stream().anyMatch(sdc -> sdc.getStorageType() == StorageType.LOCALFS)) {
return failValidation(EngineMessage.ERROR_CANNOT_CHANGE_STORAGE_POOL_TYPE_WITH_LOCAL);
}
if (!getOldStoragePool().isLocal() && getStoragePool().isLocal()) {
List<Cluster> clusters = clusterDao.getAllForStoragePool(getStoragePool().getId());
if (clusters.size() > 1) {
return failValidation(EngineMessage.CLUSTER_CANNOT_ADD_MORE_THEN_ONE_HOST_TO_LOCAL_STORAGE);
}
List<VDS> hosts = vdsDao.getAllForStoragePool(getStoragePool().getId());
if (hosts.size() > 1) {
return failValidation(EngineMessage.VDS_CANNOT_ADD_MORE_THEN_ONE_HOST_TO_LOCAL_STORAGE);
}
}
if (!getOldStoragePool().getCompatibilityVersion().equals(getStoragePool().getCompatibilityVersion())) {
if (!isStoragePoolVersionSupported()) {
return failValidation(VersionSupport.getUnsupportedVersionMessage());
} else // decreasing of compatibility version is allowed under conditions
if (getStoragePool().getCompatibilityVersion().compareTo(getOldStoragePool().getCompatibilityVersion()) < 0) {
if (!poolDomains.isEmpty() && !isCompatibilityVersionChangeAllowedForDomains(poolDomains)) {
return false;
}
List<Network> networks = networkDao.getAllForDataCenter(getStoragePoolId());
for (Network network : networks) {
NetworkValidator validator = getNetworkValidator(network);
if (!getManagementNetworkUtil().isManagementNetwork(network.getId()) || !validator.canNetworkCompatibilityBeDecreased()) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_CANNOT_DECREASE_DATA_CENTER_COMPATIBILITY_VERSION);
}
}
} else if (!checkAllClustersLevel()) {
// Check all clusters has at least the same compatibility version.
return false;
}
}
return validate(spValidator.isNotLocalfsWithDefaultCluster()) && validate(allMacsInEveryClusterCanBeMigratedToAnotherPool());
}
use of org.ovirt.engine.core.common.businessentities.StorageDomainStatic in project ovirt-engine by oVirt.
the class InitVdsOnUpCommand method proceedVdsStats.
private Pair<Boolean, List<StorageDomainStatic>> proceedVdsStats(boolean shouldCheckReportedDomains, StoragePool storagePool) {
Pair<Boolean, List<StorageDomainStatic>> returnValue = new Pair<>(true, null);
try {
runVdsCommand(VDSCommandType.GetStats, new VdsIdAndVdsVDSCommandParametersBase(getVds()));
if (shouldCheckReportedDomains) {
List<Guid> problematicDomainsIds = fetchDomainsReportedAsProblematic(getVds().getDomains(), storagePool);
for (Guid domainId : problematicDomainsIds) {
StorageDomainStatic domainInfo = storageDomainStaticDao.get(domainId);
log.error("Storage Domain '{}' of pool '{}' is in problem in host '{}'", domainInfo != null ? domainInfo.getStorageName() : domainId, getStoragePool().getName(), getVds().getName());
if (domainInfo == null || domainInfo.getStorageDomainType().isDataDomain()) {
returnValue.setFirst(false);
if (returnValue.getSecond() == null) {
returnValue.setSecond(new ArrayList<>());
}
returnValue.getSecond().add(domainInfo);
}
}
}
} catch (EngineException e) {
log.error("Could not get Host statistics for Host '{}': {}", getVds().getName(), e.getMessage());
log.debug("Exception", e);
returnValue.setFirst(false);
}
return returnValue;
}
use of org.ovirt.engine.core.common.businessentities.StorageDomainStatic in project ovirt-engine by oVirt.
the class InitVdsOnUpCommand method initializeStorage.
private boolean initializeStorage() {
boolean returnValue = false;
// connect any storage
if (getStoragePool() == null || StoragePoolStatus.Uninitialized == getStoragePool().getStatus() || StoragePoolStatus.Maintenance == getStoragePool().getStatus()) {
returnValue = true;
connectPoolSucceeded = true;
} else {
ConnectHostToStoragePoolServersParameters params = new ConnectHostToStoragePoolServersParameters(getStoragePool(), getVds());
CommandContext ctx = cloneContext();
ctx.getExecutionContext().setJobRequired(false);
runInternalAction(ActionType.ConnectHostToStoragePoolServers, params, ctx);
EventResult connectResult = connectHostToPool();
if (connectResult != null) {
returnValue = connectResult.isSuccess();
problematicDomains = (List<StorageDomainStatic>) connectResult.getResultData();
}
connectPoolSucceeded = returnValue;
}
return returnValue;
}
use of org.ovirt.engine.core.common.businessentities.StorageDomainStatic in project ovirt-engine by oVirt.
the class UpdateVmDiskCommand method validateCanUpdateShareable.
/**
* Validate whether a disk can be shareable. Disk can be shareable if it is not based on qcow FS,
* which means it should not be based on a template image with thin provisioning,
* it also should not contain snapshots and it is not bootable.
* @return Indication whether the disk can be shared or not.
*/
private boolean validateCanUpdateShareable() {
if (DiskStorageType.LUN == getOldDisk().getDiskStorageType()) {
return true;
}
// Check if VM is not during snapshot.
if (!isVmNotInPreviewSnapshot()) {
return false;
}
if (isUpdatedToShareable(getOldDisk(), getNewDisk())) {
StorageDomainStatic sds = storageDomainStaticDao.get(((DiskImage) getNewDisk()).getStorageIds().get(0));
if (sds.getStorageType() == StorageType.GLUSTERFS) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_SHAREABLE_DISKS_NOT_SUPPORTED_ON_GLUSTER_DOMAIN);
}
List<DiskImage> diskImageList = getDiskImages(getOldDisk().getId());
// disk and all the other images are the snapshots.
if ((diskImageList.size() > 1) || !Guid.Empty.equals(((DiskImage) getOldDisk()).getImageTemplateId())) {
return failValidation(EngineMessage.SHAREABLE_DISK_IS_NOT_SUPPORTED_FOR_DISK);
}
if (!isVolumeFormatSupportedForShareable(((DiskImage) getNewDisk()).getVolumeFormat())) {
return failValidation(EngineMessage.SHAREABLE_DISK_IS_NOT_SUPPORTED_BY_VOLUME_FORMAT);
}
} else if (isUpdatedToNonShareable(getOldDisk(), getNewDisk())) {
if (vmsDiskOrSnapshotAttachedTo.size() > 1) {
return failValidation(EngineMessage.DISK_IS_ALREADY_SHARED_BETWEEN_VMS);
}
}
return true;
}
Aggregations