Ravi Nori has uploaded a new change for review. Change subject: engine : command infrastructure should know when the "execute" phase finished ......................................................................
engine : command infrastructure should know when the "execute" phase finished When the engine is started after crashing/stopped while a command with async tasks is running, we should know after the restart whether the "Execution" phase of the command has ended or not, so that we'll know whether the command can be recovered or not. Change-Id: Ie36e7d8a0263d5dd90fabe914a76711d5c001e72 Bug-Url: https://bugzilla.redhat.com/1118249 Signed-off-by: Ravi Nori <rn...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java M backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java 7 files changed, 13 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/81/30281/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java index 50ce643..0d32b13 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java @@ -49,6 +49,7 @@ getReturnValue().getVdsmTaskIdList().add(result); getParameters().getVdsmTaskIds().add(result); setSucceeded(vdsReturnValue.getSucceeded()); + setCommandStatus(CommandStatus.ACTIVE_ASYNC_EXECUTED); persistCommandWithContext(getParameters().getParentCommand(), true); log.info("Successfully started task to remove orphaned volumes resulting from live merge"); } else { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java index 66aed2e..ab91fd3 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java @@ -46,6 +46,7 @@ getParameters().setVmJobId(jobId); // setSucceeded to indicate executeCommand success; doPolling will check commandStatus setSucceeded(true); + setCommandStatus(CommandStatus.ACTIVE_ASYNC_EXECUTED); persistCommandWithContext(getParameters().getParentCommand(), true); log.debug("Merge started successfully"); } else { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java index d925752..4261183 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java @@ -140,6 +140,11 @@ } setSucceeded(true); + if (snapshotHasImages) { + if (getSnapshotActionType() == VdcActionType.RemoveSnapshotSingleDiskLive) { + setCommandStatus(CommandStatus.ACTIVE_ASYNC_EXECUTED); + } + } } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java index c1f0002..a3c9c28 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java @@ -21,6 +21,7 @@ case ACTIVE: case ACTIVE_SYNC: case ACTIVE_ASYNC: + case ACTIVE_ASYNC_EXECUTED: log.info("Waiting on Live Merge child commands to complete"); return; case FAILED: diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java index ace0b5a..19b5931 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java @@ -78,6 +78,7 @@ switch (TaskManagerUtil.getCommandStatus(currentChildId)) { case ACTIVE: case ACTIVE_ASYNC: + case ACTIVE_ASYNC_EXECUTED: case ACTIVE_SYNC: case NOT_STARTED: log.infoFormat("Waiting on Live Merge command step {0} to complete", diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java index 34915f8..9623c7f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java @@ -66,8 +66,7 @@ coco.updateCallBackNotified(cmdId); iterator.remove(); break; - case ACTIVE: - case ACTIVE_ASYNC: + case ACTIVE_ASYNC_EXECUTED: callBack.doPolling(cmdId, coco.getChildCommandIds(cmdId)); break; default: @@ -81,6 +80,7 @@ for (CommandEntity cmdEntity : coco.getCommandsWithCallBackEnabled()) { switch(cmdEntity.getCommandStatus()) { case ACTIVE_SYNC: + case ACTIVE_ASYNC: case NOT_STARTED: coco.retrieveCommand(cmdEntity.getId()).setCommandStatus(CommandStatus.FAILED_RESTARTED); break; diff --git a/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java b/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java index 5f9dd94..03b78d2 100644 --- a/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java +++ b/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java @@ -5,7 +5,8 @@ NOT_STARTED, ACTIVE, // the execute methods on command base has been invoked ACTIVE_SYNC, // used by synchronous commands to indicate that the sync command is executing - ACTIVE_ASYNC, // used by async commands to indicate that async command has been submitted + ACTIVE_ASYNC, // used by async commands to indicate that async command has started executing + ACTIVE_ASYNC_EXECUTED, // used by async commands to indicate that async command execute method has completed FAILED, FAILED_RESTARTED, // set by command executor to indicate that the sync command did not complete // and the server was restarted -- To view, visit http://gerrit.ovirt.org/30281 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie36e7d8a0263d5dd90fabe914a76711d5c001e72 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <rn...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches