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

Reply via email to