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

Reply via email to