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

Reply via email to