Allon Mureinik has uploaded a new change for review.

Change subject: core: [WIP] Live Storage Migration error flows
......................................................................

core: [WIP] Live Storage Migration error flows

Implemented rollback stack for Live Storage Migration commands/tasks.

Change-Id: Ia331e1259e7aad2282692099980291c61cafb86e
Signed-off-by: Allon Mureinik <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
5 files changed, 63 insertions(+), 51 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/8749/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java
index 170e9f7..d50e951 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java
@@ -4,7 +4,6 @@
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
-import 
org.ovirt.engine.core.common.vdscommands.DeleteImageGroupVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.TargetDomainImageGroupVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
@@ -57,22 +56,19 @@
 
     @Override
     protected VDSCommandType getRevertVDSCommandType() {
-        return VDSCommandType.DeleteImageGroup;
+        // VDSM handles the failed cloneImageGroupStructure, so no action 
required here.
+        return null;
     }
 
     @Override
     public AsyncTaskType getRevertTaskType() {
-        return AsyncTaskType.deleteImage;
+        // VDSM handles the failed cloneImageGroupStructure, so no action 
required here.
+        return null;
     }
 
     @Override
     protected VDSParametersBase getRevertVDSParameters() {
-        return new DeleteImageGroupVDSCommandParameters(
-                getEnclosingCommand().getStoragePoolId().getValue(),
-                getEnclosingCommand().getTargetStorageDomainId(),
-                getEnclosingCommand().getImageGroupId(),
-                getEnclosingCommand().getParameters().getPostZero(),
-                getEnclosingCommand().getParameters().getForceDelete(),
-                
getEnclosingCommand().getStoragePool().getcompatibility_version().getValue());
+        // VDSM handles the failed cloneImageGroupStructure, so no action 
required here.
+        return null;
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java
index 9d88042..5101f57 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java
@@ -28,7 +28,7 @@
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogFields;
 
 @CustomLogFields({ @CustomLogField("DiskAlias") })
-@NonTransactiveCommandAttribute(forceCompensation = true)
+@NonTransactiveCommandAttribute
 public class LiveMigrateDiskCommand<T extends LiveMigrateDiskParameters> 
extends MoveOrCopyDiskCommand<T> {
     private static final long serialVersionUID = -6216729539906812205L;
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java
index 114fc00..2e38109 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java
@@ -68,19 +68,19 @@
 
     @Override
     public void compensate() {
-        // TODO Auto-generated method stub
-
+        // Unlock the image we left locked
+        enclosingCommand.unLockImage();
     }
 
     @Override
     public AsyncTaskType getTaskType() {
-        // TODO Auto-generated method stub
+        // No implementation - handled by the command
         return null;
     }
 
     @Override
     public AsyncTaskType getRevertTaskType() {
-        // TODO Auto-generated method stub
+        // No implementation - there is no live-merge
         return null;
     }
 
@@ -98,5 +98,4 @@
 
         return params;
     }
-
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java
index a35fbba..577c5d7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java
@@ -1,7 +1,6 @@
 package org.ovirt.engine.core.bll.lsm;
 
 import org.ovirt.engine.core.bll.AbstractSPMAsyncTaskHandler;
-import org.ovirt.engine.core.bll.VmHandler;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
@@ -11,6 +10,7 @@
 import 
org.ovirt.engine.core.common.vdscommands.DeleteImageGroupVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.common.vdscommands.VmReplicateDiskParameters;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
@@ -38,11 +38,14 @@
                         getEnclosingCommand().getDestinationImageId()
                 );
 
-        
getEnclosingCommand().runVdsCommand(VDSCommandType.VmReplicateDiskFinish, 
migrationCompleteParams);
+        VDSReturnValue ret =
+                
getEnclosingCommand().runVdsCommand(VDSCommandType.VmReplicateDiskFinish, 
migrationCompleteParams);
 
-        moveDiskInDB();
-        getEnclosingCommand().unLockImage();
-        VmHandler.unlockVm(getEnclosingCommand().getVm(), 
getEnclosingCommand().getCompensationContext());
+        // If the split succeeded, update the database
+        if (ret.getSucceeded()) {
+            moveDiskInDB();
+            getEnclosingCommand().unLockImage();
+        }
     }
 
     private void moveDiskInDB() {
@@ -90,28 +93,6 @@
     }
 
     @Override
-    public AsyncTaskType getTaskType() {
-        return AsyncTaskType.deleteImage;
-    }
-
-    @Override
-    protected void revertTask() {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    protected VDSCommandType getRevertVDSCommandType() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    protected VDSParametersBase getRevertVDSParameters() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
     protected VdcObjectType getTaskObjectType() {
         return VdcObjectType.Disk;
     }
@@ -122,8 +103,30 @@
     }
 
     @Override
+    public AsyncTaskType getTaskType() {
+        return AsyncTaskType.deleteImage;
+    }
+
+    @Override
+    protected void revertTask() {
+        // No revert task - reverting is handled in the previous handler
+    }
+
+    @Override
+    protected VDSCommandType getRevertVDSCommandType() {
+        // No revert task - reverting is handled in the previous handler
+        return null;
+    }
+
+    @Override
+    protected VDSParametersBase getRevertVDSParameters() {
+        // No revert task - reverting is handled in the previous handler
+        return null;
+    }
+
+    @Override
     public AsyncTaskType getRevertTaskType() {
-        // TODO Auto-generated method stub
+        // No revert task - reverting is handled in the previous handler
         return null;
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
index 3316af1..9c3d3b3 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java
@@ -4,6 +4,7 @@
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
+import 
org.ovirt.engine.core.common.vdscommands.DeleteImageGroupVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.SyncImageGroupDataVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
@@ -54,25 +55,38 @@
 
     @Override
     protected void revertTask() {
-        // TODO Auto-generated method stub
-
+        // Undo the replicateStart - use replicateFinish back to the source
+        VmReplicateDiskParameters migrationStartParams = new 
VmReplicateDiskParameters
+                (getEnclosingCommand().getVdsId(),
+                        getEnclosingCommand().getVmId(),
+                        getEnclosingCommand().getStoragePoolId().getValue(),
+                        getEnclosingCommand().getSourceStorageDomainId(),
+                        getEnclosingCommand().getSourceStorageDomainId(),
+                        getEnclosingCommand().getImageGroupId(),
+                        getEnclosingCommand().getImageGroupId()
+                );
+        
ResourceManager.getInstance().runVdsCommand(VDSCommandType.VmReplicateDiskFinish,
 migrationStartParams);
     }
 
     @Override
     protected VDSCommandType getRevertVDSCommandType() {
-        // TODO Auto-generated method stub
-        return null;
+        return VDSCommandType.DeleteImageGroup;
     }
 
     @Override
     public AsyncTaskType getRevertTaskType() {
-        return null;
+        return AsyncTaskType.deleteImage;
     }
 
     @Override
     protected VDSParametersBase getRevertVDSParameters() {
-        // TODO Auto-generated method stub
-        return null;
+        return new DeleteImageGroupVDSCommandParameters(
+                getEnclosingCommand().getStoragePoolId().getValue(),
+                getEnclosingCommand().getTargetStorageDomainId(),
+                getEnclosingCommand().getImageGroupId(),
+                getEnclosingCommand().getParameters().getPostZero(),
+                getEnclosingCommand().getParameters().getForceDelete(),
+                
getEnclosingCommand().getStoragePool().getcompatibility_version().getValue());
     }
 
     @Override


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

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

Reply via email to