Gilad Chaplik has uploaded a new change for review. Change subject: core: add foreign key to quota_id ......................................................................
core: add foreign key to quota_id problem: quota_id field (in vm_static and images) isn't linked to quota table, therefore when removing a quota, it doesn't clear the quota_id ref. solution: set quota_id fields as foreign keys and use set NULL on delete. Currently there is extensive usage of Guid.Empty to indicate null, removed that in relevant DAOs. Upgrade: - set NULL instead of Guid.Empty - set NULL instead of non-existing quota ids - add the foreign key constraint Change-Id: I5092a3070937719009fa1fb4fb9ecb792f03b969 Bug-Url: https://bugzilla.redhat.com/1003839 Signed-off-by: Gilad Chaplik <gchap...@redhat.com> --- 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/ImageDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java A packaging/dbscripts/upgrade/03_03_0900_quota_id_foreign_key.sql 6 files changed, 16 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/52/19652/1 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 4689ea3..f1eab4d 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 @@ -151,7 +151,7 @@ : null); entity.setFlushLatency(rs.getObject("flush_latency_seconds") != null ? rs.getDouble("flush_latency_seconds") : null); - entity.setQuotaId(getGuidDefaultEmpty(rs, "quota_id")); + entity.setQuotaId(getGuid(rs, "quota_id")); entity.setActive(Boolean.TRUE.equals(rs.getObject("active"))); entity.setQuotaName(rs.getString("quota_name")); entity.setQuotaEnforcementType(QuotaEnforcementTypeEnum.forValue(rs.getInt("quota_enforcement_type"))); 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 0dcc5fb..1d6883e 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 @@ -92,7 +92,7 @@ entity.setVolumeType(VolumeType.forValue(rs.getInt("volume_type"))); entity.setVolumeFormat(VolumeFormat.forValue(rs.getInt("volume_format"))); entity.setDiskId(getGuidDefaultEmpty(rs, "image_group_id")); - entity.setQuotaId(getGuidDefaultEmpty(rs, "quota_id")); + entity.setQuotaId(getGuid(rs, "quota_id")); entity.setActive((Boolean) rs.getObject("active")); return entity; } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java index 23928db..af3c568 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java @@ -253,7 +253,7 @@ VM entity = new VM(); entity.setId(getGuidDefaultEmpty(rs, "vm_guid")); entity.setName(rs.getString("vm_name")); - entity.setQuotaId(getGuidDefaultEmpty(rs, "quota_id")); + entity.setQuotaId(getGuid(rs, "quota_id")); entity.setQuotaName(rs.getString("quota_name")); entity.setQuotaEnforcementType(QuotaEnforcementTypeEnum.forValue(rs.getInt("quota_enforcement_type"))); entity.setVmMemSizeMb(rs.getInt("vm_mem_size_mb")); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java index 021e4a8..8adace6 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java @@ -214,7 +214,7 @@ entity.setCustomProperties(VmPropertiesUtils.getInstance().customProperties(predefinedProperties, userDefinedProperties)); entity.setMinAllocatedMem(rs.getInt("min_allocated_mem")); - entity.setQuotaId(getGuidDefaultEmpty(rs, "quota_id")); + entity.setQuotaId(getGuid(rs, "quota_id")); entity.setCpuPinning(rs.getString("cpu_pinning")); entity.setUseHostCpuFlags(rs.getBoolean("host_cpu_flags")); entity.setTunnelMigration((Boolean) rs.getObject("tunnel_migration")); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java index 2ab8415..0d17443 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java @@ -236,7 +236,7 @@ entity.setStoragePoolId(getGuid(rs, "storage_pool_id")); entity.setStoragePoolName(rs.getString("storage_pool_name")); entity.setDefaultDisplayType(DisplayType.forValue(rs.getInt("default_display_type"))); - entity.setQuotaId(getGuidDefaultEmpty(rs, "quota_id")); + entity.setQuotaId(getGuid(rs, "quota_id")); entity.setQuotaName(rs.getString("quota_name")); entity.setQuotaEnforcementType(QuotaEnforcementTypeEnum.forValue(rs.getInt("quota_enforcement_type"))); entity.setMigrationSupport(MigrationSupport.forValue(rs.getInt("migration_support"))); diff --git a/packaging/dbscripts/upgrade/03_03_0900_quota_id_foreign_key.sql b/packaging/dbscripts/upgrade/03_03_0900_quota_id_foreign_key.sql new file mode 100644 index 0000000..7a3930f --- /dev/null +++ b/packaging/dbscripts/upgrade/03_03_0900_quota_id_foreign_key.sql @@ -0,0 +1,11 @@ +-- remove deleted quota from images and also Guid.Empty +UPDATE images +SET quota_id = NULL +WHERE quota_id NOT IN (SELECT id FROM quota); +-- remove deleted quota from vm_static +UPDATE vm_static +SET quota_id = NULL +WHERE quota_id NOT IN (SELECT id FROM quota); +-- when removing quota, set quota_id to null in images and vm_static +ALTER TABLE images ADD CONSTRAINT fk_images_quota FOREIGN KEY (quota_id) REFERENCES quota(id) ON DELETE SET NULL; +ALTER TABLE vm_static ADD CONSTRAINT fk_vm_static_quota FOREIGN KEY (quota_id) REFERENCES quota(id) ON DELETE SET NULL; -- To view, visit http://gerrit.ovirt.org/19652 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5092a3070937719009fa1fb4fb9ecb792f03b969 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches