Liron Aravot has uploaded a new change for review.

Change subject: core: GetAllDisksByVmId - race condition leads to NPE
......................................................................

core: GetAllDisksByVmId - race condition leads to NPE

The given query is executed to get the vm disks with some
required info (properties from the vm_device, snapshots..etc).
As there are multiple queries on that flow, if some operation is done
while the query runs we might get NPE (and inconsistent results).
This patch prevents NPE when the vm device of a given disk was removed
(which means that it was detached from the vm).

Change-Id: Iffd0f8f695ce88baf2e1fbbe1deedf401a13b246
Bug-Url: https://bugzilla.redhat.com/1130065
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQuery.java
1 file changed, 7 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/31498/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQuery.java
index b3f1592..9cc1519 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllDisksByVmIdQuery.java
@@ -35,11 +35,13 @@
         List<Disk> disks = new ArrayList<Disk>(allDisks);
         for (Disk disk : allDisks) {
             VmDevice diskDevice = disksVmDevices.get(disk.getId());
-            disk.setPlugged(diskDevice.getIsPlugged());
-            disk.setReadOnly(diskDevice.getIsReadOnly());
-            if (disk.getDiskStorageType() == DiskStorageType.IMAGE) {
-                DiskImage diskImage = (DiskImage) disk;
-                
diskImage.getSnapshots().addAll(getAllImageSnapshots(diskImage));
+            if (diskDevice != null) {
+                disk.setPlugged(diskDevice.getIsPlugged());
+                disk.setReadOnly(diskDevice.getIsReadOnly());
+                if (disk.getDiskStorageType() == DiskStorageType.IMAGE) {
+                    DiskImage diskImage = (DiskImage) disk;
+                    
diskImage.getSnapshots().addAll(getAllImageSnapshots(diskImage));
+                }
             }
         }
         getQueryReturnValue().setReturnValue(disks);


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iffd0f8f695ce88baf2e1fbbe1deedf401a13b246
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Liron Aravot <lara...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to