Gilad Chaplik has uploaded a new change for review.

Change subject: core: Introduce Change quota command - disks (#848310)
......................................................................

core: Introduce Change quota command - disks (#848310)

https://bugzilla.redhat.com/848310

We want the abillity to change quota for disks and vms.
added an abstract command (ChangeQuotaCommand), that resposnible for that.
Currently implemented the ChangeQuotaForDisks, which gets the disk and quota
and tries to change the disk quota, ChangeQuotaForVm will be added in the near
future.

Change-Id: I0017a18109faecd1acab52897bba5474b6600390
Signed-off-by: Gilad Chaplik <gchap...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/ChangeQuotaCommand.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ChangeQuotaParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
4 files changed, 183 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/7357/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java
new file mode 100644
index 0000000..5d4f539
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeQuotaForDiskCommand.java
@@ -0,0 +1,68 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.Arrays;
+
+import org.ovirt.engine.core.bll.quota.ChangeQuotaCommand;
+import org.ovirt.engine.core.bll.quota.StorageQuotaValidationParameter;
+import org.ovirt.engine.core.common.action.ChangeQuotaParameters;
+import org.ovirt.engine.core.common.businessentities.DiskImageBase;
+
+public class ChangeQuotaForDiskCommand extends ChangeQuotaCommand {
+
+    private static final long serialVersionUID = 1165911489949172000L;
+    private DiskImageBase _disk;
+
+    public ChangeQuotaForDiskCommand(ChangeQuotaParameters params) {
+        super(params);
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        // TODO check if disk exist or has quota (not lun)
+        return super.canDoAction();
+    }
+
+    @Override
+    protected void executeCommand() {
+        
getDbFacade().getImageDao().updateQuotaForImageAndSnapshots(getParameters().getObjectId(),
+                getParameters().getQuotaId());
+        setSucceeded(true);
+    }
+
+    @Override
+    public boolean validateAndSetQuota() {
+        getQuotaManager().decreaseStorageQuota(getStoragePool(),
+                Arrays.asList(new 
StorageQuotaValidationParameter(getDisk().getQuotaId(),
+                        getParameters().getContainerId(),
+                        getDiskSize())));
+        if (getQuotaManager()
+                .validateAndSetStorageQuota(getStoragePool(),
+                        Arrays.asList(new 
StorageQuotaValidationParameter(getQuotaId(),
+                                getParameters().getContainerId(),
+                                getDiskSize())),
+                        getReturnValue().getCanDoActionMessages())) {
+            return true;
+        }
+        getQuotaManager().rollbackQuota(getStoragePool(),
+                Arrays.asList(getQuotaId(), getDisk().getQuotaId()));
+        return false;
+    }
+
+    @Override
+    public void rollbackQuota() {
+        getQuotaManager().rollbackQuota(getStoragePool(),
+                Arrays.asList(getQuotaId(), getDisk().getQuotaId()));
+    }
+
+    private long getDiskSize() {
+        return _disk.getSizeInGigabytes();
+    }
+
+    DiskImageBase getDisk() {
+        if (_disk == null) {
+            _disk = (DiskImageBase) 
getDbFacade().getDiskDao().get(getParameters().getObjectId());
+        }
+        return _disk;
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/ChangeQuotaCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/ChangeQuotaCommand.java
new file mode 100644
index 0000000..987af69
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/ChangeQuotaCommand.java
@@ -0,0 +1,71 @@
+package org.ovirt.engine.core.bll.quota;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.bll.CommandBase;
+import org.ovirt.engine.core.common.PermissionSubject;
+import org.ovirt.engine.core.common.Quotable;
+import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.ChangeQuotaParameters;
+import org.ovirt.engine.core.common.businessentities.ActionGroup;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.VdcBllMessages;
+
+public abstract class ChangeQuotaCommand extends 
CommandBase<ChangeQuotaParameters> implements Quotable {
+
+
+    private static final long serialVersionUID = 2919605640067763395L;
+
+    public ChangeQuotaCommand(ChangeQuotaParameters params) {
+        super(params);
+    }
+
+    @Override
+    protected abstract void executeCommand();
+
+    @Override
+    protected boolean canDoAction() {
+        // check if SP exist
+        setStoragePoolId(getParameters().getStoragePoolId());
+        if (getStoragePool() == null) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST);
+            return false;
+        }
+        // Check if quota exist:
+        if (getQuotaId() == null) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_QUOTA_IS_NOT_VALID);
+            return false;
+        }
+        if (getDbFacade().getQuotaDAO().getById(getQuotaId()) == null) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_QUOTA_NOT_EXIST);
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public List<PermissionSubject> getPermissionCheckSubjects() {
+        List<PermissionSubject> permissionList = new 
ArrayList<PermissionSubject>();
+        permissionList.add(new PermissionSubject(getParameters().getQuotaId(),
+                VdcObjectType.Quota,
+                ActionGroup.CONSUME_QUOTA));
+        return permissionList;
+    }
+
+    @Override
+    public abstract boolean validateAndSetQuota();
+
+    @Override
+    public abstract void rollbackQuota();
+
+    @Override
+    public Guid getQuotaId() {
+        return getParameters().getQuotaId();
+    }
+
+    @Override
+    public void addQuotaPermissionSubject(List<PermissionSubject> 
quotaPermissionList) {
+        // no implementation here already checked in getPermissionCheckSubjects
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ChangeQuotaParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ChangeQuotaParameters.java
new file mode 100644
index 0000000..b9b25bb
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ChangeQuotaParameters.java
@@ -0,0 +1,43 @@
+package org.ovirt.engine.core.common.action;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class ChangeQuotaParameters extends VdcActionParametersBase {
+
+    private static final long serialVersionUID = -6356486086345390742L;
+
+    private Guid storagePoolId;
+    private Guid containerId;
+    private Guid quotaId;
+    private Guid objectId;
+
+    /**
+     * @param quotaId the new quota id
+     * @param entityId vm or disk
+     * @param containerId in case of vm it's cluster, in case of disk it's 
storage
+     * @param storagePoolId
+     */
+    public ChangeQuotaParameters(Guid quotaId, Guid entityId, Guid 
containerId, Guid storagePoolId){
+        this.quotaId = quotaId;
+        this.objectId = entityId;
+        this.containerId = containerId;
+        this.storagePoolId = storagePoolId;
+    }
+
+    public Guid getQuotaId() {
+        return quotaId;
+    }
+
+    public Guid getObjectId() {
+        return objectId;
+    }
+
+    public Guid getStoragePoolId() {
+        return storagePoolId;
+    }
+
+    public Guid getContainerId(){
+        return containerId;
+    }
+
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index 1ffc016..9617e18 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -159,6 +159,7 @@
     AddQuota(601, ActionGroup.CONFIGURE_QUOTA, false),
     UpdateQuota(602, ActionGroup.CONFIGURE_QUOTA, false),
     RemoveQuota(603, ActionGroup.CONFIGURE_QUOTA, false),
+    ChangeQuotaForDisk(604, false),
 
     // bookmarks
     AddBookmark(701),


--
To view, visit http://gerrit.ovirt.org/7357
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0017a18109faecd1acab52897bba5474b6600390
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to