Liron Aravot has uploaded a new change for review. Change subject: core: introducing ImageSpmCommand ......................................................................
core: introducing ImageSpmCommand This patch extracts ImageSpmCommand as a parent class of UploadStreamCommand to contain shared logic between this command and the to-be-added RetrieveImageDataCommand. Change-Id: I32166ee993bce33680f6b2feb5359666e414c777 Bug-Url: https://bugzilla.redhat.com/1136840 Signed-off-by: Liron Aravot <lara...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java 2 files changed, 135 insertions(+), 103 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/33276/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java new file mode 100644 index 0000000..a7e9a27 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java @@ -0,0 +1,121 @@ +package org.ovirt.engine.core.bll; + +import java.util.Collections; +import java.util.Map; + +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.storage.StoragePoolValidator; +import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.ImagesContainterParametersBase; +import org.ovirt.engine.core.common.action.LockProperties; +import org.ovirt.engine.core.common.action.LockProperties.Scope; +import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.businessentities.VdsDynamic; +import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.common.locks.LockingGroup; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.compat.Guid; + +public abstract class ImageSpmCommand<T extends ImagesContainterParametersBase> extends BaseImagesCommand<T> { + private Guid cachedSpmId; + + public ImageSpmCommand(T parameters, CommandContext cmdContext) { + super(parameters, cmdContext); + setStoragePoolId(getParameters().getStoragePoolId()); + } + + @Override + protected LockProperties applyLockProperties(LockProperties lockProperties) { + return lockProperties.withScope(Scope.Execution); + } + + @Override + protected void insertAsyncTaskPlaceHolders() { + persistAsyncTaskPlaceHolder(getParameters().getParentCommand()); + } + + private Guid getPoolSpmId() { + if (cachedSpmId == null) { + cachedSpmId = getStoragePool().getspm_vds_id(); + } + return cachedSpmId; + } + + @Override + protected boolean canDoAction() { + if (getPoolSpmId() == null) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SPM); + } + + setStoragePool(null); + if (getStoragePool() == null) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST); + } + + if (!validate(new StoragePoolValidator(getStoragePool()).isUp())) { + return false; + } + + if (!getPoolSpmId().equals(getStoragePool().getspm_vds_id())) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_SPM_CHANGED); + } + + VdsDynamic vdsDynamic = getVdsDynamicDao().get(getPoolSpmId()); + if (vdsDynamic == null || vdsDynamic.getStatus() != VDSStatus.Up) { + addCanDoActionMessage(VdcBllMessages.VAR__HOST_STATUS__UP); + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL); + } + + setVdsId(vdsDynamic.getId()); + + if (!commandSpecificCanDoAction()) { + return false; + } + + return true; + } + + protected boolean commandSpecificCanDoAction() { + return true; + } + + protected abstract VDSReturnValue executeVdsCommand(); + + @Override + protected void executeCommand() { + VDSReturnValue vdsReturnValue = executeVdsCommand(); + + if (vdsReturnValue.getSucceeded()) { + Guid taskId = getAsyncTaskId(); + getReturnValue().getInternalVdsmTaskIdList().add(createTask(taskId, + vdsReturnValue.getCreationInfo(), + getParameters().getParentCommand(), + VdcObjectType.Storage, + getParameters().getStorageDomainId(), + getParameters().getDestinationImageId())); + + setSucceeded(true); + } + } + + @Override + protected void endSuccessfully() { + setSucceeded(true); + } + + @Override + protected void endWithFailure() { + setSucceeded(true); + } + + @Override + protected Map<String, Pair<String, String>> getSharedLocks() { + if (getStoragePool() != null && getPoolSpmId() != null) { + return Collections.singletonMap(getPoolSpmId().toString(), + new Pair<>(LockingGroup.VDS_EXECUTION.toString(), + VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED.toString())); + } + return null; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java index 346693d..0073915 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java @@ -1,81 +1,39 @@ package org.ovirt.engine.core.bll; import org.ovirt.engine.core.bll.context.CommandContext; - -import java.util.Collections; -import java.util.Map; - -import org.ovirt.engine.core.bll.storage.StoragePoolValidator; -import org.ovirt.engine.core.common.VdcObjectType; -import org.ovirt.engine.core.common.action.LockProperties; -import org.ovirt.engine.core.common.action.LockProperties.Scope; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; import org.ovirt.engine.core.common.businessentities.DiskImage; -import org.ovirt.engine.core.common.businessentities.VDSStatus; -import org.ovirt.engine.core.common.businessentities.VdsDynamic; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.errors.VdcBllMessages; -import org.ovirt.engine.core.common.locks.LockingGroup; -import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.vdscommands.UploadStreamVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; -import org.ovirt.engine.core.compat.Guid; @NonTransactiveCommandAttribute @InternalCommandAttribute -public class UploadStreamCommand<T extends UploadStreamParameters> extends BaseImagesCommand<T> { - Guid cachedSpmId; +public class UploadStreamCommand<T extends UploadStreamParameters> extends ImageSpmCommand<T> { public UploadStreamCommand(T parameters, CommandContext cmdContext) { super(parameters, cmdContext); - setStoragePoolId(getParameters().getStoragePoolId()); } @Override - protected LockProperties applyLockProperties(LockProperties lockProperties) { - return lockProperties.withScope(Scope.Execution); + protected VDSReturnValue executeVdsCommand() { + UploadStreamVDSCommandParameters vdsCommandParameters = + new UploadStreamVDSCommandParameters( + getVdsId(), + getParameters().getStoragePoolId(), + getParameters().getStorageDomainId(), + getParameters().getImageGroupID(), + getParameters().getImageId(), + getParameters().getStreamLength(), + getParameters().getInputStream()); + + return runVdsCommand(VDSCommandType.UploadStream, vdsCommandParameters); } @Override - protected void insertAsyncTaskPlaceHolders() { - persistAsyncTaskPlaceHolder(getParameters().getParentCommand()); - } - - private Guid getPoolSpmId() { - if (cachedSpmId == null) { - cachedSpmId = getStoragePool().getspm_vds_id(); - } - return cachedSpmId; - } - - @Override - protected boolean canDoAction() { - if (getPoolSpmId() == null) { - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NO_SPM); - } - - setStoragePool(null); - if (getStoragePool() == null) { - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST); - } - - if (!validate(new StoragePoolValidator(getStoragePool()).isUp())) { - return false; - } - - if (!getPoolSpmId().equals(getStoragePool().getspm_vds_id())) { - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_SPM_CHANGED); - } - - VdsDynamic vdsDynamic = getVdsDynamicDao().get(getPoolSpmId()); - if (vdsDynamic == null || vdsDynamic.getStatus() != VDSStatus.Up) { - addCanDoActionMessage(VdcBllMessages.VAR__HOST_STATUS__UP); - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL); - } - - setVdsId(vdsDynamic.getId()); - + protected boolean commandSpecificCanDoAction() { DiskImage targetDisk = getDiskImage(); //Currently we'd like to support only preallocated disks to avoid possible extend on vdsm side. if (targetDisk.getVolumeType() != VolumeType.Preallocated) { @@ -88,54 +46,7 @@ } @Override - protected void executeCommand() { - UploadStreamVDSCommandParameters vdsCommandParameters = - new UploadStreamVDSCommandParameters( - getVdsId(), - getParameters().getStoragePoolId(), - getParameters().getStorageDomainId(), - getParameters().getImageGroupID(), - getParameters().getImageId(), - getParameters().getStreamLength(), - getParameters().getInputStream()); - - VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.UploadStream, vdsCommandParameters); - - if (vdsReturnValue.getSucceeded()) { - Guid taskId = getAsyncTaskId(); - getReturnValue().getInternalVdsmTaskIdList().add(createTask(taskId, - vdsReturnValue.getCreationInfo(), - getParameters().getParentCommand(), - VdcObjectType.Storage, - getParameters().getStorageDomainId(), - getParameters().getDestinationImageId())); - - setSucceeded(true); - } - } - - @Override - protected void endSuccessfully() { - setSucceeded(true); - } - - @Override - protected void endWithFailure() { - setSucceeded(true); - } - - @Override protected AsyncTaskType getTaskType() { return AsyncTaskType.downloadImageFromStream; - } - - @Override - protected Map<String, Pair<String, String>> getSharedLocks() { - if (getStoragePool() != null && getPoolSpmId() != null) { - return Collections.singletonMap(getPoolSpmId().toString(), - new Pair<>(LockingGroup.VDS_EXECUTION.toString(), - VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED.toString())); - } - return null; } } -- To view, visit http://gerrit.ovirt.org/33276 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I32166ee993bce33680f6b2feb5359666e414c777 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches