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

Reply via email to