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 <aavi...@redhat.com> --- 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, 42 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/42/39442/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 68c8ff4..ac3b2e0 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 @@ -609,15 +609,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 > 0L) { + list.add(generateQuotaConsumeParameters(newDiskImage, diskExtendingDiff)); } if (differentNewQuota) { @@ -633,6 +630,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 d8d8f0d..ba27f27 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 @@ -18,6 +18,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig; +import org.ovirt.engine.core.common.utils.SizeConverter; import java.util.ArrayList; import java.util.Arrays; @@ -36,6 +37,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.DiskValidator; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; @@ -698,6 +700,31 @@ any(SetVolumeDescriptionVDSCommandParameters.class)); } + @Test + public void testExtendingDiskWithQuota() { + Guid quotaId = Guid.newGuid(); + + DiskImage oldDiskImage = createDiskImage(); + oldDiskImage.setQuotaId(quotaId); + oldDiskImage.setSize(SizeConverter.convert(3, SizeConverter.SizeUnit.GB, + SizeConverter.SizeUnit.BYTES).longValue()); + + DiskImage newDiskImage = createDiskImage(); + newDiskImage.setQuotaId(quotaId); + newDiskImage.setSize(SizeConverter.convert(5, SizeConverter.SizeUnit.GB, + SizeConverter.SizeUnit.BYTES).longValue()); + + 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); + assertEquals(consumptionParameter.getRequestedStorageGB().longValue(), diskExtendingDiffInGB); + } + private void mockToUpdateDiskVm(List<VM> vms) { for (VM vm: vms) { if (vm.getId().equals(command.getParameters().getVmId())) { -- To view, visit https://gerrit.ovirt.org/39442 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib31206b0a9172b35217845b01253951d93f380f1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Amit Aviram <aavi...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches