Federico Simoncelli has uploaded a new change for review. Change subject: backend: prevent live storage migration on live snapshot failure ......................................................................
backend: prevent live storage migration on live snapshot failure Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1018876 Change-Id: I7c69f663836e74691c968f4a15c5f3012479a8b0 Signed-off-by: Federico Simoncelli <fsimo...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java 3 files changed, 20 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/50/21350/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java index ebc0ad2..a864561 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java @@ -232,6 +232,8 @@ public Void runInTransaction() { boolean taskGroupSucceeded = getParameters().getTaskGroupSuccess(); Snapshot createdSnapshot = getSnapshotDao().get(getVmId(), getParameters().getSnapshotType(), SnapshotStatus.LOCKED); + boolean liveSnapshotRequired = isLiveSnapshotApplicable(); + boolean liveSnapshotSucceeded = false; // if the snapshot was not created the command should be // handled as a failure if (createdSnapshot == null) { @@ -240,8 +242,8 @@ if (taskGroupSucceeded) { getSnapshotDao().updateStatus(createdSnapshot.getId(), SnapshotStatus.OK); - if (isLiveSnapshotApplicable()) { - performLiveSnapshot(createdSnapshot); + if (liveSnapshotRequired) { + liveSnapshotSucceeded = performLiveSnapshot(createdSnapshot); } else { // If the created snapshot contains memory, remove the memory volumes as // they are not in use since no live snapshot was created @@ -271,7 +273,7 @@ incrementVmGeneration(); endActionOnDisks(); - setSucceeded(taskGroupSucceeded); + setSucceeded(taskGroupSucceeded && (!liveSnapshotRequired || liveSnapshotSucceeded)); getReturnValue().setEndActionTryAgain(false); return null; } @@ -347,26 +349,25 @@ /** * Perform live snapshot on the host that the VM is running on. If the snapshot fails, and the error is - * unrecoverable then the {@link CreateAllSnapshotsFromVmParameters#getTaskGroupSuccess()} will return false - which - * will indicate that rollback of snapshot command should happen. + * unrecoverable then the {@link CreateAllSnapshotsFromVmParameters#getTaskGroupSuccess()} will return false. * - * @param createdSnapshotId + * @param snapshot * Snapshot to revert to being active, in case of rollback. */ - protected void performLiveSnapshot(final Snapshot snapshot) { + protected boolean performLiveSnapshot(final Snapshot snapshot) { try { TransactionSupport.executeInScope(TransactionScopeOption.Suppress, new TransactionMethod<Void>() { - @Override public Void runInTransaction() { - runVdsCommand(VDSCommandType.Snapshot, buildLiveSnapshotParameters(snapshot)); return null; } }); } catch (VdcBLLException e) { handleVdsLiveSnapshotFailure(e); + return false; } + return true; } private SnapshotVDSCommandParameters buildLiveSnapshotParameters(Snapshot snapshot) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java index cee277d..f2add73 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java @@ -10,6 +10,8 @@ import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.errors.VdcBLLException; +import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; @@ -24,6 +26,11 @@ @Override public void execute() { + if (!enclosingCommand.getReturnValue().getSucceeded()) { + throw new VdcBLLException(VdcBllErrors.imageErr, + "Auto-generated live snapshot for VM " + enclosingCommand.getParameters().getVmId() + " failed"); + } + for (LiveMigrateDiskParameters parameters : enclosingCommand.getParameters().getParametersList()) { CommandContext commandContext = ExecutionHandler.createInternalJobContext(); ExecutionHandler.setAsyncJob(commandContext.getExecutionContext(), true); 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 8554c29..43d14c1 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 @@ -66,9 +66,10 @@ } private void endCreateAllSnapshots() { - Backend.getInstance().endAction(VdcActionType.CreateAllSnapshotsFromVm, - getCreateSnapshotParameters(), + VdcReturnValueBase returnValue = Backend.getInstance().endAction( + VdcActionType.CreateAllSnapshotsFromVm, getCreateSnapshotParameters(), ExecutionHandler.createDefaultContexForTasks(enclosingCommand.getExecutionContext())); + enclosingCommand.getReturnValue().setSucceeded(returnValue.getSucceeded()); } @Override -- To view, visit http://gerrit.ovirt.org/21350 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7c69f663836e74691c968f4a15c5f3012479a8b0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Federico Simoncelli <fsimo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches