Amit Aviram has uploaded a new change for review. Change subject: core: Requesting to consume quota while extending a disk fix. ......................................................................
core: Requesting to consume quota while extending a disk fix. Until now when the user wanted to extend a disk, there was no request generated for quota consumption. This fact let the user to extend the disk's size as much as he likes when there are quota limitations. This patch adds a request for quota consumption when disks are extended. Change-Id: Ib31206b0a9172b35217845b01253951d93f380f1 Bug-Url: https://bugzilla.redhat.com/1203262 Signed-off-by: Amit Aviram <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java 2 files changed, 43 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/30/39330/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java index 24f7ccd..1b72d76 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java @@ -614,15 +614,12 @@ boolean emptyOldQuota = oldDiskImage.getQuotaId() == null || Guid.Empty.equals(oldDiskImage.getQuotaId()); boolean differentNewQuota = !emptyOldQuota && !oldDiskImage.getQuotaId().equals(newDiskImage.getQuotaId()); + long diskExtendingDiff = newDiskImage.getSizeInGigabytes() - oldDiskImage.getSizeInGigabytes(); - if (emptyOldQuota || differentNewQuota) { - list.add(new QuotaStorageConsumptionParameter( - newDiskImage.getQuotaId(), - null, - QuotaStorageConsumptionParameter.QuotaAction.CONSUME, - //TODO: Shared Disk? - newDiskImage.getStorageIds().get(0), - (double)newDiskImage.getSizeInGigabytes())); + if (emptyOldQuota || differentNewQuota ) { + list.add(generateQuotaConsumeParameters(newDiskImage, newDiskImage.getSizeInGigabytes())); + } else if (diskExtendingDiff != 0) { + list.add(generateQuotaConsumeParameters(newDiskImage, diskExtendingDiff)); } if (differentNewQuota) { @@ -638,6 +635,16 @@ return list; } + private QuotaConsumptionParameter generateQuotaConsumeParameters(DiskImage newDiskImage, long sizeInGigabytes) { + return new QuotaStorageConsumptionParameter( + newDiskImage.getQuotaId(), + null, + QuotaStorageConsumptionParameter.QuotaAction.CONSUME, + //TODO: Shared Disk? + newDiskImage.getStorageIds().get(0), + (double) sizeInGigabytes ); + } + private boolean resizeDiskImageRequested() { return getNewDisk().getDiskStorageType() == DiskStorageType.IMAGE && vmDeviceForVm.getSnapshotId() == null && getNewDisk().getSize() != getOldDisk().getSize(); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java index 0ab92f7..bb49d86 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java @@ -35,6 +35,7 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; +import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.validator.storage.DiskValidator; import org.ovirt.engine.core.bll.validator.storage.StorageDomainValidator; @@ -677,6 +678,33 @@ any(SetVolumeDescriptionVDSCommandParameters.class)); } + @Test + public void testExtendingDiskWithQuota() { + Guid quotaId = Guid.newGuid(); + + DiskImage oldDiskImage = createDiskImage(); + oldDiskImage.setQuotaId(quotaId); + oldDiskImage.setSize(getBytesByGB(3)); + + DiskImage newDiskImage = createDiskImage(); + newDiskImage.setQuotaId(quotaId); + newDiskImage.setSize(getBytesByGB(5)); + + UpdateVmDiskParameters parameters = new UpdateVmDiskParameters(vmId, diskImageGuid, newDiskImage); + long diskExtendingDiffInGB = newDiskImage.getSizeInGigabytes() - oldDiskImage.getSizeInGigabytes(); + + when(diskDao.get(diskImageGuid)).thenReturn(oldDiskImage); + initializeCommand(parameters); + + QuotaStorageConsumptionParameter consumptionParameter = + (QuotaStorageConsumptionParameter) command.getQuotaStorageConsumptionParameters().get(0); + assertTrue(consumptionParameter.getRequestedStorageGB() == diskExtendingDiffInGB); + } + + private long getBytesByGB(long sizeInGB) { + return sizeInGB*(1024*1024*1024); + } + private void mockToUpdateDiskVm(List<VM> vms) { for (VM vm: vms) { if (vm.getId().equals(command.getParameters().getVmId())) { -- To view, visit https://gerrit.ovirt.org/39330 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib31206b0a9172b35217845b01253951d93f380f1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Amit Aviram <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
