Vered Volansky has uploaded a new change for review.

Change subject: core: Fix NPE when disk size is not yet set
......................................................................

core: Fix NPE when disk size is not yet set

Available disk size is set to null on Storage Domain creation, to be
later polled and updated. This patch protects from the period of time
this value is null, a situation that can occur in storage allocation
validations on new domains.

Change-Id: Icca933dcf506ca702161fcfbfe400a7259d20d1a
Bug-Url: https://bugzilla.redhat.com/1176854
Signed-off-by: Vered Volansky <vvola...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
2 files changed, 10 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/84/36384/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
index ce1f87b..d5dd2c0 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/StorageDomainValidator.java
@@ -213,28 +213,28 @@
     }
 
     public ValidationResult hasSpaceForNewDisks(Collection<DiskImage> 
diskImages) {
-        double availableSize = storageDomain.getAvailableDiskSizeInBytes();
+        Long availableSize = storageDomain.getAvailableDiskSizeInBytes();
         double totalSizeForDisks = getTotalSizeForNewDisks(diskImages);
 
         return validateRequiredSpace(availableSize, totalSizeForDisks);
     }
 
     public ValidationResult hasSpaceForClonedDisks(Collection<DiskImage> 
diskImages) {
-        double availableSize = storageDomain.getAvailableDiskSizeInBytes();
+        Long availableSize = storageDomain.getAvailableDiskSizeInBytes();
         double totalSizeForDisks = getTotalSizeForClonedDisks(diskImages);
 
         return validateRequiredSpace(availableSize, totalSizeForDisks);
     }
 
     public ValidationResult 
hasSpaceForDisksWithSnapshots(Collection<DiskImage> diskImages) {
-        double availableSize = storageDomain.getAvailableDiskSizeInBytes();
+        Long availableSize = storageDomain.getAvailableDiskSizeInBytes();
         double totalSizeForDisks = 
getTotalSizeForDisksWithSnapshots(diskImages);
 
         return validateRequiredSpace(availableSize, totalSizeForDisks);
     }
 
     public ValidationResult hasSpaceForAllDisks(Collection<DiskImage> 
newDiskImages, Collection<DiskImage> clonedDiskImages) {
-        double availableSize = storageDomain.getAvailableDiskSizeInBytes();
+        Long availableSize = storageDomain.getAvailableDiskSizeInBytes();
         double totalSizeForNewDisks = getTotalSizeForNewDisks(newDiskImages);
         double totalSizeForClonedDisks = 
getTotalSizeForClonedDisks(clonedDiskImages);
         double totalSizeForDisks = totalSizeForNewDisks + 
totalSizeForClonedDisks;
@@ -254,8 +254,9 @@
         return hasSpaceForNewDisks(Collections.singleton(diskImage));
     }
 
-    private ValidationResult validateRequiredSpace(double availableSize, 
double requiredSize) {
-        if (availableSize >= requiredSize) {
+    private ValidationResult validateRequiredSpace(Long availableSize, double 
requiredSize) {
+        // If availableSize is not yet set, we'll allow the operation.
+        if (availableSize == null || availableSize.doubleValue() >= 
requiredSize) {
             return ValidationResult.VALID;
         }
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
index ce9f090..43c26d7 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomain.java
@@ -133,8 +133,9 @@
     }
 
     @JsonIgnore
-    public long getAvailableDiskSizeInBytes() {
-        return getAvailableDiskSize() * SizeConverter.BYTES_IN_GB;
+    public Long getAvailableDiskSizeInBytes() {
+        Integer availableSize = getAvailableDiskSize();
+        return availableSize != null ? availableSize * 
SizeConverter.BYTES_IN_GB : null;
     }
 
     public void setAvailableDiskSize(Integer availableDiskSize) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icca933dcf506ca702161fcfbfe400a7259d20d1a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Vered Volansky <vvola...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to