Ravi Nori has uploaded a new change for review. Change subject: engine : endAction run multiple times When RuntimeException occurs ......................................................................
engine : endAction run multiple times When RuntimeException occurs When RuntimeException occurs at endAction, the endAction part will be rerun over and over again Change-Id: I50d7688c9f06ae90bed3d80c286534311f5afb1c Bug-Url: https://bugzilla.redhat.com/999896 Signed-off-by: Ravi Nori <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandAsyncTask.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandMultiAsyncTasks.java 2 files changed, 31 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/18609/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandAsyncTask.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandAsyncTask.java index aa1e4f5..d70ab5e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandAsyncTask.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandAsyncTask.java @@ -110,6 +110,7 @@ CommandMultiAsyncTasks entityInfo = GetCommandMultiAsyncTasks(); VdcReturnValueBase vdcReturnValue = null; ExecutionContext context = null; + boolean endActionRuntimeException = false; AsyncTasks dbAsyncTask = getParameters().getDbAsyncTask(); ArrayList<VdcActionParametersBase> imagesParameters = new ArrayList<VdcActionParametersBase>(); @@ -150,6 +151,7 @@ log.debug(ex); } catch (RuntimeException ex) { log.error(getErrorMessage(), ex); + endActionRuntimeException = true; } } @@ -157,9 +159,15 @@ log.error( "CommandAsyncTask::EndCommandAction [within thread]: An exception has been thrown (not related to 'EndAction' itself)", Ex2); + endActionRuntimeException = true; } finally { + // if a RuntimeExcpetion occurs we clear the task from db and perform no other action + if (endActionRuntimeException) { + handleEndActionRuntimeException(entityInfo, dbAsyncTask); + return; + } boolean isTaskGroupSuccess = dbAsyncTask.getActionParameters().getTaskGroupSuccess(); handleEndActionResult(entityInfo, vdcReturnValue, context, isTaskGroupSuccess); } @@ -178,6 +186,23 @@ getParameters().getDbAsyncTask().getActionParameters().getCommandType()); } + private void handleEndActionRuntimeException(CommandMultiAsyncTasks commandInfo, AsyncTasks dbAsyncTask) { + try { + commandInfo.clearTaskWithRuntimeException(dbAsyncTask.getVdsmTaskId()); + RemoveTaskFromDB(); + if (commandInfo.getAllCleared()) { + log.infoFormat( + "CommandAsyncTask::HandleEndActionRuntimeException [within thread]: Removing CommandMultiAsyncTasks object for entity '{0}'", + commandInfo.getCommandId()); + _multiTasksByCommandIds.remove(commandInfo.getCommandId()); + } + } + + catch (RuntimeException ex) { + log.error("CommandAsyncTask::HandleEndActionResult [within thread]: an exception has been thrown", ex); + } + } + private void handleEndActionResult(CommandMultiAsyncTasks commandInfo, VdcReturnValueBase vdcReturnValue, ExecutionContext context, boolean isTaskGroupSuccess) { 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 c758a1a..3c78ecf 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 @@ -139,6 +139,12 @@ } } + public void clearTaskWithRuntimeException(Guid vdsmTaskId) { + synchronized (_listTasks) { + _listTasks.remove(vdsmTaskId); + } + } + public void StartPollingTask(Guid TaskID) { synchronized (_listTasks) { if (_listTasks.containsKey(TaskID) && _listTasks.get(TaskID).getParameters() != null -- To view, visit http://gerrit.ovirt.org/18609 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I50d7688c9f06ae90bed3d80c286534311f5afb1c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
