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