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 <gchap...@redhat.com> --- 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/TryBackToAllSnapshotsOfVmCommand.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/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.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/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_0740_disk_profile_for_disk_image.sql 35 files changed, 233 insertions(+), 25 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/36/29036/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 4711664..9f30779 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 @@ -394,6 +394,7 @@ getParameters().getVmId(), getDiskImageInfo()); parameters.setQuotaId(getQuotaId()); + parameters.setDiskProfileId(getDiskProfileId()); parameters.setDiskAlias(getDiskAlias()); parameters.setShouldRemainIllegalOnFailedExecution(getParameters().isShouldRemainIllegalOnFailedExecution()); parameters.setStorageDomainId(getStorageDomainId()); @@ -556,6 +557,14 @@ return null; } + private Guid getDiskProfileId() { + if (getParameters().getDiskInfo() != null + && DiskStorageType.IMAGE == getParameters().getDiskInfo().getDiskStorageType()) { + return getDiskImageInfo().getDiskProfileId(); + } + return null; + } + @Override protected void endSuccessfully() { plugDiskToVmIfNeeded(); 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 4ea848d..67db3c3 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 @@ -64,6 +64,7 @@ mNewCreatedDiskImage.setImageStatus(ImageStatus.LOCKED); mNewCreatedDiskImage.setVmSnapshotId(getParameters().getVmSnapshotId()); mNewCreatedDiskImage.setQuotaId(getParameters().getQuotaId()); + mNewCreatedDiskImage.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 33b1ddc..ab109cc 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 @@ -684,6 +684,7 @@ storageIds.add(storageId); newImage.setStorageIds(storageIds); newImage.setQuotaId(image.getQuotaId()); + newImage.setDiskProfileId(image.getDiskProfileId()); return newImage; } @@ -960,6 +961,7 @@ tempVar.setEntityInfo(getParameters().getEntityInfo()); tempVar.setParentParameters(getParameters()); tempVar.setQuotaId(diskInfoDestinationMap.get(dit.getId()).getQuotaId()); + tempVar.setDiskProfileId(diskInfoDestinationMap.get(dit.getId()).getDiskProfileId()); VdcReturnValueBase result = getBackend().runInternalAction(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 b5273a2..009dc17 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 @@ -123,6 +123,8 @@ 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() != null ? + diskInfoDestinationMap.get(disk.getId()).getDiskProfileId() : null); 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 d9fc8a3..89108b8 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 @@ -195,6 +195,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 eec70fc..421a928 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 @@ -231,6 +231,7 @@ retDiskImage.setId(getImageGroupId()); retDiskImage.setLastModifiedDate(new Date()); retDiskImage.setQuotaId(getParameters().getQuotaId()); + retDiskImage.setDiskProfileId(getParameters().getDiskProfileId()); retDiskImage.setDiskAlias(getParameters().getDiskAlias()); return retDiskImage; } @@ -260,7 +261,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.getDiskProfileIds().get(0)); getImageStorageDomainMapDao().save(image_storage_domain_map); boolean isDiskAdded = saveDiskIfNotExists(image); if (compensationContext != null) { @@ -396,7 +397,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.getDiskProfileIds().get(0)); 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 fa6eef4..57988d1 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 @@ -110,7 +110,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); @@ -168,7 +170,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 4df6975..628b47f 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 @@ -241,6 +241,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 5d608be..8796b9e 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 @@ -31,6 +31,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 35eae70..959317c 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 @@ -76,6 +76,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 3ac42ee..ce3b46f 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.getDiskProfileIds().get(0))); } /** @@ -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 ae16895..fe3e106 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 b07169d..3e88e3e 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 @@ -822,6 +822,8 @@ 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() != null ? disk.getDiskProfileId() + : getParameters().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 2e83e5e..57faf14 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 @@ -369,6 +369,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 b6271a4..569b591 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 @@ -171,6 +171,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/TryBackToAllSnapshotsOfVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java index 40e4b4b..f1686e0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java @@ -200,6 +200,7 @@ params.setEntityInfo(getParameters().getEntityInfo()); params.setParentParameters(getParameters()); params.setQuotaId(image.getQuotaId()); + params.setDiskProfileId(image.getDiskProfileId()); return params; } }); 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 2f379cc..03898a3 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 @@ -325,7 +325,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, @@ -348,11 +347,13 @@ if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { DiskImage diskImage = (DiskImage) disk; diskImage.setQuotaId(getQuotaId()); + diskImage.setDiskProfileId(((DiskImage) getNewDisk()).getDiskProfileId()); if (unlockImage && diskImage.getImageStatus() == ImageStatus.LOCKED) { diskImage.setImageStatus(ImageStatus.OK); } getImageDao().update(diskImage.getImage()); updateQuota(diskImage); + updateDiskProfile(diskImage); } reloadDisks(); @@ -375,8 +376,19 @@ }); } + protected void updateDiskProfile(DiskImage diskImage) { + if (isDiskImage()) { + DiskImage oldDisk = (DiskImage) getOldDisk(); + if (!Objects.equals(oldDisk.getDiskProfileId(), diskImage.getDiskProfileId())) { + getImageStorageDomainMapDao().updateDiskProfileForImageAndSnapshots(diskImage.getId(), + diskImage.getStorageIds().get(0), + diskImage.getDiskProfileIds().get(0)); + } + } + } + protected void updateQuota(DiskImage diskImage) { - if (isQuotaValidationNeeded()) { + if (isDiskImage()) { DiskImage oldDisk = (DiskImage) getOldDisk(); if (!Objects.equals(oldDisk.getQuotaId(), diskImage.getQuotaId())) { getImageStorageDomainMapDao().updateQuotaForImageAndSnapshots(diskImage.getId(), @@ -491,12 +503,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; @@ -506,7 +518,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 ac11763..e831a38 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 @@ -91,7 +91,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 a775086..ac882bc 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 @@ -628,7 +628,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/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java index 65fdfd1..4e89420 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java @@ -10,12 +10,14 @@ import java.util.Set; import org.ovirt.engine.core.bll.Backend; +import org.ovirt.engine.core.bll.profiles.DiskProfileHelper; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.StorageDomainManagementParameter; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StorageFormatType; import org.ovirt.engine.core.common.businessentities.StoragePool; 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 03914fc..18b1421 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..2d2f413 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.objectsEqual(diskProfileIds, other.diskProfileIds) + && ObjectUtils.objectsEqual(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 e31380e..af3aa55 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 @@ -1000,6 +1000,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/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 281fca2..ecdfe92 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 @@ -186,6 +186,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..6b5692a 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 updateDiskProfileForImageAndSnapshots(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..8ce4a50 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 updateDiskProfileForImageAndSnapshots(Guid diskId, Guid storageDomainId, Guid diskProfileId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("disk_id", diskId) + .addValue("storage_domain_id", storageDomainId) + .addValue("disk_profile_id", diskProfileId); + getCallsHandler().executeModification("updateDiskProfileForImageAndSnapshots", parameterSource); + } + private static final RowMapper<image_storage_domain_map> IMAGE_STORAGE_DOMAIN_MAP_MAPPER = new RowMapper<image_storage_domain_map>() { 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 5755d0f..d815aec 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 @@ -622,4 +622,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..12f5592 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 @@ -56,7 +56,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 +102,20 @@ // check that the new quota is the inserted one assertEquals("quota wasn't changed", quotaId, FixturesTool.DEFAULT_QUOTA_GENERAL); } + + @Test + public void testChangeDiksProfileForDisk() { + // 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 + if (image_storage_domain_map.getDiskProfileId().equals(FixturesTool.DISK_PROFILE_2)) { + fail("Same source and dest quota id, cannot perform test"); + } + // change to DISK_PROFILE_1 + dao.updateQuotaForImageAndSnapshots(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 quota is the inserted one + assertEquals("quota 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 86be5a3..9ceddaf 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -5036,30 +5036,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 fc02220..46d832c 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -118,11 +118,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_profile.id as varchar), '')), ',') as disk_profile_id, + array_to_string(array_agg(COALESCE(CAST(disk_profile.name as varchar), '')), ',') 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 diff --git a/packaging/dbscripts/image_storage_domain_map_sp.sql b/packaging/dbscripts/image_storage_domain_map_sp.sql index 0c1e499..6d82cf4d1 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 UpdateDiskProfileForImageAndSnapshots(v_disk_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_disk_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_0740_disk_profile_for_disk_image.sql b/packaging/dbscripts/upgrade/03_05_0740_disk_profile_for_disk_image.sql new file mode 100644 index 0000000..7092493 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_05_0740_disk_profile_for_disk_image.sql @@ -0,0 +1,11 @@ +-- 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 (delete will fail; see last line in file) +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; + -- To view, visit http://gerrit.ovirt.org/29036 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9488a1e31e85013a01ee088fdf71854f765059c9 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches