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
