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