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

Reply via email to