Ravi Nori has uploaded a new change for review.

Change subject: engine : Remove Disk command using getVolumeInfoAsync
......................................................................

engine : Remove Disk command using getVolumeInfoAsync

Use getVolumeInfoAsync in RemoveImageCommandCallback
to retrieve the image volume info from vdsm.

Change-Id: I458143387f89a5d55bda5f1d4f9d44be4f7fb197
Signed-off-by: Ravi Nori <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommandCallback.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommandCallback.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
5 files changed, 135 insertions(+), 18 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/74/39374/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
index 5202e03..6d8bbd8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
@@ -16,6 +16,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator;
 import org.ovirt.engine.core.bll.validator.storage.DiskValidator;
@@ -292,13 +293,20 @@
     protected void executeCommand() {
         switch (getDisk().getDiskStorageType()) {
             case IMAGE:
-                VdcReturnValueBase vdcReturnValue =
-                        
runInternalActionWithTasksContext(VdcActionType.RemoveImage,
-                                buildRemoveImageParameters(getDiskImage()));
-                if (vdcReturnValue.getSucceeded()) {
-                    incrementVmsGeneration();
-                    
getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValue.getInternalVdsmTaskIdList());
-                    setSucceeded(true);
+                if (getDisk().getDiskStorageType() == DiskStorageType.IMAGE) {
+                    Future<VdcReturnValueBase> future = 
CommandCoordinatorUtil.executeAsyncCommand(
+                            VdcActionType.RemoveImage,
+                            buildRemoveImageParameters(getDiskImage()),
+                            cloneContextAndDetachFromParent());
+                    try {
+                        VdcReturnValueBase vdcReturnValue = future.get();
+                        if (vdcReturnValue.getSucceeded()) {
+                            incrementVmsGeneration();
+                            setSucceeded(true);
+                        }
+                    } catch (Exception ex) {
+                        log.error("Exception raised during 
executeAsyncCommand", ex);
+                    }
                 }
                 break;
             case LUN:
@@ -513,4 +521,12 @@
     protected DiskImageDynamicDAO getDiskImageDynamicDAO() {
         return getDbFacade().getDiskImageDynamicDao();
     }
+
+    @Override
+    public CommandCallback getCallback() {
+        if (getDisk().getDiskStorageType() == DiskStorageType.IMAGE) {
+            return new RemoveDiskCommandCallback();
+        }
+        return null;
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommandCallback.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommandCallback.java
new file mode 100644
index 0000000..b94b0c1
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommandCallback.java
@@ -0,0 +1,45 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback;
+import org.ovirt.engine.core.common.action.RemoveDiskParameters;
+import org.ovirt.engine.core.compat.CommandStatus;
+import org.ovirt.engine.core.compat.Guid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class RemoveDiskCommandCallback extends CommandCallback {
+    private static final Logger log = 
LoggerFactory.getLogger(RemoveDiskCommandCallback.class);
+
+    @Override
+    public void doPolling(Guid cmdId, List<Guid> childCmdIds) {
+        boolean anyFailed = false;
+        for (Guid childCmdId : childCmdIds) {
+            switch (CommandCoordinatorUtil.getCommandStatus(childCmdId)) {
+                case ACTIVE:
+                    log.info("Waiting on Remove Disk child commands to 
complete");
+                    return;
+                case FAILED:
+                case FAILED_RESTARTED:
+                case UNKNOWN:
+                    anyFailed = true;
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        RemoveDiskCommand<RemoveDiskParameters> command = getCommand(cmdId);
+        command.getParameters().setTaskGroupSuccess(!anyFailed);
+        command.setCommandStatus(anyFailed ? CommandStatus.FAILED : 
CommandStatus.SUCCEEDED);
+        log.info("Remove Disk command has completed for image '{}'..'{}'",
+                command.getParameters().getDiskId(),
+                command.getCommandStatus());
+    }
+
+    private RemoveDiskCommand<RemoveDiskParameters> getCommand(Guid cmdId) {
+        return CommandCoordinatorUtil.retrieveCommand(cmdId);
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
index 3934db1..99faf32 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
@@ -7,7 +7,8 @@
 
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.storage.PostZeroHandler;
-import org.ovirt.engine.core.common.VdcObjectType;
+//import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback;
 import org.ovirt.engine.core.common.action.RemoveImageParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
@@ -23,6 +24,7 @@
 import 
org.ovirt.engine.core.common.vdscommands.GetImagesListVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.compat.CommandStatus;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
 import org.ovirt.engine.core.dao.VmDeviceDAO;
@@ -73,16 +75,9 @@
     protected void executeCommand() {
         if (getDiskImage() != null) {
             try {
-                Guid taskId = 
persistAsyncTaskPlaceHolder(getParameters().getParentCommand());
-
-                VDSReturnValue vdsReturnValue = performImageVdsmOperation();
-                getReturnValue().getInternalVdsmTaskIdList().add(
-                        createTask(taskId,
-                                vdsReturnValue.getCreationInfo(),
-                                getParameters().getParentCommand(),
-                                VdcObjectType.Storage,
-                                getStorageDomainId()));
+                performImageVdsmOperation();
             } catch (VdcBLLException e) {
+                setCommandStatus(CommandStatus.FAILED);
                 if (e.getErrorCode() == 
VdcBllErrors.ImageDoesNotExistInDomainError) {
                     log.info("Disk '{}' doesn't exist on storage domain '{}', 
rolling forward",
                             getDiskImage().getId(), getStorageDomainId());
@@ -307,4 +302,9 @@
     protected VmDeviceDAO getVmDeviceDAO() {
         return getDbFacade().getVmDeviceDao();
     }
+
+    @Override
+    public CommandCallback getCallback() {
+        return new RemoveImageCommandCallback();
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommandCallback.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommandCallback.java
new file mode 100644
index 0000000..30904cf
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommandCallback.java
@@ -0,0 +1,56 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback;
+import org.ovirt.engine.core.common.action.RemoveImageParameters;
+import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
+import org.ovirt.engine.core.common.errors.VdcBllErrors;
+import org.ovirt.engine.core.compat.CommandStatus;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.vdsbroker.irsbroker.IrsProxyData;
+import org.ovirt.engine.core.vdsbroker.irsbroker.OneImageInfoReturnForXmlRpc;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class RemoveImageCommandCallback extends CommandCallback {
+    private static final Logger log = 
LoggerFactory.getLogger(RemoveImageCommandCallback.class);
+
+    private OneImageInfoReturnForXmlRpc imageInfoReturn;
+    private IrsProxyData irsProxyData;
+
+    @Override
+    public void doPolling(Guid cmdId, List<Guid> childCmdIds) {
+        RemoveImageCommand<RemoveImageParameters> cmd = 
CommandCoordinatorUtil.retrieveCommand(cmdId);
+        if (imageInfoReturn == null) {
+            DiskImage diskImage = cmd.getDiskImage();
+            Guid storageDomainID = diskImage.getStorageIds().get(0);
+            Guid storagePoolId = diskImage.getStoragePoolId() != null ? 
diskImage.getStoragePoolId() : Guid.Empty;
+            Guid imageGroupId = diskImage.getId() != null ? diskImage.getId() 
: Guid.Empty;
+            Guid imageId = diskImage.getImageId();
+
+            if (irsProxyData == null) {
+                irsProxyData = new IrsProxyData(storagePoolId);
+            }
+
+            imageInfoReturn = 
irsProxyData.getIrsProxy().getVolumeInfoAsync(storageDomainID.toString(),
+                    storagePoolId.toString(), imageGroupId.toString(),
+                    imageId.toString());
+        }
+
+        if (imageInfoReturn.isRequestCompleted()) {
+            VdcBllErrors returnCode = 
VdcBllErrors.forValue(imageInfoReturn.getStatus().mCode);
+            if (returnCode == VdcBllErrors.ImagePathError) {
+                getCommand(cmdId).setCommandStatus(CommandStatus.SUCCEEDED);
+            } else {
+                imageInfoReturn = null;
+            }
+        }
+    }
+
+    private RemoveImageCommand<RemoveImageParameters> getCommand(Guid cmdId) {
+        return CommandCoordinatorUtil.retrieveCommand(cmdId);
+    }
+
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
index 8777789..297c23f 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
@@ -54,7 +54,7 @@
 
     @Override
     protected StatusForXmlRpc getReturnStatus() {
-        return imageInfoReturn.mStatus;
+        return imageInfoReturn.getStatus();
     }
 
     @Override


-- 
To view, visit https://gerrit.ovirt.org/39374
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I458143387f89a5d55bda5f1d4f9d44be4f7fb197
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to