Gilad Chaplik has uploaded a new change for review. Change subject: core, db: disk profile for disk image ......................................................................
core, db: disk profile for disk image * Add disk profile to all disk image flows. * Handle image_storage_domain_map db flows. Change-Id: I9488a1e31e85013a01ee088fdf71854f765059c9 Signed-off-by: Gilad Chaplik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveDisksCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/LiveMigrateDiskParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainParametersBase.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/image_storage_domain_map.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ObjectUtils.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDAODbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoDbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M packaging/dbscripts/create_views.sql M packaging/dbscripts/image_storage_domain_map_sp.sql A packaging/dbscripts/upgrade/03_05_0970_disk_profile_for_disk_image.sql 34 files changed, 270 insertions(+), 32 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/31812/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java index 297260d..fe2bb5a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java @@ -403,6 +403,7 @@ getParameters().getVmId(), getDiskImageInfo()); parameters.setQuotaId(getQuotaId()); + parameters.setDiskProfileId(getDiskImageInfo().getDiskProfileId()); parameters.setDiskAlias(getDiskAlias()); parameters.setShouldRemainIllegalOnFailedExecution(getParameters().isShouldRemainIllegalOnFailedExecution()); parameters.setStorageDomainId(getStorageDomainId()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java index 968893a..dde13b5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java @@ -66,6 +66,7 @@ newDiskImage.setImageStatus(ImageStatus.LOCKED); newDiskImage.setVmSnapshotId(getParameters().getVmSnapshotId()); newDiskImage.setQuotaId(getParameters().getQuotaId()); + newDiskImage.setDiskProfileId(getParameters().getDiskProfileId()); TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java index 2e6e202..dc00dec 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java @@ -706,6 +706,7 @@ storageIds.add(storageId); newImage.setStorageIds(storageIds); newImage.setQuotaId(image.getQuotaId()); + newImage.setDiskProfileId(image.getDiskProfileId()); return newImage; } @@ -979,6 +980,7 @@ tempVar.setEntityInfo(getParameters().getEntityInfo()); tempVar.setParentParameters(getParameters()); tempVar.setQuotaId(diskInfoDestinationMap.get(dit.getId()).getQuotaId()); + tempVar.setDiskProfileId(diskInfoDestinationMap.get(dit.getId()).getDiskProfileId()); VdcReturnValueBase result = runInternalActionWithTasksContext(VdcActionType.CreateSnapshotFromTemplate, tempVar); /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java index aaee8d4..d8d6870 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java @@ -128,6 +128,7 @@ params.setEntityInfo(getParameters().getEntityInfo()); params.setQuotaId(diskInfoDestinationMap.get(disk.getId()).getQuotaId() != null ? diskInfoDestinationMap.get(disk.getId()).getQuotaId() : null); + params.setDiskProfileId(diskInfoDestinationMap.get(disk.getId()).getDiskProfileId()); return params; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java index e1a50f9..79b3602 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java @@ -206,6 +206,7 @@ createParams.setDiskAlias(diskInfoDestinationMap.get(diskImage.getId()).getDiskAlias()); createParams.setParentParameters(getParameters()); createParams.setQuotaId(getQuotaIdForDisk(diskImage)); + createParams.setDiskProfileId(diskInfoDestinationMap.get(diskImage.getId()).getDiskProfileId()); return createParams; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java index ff3bb30..5c90d3f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java @@ -236,6 +236,7 @@ retDiskImage.setId(getImageGroupId()); retDiskImage.setLastModifiedDate(new Date()); retDiskImage.setQuotaId(getParameters().getQuotaId()); + retDiskImage.setDiskProfileId(getParameters().getDiskProfileId()); retDiskImage.setDiskAlias(getParameters().getDiskAlias()); return retDiskImage; } @@ -265,7 +266,7 @@ diskDynamic.setactual_size(image.getActualSizeInBytes()); getDiskImageDynamicDAO().save(diskDynamic); image_storage_domain_map image_storage_domain_map = new image_storage_domain_map(image.getImageId(), - image.getStorageIds().get(0), image.getQuotaId()); + image.getStorageIds().get(0), image.getQuotaId(), image.getDiskProfileId()); getImageStorageDomainMapDao().save(image_storage_domain_map); boolean isDiskAdded = saveDiskIfNotExists(image); if (compensationContext != null) { @@ -401,7 +402,7 @@ DbFacade.getInstance().getImageDao().save(diskImage.getImage()); image_storage_domain_map image_storage_domain_map = new image_storage_domain_map(diskImage.getImageId(), diskImage.getStorageIds() - .get(0), diskImage.getQuotaId()); + .get(0), diskImage.getQuotaId(), diskImage.getDiskProfileId()); DbFacade.getInstance() .getImageStorageDomainMapDao() .save(image_storage_domain_map); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java index 2c791d7..9c71d9c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CopyImageGroupCommand.java @@ -113,7 +113,9 @@ if (!shouldUpdateStorageDisk() && getParameters().getAddImageDomainMapping()) { getImageStorageDomainMapDao().save (new image_storage_domain_map(getParameters().getImageId(), - getParameters().getStorageDomainId(), getParameters().getQuotaId())); + getParameters().getStorageDomainId(), + getParameters().getQuotaId(), + getParameters().getDiskProfileId())); } setSucceeded(true); @@ -177,7 +179,8 @@ getImageStorageDomainMapDao().save (new image_storage_domain_map(snapshot.getImageId(), getParameters().getStorageDomainId(), - getParameters().getQuotaId())); + getParameters().getQuotaId(), + getParameters().getDiskProfileId())); } } super.endSuccessfully(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java index dad2002..2d1e3c7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java @@ -277,6 +277,7 @@ result.setDescription(getParameters().getDescription()); result.setSessionId(getParameters().getSessionId()); result.setQuotaId(image.getQuotaId()); + result.setDiskProfileId(image.getDiskProfileId()); result.setVmSnapshotId(newActiveSnapshotId); result.setEntityInfo(getParameters().getEntityInfo()); result.setParentCommand(parentCommand); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java index d0a2d0c..5cd4b24 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java @@ -33,6 +33,7 @@ DiskImage returnValue = super.cloneDiskImage(newImageGuid); returnValue.setStorageIds(new ArrayList<Guid>(Arrays.asList(getDestinationStorageDomainId()))); returnValue.setQuotaId(getParameters().getQuotaId()); + returnValue.setDiskProfileId(getParameters().getDiskProfileId()); // override to have no template returnValue.setParentId(VmTemplateHandler.BLANK_VM_TEMPLATE_ID); returnValue.setImageTemplateId(VmTemplateHandler.BLANK_VM_TEMPLATE_ID); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java index 0c08946..4c76827 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java @@ -79,6 +79,7 @@ getParameters().getDiskAlias() : getDiskImage().getDiskAlias()); newImage.setVmSnapshotId(getParameters().getVmSnapshotId()); newImage.setQuotaId(getParameters().getQuotaId()); + newImage.setDiskProfileId(getParameters().getDiskProfileId()); newImage.setParentId(Guid.Empty); newImage.setImageTemplateId(Guid.Empty); newImage.setStorageIds(new ArrayList<Guid>(Arrays.asList(getParameters().getDestinationStorageDomainId()))); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java index d9353c5..a3026da 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java @@ -275,7 +275,10 @@ public static void addDiskImageWithNoVmDevice(DiskImage image) { addDiskImageWithNoVmDevice(image, image.getActive(), - new image_storage_domain_map(image.getImageId(), image.getStorageIds().get(0), image.getQuotaId())); + new image_storage_domain_map(image.getImageId(), + image.getStorageIds().get(0), + image.getQuotaId(), + image.getDiskProfileId())); } /** @@ -299,7 +302,7 @@ */ public static void addDiskImage(DiskImage image, Guid vmId) { addDiskImage(image, image.getActive(), new image_storage_domain_map(image.getImageId(), image.getStorageIds() - .get(0), image.getQuotaId()), vmId); + .get(0), image.getQuotaId(), image.getDiskProfileId()), vmId); } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java index a660b9a..bbf3530 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCreateTaskHandler.java @@ -93,6 +93,7 @@ parameters.setStorageDomainId(enclosingCommand.getParameters().getStorageDomainId()); parameters.setImageGroupID(enclosingCommand.getParameters().getImageGroupID()); parameters.setQuotaId(enclosingCommand.getParameters().getQuotaId()); + parameters.setDiskProfileId(enclosingCommand.getParameters().getDiskProfileId()); parameters.setParentCommand(VdcActionType.ImportRepoImage); parameters.setParentParameters(enclosingCommand.getParameters()); parameters.setDestinationImageId(enclosingCommand.getParameters().getDestinationImageId()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java index 79001771..313b82f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java @@ -821,6 +821,7 @@ params.setEntityInfo(new EntityInfo(VdcObjectType.VM, getVm().getId())); params.setRevertDbOperationScope(ImageDbOperationScope.IMAGE); params.setQuotaId(disk.getQuotaId() != null ? disk.getQuotaId() : getParameters().getQuotaId()); + params.setDiskProfileId(disk.getDiskProfileId()); if (getParameters().getVm().getDiskMap() != null && getParameters().getVm().getDiskMap().containsKey(originalDiskId)) { DiskImageBase diskImageBase = diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java index 8c76c35..447b056 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java @@ -368,6 +368,7 @@ for (DiskImage diskImage : getParameters().getVmTemplate().getDiskList()) { if (originalDiskId.equals(diskImage.getId())) { tempVar.setQuotaId(diskImage.getQuotaId()); + tempVar.setDiskProfileId(diskImage.getDiskProfileId()); break; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveDisksCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveDisksCommand.java index 72d9cb4..3e1a535 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveDisksCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveDisksCommand.java @@ -170,6 +170,7 @@ moveDiskParameters.getStorageDomainId(), vmId, moveDiskParameters.getQuotaId(), + moveDiskParameters.getDiskProfileId(), diskMap.get(moveDiskParameters.getImageId()).getId()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java index e6ec353..f1206b3 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java @@ -52,11 +52,11 @@ implements QuotaStorageDependent { private List<PermissionSubject> listPermissionSubjects; - private Map<Guid, List<Disk>> otherVmDisks = new HashMap<>(); - private List<VM> vmsDiskSnapshotPluggedTo = new LinkedList<>(); - private List<VM> vmsDiskPluggedTo = new LinkedList<>(); - private List<VM> vmsDiskOrSnapshotPluggedTo = new LinkedList<>(); - private List<VM> vmsDiskOrSnapshotAttachedTo = new LinkedList<>(); + private final Map<Guid, List<Disk>> otherVmDisks = new HashMap<>(); + private final List<VM> vmsDiskSnapshotPluggedTo = new LinkedList<>(); + private final List<VM> vmsDiskPluggedTo = new LinkedList<>(); + private final List<VM> vmsDiskOrSnapshotPluggedTo = new LinkedList<>(); + private final List<VM> vmsDiskOrSnapshotAttachedTo = new LinkedList<>(); /** * vm device for the given vm and disk @@ -330,7 +330,6 @@ listPermissionSubjects.add(new PermissionSubject(diskId, VdcObjectType.Disk, ActionGroup.EDIT_DISK_PROPERTIES)); - if (getOldDisk() != null && getNewDisk() != null && getOldDisk().getSgio() != getNewDisk().getSgio()) { listPermissionSubjects.add(new PermissionSubject(diskId, VdcObjectType.Disk, @@ -358,6 +357,7 @@ } getImageDao().update(diskImage.getImage()); updateQuota(diskImage); + updateDiskProfile(); } reloadDisks(); @@ -380,8 +380,20 @@ }); } + protected void updateDiskProfile() { + if (isDiskImage()) { + DiskImage oldDisk = (DiskImage) getOldDisk(); + DiskImage newDisk = (DiskImage) getNewDisk(); + if (!Objects.equals(oldDisk.getDiskProfileId(), newDisk.getDiskProfileId())) { + getImageStorageDomainMapDao().updateDiskProfileByImageGroupIdAndStorageDomainId(newDisk.getId(), + newDisk.getStorageIds().get(0), + newDisk.getDiskProfileId()); + } + } + } + protected void updateQuota(DiskImage diskImage) { - if (isQuotaValidationNeeded()) { + if (isDiskImage()) { DiskImage oldDisk = (DiskImage) getOldDisk(); if (!Objects.equals(oldDisk.getQuotaId(), diskImage.getQuotaId())) { getImageStorageDomainMapDao().updateQuotaForImageAndSnapshots(diskImage.getId(), @@ -497,12 +509,12 @@ return jobProperties; } - private boolean isQuotaValidationNeeded() { + private boolean isDiskImage() { return getOldDisk() != null && getNewDisk() != null && DiskStorageType.IMAGE == getOldDisk().getDiskStorageType(); } protected Guid getQuotaId() { - if (getNewDisk() != null && isQuotaValidationNeeded()) { + if (getNewDisk() != null && isDiskImage()) { return ((DiskImage) getNewDisk()).getQuotaId(); } return null; @@ -512,7 +524,7 @@ public List<QuotaConsumptionParameter> getQuotaStorageConsumptionParameters() { List<QuotaConsumptionParameter> list = new ArrayList<>(); - if (isQuotaValidationNeeded()) { + if (isDiskImage()) { DiskImage oldDiskImage = (DiskImage) getOldDisk(); DiskImage newDiskImage = (DiskImage) getNewDisk(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java index dc2768e..c3065a3 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java @@ -89,7 +89,8 @@ getImageStorageDomainMapDao().save (new image_storage_domain_map(di.getImageId(), targetStorageDomainId, - di.getQuotaId())); + di.getQuotaId(), + di.getDiskProfileId())); } return null; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java index 8d822f9..80cf143 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java @@ -655,7 +655,8 @@ ImagesHandler.addImage(diskImage, true, (diskImage.getStorageIds() == null) ? null : new image_storage_domain_map(diskImage.getImageId(), diskImage.getStorageIds().get(0), - diskImage.getQuotaId())); + diskImage.getQuotaId(), + diskImage.getDiskProfileId())); } ImagesHandler.addDiskToVm(diskImage, vmId); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java index c9a61e9..8fe4b6c 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommandTest.java @@ -57,6 +57,7 @@ private final Guid vmId = Guid.newGuid(); private final Guid quotaId = Guid.newGuid(); private final Guid storagePoolId = Guid.newGuid(); + private final Guid diskProfileId = Guid.newGuid(); @Mock private DiskImageDAO diskImageDao; @@ -103,11 +104,23 @@ } private List<LiveMigrateDiskParameters> createLiveMigrateVmDisksParameters() { - return Arrays.asList(new LiveMigrateDiskParameters(diskImageId, srcStorageId, dstStorageId, vmId, quotaId, diskImageGroupId)); + return Arrays.asList(new LiveMigrateDiskParameters(diskImageId, + srcStorageId, + dstStorageId, + vmId, + quotaId, + diskProfileId, + diskImageGroupId)); } private List<LiveMigrateDiskParameters> createLiveMigrateVmDisksParameters(Guid srcStorageId, Guid dstStorageId) { - return Arrays.asList(new LiveMigrateDiskParameters(diskImageId, srcStorageId, dstStorageId, vmId, quotaId, diskImageGroupId)); + return Arrays.asList(new LiveMigrateDiskParameters(diskImageId, + srcStorageId, + dstStorageId, + vmId, + quotaId, + diskProfileId, + diskImageGroupId)); } private void createParameters() { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/LiveMigrateDiskParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/LiveMigrateDiskParameters.java index 29d2a6b..9a59cad 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/LiveMigrateDiskParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/LiveMigrateDiskParameters.java @@ -10,11 +10,18 @@ // Empty constructor for serializing / deserializing } - public LiveMigrateDiskParameters(Guid imageId, Guid sourceDomainId, Guid destDomainId, Guid vmId, Guid quotaId, Guid imageGroupId) { + public LiveMigrateDiskParameters(Guid imageId, + Guid sourceDomainId, + Guid destDomainId, + Guid vmId, + Guid quotaId, + Guid diskProfileId, + Guid imageGroupId) { super(imageId, sourceDomainId, destDomainId, ImageOperation.Move); setVmId(vmId); setQuotaId(quotaId); setImageGroupID(imageGroupId); + setDiskProfileId(diskProfileId); } public Guid getSourceStorageDomainId() { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainParametersBase.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainParametersBase.java index b668eb1..51bcf8a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainParametersBase.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainParametersBase.java @@ -8,6 +8,7 @@ private Guid storageDomainId; private boolean isInternal; private Guid quotaId; + private Guid diskProfileId; public StorageDomainParametersBase() { storageDomainId = Guid.Empty; @@ -46,4 +47,12 @@ public void setQuotaId(Guid quotaId) { this.quotaId = quotaId; } + + public Guid getDiskProfileId() { + return diskProfileId; + } + + public void setDiskProfileId(Guid diskProfileId) { + this.diskProfileId = diskProfileId; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java index 5a862f8..4e3a7bb 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java @@ -34,6 +34,8 @@ private double actualDiskWithSnapthotsSize; private ArrayList<Guid> quotaIds; private ArrayList<String> quotaNames; + private ArrayList<Guid> diskProfileIds; + private ArrayList<String> diskProfileNames; private String vmSnapshotDescription; public DiskImage() { @@ -379,6 +381,41 @@ return quotaNames.get(0); } + public ArrayList<Guid> getDiskProfileIds() { + return diskProfileIds; + } + + public void setDiskProfileIds(ArrayList<Guid> diskProfileIds) { + this.diskProfileIds = diskProfileIds; + } + + public ArrayList<String> getDiskProfileNames() { + return diskProfileNames; + } + + public void setDiskProfileNames(ArrayList<String> diskProfileNames) { + this.diskProfileNames = diskProfileNames; + } + + public Guid getDiskProfileId() { + if (diskProfileIds == null || diskProfileIds.isEmpty()) { + return null; + } + return diskProfileIds.get(0); + } + + public void setDiskProfileId(Guid diskProfileId) { + diskProfileIds = new ArrayList<Guid>(); + diskProfileIds.add(diskProfileId); + } + + public String getDiskProfileName() { + if (diskProfileNames == null || diskProfileNames.isEmpty()) { + return null; + } + return diskProfileNames.get(0); + } + public static DiskImage copyOf(DiskImage diskImage) { DiskImage di = new DiskImage(); @@ -392,6 +429,12 @@ } if (diskImage.getQuotaNames() != null) { di.setQuotaNames(new ArrayList<String>(diskImage.getQuotaNames())); + } + if (diskImage.getDiskProfileIds() != null) { + di.setDiskProfileIds(new ArrayList<Guid>(diskImage.getDiskProfileIds())); + } + if (diskImage.getDiskProfileNames() != null) { + di.setDiskProfileNames(new ArrayList<String>(diskImage.getDiskProfileNames())); } di.setQuotaEnforcementType(diskImage.getQuotaEnforcementType()); di.setActive(diskImage.getActive()); @@ -457,6 +500,9 @@ result = prime * result + ((readLatency == null) ? 0 : readLatency.hashCode()); result = prime * result + ((writeLatency == null) ? 0 : writeLatency.hashCode()); result = prime * result + ((flushLatency == null) ? 0 : flushLatency.hashCode()); + result = prime * result + ((diskProfileIds == null) ? 0 : diskProfileIds.hashCode()); + result = prime * result + ((diskProfileNames == null) ? 0 : diskProfileNames.hashCode()); + return result; } @@ -487,7 +533,9 @@ && writeRateFromDiskImageDynamic == other.writeRateFromDiskImageDynamic && ObjectUtils.objectsEqual(readLatency, other.readLatency) && ObjectUtils.objectsEqual(writeLatency, other.writeLatency) - && ObjectUtils.objectsEqual(flushLatency, other.flushLatency)); + && ObjectUtils.objectsEqual(flushLatency, other.flushLatency) + && ObjectUtils.haveSameElements(diskProfileIds, other.diskProfileIds) + && ObjectUtils.haveSameElements(diskProfileNames, other.diskProfileNames)); } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/image_storage_domain_map.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/image_storage_domain_map.java index 5e4751b..7058e3f 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/image_storage_domain_map.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/image_storage_domain_map.java @@ -8,16 +8,18 @@ private ImageStorageDomainMapId id; private Guid quotaId; + private Guid diskProfileId; public image_storage_domain_map() { id = new ImageStorageDomainMapId(); } - public image_storage_domain_map(Guid image_id, Guid storage_domain_id, Guid quotaId) { + public image_storage_domain_map(Guid image_id, Guid storage_domain_id, Guid quotaId, Guid diskProfileId) { this(); this.id.setImageId(image_id); this.id.setStorageDomainId(storage_domain_id); this.quotaId = quotaId; + this.diskProfileId = diskProfileId; } public Guid getstorage_domain_id() { @@ -44,12 +46,21 @@ this.quotaId = quotaId; } + public Guid getDiskProfileId() { + return diskProfileId; + } + + public void setDiskProfileId(Guid diskProfileId) { + this.diskProfileId = diskProfileId; + } + @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((quotaId == null) ? 0 : quotaId.hashCode()); + result = prime * result + ((diskProfileId == null) ? 0 : diskProfileId.hashCode()); return result; } @@ -66,7 +77,8 @@ } image_storage_domain_map other = (image_storage_domain_map) obj; return (ObjectUtils.objectsEqual(id, other.id) - && ObjectUtils.objectsEqual(quotaId, other.quotaId)); + && ObjectUtils.objectsEqual(quotaId, other.quotaId) + && ObjectUtils.objectsEqual(diskProfileId, other.diskProfileId)); } @Override diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index 44dc03a..3e028a7 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -1011,6 +1011,7 @@ ACTION_TYPE_FAILED_PROFILE_NAME_IN_USE(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_CANNOT_CHANGE_PROFILE(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_PROFILE_IN_USE(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_DISK_PROFILE_EMPTY(ErrorType.BAD_PARAMETERS), // Affinity Groups AFFINITY_GROUP_NAME_TOO_LONG(ErrorType.BAD_PARAMETERS), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ObjectUtils.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ObjectUtils.java index 2a13668..d9b9e99 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ObjectUtils.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/ObjectUtils.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.common.utils; import java.math.BigDecimal; +import java.util.Collection; public class ObjectUtils { @@ -18,4 +19,16 @@ return (a == b) || (a != null && b != null && a.compareTo(b) == 0); } + /** + * Returns if both contains the same elements, regardless of order + */ + public static boolean haveSameElements(Collection<?> c1, Collection<?> c2) { + if (c1 == null && c2 == null) { + return true; + } + if (c1 == null || c2 == null || c1.size() != c2.size()) { + return false; + } + return c1.containsAll(c2) && c2.containsAll(c1); + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDAODbFacadeImpl.java index 7368bd2..107a027 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DiskImageDAODbFacadeImpl.java @@ -195,6 +195,8 @@ entity.setQuotaIds(getGuidListFromStringPreserveAllTokens(rs.getString("quota_id"))); entity.setQuotaNames(splitPreserveAllTokens(rs.getString("quota_name"))); entity.setQuotaEnforcementType(QuotaEnforcementTypeEnum.forValue(rs.getInt("quota_enforcement_type"))); + entity.setDiskProfileIds(getGuidListFromStringPreserveAllTokens(rs.getString("disk_profile_id"))); + entity.setDiskProfileNames(splitPreserveAllTokens(rs.getString("disk_profile_name"))); } @Override diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDao.java index d257580..87ff883 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDao.java @@ -46,4 +46,13 @@ * @param quotaId */ void updateQuotaForImageAndSnapshots(Guid diskId, Guid storageDomainId, Guid quotaId); + + /** + * updates images disk profile of a specific disk on a specific storage domain + * + * @param diskId + * @param storageDomainId + * @param diskProfileId + */ + void updateDiskProfileByImageGroupIdAndStorageDomainId(Guid diskId, Guid storageDomainId, Guid diskProfileId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoDbFacadeImpl.java index 1ff7625..0421e94 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoDbFacadeImpl.java @@ -19,7 +19,8 @@ getCustomMapSqlParameterSource().addValue("image_id", entity.getimage_id()).addValue("storage_domain_id", entity.getstorage_domain_id()) - .addValue("quota_id", entity.getQuotaId())); + .addValue("quota_id", entity.getQuotaId()) + .addValue("disk_profile_id", entity.getDiskProfileId())); } @Override @@ -77,6 +78,15 @@ getCallsHandler().executeModification("updateQuotaForImageAndSnapshots", parameterSource); } + @Override + public void updateDiskProfileByImageGroupIdAndStorageDomainId(Guid diskId, Guid storageDomainId, Guid diskProfileId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("image_group_id", diskId) + .addValue("storage_domain_id", storageDomainId) + .addValue("disk_profile_id", diskProfileId); + getCallsHandler().executeModification("UpdateDiskProfileByImageGroupId", parameterSource); + } + private static final RowMapper<image_storage_domain_map> IMAGE_STORAGE_DOMAIN_MAP_MAPPER = new RowMapper<image_storage_domain_map>() { @@ -86,6 +96,7 @@ entity.setimage_id(getGuidDefaultEmpty(rs, "image_id")); entity.setstorage_domain_id(getGuidDefaultEmpty(rs, "storage_domain_id")); entity.setQuotaId(getGuid(rs, "quota_id")); + entity.setDiskProfileId(getGuid(rs, "disk_profile_id")); return entity; } }; diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java index 3905cdd..05b3de8 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java @@ -626,4 +626,5 @@ public static final int NUMBER_OF_VMS_IN_VDS_GROUP_RHEL6_ISCSI = 7; public static final Guid DISK_PROFILE_1 = new Guid("fd81f1e1-785b-4579-ab75-1419ebb87052"); + public static final Guid DISK_PROFILE_2 = new Guid("fd81f1e1-785b-4579-ab75-1419ebb87053"); } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java index 37b22ad..cfda0a2 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java @@ -1,8 +1,11 @@ package org.ovirt.engine.core.dao; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -56,7 +59,8 @@ image_storage_domain_map entry = new image_storage_domain_map(EXISTING_IMAGE_ID_WITH_NO_MAP_ENTRY, EXISTING_DOMAIN_ID, - FixturesTool.DEFAULT_QUOTA_GENERAL); + FixturesTool.DEFAULT_QUOTA_GENERAL, + FixturesTool.DISK_PROFILE_1); dao.save(entry); List<image_storage_domain_map> entries = dao.getAllByImageId(EXISTING_IMAGE_ID_WITH_NO_MAP_ENTRY); assertNotNull(entries); @@ -101,4 +105,21 @@ // check that the new quota is the inserted one assertEquals("quota wasn't changed", quotaId, FixturesTool.DEFAULT_QUOTA_GENERAL); } + + @Test + public void testChangeDiskProfileForDisk() { + // fetch image + image_storage_domain_map image_storage_domain_map = dao.getAllByImageId(EXISTING_IMAGE_ID).get(0); + // test that the current disk profile doesn't equal with the new disk profile + assertThat("Same source and dest disk profile id, cannot perform test", + image_storage_domain_map.getDiskProfileId(), not(equalTo(FixturesTool.DISK_PROFILE_2))); + // change to newDiskProfileId + dao.updateDiskProfileByImageGroupIdAndStorageDomainId(EXISTING_DISK_ID, EXISTING_DOMAIN_ID, FixturesTool.DISK_PROFILE_2); + // fetch the image again + image_storage_domain_map = dao.getAllByImageId(EXISTING_IMAGE_ID).get(0); + // check that the new disk profile is the inserted one + assertEquals("disk profile wasn't changed", + image_storage_domain_map.getDiskProfileId(), + FixturesTool.DISK_PROFILE_2); + } } diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index c421cb6..76efdb6 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -5055,7 +5055,7 @@ <null /> </row> <row> - <value>2b75e023-a1fb-4dcb-9738-0ec7fe2d51c6</value> + <value>fd81f1e1-785b-4579-ab75-1419ebb87053</value> <value>engine4_profile</value> <value>c2211b56-8869-41cd-84e1-78d7cb96f31d</value> <value>ae956031-6be2-43d6-bb90-5191c9253314</value> @@ -5066,30 +5066,36 @@ <column>image_id</column> <column>storage_domain_id</column> <column>quota_id</column> + <column>disk_profile_id</column> <row> <value>52058975-3d5e-484a-80c1-01c31207f578</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> + <value>fd81f1e1-785b-4579-ab75-1419ebb87052</value> </row> <row> <value>c9a559d9-8666-40d1-9967-759502b19f0b</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> + <value>fd81f1e1-785b-4579-ab75-1419ebb87052</value> </row> <row> <value>42058975-3d5e-484a-80c1-01c31207f578</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> + <value>fd81f1e1-785b-4579-ab75-1419ebb87052</value> </row> <row> <value>42058975-3d5e-484a-80c1-01c31207f579</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> <null/> + <value>fd81f1e1-785b-4579-ab75-1419ebb87052</value> </row> <row> <value>42058975-3d5e-484a-80c1-01c31207f577</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> + <value>fd81f1e1-785b-4579-ab75-1419ebb87052</value> </row> </table> diff --git a/packaging/dbscripts/create_views.sql b/packaging/dbscripts/create_views.sql index ab58601..a0fd21b 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -71,6 +71,8 @@ image_storage_domain_map.quota_id as quota_id, quota.quota_name as quota_name, storage_pool.quota_enforcement_type, + image_storage_domain_map.disk_profile_id as disk_profile_id, + disk_profiles.name as disk_profile_name, disk_image_dynamic.actual_size as actual_size, disk_image_dynamic.read_rate as read_rate, disk_image_dynamic.write_rate as write_rate, @@ -90,6 +92,7 @@ LEFT OUTER JOIN storage_domain_static_view ON image_storage_domain_map.storage_domain_id = storage_domain_static_view.id LEFT OUTER JOIN snapshots ON images.vm_snapshot_id = snapshots.snapshot_id LEFT OUTER JOIN quota ON image_storage_domain_map.quota_id = quota.id +LEFT OUTER JOIN disk_profiles ON image_storage_domain_map.disk_profile_id = disk_profiles.id LEFT OUTER JOIN storage_pool ON storage_pool.id = storage_domain_static_view.storage_pool_id WHERE images.image_guid != '00000000-0000-0000-0000-000000000000'; @@ -122,11 +125,14 @@ array_to_string(array_agg(storage_domain_static.storage_type), ',') storage_type, array_to_string(array_agg(storage_domain_static.storage_name), ',') as storage_name, array_to_string(array_agg(COALESCE(CAST(quota.id as varchar), '')), ',') as quota_id, - array_to_string(array_agg(COALESCE(quota.quota_name, '')), ',') as quota_name + array_to_string(array_agg(COALESCE(quota.quota_name, '')), ',') as quota_name, + array_to_string(array_agg(COALESCE(CAST(disk_profiles.id as varchar), '')), ',') as disk_profile_id, + array_to_string(array_agg(COALESCE(disk_profiles.name, '')), ',') as disk_profile_name FROM images LEFT JOIN image_storage_domain_map ON image_storage_domain_map.image_id = images.image_guid LEFT OUTER JOIN storage_domain_static ON image_storage_domain_map.storage_domain_id = storage_domain_static.id LEFT OUTER JOIN quota ON image_storage_domain_map.quota_id = quota.id +LEFT OUTER JOIN disk_profiles ON image_storage_domain_map.disk_profile_id = disk_profiles.id GROUP BY images.image_guid; CREATE OR REPLACE VIEW vm_images_view @@ -145,6 +151,7 @@ images_storage_domain_view.disk_interface as disk_interface, images_storage_domain_view.boot as boot, images_storage_domain_view.wipe_after_delete as wipe_after_delete, images_storage_domain_view.propagate_errors as propagate_errors, images_storage_domain_view.sgio as sgio, images_storage_domain_view.entity_type as entity_type,images_storage_domain_view.number_of_vms as number_of_vms,images_storage_domain_view.vm_names as vm_names, storage_for_image_view.quota_id as quota_id, storage_for_image_view.quota_name as quota_name, images_storage_domain_view.quota_enforcement_type, + storage_for_image_view.disk_profile_id as disk_profile_id, storage_for_image_view.disk_profile_name as disk_profile_name, images_storage_domain_view.disk_id, images_storage_domain_view.disk_alias as disk_alias, images_storage_domain_view.disk_description as disk_description,images_storage_domain_view.shareable as shareable, images_storage_domain_view.alignment as alignment, images_storage_domain_view.last_alignment_scan as last_alignment_scan, images_storage_domain_view.ovf_store as ovf_store FROM images_storage_domain_view @@ -202,6 +209,8 @@ storage_for_image_view.quota_name as quota_name, quota_enforcement_type, ovf_store, + storage_for_image_view.disk_profile_id as disk_profile_id, -- disk profile fields + storage_for_image_view.disk_profile_name as disk_profile_name, null AS lun_id, -- LUN fields null AS physical_volume_id, null AS volume_group_id, @@ -246,6 +255,8 @@ null AS quota_name, null AS quota_enforcement_type, false as ovf_store, + null AS disk_profile_id, -- disk profile fields + null AS disk_profile_name, l.lun_id, -- LUN fields l.physical_volume_id, l.volume_group_id, @@ -1055,7 +1066,7 @@ vm_images_view.imagestatus, vm_images_view.lastmodified, vm_images_view.app_list, vm_images_view.vm_snapshot_id, vm_images_view.volume_type, vm_images_view.image_group_id, vm_images_view.active, vm_images_view.volume_format, vm_images_view.disk_interface, vm_images_view.boot, vm_images_view.wipe_after_delete, vm_images_view.propagate_errors, vm_images_view.entity_type, vm_images_view.number_of_vms, vm_images_view.vm_names, vm_images_view.quota_id, - vm_images_view.quota_name, vm_images_view.disk_alias, vm_images_view.disk_description, vm_images_view.sgio, + vm_images_view.quota_name, vm_images_view.disk_profile_id, vm_images_view.disk_profile_name, vm_images_view.disk_alias, vm_images_view.disk_description, vm_images_view.sgio, storage_domains_with_hosts_view.id, storage_domains_with_hosts_view.storage, storage_domains_with_hosts_view.storage_name, storage_domains_with_hosts_view.available_disk_size, storage_domains_with_hosts_view.used_disk_size, storage_domains_with_hosts_view.commited_disk_size, storage_domains_with_hosts_view.actual_images_size, storage_domains_with_hosts_view.storage_type, diff --git a/packaging/dbscripts/image_storage_domain_map_sp.sql b/packaging/dbscripts/image_storage_domain_map_sp.sql index 0c1e499..c9c017c 100644 --- a/packaging/dbscripts/image_storage_domain_map_sp.sql +++ b/packaging/dbscripts/image_storage_domain_map_sp.sql @@ -9,12 +9,13 @@ Create or replace FUNCTION Insertimage_storage_domain_map(v_image_id UUID, v_storage_domain_id UUID, - v_quota_id UUID) + v_quota_id UUID, + v_disk_profile_id UUID) RETURNS VOID AS $procedure$ BEGIN -INSERT INTO image_storage_domain_map(image_id, storage_domain_id, quota_id) - VALUES(v_image_id, v_storage_domain_id, v_quota_id); +INSERT INTO image_storage_domain_map(image_id, storage_domain_id, quota_id, disk_profile_id) + VALUES(v_image_id, v_storage_domain_id, v_quota_id, v_disk_profile_id); END; $procedure$ LANGUAGE plpgsql; @@ -83,3 +84,14 @@ END; $procedure$ LANGUAGE plpgsql; +Create or replace FUNCTION UpdateDiskProfileByImageGroupId(v_image_group_id UUID, v_storage_domain_id UUID, v_disk_profile_id UUID) +RETURNS VOID +AS $procedure$ +BEGIN +UPDATE image_storage_domain_map as isdm + SET disk_profile_id = v_disk_profile_id + FROM images as i + WHERE i.image_group_id = v_image_group_id AND i.image_guid = isdm.image_id AND storage_domain_id = v_storage_domain_id; +END; $procedure$ +LANGUAGE plpgsql; + diff --git a/packaging/dbscripts/upgrade/03_05_0970_disk_profile_for_disk_image.sql b/packaging/dbscripts/upgrade/03_05_0970_disk_profile_for_disk_image.sql new file mode 100644 index 0000000..6adaf39 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_05_0970_disk_profile_for_disk_image.sql @@ -0,0 +1,28 @@ +-- Add disk_profile id into image_storage_domain_map +SELECT fn_db_add_column('image_storage_domain_map', 'disk_profile_id', 'UUID NULL'); + +-- Create index for disk profile +DROP INDEX IF EXISTS IDX_image_storage_domain_map_profile_id; +CREATE INDEX IDX_image_storage_domain_map_profile_id ON image_storage_domain_map(disk_profile_id); + +-- Add FK an handle cascade +ALTER TABLE image_storage_domain_map ADD CONSTRAINT FK_image_storage_domain_map_disk_profile_id FOREIGN KEY(disk_profile_id) +REFERENCES disk_profiles(id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE SET NULL; + +-- Add disk profile for each SD, if compat version >= 3.5 +INSERT INTO disk_profiles(id, name, storage_domain_id) + SELECT uuid_generate_v1(), + storage_domain_static.storage_name, + storage_domain_static.id + FROM storage_pool LEFT OUTER JOIN storage_pool_iso_map ON storage_pool.id = storage_pool_iso_map.storage_pool_id + LEFT OUTER JOIN storage_domain_static ON storage_pool_iso_map.storage_id = storage_domain_static.id + WHERE (storage_domain_static.storage_domain_type = 0 OR + storage_domain_static.storage_domain_type = 1) AND + cast(storage_pool.compatibility_version as float) >= 3.5; + +--- Add correct profile id foreach disk. +UPDATE image_storage_domain_map + SET disk_profile_id = disk_profiles.id + FROM disk_profiles + WHERE image_storage_domain_map.storage_domain_id = disk_profiles.storage_domain_id; + -- To view, visit http://gerrit.ovirt.org/31812 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9488a1e31e85013a01ee088fdf71854f765059c9 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
