Daniel Erez has uploaded a new change for review.

Change subject: core: VmReplicateDiskFinish on SyncImageData failure
......................................................................

core: VmReplicateDiskFinish on SyncImageData failure

Requirements:
* VmReplicateDiskFinish should be sent on SyncImageData failure.
* Further rollback should be prevented on VmReplicateDiskFinish failure.
* Disk should always be unlocked after failure.

Implementation details:
* Added 'preventRollback' method to TaskHandlerCommand interface.
* Implemented 'preventRollback' on LiveMigrateDiskCommand.
* Called 'revertTask' on 'endWithFailure' to ensure revert on task failure.

Change-Id: I6c25b02cb0c2bd78b012dd3e3654caa43f5141d6
Bug-Url: https://bugzilla.redhat.com/961423
Signed-off-by: Daniel Erez <[email protected]>
---
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/LiveMigrateVmDisksCommand.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
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java
5 files changed, 32 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/22/14722/1

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 59500ae..679005f 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
@@ -3,6 +3,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.ovirt.engine.core.bll.ImagesHandler;
 import org.ovirt.engine.core.bll.MoveOrCopyDiskCommand;
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
@@ -13,6 +14,7 @@
 import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
+import org.ovirt.engine.core.common.businessentities.ImageStatus;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.compat.Guid;
 
@@ -98,6 +100,15 @@
         super.endWithFailure();
     }
 
+    @Override
+    public void preventRollback() {
+        getParameters().setExecutionIndex(0);
+
+        // We should always unlock the disk
+        ImagesHandler.updateImageStatus(getParameters().getImageId(), 
ImageStatus.OK);
+        
ImagesHandler.updateImageStatus(getParameters().getDestinationImageId(), 
ImageStatus.OK);
+    }
+
     private boolean isFirstTaskHandler() {
         return getParameters().getExecutionIndex() == 0;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
index c43266f..67bea41 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java
@@ -84,6 +84,11 @@
     }
 
     @Override
+    public void preventRollback() {
+        getParameters().setExecutionIndex(0);
+    }
+
+    @Override
     public List<PermissionSubject> getPermissionCheckSubjects() {
         List<PermissionSubject> permissionList = new 
ArrayList<PermissionSubject>();
 
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 32404b9..5d2377a 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
@@ -140,6 +140,7 @@
     @Override
     public void endWithFailure() {
         super.endWithFailure();
+        revertTask();
     }
 
     @Override
@@ -165,7 +166,7 @@
         Guid destinationImageId = 
getEnclosingCommand().getParameters().getDestinationImageId();
         DiskImage diskImage = getDiskImageDao().get(destinationImageId);
         if (diskImage != null && 
targetStorageDomainId.equals(diskImage.getStorageIds().get(0))) {
-            getEnclosingCommand().getParameters().setExecutionIndex(0);
+            getEnclosingCommand().preventRollback();
         }
     }
 
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 f6e06cc..dabf5c9 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
@@ -75,7 +75,12 @@
                         
getEnclosingCommand().getParameters().getImageGroupID(),
                         
getEnclosingCommand().getParameters().getDestinationImageId()
                 );
-        
ResourceManager.getInstance().runVdsCommand(VDSCommandType.VmReplicateDiskFinish,
 migrationStartParams);
+        VDSReturnValue ret =
+                
ResourceManager.getInstance().runVdsCommand(VDSCommandType.VmReplicateDiskFinish,
 migrationStartParams);
+
+        if (!ret.getSucceeded()) {
+            getEnclosingCommand().preventRollback();
+        }
     }
 
     @Override
@@ -97,6 +102,12 @@
     }
 
     @Override
+    public void endWithFailure() {
+        super.endWithFailure();
+        revertTask();
+    }
+
+    @Override
     protected VdcObjectType getTaskObjectType() {
         return VdcObjectType.VM;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java
index 98974e9..d7ee09b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java
@@ -18,6 +18,8 @@
 
     ExecutionContext getExecutionContext();
 
+    void preventRollback();
+
     void setExecutionContext(ExecutionContext executionContext);
 
     Guid createTask(AsyncTaskCreationInfo asyncTaskCreationInfo,


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

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

Reply via email to