Allon Mureinik has posted comments on this change. Change subject: engine: Move quota to Image_storage_domain_map ......................................................................
Patch Set 2: Code-Review-1 (22 comments) .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java Line 48: import org.ovirt.engine.core.common.businessentities.VmType; Line 49: import org.ovirt.engine.core.common.businessentities.VmWatchdog; Line 50: import org.ovirt.engine.core.common.businessentities.permissions; Line 51: import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType; Line 52: import org.ovirt.engine.core.common.businessentities.network.VmNic; All of the changes here are unrelated to the patch - please remove them. Line 53: import org.ovirt.engine.core.common.config.Config; Line 54: import org.ovirt.engine.core.common.config.ConfigValues; Line 55: import org.ovirt.engine.core.common.errors.VdcBLLException; Line 56: import org.ovirt.engine.core.common.errors.VdcBllErrors; .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java Line 71 Line 72 Line 73 Line 74 Line 75 why is removing this getter relevant to the patch? Line 47: Line 48: @Override Line 49: public List<QuotaConsumptionParameter> getQuotaStorageConsumptionParameters() { Line 50: List<QuotaConsumptionParameter> list = new ArrayList<QuotaConsumptionParameter>(); Line 51: if (!getQuotaId().equals(disk.getQuotaId())) { what if the quota id is null? Line 52: if (disk.getQuotaId() != null && !Guid.Empty.equals(disk.getQuotaId())) { Line 53: list.add(new QuotaStorageConsumptionParameter( Line 54: disk.getQuotaId(), Line 55: null, Line 48: @Override Line 49: public List<QuotaConsumptionParameter> getQuotaStorageConsumptionParameters() { Line 50: List<QuotaConsumptionParameter> list = new ArrayList<QuotaConsumptionParameter>(); Line 51: if (!getQuotaId().equals(disk.getQuotaId())) { Line 52: if (disk.getQuotaId() != null && !Guid.Empty.equals(disk.getQuotaId())) { quota can no longer be empty - not sure if related to this patch. Line 53: list.add(new QuotaStorageConsumptionParameter( Line 54: disk.getQuotaId(), Line 55: null, Line 56: QuotaConsumptionParameter.QuotaAction.RELEASE, .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java Line 263: */ Line 264: public static void addDiskImageWithNoVmDevice(DiskImage image) { Line 265: addDiskImageWithNoVmDevice(image, Line 266: image.getActive(), Line 267: new image_storage_domain_map(image.getImageId(), image.getStorageIds().get(0), image.getQuotaId())); wasn't the point of this patch removing the quota property of the image? Line 268: } Line 269: Line 270: /** Line 271: * Adds disk to a VM without creating a VmDevice entry Line 287: * DiskImage to add Line 288: */ Line 289: public static void addDiskImage(DiskImage image, Guid vmId) { Line 290: addDiskImage(image, image.getActive(), new image_storage_domain_map(image.getImageId(), image.getStorageIds() Line 291: .get(0), image.getQuotaId()), vmId); wasn't the point of this patch removing the quota property of the image? Line 292: } Line 293: Line 294: /** Line 295: * Add image and related entities to DB (Adds image, disk image dynamic and image storage domain map) .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveAllVmTemplateImageTemplatesCommand.java Line 67: vdcReturnValue.getFault().getMessage()); Line 68: } Line 69: Line 70: DbFacade.getInstance().getImageStorageDomainMapDao().remove( Line 71: new ImageStorageDomainMapId(template.getImageId(), domain, template.getQuotaId())); wasn't the point of this patch removing the quota property of the image? Line 72: noImagesRemovedYet = false; Line 73: } Line 74: Line 75: // remove images from db only if removing template completely .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java Line 311: Line 312: protected void updateQuota(DiskImage diskImage) { Line 313: if (isQuotaValidationNeeded()) { Line 314: DiskImage oldDisk = (DiskImage) getOldDisk(); Line 315: if (!ObjectUtils.objectsEqual(oldDisk.getQuotaId(), diskImage.getQuotaId())) { wasn't the point of this patch removing the quota property of the image? Line 316: getImageStorageDomainMapDao().updateQuotaForImageAndSnapshots(diskImage.getId(), Line 317: diskImage.getStorageIds().get(0), Line 318: diskImage.getQuotaId()); Line 319: } .................................................... File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java Line 311: public void setQuotaIds(ArrayList<Guid> quotaIds) { Line 312: this.quotaIds = quotaIds; Line 313: } Line 314: Line 315: public Guid getQuotaId() { Yikes... Perhaps getFirstQuotaId()? Frankly. I'd remove this completely. Line 316: if (quotaIds == null || quotaIds.isEmpty()) { Line 317: return null; Line 318: } Line 319: return quotaIds.get(0); Line 318: } Line 319: return quotaIds.get(0); Line 320: } Line 321: Line 322: public void setQuotaId(Guid quotaId) { This too. Line 323: quotaIds = new ArrayList<Guid>(); Line 324: quotaIds.add(quotaId); Line 325: } Line 326: Line 336: if (quotaNames == null || quotaNames.isEmpty()) { Line 337: return null; Line 338: } Line 339: return quotaNames.get(0); Line 340: } Same logic for these two Line 341: Line 342: public static DiskImage copyOf(DiskImage diskImage) { Line 343: DiskImage di = new DiskImage(); Line 344: .................................................... File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ImageStorageDomainMapId.java Line 38: private Guid storageDomainId; Line 39: Line 40: private Guid imageId; Line 41: Line 42: private Guid quotaId; This should not be here. This class is only intended as a PK of the table, not as a data entity on its own right. Line 43: Line 44: public Guid getStorageDomainId() { Line 45: return storageDomainId; Line 46: } .................................................... File backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/image_storage_domain_map.java Line 48: public int hashCode() { Line 49: final int prime = 31; Line 50: int result = 1; Line 51: result = prime * result + ((id == null) ? 0 : id.hashCode()); Line 52: return result; You added a member - it should reflect in the hashCode... Line 53: } Line 54: Line 55: @Override Line 56: public boolean equals(Object obj) { Line 62: } Line 63: if (!(obj instanceof image_storage_domain_map)) { Line 64: return false; Line 65: } Line 66: image_storage_domain_map other = (image_storage_domain_map) obj; ... and the equals. Line 67: return (ObjectUtils.objectsEqual(id, other.id)); Line 68: } Line 69: Line 70: @Override .................................................... File backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDao.java Line 44: * @param diskId Line 45: * @param storageDomainId Line 46: * @param quotaId Line 47: */ Line 48: void updateQuotaForImageAndSnapshots(Guid diskId, Guid storageDomainId, Guid quotaId); why is this different from update(image_storage_domain_map)? .................................................... File backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoDbFacadeImpl.java Line 73: MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() Line 74: .addValue("disk_id", diskId) Line 75: .addValue("storage_domain_id", storageDomainId) Line 76: .addValue("quota_id", quotaId); Line 77: getCallsHandler().executeModification("updateQuotaForImageAndSnapshots", parameterSource); see comment in the interface Line 78: } Line 79: Line 80: private static final RowMapper<image_storage_domain_map> IMAGE_STORAGE_DOMAIN_MAP_MAPPER = Line 81: new RowMapper<image_storage_domain_map>() { .................................................... File backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/ImageStorageDomainMapDaoTest.java Line 84: assertTrue(entries.isEmpty()); Line 85: } Line 86: Line 87: @Test Line 88: public void testChangeQuotaForDisk() { please fix the name and the comments. Line 89: // fetch image Line 90: image_storage_domain_map image_storage_domain_map = dao.getAllByImageId(EXISTING_IMAGE_ID).get(0); Line 91: Guid imageId = image_storage_domain_map.getimage_id(); Line 92: Guid quotaId = image_storage_domain_map.getQuotaId(); .................................................... File backend/manager/modules/dal/src/test/resources/fixtures.xml Line 3874: </row> Line 3875: <row> Line 3876: <value>42058975-3d5e-484a-80c1-01c31207f579</value> Line 3877: <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> Line 3878: <null/> nice! Line 3879: </row> Line 3880: <row> Line 3881: <value>42058975-3d5e-484a-80c1-01c31207f577</value> Line 3882: <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> .................................................... File backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/GuidUtils.java Line 50: } Line 51: for (String guidString : str.split(SEPARATOR)) { Line 52: guidList.add(Guid.createGuidFromString(guidString)); Line 53: } Line 54: return guidList; seriously? Line 55: } .................................................... File packaging/dbscripts/create_views.sql Line 114: array_to_string(array_agg(storage_domain_static.storage), ',') as storage_path, Line 115: array_to_string(array_agg(storage_domain_static.id), ',') storage_id, Line 116: array_to_string(array_agg(storage_domain_static.storage_name), ',') as storage_name, Line 117: array_to_string(array_agg(quota.id), ',') as quota_id, Line 118: array_to_string(array_agg(quota.quota_name), ',') as quota_name I'd lose this - see comment on the business entities. Line 119: FROM images Line 120: LEFT JOIN image_storage_domain_map ON image_storage_domain_map.image_id = images.image_guid Line 121: LEFT OUTER JOIN storage_domain_static ON image_storage_domain_map.storage_domain_id = storage_domain_static.id Line 122: LEFT OUTER JOIN quota ON image_storage_domain_map.quota_id = quota.id .................................................... File packaging/dbscripts/image_storage_domain_map_sp.sql Line 71: Line 72: END; $procedure$ Line 73: LANGUAGE plpgsql; Line 74: Line 75: Create or replace FUNCTION updateQuotaForImageAndSnapshots(v_disk_id UUID, v_storage_domain_id UUID, v_quota_id UUID) see comment on the DAO. Line 76: RETURNS VOID Line 77: AS $procedure$ Line 78: BEGIN Line 79: UPDATE image_storage_domain_map as isdm .................................................... File packaging/dbscripts/upgrade/03_03_0990_move_quota_id.sql Line 1: -- add quota id column to the image-storage map table Line 2: SELECT fn_db_add_column('image_storage_domain_map','quota_id', 'UUID NULL'); Line 3: -- create a FK to quota table to that column Line 4: ALTER TABLE image_storage_domain_map ADD CONSTRAINT fk_image_storage_domain_map_quota FOREIGN KEY (quota_id) REFERENCES quota(id) ON DELETE SET NULL; I'd do this after the copying - should be faster. Line 5: -- copy old quota from images table Line 6: UPDATE image_storage_domain_map SET quota_id = (SELECT quota_id FROM images WHERE image_id = image_guid); Line 7: -- remove quota_id column from images table -- To view, visit http://gerrit.ovirt.org/20097 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Icc81b077cf125de85fcb3586bc0d0f71e5e0716a Gerrit-PatchSet: 2 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> Gerrit-Reviewer: Allon Mureinik <amure...@redhat.com> Gerrit-Reviewer: Daniel Erez <de...@redhat.com> Gerrit-Reviewer: Doron Fediuck <dfedi...@redhat.com> Gerrit-Reviewer: Gilad Chaplik <gchap...@redhat.com> Gerrit-Reviewer: oVirt Jenkins CI Server Gerrit-HasComments: Yes _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches