ofri masad has uploaded a new change for review. Change subject: core: Move quota to Image_storage_domain_map ......................................................................
core: Move quota to Image_storage_domain_map In order to allow assigning different quota to the same image on different storage domains, the quota id was moved from the images table to Image_storage_domain_map table. Backend entities were change to suit this change - so that quota is no longer a field of Image but a field DiskImage and multiple quotas can be assign to the same DiskImage for different Storage Domains. Change-Id: I2a48bbc63960a6b3e3a3a90ea2a96603ea21381d Signed-off-by: Ofri Masad <[email protected]> --- M backend/manager/dbscripts/create_views.sql M backend/manager/dbscripts/image_storage_domain_map_sp.sql M backend/manager/dbscripts/images_sp.sql A backend/manager/dbscripts/upgrade/03_01_1520_add_qouta_id_to_image_sd_map.sql A backend/manager/dbscripts/upgrade/03_01_1530_move_qouta_id.sql 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/ChangeQuotaForDiskCommand.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/MoveOrCopyImageGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQueryTest.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/DiskImageBase.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Image.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/image_storage_domain_map.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.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/ImageDaoTest.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 backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml 25 files changed, 156 insertions(+), 118 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/9460/1 diff --git a/backend/manager/dbscripts/create_views.sql b/backend/manager/dbscripts/create_views.sql index d6dd745..f82673c 100644 --- a/backend/manager/dbscripts/create_views.sql +++ b/backend/manager/dbscripts/create_views.sql @@ -61,7 +61,7 @@ base_disks.wipe_after_delete as wipe_after_delete, base_disks.propagate_errors, base_disks.boot as boot, - images.quota_id as quota_id, + image_storage_domain_map.quota_id as quota_id, quota.quota_name as quota_name, storage_pool.quota_enforcement_type, disk_image_dynamic.actual_size as actual_size, @@ -78,7 +78,7 @@ LEFT JOIN image_storage_domain_map ON image_storage_domain_map.image_id = images.image_guid LEFT OUTER JOIN storage_domain_static_view ON image_storage_domain_map.storage_domain_id = storage_domain_static_view.id LEFT OUTER JOIN snapshots ON images.vm_snapshot_id = snapshots.snapshot_id -LEFT OUTER JOIN quota ON images.quota_id = quota.id +LEFT OUTER JOIN quota ON image_storage_domain_map.quota_id = quota.id LEFT OUTER JOIN storage_pool ON storage_pool.id = quota.storage_pool_id WHERE images.image_guid != '00000000-0000-0000-0000-000000000000'; diff --git a/backend/manager/dbscripts/image_storage_domain_map_sp.sql b/backend/manager/dbscripts/image_storage_domain_map_sp.sql index 4b32ede..06a5452 100644 --- a/backend/manager/dbscripts/image_storage_domain_map_sp.sql +++ b/backend/manager/dbscripts/image_storage_domain_map_sp.sql @@ -8,12 +8,12 @@ Create or replace FUNCTION Insertimage_storage_domain_map(v_image_id UUID, - v_storage_domain_id UUID) + v_storage_domain_id UUID, v_quota_id UUID) RETURNS VOID AS $procedure$ BEGIN -INSERT INTO image_storage_domain_map(image_id, storage_domain_id) - VALUES(v_image_id, v_storage_domain_id); +INSERT INTO image_storage_domain_map(image_id, storage_domain_id, v_quota_id) + VALUES(v_image_id, v_storage_domain_id, quota_id); END; $procedure$ LANGUAGE plpgsql; @@ -72,3 +72,14 @@ LANGUAGE plpgsql; +Create or replace FUNCTION updateQuotaForImageAndSnapshots(v_image_group_id UUID, v_storage_domain_id UUID, v_quota_id UUID) +RETURNS VOID +AS $procedure$ +BEGIN +UPDATE image_storage_domain_map + SET quota_id = v_quota_id + WHERE image_group_id = v_image_group_id AND storage_domain_id = v_storage_domain_id; +END; $procedure$ +LANGUAGE plpgsql; + + diff --git a/backend/manager/dbscripts/images_sp.sql b/backend/manager/dbscripts/images_sp.sql index 65f829e..b1d7ea8 100644 --- a/backend/manager/dbscripts/images_sp.sql +++ b/backend/manager/dbscripts/images_sp.sql @@ -19,8 +19,7 @@ v_volume_type INTEGER, v_volume_format INTEGER, v_image_group_id UUID , - v_active BOOLEAN, - v_quota_id UUID) + v_active BOOLEAN) RETURNS VOID AS $procedure$ BEGIN @@ -36,8 +35,7 @@ volume_type, image_group_id, volume_format, - active, - quota_id) + active) VALUES( v_creation_date, v_image_guid, @@ -50,8 +48,7 @@ v_volume_type, v_image_group_id, v_volume_format, - v_active, - v_quota_id); + v_active); END; $procedure$ LANGUAGE plpgsql; @@ -100,8 +97,7 @@ v_volume_type INTEGER, v_volume_format INTEGER, v_image_group_id UUID , - v_active BOOLEAN, - v_quota_id UUID) + v_active BOOLEAN) RETURNS VOID AS $procedure$ BEGIN @@ -117,7 +113,6 @@ image_group_id = v_image_group_id, volume_format = v_volume_format, active = v_active, - quota_id = v_quota_id, _update_date = LOCALTIMESTAMP WHERE image_guid = v_image_guid; END; $procedure$ @@ -167,13 +162,4 @@ END; $procedure$ LANGUAGE plpgsql; -Create or replace FUNCTION updateQuotaForImageAndSnapshots(v_image_group_id UUID, v_quota_id UUID) -RETURNS VOID -AS $procedure$ -BEGIN -UPDATE images - SET quota_id = v_quota_id - WHERE image_group_id = v_image_group_id; -END; $procedure$ -LANGUAGE plpgsql; diff --git a/backend/manager/dbscripts/upgrade/03_01_1520_add_qouta_id_to_image_sd_map.sql b/backend/manager/dbscripts/upgrade/03_01_1520_add_qouta_id_to_image_sd_map.sql new file mode 100644 index 0000000..fc1533a --- /dev/null +++ b/backend/manager/dbscripts/upgrade/03_01_1520_add_qouta_id_to_image_sd_map.sql @@ -0,0 +1 @@ +select fn_db_add_column('image_storage_domain_map','quota_id', 'UUID NULL'); diff --git a/backend/manager/dbscripts/upgrade/03_01_1530_move_qouta_id.sql b/backend/manager/dbscripts/upgrade/03_01_1530_move_qouta_id.sql new file mode 100644 index 0000000..a2e8815 --- /dev/null +++ b/backend/manager/dbscripts/upgrade/03_01_1530_move_qouta_id.sql @@ -0,0 +1,3 @@ +update image_storage_domain_map set quota_id = (select quota_id from images + where image_id = image_guid); +alter table images drop column quota_id; 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 4e25ab4..ba07231 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 @@ -297,7 +297,7 @@ diskDynamic.setactual_size(image.getactual_size()); getDiskImageDynamicDAO().save(diskDynamic); image_storage_domain_map image_storage_domain_map = new image_storage_domain_map(image.getImageId(), - image.getstorage_ids().get(0)); + image.getstorage_ids().get(0), image.getQuotaId()); getImageStorageDomainMapDao().save(image_storage_domain_map); boolean isDiskAdded = saveDiskIfNotExists(image); if (compensationContext != null) { @@ -420,8 +420,7 @@ static public image_storage_domain_map saveImage(DiskImage diskImage) { DbFacade.getInstance().getImageDao().save(diskImage.getImage()); image_storage_domain_map image_storage_domain_map = new image_storage_domain_map(diskImage.getImageId(), - diskImage.getstorage_ids() - .get(0)); + diskImage.getstorage_ids().get(0), diskImage.getQuotaId()); DbFacade.getInstance() .getImageStorageDomainMapDao() .save(image_storage_domain_map); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java index df98811..7f70760 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java @@ -40,8 +40,8 @@ @Override protected void executeCommand() { - getDbFacade().getImageDao().updateQuotaForImageAndSnapshots(getParameters().getObjectId(), - getParameters().getQuotaId()); + getDbFacade().getImageStorageDomainMapDao().updateQuotaForImageAndSnapshots(getParameters().getObjectId(), + getParameters().getQuotaId(), getParameters().getQuotaId()); setSucceeded(true); } 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 0c9a85e..9e87f7c 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 @@ -244,7 +244,7 @@ public static void addDiskImageWithNoVmDevice(DiskImage image) { addDiskImageWithNoVmDevice(image, image.getactive(), - new image_storage_domain_map(image.getImageId(), image.getstorage_ids().get(0))); + new image_storage_domain_map(image.getImageId(), image.getstorage_ids().get(0), image.getQuotaId())); } /** @@ -270,7 +270,7 @@ */ public static void addDiskImage(DiskImage image, Guid vmId) { addDiskImage(image, image.getactive(), new image_storage_domain_map(image.getImageId(), image.getstorage_ids() - .get(0)), vmId); + .get(0), image.getQuotaId()), vmId); } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java index 96f1a21..fa72004 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java @@ -113,13 +113,13 @@ if (!shouldUpdateStorageDisk() && getParameters().getAddImageDomainMapping()) { getImageStorageDomainMapDao().save (new image_storage_domain_map(getParameters().getImageId(), - getParameters().getStorageDomainId())); + getParameters().getStorageDomainId(), getParameters().getQuotaId())); } //update qutoa if (getParameters().getQuotaId() != null) { getDestinationDiskImage().setQuotaId(getParameters().getQuotaId()); - getImageDao().updateQuotaForImageAndSnapshots(getParameters().getDestImageGroupId(), - getParameters().getQuotaId()); + getImageStorageDomainMapDao().updateQuotaForImageAndSnapshots(getParameters().getDestImageGroupId(), + getParameters().getStorageDomainId(), getParameters().getQuotaId()); } setSucceeded(true); @@ -155,7 +155,7 @@ getImageStorageDomainMapDao().remove (new image_storage_domain_map_id(snapshot.getImageId(), snapshot.getstorage_ids().get(0))); getImageStorageDomainMapDao().save - (new image_storage_domain_map(snapshot.getImageId(), getParameters().getStorageDomainId())); + (new image_storage_domain_map(snapshot.getImageId(), getParameters().getStorageDomainId(), getParameters().getQuotaId())); } } super.endSuccessfully(); 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 b209e21..a75e498 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 @@ -67,7 +67,7 @@ getEnclosingCommand().getParameters().getSourceStorageDomainId())); getImageStorageDomainMapDao().save (new image_storage_domain_map(di.getImageId(), - getEnclosingCommand().getParameters().getTargetStorageDomainId())); + getEnclosingCommand().getParameters().getTargetStorageDomainId(), getEnclosingCommand().getParameters().getQuotaId())); } 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 32c9466..88ad76a 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 @@ -358,7 +358,7 @@ diskImage.setvm_snapshot_id(activeSnapshotId); ImagesHandler.addImage(diskImage, true, (diskImage.getstorage_ids() == null) ? null : - new image_storage_domain_map(diskImage.getImageId(), diskImage.getstorage_ids().get(0))); + new image_storage_domain_map(diskImage.getImageId(), diskImage.getstorage_ids().get(0), diskImage.getQuotaId())); } ImagesHandler.addDiskToVm(diskImage, vmId); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQueryTest.java index df008e0..5066c6d 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQueryTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQueryTest.java @@ -119,7 +119,7 @@ Guid.NewGuid(), ImageStatus.OK, new Date(), - "", VmEntityType.VM, 1, null, null, QuotaEnforcementTypeEnum.DISABLED, false); + "", VmEntityType.VM, 1, null, QuotaEnforcementTypeEnum.DISABLED, false); } private DiskImage createDiskSnapshot(Guid diskId) { @@ -136,7 +136,7 @@ diskId, ImageStatus.OK, new Date(), - "", VmEntityType.VM, 1, null, null, QuotaEnforcementTypeEnum.DISABLED, false); + "", VmEntityType.VM, 1, null, QuotaEnforcementTypeEnum.DISABLED, false); } @Test 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 9558db4..26f348a 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 @@ -59,7 +59,6 @@ setBoot(diskImageBase.isBoot()); setWipeAfterDelete(diskImageBase.isWipeAfterDelete()); setPropagateErrors(diskImageBase.getPropagateErrors()); - setQuotaId(diskImageBase.getQuotaId()); setQuotaName(diskImageBase.getQuotaName()); setQuotaEnforcementType(diskImageBase.getQuotaEnforcementType()); setIsQuotaDefault(diskImageBase.isQuotaDefault()); @@ -80,7 +79,6 @@ String appList, VmEntityType vmEntityType, int numberOfVms, - Guid quotaId, String quotaName, QuotaEnforcementTypeEnum quotaEnforcementType, boolean isQuotaDefault) { @@ -98,7 +96,6 @@ this.setappList(appList); this.setVmEntityType(vmEntityType); this.setNumberOfVms(numberOfVms); - this.setQuotaId(quotaId); this.setQuotaName(quotaName); setQuotaEnforcementType(quotaEnforcementType); setIsQuotaDefault(isQuotaDefault); @@ -263,6 +260,20 @@ storageIds = value; } + @Override + public void setQuotaId(Guid quotaId) { + if (getImage_storage_domain_mapList() != null && !getImage_storage_domain_mapList().isEmpty()) { + getImage_storage_domain_mapList().get(0).setQuotaId(quotaId); + } else { + if (getstorage_ids() != null && !getstorage_ids ().isEmpty()) { + setImage_storage_domain_mapList(new ArrayList<image_storage_domain_map>()); + getImage_storage_domain_mapList().add(new image_storage_domain_map(getId(), + getstorage_ids().get(0), + quotaId)); + } + } + } + public NGuid getvm_snapshot_id() { return getImage().getSnapshotId(); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageBase.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageBase.java index 796a94f..5bf42b8 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageBase.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImageBase.java @@ -4,12 +4,17 @@ import org.ovirt.engine.core.compat.Guid; +import java.util.ArrayList; +import java.util.List; + public class DiskImageBase extends Disk { private static final long serialVersionUID = 4913899921353163969L; @Valid private Image image = new Image(); + + private List<image_storage_domain_map> image_storage_domain_mapList = new ArrayList<image_storage_domain_map>(); /** Transient field for GUI presentation purposes. */ private String quotaName; @@ -50,12 +55,34 @@ } public Guid getQuotaId() { - return getImage().getQuotaId(); + if (getImage_storage_domain_mapList() != null && !getImage_storage_domain_mapList().isEmpty()) { + return getImage_storage_domain_mapList().get(0).getQuotaId(); + } else { + return null; + } } public void setQuotaId(Guid quotaId) { - getImage().setQuotaId(quotaId); + if (getImage_storage_domain_mapList() != null && !getImage_storage_domain_mapList().isEmpty()) { + getImage_storage_domain_mapList().get(0).setQuotaId(quotaId); + } } + + public Guid getQuotaId(Guid storage_domain_id) { + for (image_storage_domain_map image_storage_domain_map : getImage_storage_domain_mapList()) { + if (image_storage_domain_map.getId().equals(storage_domain_id)) { + return image_storage_domain_map.getQuotaId(); + } + } + return null; + } + + public void setQuotaId(Guid quotaId, Guid storage_domain_id) { + for (image_storage_domain_map image_storage_domain_map : getImage_storage_domain_mapList()) { + if (image_storage_domain_map.getId().equals(storage_domain_id)) { + image_storage_domain_map.setQuotaId(quotaId); + } + } } @Override public long getsize() { @@ -116,4 +143,12 @@ super.setId(id); getImage().setDiskId(id); } + + public List<image_storage_domain_map> getImage_storage_domain_mapList() { + return image_storage_domain_mapList; + } + + public void setImage_storage_domain_mapList(List<image_storage_domain_map> image_storage_domain_mapList) { + this.image_storage_domain_mapList = image_storage_domain_mapList; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Image.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Image.java index dc681e6..5074144 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Image.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Image.java @@ -38,11 +38,6 @@ @NotNull(message = "VALIDATION.VOLUME_FORMAT.NOT_NULL", groups = { CreateEntity.class, UpdateEntity.class }) private VolumeFormat volumeFormat; - /** - * The quota id the image consumes from. - */ - private Guid quotaId; - public Image() { } @@ -58,8 +53,7 @@ ImageStatus status, VolumeType volumeType, long size, - VolumeFormat volumeFormat, - Guid quotaId) { + VolumeFormat volumeFormat) { this.id = id; this.active = active; this.creationDate = creationDate; @@ -72,7 +66,6 @@ this.volumeType = volumeType; this.size = size; this.volumeFormat = volumeFormat; - this.quotaId = quotaId; } @Override @@ -171,14 +164,6 @@ public void setVolumeFormat(VolumeFormat volumeFormat) { this.volumeFormat = volumeFormat; - } - - public Guid getQuotaId() { - return quotaId; - } - - public void setQuotaId(Guid quotaId) { - this.quotaId = quotaId; } @Override 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 d9943bd..c6c5b67 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 @@ -23,13 +23,18 @@ @AttributeOverride(name = "storageDomainId", column = @Column(name = "storage_domain_id")) }) private image_storage_domain_map_id id = new image_storage_domain_map_id(); + /** + * The quota id the image consumes from. + */ + private Guid quotaId; public image_storage_domain_map() { } - public image_storage_domain_map(Guid image_id, Guid storage_domain_id) { + public image_storage_domain_map(Guid image_id, Guid storage_domain_id, Guid quotaId) { this.id.setImageId(image_id); this.id.setStorageDomainId(storage_domain_id); + this.quotaId = quotaId; } public Guid getstorage_domain_id() { @@ -87,4 +92,12 @@ public void setId(image_storage_domain_map_id id) { this.id = id; } + + public Guid getQuotaId() { + return quotaId; + } + + public void setQuotaId(Guid quotaId) { + this.quotaId = quotaId; + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java index 17bda44..9c45cae 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDao.java @@ -3,13 +3,11 @@ import org.ovirt.engine.core.common.businessentities.Image; import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.compat.Guid; -import org.ovirt.engine.core.compat.NGuid; /** * <code>ImageDAO</code> defines a type for performing CRUD operations on instances of {@link Image}. */ public interface ImageDao extends GenericDao<Image, Guid>, StatusAwareDao<Guid, ImageStatus> { - void updateQuotaForImageAndSnapshots(Guid imageGroupId, NGuid quotaId); public void updateImageVmSnapshotId(Guid id, Guid vmSnapshotId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java index f8ce502..cfa30d1 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageDaoDbFacadeImpl.java @@ -8,7 +8,6 @@ import org.ovirt.engine.core.common.businessentities.VolumeFormat; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.compat.Guid; -import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; @@ -48,8 +47,7 @@ .addValue("volume_type", entity.getVolumeType()) .addValue("volume_format", entity.getVolumeFormat()) .addValue("image_group_id", entity.getDiskId()) - .addValue("active", entity.isActive()) - .addValue("quota_id", entity.getQuotaId()); + .addValue("active", entity.isActive()); } @Override @@ -83,17 +81,9 @@ entity.setVolumeType(VolumeType.forValue(rs.getInt("volume_type"))); entity.setVolumeFormat(VolumeFormat.forValue(rs.getInt("volume_format"))); entity.setDiskId(Guid.createGuidFromString(rs.getString("image_group_id"))); - entity.setQuotaId(Guid.createGuidFromString(rs.getString("quota_id"))); entity.setActive((Boolean) rs.getObject("active")); return entity; } } - @Override - public void updateQuotaForImageAndSnapshots(Guid imageGroupId, NGuid quotaId) { - MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() - .addValue("image_group_id", imageGroupId) - .addValue("quota_id", quotaId); - getCallsHandler().executeModification("updateQuotaForImageAndSnapshots", parameterSource); - } } 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 ea86517..83b8411 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 @@ -4,6 +4,7 @@ import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; import org.ovirt.engine.core.common.businessentities.image_storage_domain_map_id; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.NGuid; /** * Interface for having DB related operations on {@link image_storage_domain_map} entities @@ -37,4 +38,5 @@ */ List<image_storage_domain_map> getAllByImageId(Guid imageId); + public void updateQuotaForImageAndSnapshots(Guid imageGroupId, Guid storageDomainId, NGuid quotaId); } 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 e989b0c..2ab5583 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 @@ -8,6 +8,8 @@ import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; import org.ovirt.engine.core.common.businessentities.image_storage_domain_map_id; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.NGuid; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; public class ImageStorageDomainMapDaoDbFacadeImpl extends BaseDAODbFacade implements ImageStorageDomainMapDao { @@ -77,4 +79,14 @@ return entity; } }; + + @Override + public void updateQuotaForImageAndSnapshots(Guid imageGroupId, Guid storageDomainId, NGuid quotaId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("image_group_id", imageGroupId) + .addValue("storage_domain_id", storageDomainId) + .addValue("quota_id", quotaId); + getCallsHandler().executeModification("updateQuotaForImageAndSnapshots", parameterSource); + } + } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageDaoTest.java index d982541..62e8a40 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageDaoTest.java @@ -2,7 +2,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.Image; @@ -65,7 +64,6 @@ newImage.setVolumeFormat(VolumeFormat.COW); newImage.setVolumeType(VolumeType.Sparse); newImage.setDiskId(Guid.NewGuid()); - newImage.setQuotaId(Guid.NewGuid()); } @Test @@ -85,22 +83,4 @@ assertEquals("Image snapshot id wasn't updated properly", guid, imageFromDb.getSnapshotId()); } - @Test - public void testChangeQuotaForDisk() { - // fetch image - Image image = dao.get(FixturesTool.IMAGE_ID); - Guid diskId = image.getDiskId(); - Guid quotaId = image.getQuotaId(); - // test that the current quota doesn't equal with the new quota - if(quotaId.equals(FixturesTool.DEFAULT_QUOTA_GENERAL)){ - fail("Same source and dest quota id, cannot perform test"); - } - // change quota to the new quota - dao.updateQuotaForImageAndSnapshots(diskId, FixturesTool.DEFAULT_QUOTA_GENERAL); - // fetch the image again - image = dao.get(FixturesTool.IMAGE_ID); - quotaId = image.getQuotaId(); - // check that the new quota is the inserted one - assertEquals("quota wasn't changed", quotaId, FixturesTool.DEFAULT_QUOTA_GENERAL); - } } 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 8f50181..f358ae3 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java @@ -1,10 +1,5 @@ package org.ovirt.engine.core.dao; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertNotNull; - import java.util.List; import org.junit.Test; @@ -12,11 +7,14 @@ import org.ovirt.engine.core.common.businessentities.image_storage_domain_map_id; import org.ovirt.engine.core.compat.Guid; +import static org.junit.Assert.*; + public class ImageStorageDomainMapDaoTest extends BaseDAOTestCase { private static final Guid EXISTING_DOMAIN_ID = new Guid("72e3a666-89e1-4005-a7ca-f7548004a9ab"); private static final Guid EXISTING_IMAGE_ID = new Guid("c9a559d9-8666-40d1-9967-759502b19f0b"); private static final Guid EXISTING_IMAGE_ID_WITH_NO_MAP_ENTRY = new Guid("f9a559d9-8666-40d1-9967-759502b19f0f"); + private ImageStorageDomainMapDao dao; @Override @@ -52,7 +50,7 @@ @Test public void testSave() { image_storage_domain_map entry = - new image_storage_domain_map(EXISTING_IMAGE_ID_WITH_NO_MAP_ENTRY, EXISTING_DOMAIN_ID); + new image_storage_domain_map(EXISTING_IMAGE_ID_WITH_NO_MAP_ENTRY, EXISTING_DOMAIN_ID, FixturesTool.DEFAULT_QUOTA_GENERAL); dao.save(entry); List<image_storage_domain_map> entries = dao.getAllByImageId(EXISTING_IMAGE_ID_WITH_NO_MAP_ENTRY); assertNotNull(entries); @@ -80,4 +78,23 @@ assertTrue(entries.isEmpty()); } + @Test + public void testChangeQuotaForDisk() { + // fetch image + image_storage_domain_map image_storage_domain_map = dao.get(new image_storage_domain_map_id(EXISTING_IMAGE_ID, EXISTING_DOMAIN_ID)); + Guid imageId = image_storage_domain_map.getimage_id(); + Guid quotaId = image_storage_domain_map.getQuotaId(); + // test that the current quota doesn't equal with the new quota + if(quotaId.equals(FixturesTool.DEFAULT_QUOTA_GENERAL)){ + fail("Same source and dest quota id, cannot perform test"); + } + // change quota to the new quota + dao.updateQuotaForImageAndSnapshots(imageId, EXISTING_DOMAIN_ID, FixturesTool.DEFAULT_QUOTA_GENERAL); + // fetch the image again + image_storage_domain_map = dao.get(new image_storage_domain_map_id(EXISTING_IMAGE_ID, EXISTING_DOMAIN_ID)); + quotaId = image_storage_domain_map.getQuotaId(); + // check that the new quota is the inserted one + assertEquals("quota wasn't changed", quotaId, FixturesTool.DEFAULT_QUOTA_GENERAL); + } + } diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index 37c3347..b3ab8ca 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -1902,7 +1902,6 @@ <column>image_group_id</column> <column>_create_date</column> <column>_update_date</column> - <column>quota_id</column> <column>active</column> <!-- template images --> <row> @@ -1919,7 +1918,6 @@ <null /> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4399</value> <value>1</value> </row> <row> @@ -1936,7 +1934,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a34</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4399</value> <value>1</value> </row> <row> @@ -1953,7 +1950,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a37</value> <value>2010-11-18 11:11:45</value> <value>2010-12-01 14:13:47</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4399</value> <value>1</value> </row> <row> @@ -1970,7 +1966,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a34</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4399</value> <value>0</value> </row> <!-- end of template images --> @@ -1988,7 +1983,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a36</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <null/> <value>1</value> </row> <row> @@ -2005,7 +1999,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a35</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4399</value> <value>1</value> </row> <row> @@ -2022,7 +2015,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a35</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4399</value> <value>0</value> </row> <row> @@ -2039,7 +2031,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a35</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> <value>1</value> </row> <row> @@ -2056,7 +2047,6 @@ <value>fb26a52b-b60f-44cb-9f46-3ef333b04a3f</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> <value>0</value> </row> <row> @@ -2073,7 +2063,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a36</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> <value>0</value> </row> <row> @@ -2090,7 +2079,6 @@ <value>1b26a52b-b60f-44cb-9f46-3ef333b04a38</value> <value>2010-11-18 11:11:35</value> <value>2010-12-01 14:13:07</value> - <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> <value>1</value> </row> </table> @@ -2775,25 +2763,31 @@ <table name="image_storage_domain_map"> <column>image_id</column> <column>storage_domain_id</column> + <column>quota_id</column> <row> <value>52058975-3d5e-484a-80c1-01c31207f578</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> + <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> </row> <row> <value>c9a559d9-8666-40d1-9967-759502b19f0b</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> + <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> </row> <row> <value>42058975-3d5e-484a-80c1-01c31207f578</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> + <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> </row> <row> <value>42058975-3d5e-484a-80c1-01c31207f579</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> + <null/> </row> <row> <value>42058975-3d5e-484a-80c1-01c31207f577</value> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> + <value>88296e00-0cad-4e5a-9291-008a7b7f4401</value> </row> </table> diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java index 158ea91..f111853 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java @@ -11,13 +11,8 @@ import org.ovirt.engine.api.model.Storage; import org.ovirt.engine.api.model.StorageDomain; import org.ovirt.engine.api.model.StorageDomains; +import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; -import org.ovirt.engine.core.common.businessentities.DiskImage; -import org.ovirt.engine.core.common.businessentities.ImageStatus; -import org.ovirt.engine.core.common.businessentities.LunDisk; -import org.ovirt.engine.core.common.businessentities.PropagateErrors; -import org.ovirt.engine.core.common.businessentities.VolumeFormat; -import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.compat.Guid; public class DiskMapper { @@ -111,6 +106,10 @@ StorageDomain storageDomain = disk.getStorageDomains().getStorageDomains().get(0); diskImage.setstorage_ids(new ArrayList<Guid>()); diskImage.getstorage_ids().add(Guid.createGuidFromString(storageDomain.getId())); + diskImage.setImage_storage_domain_mapList(new ArrayList<image_storage_domain_map>()); + diskImage.getImage_storage_domain_mapList().add(new image_storage_domain_map(diskImage.getId(), + Guid.createGuidFromString(storageDomain.getId()), + null)); } if (disk.isSetQuota() && disk.getQuota().isSetId()) { diskImage.setQuotaId(new Guid(disk.getQuota().getId())); diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml index 2daa132..70560d8 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml @@ -25,7 +25,9 @@ <include name="common/businessentities/DiskImage.java" /> <include name="common/businessentities/DiskImageBase.java" /> <include name="common/businessentities/DiskImageDynamic.java" /> - <include name="common/businessentities/DiskInterface.java" /> + <include name="common/businessentities/image_storage_domain_map.java" /> + <include name="common/businessentities/image_storage_domain_map_id.java" /> + <include name="common/businessentities/DiskInterface.java" /> <include name="common/businessentities/DiskType.java" /> <include name="common/businessentities/DisplayType.java" /> <include name="common/businessentities/event_notification_methods.java" /> -- To view, visit http://gerrit.ovirt.org/9460 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2a48bbc63960a6b3e3a3a90ea2a96603ea21381d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: ofri masad <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
