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 <[email protected]> --- 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/82/36382/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 26ed10a..e7edb90 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 @@ -167,28 +167,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; @@ -208,8 +208,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 0d42b29..c4720cd 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/36382 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icca933dcf506ca702161fcfbfe400a7259d20d1a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Vered Volansky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
