Yair Zaslavsky has uploaded a new change for review.

Change subject: core: Add the ability to create a dummy task in case of VDSM 
failure
......................................................................

core: Add the ability to create a dummy task in case of VDSM failure

The following patch provides a helper method to create a dummy task
in case there is VDSM failure when running asynchronous command.
The dummy SPM task will be at ended stage, and the root command that
causes all the tasks will fail (endWithFailure will be executed).

Change-Id: I6e977596af52c81a1aed1b8748a30b9425c62fa3
Signed-off-by: Yair Zaslavsky <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskManager.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandMultiAsyncTasks.java
3 files changed, 15 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/42/16642/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskManager.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskManager.java
index d57c6b4..5b9155f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskManager.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskManager.java
@@ -280,13 +280,14 @@
                 new TransactionMethod<Void>() {
                     @Override
                     public Void runInTransaction() {
-                        logAndFailTaskOfCommandWithEmptyVdsmId(task);
+                        logAndFailTaskOfCommandWithEmptyVdsmId(task,
+                                "Engine was restarted before all tasks of the 
command could be submitted to vdsm.");
                         return null;
                     }
                 });
     }
 
-    private static void logAndFailTaskOfCommandWithEmptyVdsmId(final 
AsyncTasks task) {
+    public static void logAndFailTaskOfCommandWithEmptyVdsmId(final AsyncTasks 
task, String message) {
         log.infoFormat(
                 "Failing task with empty vdsm id AsyncTaskType {0} : Task 
'{1}' Parent Command {2}",
                 task.getTaskType(),
@@ -310,7 +311,7 @@
         AsyncTaskStatus failureStatus = new AsyncTaskStatus();
         failureStatus.setStatus(AsyncTaskStatusEnum.finished);
         failureStatus.setResult(AsyncTaskResultEnum.failure);
-        failureStatus.setMessage("Engine was restarted before all tasks of the 
command could be submitted to vdsm.");
+        failureStatus.setMessage(message);
         spmTask.setState(AsyncTaskState.Ended);
         spmTask.setLastTaskStatus(failureStatus);
         spmTask.UpdateTask(failureStatus);
@@ -785,4 +786,9 @@
 
         return false;
     }
+
+    public static void logAndFailTaskOfCommandWithEmptyVdsmId(Guid 
asyncTaskId, String message) {
+        AsyncTasks task = 
DbFacade.getInstance().getAsyncTaskDao().get(asyncTaskId);
+        logAndFailTaskOfCommandWithEmptyVdsmId(task, message);
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
index 45e7724..c4dc901 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
@@ -372,7 +372,7 @@
     private void clearAsyncTasksWithOutVdsmId() {
         for (Guid asyncTaskId : getReturnValue().getTaskPlaceHolderIdList()) {
             AsyncTasks task = getAsyncTaskDao().get(asyncTaskId);
-            if (Guid.isNullOrEmpty(task.getVdsmTaskId())) {
+            if (task != null && Guid.isNullOrEmpty(task.getVdsmTaskId())) {
                 AsyncTaskManager.removeTaskFromDbByTaskId(task.getTaskId());
             }
         }
@@ -1365,7 +1365,9 @@
 
         Guid taskId = Guid.Empty;
         try {
-            AsyncTasks task = createAsyncTask(new AsyncTaskCreationInfo(), 
parentCommand);
+            AsyncTaskCreationInfo creationInfo = new AsyncTaskCreationInfo();
+            creationInfo.setTaskType(getTaskType());
+            AsyncTasks task = createAsyncTask(creationInfo, parentCommand);
             taskId = task.getTaskId();
             getAsyncTaskDao().save(task);
             taskKeyToTaskIdMap.put(taskKey, taskId);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandMultiAsyncTasks.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandMultiAsyncTasks.java
index 1b1cffd..ab381b0 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandMultiAsyncTasks.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandMultiAsyncTasks.java
@@ -55,7 +55,8 @@
             java.util.ArrayList<CommandAsyncTask> CurrentActionTypeTasks = 
getCurrentTasks();
 
             for (CommandAsyncTask task : CurrentActionTypeTasks) {
-                if (task.getState() != AsyncTaskState.Ended) {
+                // Check this is a task that is run on VDSM and is not in 
ENDED state.
+                if (task.getState() != AsyncTaskState.Ended && 
!task.getVdsmTaskId().equals(Guid.Empty)) {
                     log.infoFormat("Task ID: '{0}' is in state {1}. End action 
for command {2} will proceed when all the entity's tasks are completed.",
                             task.getVdsmTaskId(),
                             task.getState(),


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

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

Reply via email to