Liron Aravot has uploaded a new change for review.

Change subject: core: adding RetrieveImageDataCommand
......................................................................

core: adding RetrieveImageDataCommand

This patch adds RetrieveImageDataCommand and changes
AttachStorageDomainToPoolCommand to use it instead of executing the
vds command directly. This is done so that the needed CDA checks/locks
will be taken. Furthermore, this patch takes care of polling the created
upload task on vdsm side.

Change-Id: I4ed10f1d3fc74e1deb6c69fc826f02abfd5d679e
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/RetrieveImageDataCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
4 files changed, 75 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/78/33278/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataCommand.java
new file mode 100644
index 0000000..7c88912
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataCommand.java
@@ -0,0 +1,35 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
+import 
org.ovirt.engine.core.common.vdscommands.ImageHttpAccessVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+
+@NonTransactiveCommandAttribute
+@InternalCommandAttribute
+public class RetrieveImageDataCommand<T extends RetrieveImageDataParameters> 
extends ImageSpmCommand<T> {
+
+    public RetrieveImageDataCommand(T parameters, CommandContext cmdContext) {
+        super(parameters, cmdContext);
+    }
+
+    @Override
+    protected VDSReturnValue executeVdsCommand() {
+        VDSReturnValue vdsReturnValue = 
runVdsCommand(VDSCommandType.RetrieveImageData,
+                new ImageHttpAccessVDSCommandParameters(getVdsId(),
+                        getParameters().getStoragePoolId(),
+                        getParameters().getStorageDomainId(),
+                        getParameters().getImageGroupID(),
+                        getParameters().getImageId(),
+                        getParameters().getLength()));
+
+        setActionReturnValue(vdsReturnValue.getReturnValue());
+        return vdsReturnValue;
+    }
+
+    @Override
+    protected AsyncTaskType getTaskType() {
+        return AsyncTaskType.uploadImageToStream;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
index 01d3a1e..9a57721 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
@@ -10,6 +10,7 @@
 import java.util.Map;
 
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
+import org.ovirt.engine.core.bll.RetrieveImageDataParameters;
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.FeatureSupported;
@@ -39,7 +40,6 @@
 import 
org.ovirt.engine.core.common.vdscommands.AttachStorageDomainVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.DetachStorageDomainVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters;
-import 
org.ovirt.engine.core.common.vdscommands.ImageHttpAccessVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
@@ -205,16 +205,16 @@
                 DiskImage ovfDisk = ovfDiskAndSize.getFirst();
                 if (ovfDisk != null) {
                     try {
-                        VDSReturnValue retrievedByteData = 
runVdsCommand(VDSCommandType.RetrieveImageData,
-                                new 
ImageHttpAccessVDSCommandParameters(getVdsId(),
-                                        getParameters().getStoragePoolId(),
+                        VdcReturnValueBase vdcReturnValue = 
runInternalAction(VdcActionType.RetrieveImageData,
+                                new 
RetrieveImageDataParameters(getParameters().getStoragePoolId(),
                                         getParameters().getStorageDomainId(),
                                         ovfDisk.getId(),
                                         ovfDisk.getImage().getId(),
-                                        ovfDiskAndSize.getSecond()));
+                                        ovfDiskAndSize.getSecond()), 
cloneContextAndDetachFromParent());
 
-                        if (retrievedByteData.getSucceeded()) {
-                            return OvfUtils.getOvfEntities((byte[]) 
retrievedByteData.getReturnValue(),
+                        
getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValue.getInternalVdsmTaskIdList());
+                        if (vdcReturnValue.getSucceeded()) {
+                            return OvfUtils.getOvfEntities((byte[]) 
vdcReturnValue.getActionReturnValue(),
                                     getParameters().getStorageDomainId());
                         } else {
                             log.errorFormat("Image data could not be retrieved 
for disk id {0} in storage domain id {1}",
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java
new file mode 100644
index 0000000..1fdb365
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java
@@ -0,0 +1,32 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.action.ImagesContainterParametersBase;
+import org.ovirt.engine.core.compat.Guid;
+
+public class RetrieveImageDataParameters extends 
ImagesContainterParametersBase {
+    private Long length;
+
+    public RetrieveImageDataParameters(Guid storagePoolId,
+                                  Guid storageDomainId,
+                                  Guid imageGroupId,
+                                  Guid imageId,
+                                  Long length) {
+        super(imageId);
+        this.length = length;
+        setStoragePoolId(storagePoolId);
+        setStorageDomainId(storageDomainId);
+        setImageGroupID(imageGroupId);
+    }
+
+    public RetrieveImageDataParameters() {
+        super();
+    }
+
+    public Long getLength() {
+        return length;
+    }
+
+    public void setLength(Long length) {
+        this.length = length;
+    }
+}
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 a21fcc2..dafe0cb 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
@@ -361,6 +361,7 @@
     ProcessOvfUpdateForStorageDomain(1902, QuotaDependency.NONE),
     CreateOvfVolumeForStorageDomain(1903, QuotaDependency.NONE),
     CreateOvfStoresForStorageDomain(1904, QuotaDependency.NONE),
+    RetrieveImageData(1905, QuotaDependency.NONE),
 
     // Affinity Groups
     AddAffinityGroup(1950, ActionGroup.MANIPULATE_AFFINITY_GROUPS, false, 
QuotaDependency.NONE),


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4ed10f1d3fc74e1deb6c69fc826f02abfd5d679e
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