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
