Omer Frenkel has uploaded a new change for review.

Change subject: core: fix duplicate smartcards on template update
......................................................................

core: fix duplicate smartcards on template update

When updating template, if smart card is enabled,
a new device was created and there was no check for existing device.

fixed to check if device already exist before add.
also added a script to eliminate any existing duplicates.

Change-Id: I14e6779c5c85b514cb953b771c68c5ac1acaafcb
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1101447
Signed-off-by: Omer Frenkel <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
A packaging/dbscripts/upgrade/03_04_790_remove_duplicate_smartcards.sql
2 files changed, 13 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/28287/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
index 25bc3a8..5494fbc 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
@@ -106,17 +106,18 @@
     }
 
     public static void updateSmartcardDevice(Guid vmId, boolean 
smartcardEnabled) {
+        List<VmDevice> vmDevices =
+                DbFacade.getInstance()
+                        .getVmDeviceDao()
+                        .getVmDeviceByVmIdTypeAndDevice(vmId,
+                                VmDeviceGeneralType.SMARTCARD,
+                                VmDeviceType.SMARTCARD.getName());
+
         if (!smartcardEnabled) {
-            List<VmDevice> vmDevices =
-                    DbFacade.getInstance()
-                            .getVmDeviceDao()
-                            .getVmDeviceByVmIdTypeAndDevice(vmId,
-                                    VmDeviceGeneralType.SMARTCARD,
-                                    VmDeviceType.SMARTCARD.getName());
             for (VmDevice device : vmDevices) {
                 dao.remove(device.getId());
             }
-        } else {
+        } else if (vmDevices.isEmpty()) {
             addSmartcardDevice(vmId);
         }
     }
diff --git 
a/packaging/dbscripts/upgrade/03_04_790_remove_duplicate_smartcards.sql 
b/packaging/dbscripts/upgrade/03_04_790_remove_duplicate_smartcards.sql
new file mode 100644
index 0000000..140719f
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_04_790_remove_duplicate_smartcards.sql
@@ -0,0 +1,5 @@
+-- only one smartcard is supported, remove any duplicates caused by a bug
+delete from vm_device a
+where device='smartcard'
+    and device_id not in (
+        select device_id from vm_device where vm_id=a.vm_id and 
device='smartcard' limit 1);


-- 
To view, visit http://gerrit.ovirt.org/28287
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I14e6779c5c85b514cb953b771c68c5ac1acaafcb
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Omer Frenkel <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to