Yair Zaslavsky has uploaded a new change for review. Change subject: [WIP] core: adding command async task ......................................................................
[WIP] core: adding command async task This patch adds CommandAsyncTask - a class that extends SPMAsyncTask and performs coordination by command-id This patch also modifies CommandCoordinator, AsyncTaskManager and other classes to support end of command coordination At WIP - as was not yet verified. Change-Id: I328527ec87d38d801cc376d66d0277d56fa7a747 Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandAsyncTask.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandIdDecoratedCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/DecoratedCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityAsyncTask.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityIdDecoratedCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskManagerUtil.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CallBack.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCoordinator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java 11 files changed, 389 insertions(+), 58 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/68/14668/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java index 2d04251..6319c2d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java @@ -667,4 +667,14 @@ return false; } + public synchronized Map<Guid, SPMTask> getAllTasksByCommandIds(Set<Guid> childCommandIds) { + Map<Guid, SPMTask> tasks = new HashMap<Guid, SPMTask>(); + for (SPMTask task : _tasks.values()) { + if (childCommandIds.contains(task.getParameters().getDbAsyncTask().getTaskParameters().getCommandId())) { + tasks.put(task.getVdsmTaskId(), task); + } + } + return tasks; + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandAsyncTask.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandAsyncTask.java new file mode 100644 index 0000000..16a16e0 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandAsyncTask.java @@ -0,0 +1,242 @@ +package org.ovirt.engine.core.bll.tasks; + +import java.util.Map; +import java.util.Set; + +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator; +import org.ovirt.engine.core.bll.tasks.interfaces.SPMTask; +import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.asynctasks.AsyncTaskParameters; +import org.ovirt.engine.core.common.businessentities.AsyncTasks; +import org.ovirt.engine.core.common.businessentities.CommandEntity; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.utils.log.Log; +import org.ovirt.engine.core.utils.log.LogFactory; +import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; + +public class CommandAsyncTask extends SPMAsyncTask { + + private CommandEntity commandEntity; + private CommandEntity parentCommandEntity; + + public CommandAsyncTask(CommandCoordinator coco, + AsyncTaskParameters parameters, + CommandEntity commandEntity, boolean duringInit) { + super(coco, parameters); + this.commandEntity = commandEntity; + + parentCommandEntity = coco.getCommand(commandEntity.getParentCommandId()); + parentCommandEntity.getChildCommandIds().add(commandEntity.getId()); + + } + + @Override + public void concreteStartPollingTask() { + Map<Guid, SPMTask> tasks = getAllTasksFromParentCommand(); + startPollingTask(tasks, getVdsmTaskId()); + } + + private Map<Guid, SPMTask> getAllTasksFromParentCommand() { + Set<Guid> childCommandIds = parentCommandEntity.getChildCommandIds(); + Map<Guid, SPMTask> tasks = + TaskManagerUtil.getAllTasksByCommandIds(childCommandIds); + return tasks; + } + + + @Override + protected void OnTaskEndSuccess() { + LogEndTaskSuccess(); + endCommandIfNecessary(); + } + + private void endCommandIfNecessary() { + + if (parentCommandEntity == null) { + log.warnFormat( + "No info is available for command '{0}', current task ('{1}') was probably created while other tasks were in progress, clearing task.", + getContainerId(), + getVdsmTaskId()); + + clearAsyncTask(); + } + + else { + Map<Guid, SPMTask> tasks = getAllTasksFromParentCommand(); + + if (shouldEndCommand(tasks)) { + log.infoFormat( + "All tasks of command {0} has ended -> executing 'EndAction'", + getContainerId()); + markAllWithAttemptingEndAction(tasks); + ThreadPoolUtil.execute(new Runnable() { + @SuppressWarnings("synthetic-access") + @Override + public void run() { + endCommand(); + } + }); + } + } + } + + private void endCommand() { + AsyncTasks dbAsyncTask = getParameters().getDbAsyncTask(); + VdcReturnValueBase vdcReturnValue = null; + try { + log.infoFormat("endCommand [within thread] context: Attempting to EndAction '{0}', executionIndex: '{1}'", + parentCommandEntity.getId(), + dbAsyncTask.getActionParameters().getExecutionIndex()); + + try { + vdcReturnValue = + coco.endAction(this, parentCommandEntity.getId()); + } catch (RuntimeException ex) { + log.error(ex.toString()); + log.debug(ex); + } + } + + catch (RuntimeException Ex2) { + log.error( + "endAction [within thread]: An exception has been thrown (not related to 'EndAction' itself)", + Ex2); + } + + finally { + handleEndActionResult(vdcReturnValue); + } + } + + @Override + protected void OnTaskEndFailure() { + LogEndTaskFailure(); + endCommandIfNecessary(); + } + + @Override + protected void OnTaskDoesNotExist() { + LogTaskDoesntExist(); + endCommandIfNecessary(); + } + + @Override + public boolean isEntityAsyncTask() { + return true; + } + + public void startPollingTask(Map<Guid, SPMTask> tasks, Guid TaskID) { + if (tasks.containsKey(TaskID) && + (tasks.get(TaskID).getParameters() != null + && (tasks.get(TaskID).getParameters().getDbAsyncTask() != null))) { + for (SPMTask task : tasks.values()) { + if (task.getParameters() != null && task.getParameters().getDbAsyncTask() != null + && task.getState() == AsyncTaskState.Initializing) { + task.setState(AsyncTaskState.Polling); + } + } + } else { + log.warnFormat( + "For some reason, task '{0}' has no parameters or no DB task - we don't know its action type", + TaskID); + } + } + + @Override + public Object getContainerId() { + return commandEntity.getParentCommandId(); + } + + public void markAllWithAttemptingEndAction(Map<Guid, SPMTask> tasks) { + for (SPMTask task : tasks.values()) { + task.setState(AsyncTaskState.AttemptingEndAction); + } + } + + public boolean shouldEndCommand(Map<Guid, SPMTask> tasks) { + for (SPMTask task : tasks.values()) { + if (!AsyncTaskState.Ended.equals(task.getState())) { + return false; + } + } + return true; + } + + public void handleEndActionResult( + VdcReturnValueBase vdcReturnValue) { + boolean isTaskGroupSuccess = getParameters().getDbAsyncTask().getActionParameters().getTaskGroupSuccess(); + try { + if (parentCommandEntity != null) { + log.infoFormat( + "endAction for command {0} of type {1} completed, handling the result.", + parentCommandEntity.getId(), + parentCommandEntity.getCommandType()); + + Map<Guid, SPMTask> tasks = getAllTasksFromParentCommand(); + if (vdcReturnValue == null || (!vdcReturnValue.getSucceeded() && vdcReturnValue.getEndActionTryAgain())) { + log.infoFormat( + "endAction for commandndAction for command {0} of type {1}} hasn't succeeded, not clearing tasks, will attempt again next polling.", + parentCommandEntity.getId(), + parentCommandEntity.getCommandType()); + + repoll(tasks); + } else { + log.infoFormat( + "endAction for commandndAction for command {0} of type {1} action type {0} {2}succeeded, clearing tasks.", + parentCommandEntity.getId(), + parentCommandEntity.getCommandType(), + (vdcReturnValue.getSucceeded() ? "" : "hasn't ")); + + /** + * Terminate the job by the return value of EndAction. The + * operation will end also the FINALIZING step. + */ + coco.endTaskJob(this, vdcReturnValue.getSucceeded() + && isTaskGroupSuccess); + clearTasks(tasks); + + if (getAllCleared(tasks)) { + log.infoFormat( + "Remoing parent command {0}", getContainerId()); + removeCommand(parentCommandEntity.getId()); + } + } + } + } catch (RuntimeException ex) { + log.error("EntityAsyncTask::HandleEndActionResult [within thread]: an exception has been thrown", ex); + } + } + + private void removeCommand(Guid commandId) { + coco.removeCommand(commandId); + } + + private void clearTasks(Map<Guid, SPMTask> tasks) { + for (SPMTask task : tasks.values()) { + task.clearAsyncTask(); + } + } + + private boolean getAllCleared(Map<Guid, SPMTask> tasks) { + for (SPMTask task : tasks.values()) { + if (!taskWasCleared(task)) { + return false; + } + } + return true; + } + + private boolean taskWasCleared(SPMTask task) { + AsyncTaskState taskState = task.getState(); + return taskState == AsyncTaskState.Cleared || taskState == AsyncTaskState.ClearFailed; + } + + private void repoll(Map<Guid, SPMTask> tasks) { + for (SPMTask task : tasks.values()) { + task.setState(AsyncTaskState.Ended); + } + } + + private static final Log log = LogFactory.getLog(EntityAsyncTask.class); +} + diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java index dc76e44..1ac7c2b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java @@ -53,7 +53,7 @@ public static CommandCoordinatorImpl getInstance() { return instance; } - + CacheWrapper<NGuid, ExecutionContext> executionContextMap; CommandsCache commandsCache = new CommandsCacheImpl(); @@ -62,21 +62,19 @@ } @Override - public VdcReturnValueBase endAction( - NGuid stepId, - Object containerId, - VdcActionType actionType, - AsyncTasks dbAsyncTask) { + public VdcReturnValueBase endAction(SPMTask task, Object coordinator) { + AsyncTasks dbAsyncTask = task.getParameters().getDbAsyncTask(); + NGuid stepId = dbAsyncTask.getStepId(); + VdcActionType actionType = dbAsyncTask.getaction_type(); Guid commandId = dbAsyncTask.getActionParameters().getCommandId(); VdcActionParametersBase parameters = dbAsyncTask.getActionParameters(); + CommandEntity commandEntity = null; try { ExecutionContext context = null; if (stepId != null) { context = createFinalizingContext(stepId.getValue()); executionContextMap.put(stepId, context); - } - if (stepId != null) { - CommandEntity commandEntity = commandsCache.get(commandId); + commandEntity = commandsCache.get(commandId); if (!actionType.equals(commandEntity.getCommandType())) { throw new RuntimeException("action types dont match"); } else { @@ -90,7 +88,7 @@ } CommandBase<?> command = CommandsFactory.getInstance().CreateCommand(actionType, parameters); command.setContext(new CommandContext(context)); - return new DecoratedCommand(command, dbAsyncTask, containerId).endAction(); + return new EntityIdDecoratedCommand(this, command, (EntityAsyncTask) task, coordinator).endAction(); } finally { commandsCache.remove(commandId); } @@ -118,7 +116,8 @@ } @Override - public void endTaskJob(NGuid stepId, boolean exitStatus) { + public void endTaskJob(SPMTask task, boolean exitStatus) { + NGuid stepId = task.getParameters().getDbAsyncTask().getStepId(); if (stepId != null) { ExecutionContext context = executionContextMap.get(stepId); ExecutionHandler.getInstance().endTaskJob(context, exitStatus); @@ -381,10 +380,12 @@ } @Override - public void handleEndActionResult( - EntityMultiAsyncTasks entityInfo, + public void handleEndActionResult(EntityAsyncTask task, VdcReturnValueBase vdcReturnValue, - AsyncTasks dbAsyncTask) { + Object coordinator) { + + EntityMultiAsyncTasks entityInfo = getEntityMultiAsyncTasks(coordinator); + AsyncTasks dbAsyncTask = task.getParameters().getDbAsyncTask(); boolean isTaskGroupSuccess = dbAsyncTask.getActionParameters().getTaskGroupSuccess(); try { if (entityInfo != null) { @@ -409,7 +410,7 @@ * operation will end also the FINALIZING step. */ if (taskHasContext(dbAsyncTask.getStepId())) { - endTaskJob(dbAsyncTask.getStepId(), vdcReturnValue.getSucceeded() && isTaskGroupSuccess); + endTaskJob(task, vdcReturnValue.getSucceeded() && isTaskGroupSuccess); } entityInfo.ClearTasks(); @@ -450,4 +451,14 @@ return Backend.getInstance(); } + @Override + public CommandEntity getCommand(NGuid commandId) { + return commandsCache.get(commandId); + } + + @Override + public void removeCommand(NGuid commandId) { + commandsCache.remove(commandId); + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandIdDecoratedCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandIdDecoratedCommand.java new file mode 100644 index 0000000..fb4789e --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandIdDecoratedCommand.java @@ -0,0 +1,45 @@ +package org.ovirt.engine.core.bll.tasks; + +import org.ovirt.engine.core.bll.tasks.interfaces.Command; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.utils.log.Log; +import org.ovirt.engine.core.utils.log.LogFactory; + +public class CommandIdDecoratedCommand<T extends VdcActionParametersBase> extends DecoratedCommand<T> { + + private CommandAsyncTask task; + private Guid commandId; + + public CommandIdDecoratedCommand(CommandCoordinator coco, + Command<T> command, + CommandAsyncTask task, + Guid commandId) { + super(coco, command); + this.task = task; + this.commandId = commandId; + + } + + @Override + public VdcReturnValueBase endAction() { + VdcReturnValueBase vdcReturnValue = null; + CommandAsyncTask t= null; + try { + vdcReturnValue = innerCommand.endAction(); + } finally { + task.handleEndActionResult(vdcReturnValue); + } + return vdcReturnValue; + } + + @Override + public T getParameters() { + return innerCommand.getParameters(); + } + + private static final Log log = LogFactory.getLog(EntityIdDecoratedCommand.class); + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/DecoratedCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/DecoratedCommand.java index 8930f4d..6058b69 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/DecoratedCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/DecoratedCommand.java @@ -1,46 +1,28 @@ package org.ovirt.engine.core.bll.tasks; import org.ovirt.engine.core.bll.tasks.interfaces.Command; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcReturnValueBase; -import org.ovirt.engine.core.common.businessentities.AsyncTasks; -import org.ovirt.engine.core.utils.log.Log; -import org.ovirt.engine.core.utils.log.LogFactory; -public class DecoratedCommand<T extends VdcActionParametersBase> implements Command { +public class DecoratedCommand<T extends VdcActionParametersBase> implements Command<T> { - private Command command; - private AsyncTasks dbAsyncTask; - private Object containerId; - private static final Log log = LogFactory.getLog(DecoratedCommand.class); + protected Command<T> innerCommand; + protected CommandCoordinator coco; - public DecoratedCommand(Command command, AsyncTasks dbAsyncTask, Object containerId) { - this.command = command; - this.dbAsyncTask = dbAsyncTask; - this.containerId = containerId; + public DecoratedCommand(CommandCoordinator coco, Command<T> innerCommand) { + this.innerCommand = innerCommand; + this.coco = coco; } @Override public VdcReturnValueBase endAction() { - VdcReturnValueBase vdcReturnValue = null; - try { - vdcReturnValue = command.endAction(); - } finally { - CommandCoordinatorImpl coco = CommandCoordinatorImpl.getInstance(); - CommandCoordinatorImpl.getInstance().handleEndActionResult( - coco.getEntityMultiAsyncTasks(getContainerId()), - vdcReturnValue, - dbAsyncTask); - } - return vdcReturnValue; + return innerCommand.endAction(); } @Override - public VdcActionParametersBase getParameters() { - return command.getParameters(); + public T getParameters() { + return innerCommand.getParameters(); } - private Object getContainerId() { - return containerId; - } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityAsyncTask.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityAsyncTask.java index 11c225f..7144a22 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityAsyncTask.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityAsyncTask.java @@ -1,13 +1,13 @@ package org.ovirt.engine.core.bll.tasks; import java.util.ArrayList; + import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.asynctasks.AsyncTaskParameters; import org.ovirt.engine.core.common.asynctasks.EndedTaskInfo; import org.ovirt.engine.core.common.businessentities.AsyncTasks; -import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; @@ -117,13 +117,8 @@ /** * Creates context for the job which monitors the action */ - NGuid stepId = dbAsyncTask.getStepId(); vdcReturnValue = - coco.endAction(stepId, - getContainerId(), - entityInfo.getActionType(), - dbAsyncTask - ); + coco.endAction(this,getContainerId()); } catch (RuntimeException ex) { log.error(getErrorMessage(entityInfo)); log.error(ex.toString()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityIdDecoratedCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityIdDecoratedCommand.java new file mode 100644 index 0000000..24135e2 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityIdDecoratedCommand.java @@ -0,0 +1,37 @@ +package org.ovirt.engine.core.bll.tasks; + +import org.ovirt.engine.core.bll.tasks.interfaces.Command; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.utils.log.Log; +import org.ovirt.engine.core.utils.log.LogFactory; + +public class EntityIdDecoratedCommand<T extends VdcActionParametersBase> extends DecoratedCommand<T> { + + private Object containerId; + private EntityAsyncTask task; + private static final Log log = LogFactory.getLog(EntityIdDecoratedCommand.class); + + public EntityIdDecoratedCommand(CommandCoordinator coco, + Command<T> command, + EntityAsyncTask task, + Object containerId) { + super(coco, command); + this.task = task; + this.containerId = containerId; + } + + @Override + public VdcReturnValueBase endAction() { + VdcReturnValueBase vdcReturnValue = null; + try { + vdcReturnValue = innerCommand.endAction(); + } finally { + CommandCoordinatorImpl coco = CommandCoordinatorImpl.getInstance(); + CommandCoordinatorImpl.getInstance().handleEndActionResult(task, vdcReturnValue, containerId); + } + return vdcReturnValue; + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskManagerUtil.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskManagerUtil.java index 3376fe7..287af52 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskManagerUtil.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskManagerUtil.java @@ -1,7 +1,11 @@ package org.ovirt.engine.core.bll.tasks; import java.util.ArrayList; +import java.util.Map; +import java.util.Set; + import org.ovirt.engine.core.bll.CommandBase; +import org.ovirt.engine.core.bll.tasks.interfaces.SPMTask; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo; @@ -88,4 +92,8 @@ return AsyncTaskManager.getInstance(CommandCoordinatorImpl.getInstance()); } + public static Map<Guid, SPMTask> getAllTasksByCommandIds(Set<Guid> childCommandIds) { + return getAsyncTaskManager().getAllTasksByCommandIds(childCommandIds); + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CallBack.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CallBack.java index d047604..30f3a19 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CallBack.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CallBack.java @@ -1,10 +1,8 @@ package org.ovirt.engine.core.bll.tasks.interfaces; -import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; -import org.ovirt.engine.core.common.businessentities.AsyncTasks; -import org.ovirt.engine.core.compat.NGuid; + public interface CallBack { - public VdcReturnValueBase endAction(NGuid stepId, Object containerId, VdcActionType actionType, AsyncTasks dbAsyncTask); + public VdcReturnValueBase endAction(SPMTask task, Object coordinator); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCoordinator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCoordinator.java index 81e9e7e..83f59d9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCoordinator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCoordinator.java @@ -5,5 +5,7 @@ public abstract class CommandCoordinator implements CallBack, TaskHelper, Poller { - public abstract CommandEntity getCommand(NGuid parentCommandId); + public abstract CommandEntity getCommand(NGuid nGuid); + + public abstract void removeCommand(NGuid commandId); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java index fa8c23a..30d5a00 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java @@ -5,12 +5,13 @@ package org.ovirt.engine.core.bll.tasks.interfaces; import java.util.ArrayList; + +import org.ovirt.engine.core.bll.tasks.EntityAsyncTask; import org.ovirt.engine.core.bll.tasks.EntityMultiAsyncTasks; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo; import org.ovirt.engine.core.common.asynctasks.AsyncTaskParameters; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; -import org.ovirt.engine.core.common.businessentities.AsyncTasks; import org.ovirt.engine.core.common.job.JobExecutionStatus; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; @@ -25,7 +26,7 @@ void endTaskStep(NGuid stepId, JobExecutionStatus exitStatus); - void endTaskJob(NGuid stepId, boolean exitStatus); + void endTaskJob(SPMTask task, boolean exitStatus); boolean taskHasContext(NGuid stepId); @@ -47,5 +48,5 @@ public SPMTask construct(AsyncTaskType taskType, AsyncTaskParameters asyncTaskParams, boolean duringInit); - public void handleEndActionResult(EntityMultiAsyncTasks entityInfo, VdcReturnValueBase vdcReturnValue, AsyncTasks dbAsyncTask); + public void handleEndActionResult(EntityAsyncTask task, VdcReturnValueBase vdcReturnValue, Object coordinator); } -- To view, visit http://gerrit.ovirt.org/14668 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I328527ec87d38d801cc376d66d0277d56fa7a747 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches