Ravi Nori has uploaded a new change for review. Change subject: engine : Refactoring Async tasks code ......................................................................
engine : Refactoring Async tasks code This patch moves all async task handling code out of the bll packages and moves it to a taskmgr package parallel to bll. TasksUtil class currently contains all the task handling handling code such as createTask, cancelTask, revertTask that was in CommandBase. This is the first step in moving all the code out of bll. The next step would be to define an interface which would define a single entry point into the task manager package, lets call it TaskManager and TaskManagerImpl. The bll package would be modified to use this single entry for all task manager related activities. At this stage the methods in TasksUtil class would be absorbed into the TaskManagerImpl. Once the bll package has been abstracted from the implementation details of the async task manager implementation. We can begin modifying the internals of the taskmgr package. This patch only moves the code out of bll package and defines a new parallel package taskmgr. Change-Id: I7d2770f355274159c30def80c7c263bb590a64f7 Signed-off-by: Ravi Nori <rn...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractSPMAsyncTaskHandler.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/CreateCloneOfTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmFromImportExportCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskFactory.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskManager.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskState.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskUtils.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityAsyncTask.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityMultiAsyncTasks.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTask.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTaskHandler.java R backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TaskHandlerCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TasksUtil.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java 36 files changed, 238 insertions(+), 129 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/93/12693/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractSPMAsyncTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractSPMAsyncTaskHandler.java index ffb1f13..38be891 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractSPMAsyncTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractSPMAsyncTaskHandler.java @@ -1,8 +1,8 @@ package org.ovirt.engine.core.bll; import org.ovirt.engine.core.bll.job.ExecutionHandler; -import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo; 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 a1f68e7..3ec98f6 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 @@ -1,5 +1,7 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; +import org.ovirt.engine.core.tasks.SPMAsyncTask; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; @@ -31,8 +33,8 @@ import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; import org.ovirt.engine.core.bll.quota.QuotaVdsDependent; import org.ovirt.engine.core.bll.session.SessionDataContainer; -import org.ovirt.engine.core.bll.tasks.AsyncTaskUtils; -import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.TasksUtil; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; @@ -41,14 +43,10 @@ import org.ovirt.engine.core.common.action.VdcActionType; 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.ActionGroup; import org.ovirt.engine.core.common.businessentities.ActionVersionMap; -import org.ovirt.engine.core.common.businessentities.AsyncTaskResultEnum; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus; -import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; -import org.ovirt.engine.core.common.businessentities.AsyncTasks; import org.ovirt.engine.core.common.businessentities.BusinessEntity; import org.ovirt.engine.core.common.businessentities.BusinessEntitySnapshot; import org.ovirt.engine.core.common.businessentities.BusinessEntitySnapshot.EntityStatusSnapshot; @@ -60,7 +58,6 @@ import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.errors.VdcFault; import org.ovirt.engine.core.common.interfaces.IVdcUser; -import org.ovirt.engine.core.common.job.ExternalSystemType; import org.ovirt.engine.core.common.job.Step; import org.ovirt.engine.core.common.job.StepEnum; import org.ovirt.engine.core.common.utils.Pair; @@ -93,7 +90,6 @@ import org.ovirt.engine.core.utils.lock.LockManagerFactory; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; -import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; import org.ovirt.engine.core.utils.transaction.RollbackHandler; import org.ovirt.engine.core.utils.transaction.TransactionMethod; import org.ovirt.engine.core.utils.transaction.TransactionSupport; @@ -203,7 +199,7 @@ return new VdcReturnValueBase(); } - protected BackendInternal getBackend() { + public BackendInternal getBackend() { return Backend.getInstance(); } @@ -1031,7 +1027,7 @@ * @param parameters parameter of the creating command * @return */ - protected VdcActionParametersBase getParametersForTask(VdcActionType parentCommandType, + public VdcActionParametersBase getParametersForTask(VdcActionType parentCommandType, VdcActionParametersBase parameters) { // If there is no parent command, the command that its type // will be stored in the DB for thr task is the one creating the command @@ -1187,7 +1183,7 @@ } } - private boolean hasTasks() { + public boolean hasTasks() { return !getReturnValue().getTaskIdList().isEmpty(); } @@ -1211,7 +1207,7 @@ return annotation == null; } - protected T getParameters() { + public T getParameters() { return _parameters; } @@ -1309,75 +1305,17 @@ protected Guid createTask(AsyncTaskCreationInfo asyncTaskCreationInfo, VdcActionType parentCommand, String description, VdcObjectType entityType, Guid... entityIds) { - Guid retValue = Guid.Empty; - - Transaction transaction = TransactionSupport.suspend(); - - try { - Step taskStep = - ExecutionHandler.addTaskStep(getExecutionContext(), - StepEnum.getStepNameByTaskType(asyncTaskCreationInfo.getTaskType()), - description); - if (taskStep != null) { - asyncTaskCreationInfo.setStepId(taskStep.getId()); - } - SPMAsyncTask task = concreteCreateTask(asyncTaskCreationInfo, parentCommand); - retValue = task.getTaskID(); - task.setEntityType(entityType); - task.setAssociatedEntities(entityIds); - AsyncTaskUtils.addOrUpdateTaskInDB(task); - getAsyncTaskManager().lockAndAddTaskToManager(task); - retValue = task.getTaskID(); - ExecutionHandler.updateStepExternalId(taskStep, retValue, ExternalSystemType.VDSM); - } catch (RuntimeException ex) { - log.errorFormat("Error during CreateTask for command: {0}. Exception {1}", getClass().getName(), ex); - } finally { - TransactionSupport.resume(transaction); - } - - return retValue; + return TasksUtil.createTask(this, asyncTaskCreationInfo, parentCommand, description, entityType, entityIds); } - /** - * Create the {@link SPMAsyncTask} object to be run - * @param asyncTaskCreationInfo Info on how to create the task - * @param parentCommand The type of command issuing the task - * @return An {@link SPMAsyncTask} object representing the task to be run - */ - protected SPMAsyncTask concreteCreateTask - (AsyncTaskCreationInfo asyncTaskCreationInfo, VdcActionType parentCommand) { - - VdcActionParametersBase parentParameters = getParametersForTask(parentCommand, getParameters()); - if (parentParameters.getParametersCurrentUser() == null && getCurrentUser() != null) { - parentParameters.setParametersCurrentUser(getCurrentUser()); - } - AsyncTaskParameters p = - new AsyncTaskParameters(asyncTaskCreationInfo, new AsyncTasks(parentCommand, - AsyncTaskResultEnum.success, - AsyncTaskStatusEnum.running, - asyncTaskCreationInfo.getTaskID(), - parentParameters, - getParameters(), - asyncTaskCreationInfo.getStepId(), - getCommandId(),asyncTaskCreationInfo.getStoragePoolID(), - asyncTaskCreationInfo.getTaskType())); - p.setEntityId(getParameters().getEntityId()); - return AsyncTaskManager.getInstance().CreateTask(internalGetTaskType(), p); + public SPMAsyncTask concreteCreateTask( + AsyncTaskCreationInfo asyncTaskCreationInfo, + VdcActionType parentCommand) { + return TasksUtil.concreteCreateTask(this, asyncTaskCreationInfo, parentCommand); } /** @return The type of task that should be created for this command. Commands that do not create async tasks should throw a {@link UnsupportedOperationException} */ - private AsyncTaskType internalGetTaskType() { - if (hasTaskHandlers()) { - if (getParameters().getExecutionReason() == CommandExecutionReason.REGULAR_FLOW) { - return getCurrentTaskHandler().getTaskType(); - } - return getCurrentTaskHandler().getRevertTaskType(); - } - return getTaskType(); - } - - /** @return The type of task that should be created for this command. Commands that do not create async tasks should throw a {@link UnsupportedOperationException} */ - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { throw new UnsupportedOperationException(); } @@ -1410,23 +1348,11 @@ } private void cancelTasks() { - if (hasTasks()) { - ThreadPoolUtil.execute(new Runnable() { - @Override - public void run() { - log.infoFormat("Rollback for command: {0}.", CommandBase.this.getClass().getName()); - try { - getAsyncTaskManager().CancelTasks(getReturnValue().getTaskIdList()); - } catch (Exception e) { - log.errorFormat("Failed to cancel tasks for command: {0}.", - CommandBase.this.getClass().getName()); - } - } - }); - } + TasksUtil.cancelTasks(this); } protected void revertTasks() { + TasksUtil.revertTasks(this); if (getParameters().getTaskIds() != null) { // list to send to the PollTasks method ArrayList<Guid> taskIdAsList = new ArrayList<Guid>(); @@ -1817,11 +1743,11 @@ return taskHandlers; } - protected boolean hasTaskHandlers() { + public boolean hasTaskHandlers() { return getTaskHandlers() != null; } - protected SPMAsyncTaskHandler getCurrentTaskHandler() { + public SPMAsyncTaskHandler getCurrentTaskHandler() { return getTaskHandlers().get(getExecutionIndex()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java index 8713df9..a8fc05f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateCloneOfTemplateCommand.java @@ -88,7 +88,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.copyImage; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java index 10c9837..33958e0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java @@ -108,7 +108,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.copyImage; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java index c205b42..8e408b8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java @@ -126,7 +126,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.createVolume; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java index a872672..3ac20bc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; import org.ovirt.engine.core.common.queries.*; public class GetTasksStatusesByTasksIDsQuery<P extends GetTasksStatusesByTasksIDsParameters> diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java index 47ad678..062237f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -186,7 +187,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.createVolume; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java index 789cf38..216660b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; import javax.annotation.PostConstruct; import javax.ejb.DependsOn; import javax.ejb.Singleton; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java index 91a9170..89c239c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyImageGroupCommand.java @@ -145,7 +145,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.moveImage; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java index 34a7132..981f91d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java @@ -92,7 +92,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.deleteImage; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java index 0324a48..089f906 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskCommand.java @@ -61,7 +61,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.mergeSnapshots; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java index 2dd3caa..7651dcb 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveTemplateSnapshotCommand.java @@ -40,7 +40,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.deleteImage; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java index 48f3d0d..dbf5dbe 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmFromImportExportCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmFromImportExportCommand.java index 1520949..10be858 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmFromImportExportCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmFromImportExportCommand.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java index 798a32a..dc00016 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreFromSnapshotCommand.java @@ -62,7 +62,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.deleteVolume; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java index 6bd21a7..e745a60 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java index dea3cdb..50bb198 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskManager; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -293,7 +294,7 @@ } @Override - protected AsyncTaskType getTaskType() { + public AsyncTaskType getTaskType() { return AsyncTaskType.deleteImage; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java index 58b1f5b..9cb3a4b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/CreateImagePlaceholderTaskHandler.java @@ -2,7 +2,7 @@ import org.ovirt.engine.core.bll.AbstractSPMAsyncTaskHandler; import org.ovirt.engine.core.bll.ImagesHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java index d443ec6..b656b2a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDiskCommand.java @@ -6,8 +6,8 @@ import org.ovirt.engine.core.bll.MoveOrCopyDiskCommand; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.job.ExecutionHandler; -import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java index 025bcab..e7c5e42 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateDisksTaskHandler.java @@ -3,8 +3,8 @@ import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.job.ExecutionHandler; -import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; import org.ovirt.engine.core.common.action.LiveMigrateVmDisksParameters; import org.ovirt.engine.core.common.action.VdcActionType; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java index 676ff5b..a386bb4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveMigrateVmDisksCommand.java @@ -16,8 +16,8 @@ import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; -import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.VdcObjectType; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java index bdd1c08..33c5a42 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/LiveSnapshotTaskHandler.java @@ -5,8 +5,8 @@ import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.ImagesHandler; import org.ovirt.engine.core.bll.job.ExecutionHandler; -import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.action.CreateAllSnapshotsFromVmParameters; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; import org.ovirt.engine.core.common.action.LiveMigrateVmDisksParameters; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java index b7ae2ff..9d817c0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskFinishTaskHandler.java @@ -3,7 +3,7 @@ import org.ovirt.engine.core.bll.AbstractSPMAsyncTaskHandler; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.ImagesHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java index f6e06cc..1873d12 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lsm/VmReplicateDiskStartTaskHandler.java @@ -1,7 +1,7 @@ package org.ovirt.engine.core.bll.lsm; import org.ovirt.engine.core.bll.AbstractSPMAsyncTaskHandler; -import org.ovirt.engine.core.bll.tasks.TaskHandlerCommand; +import org.ovirt.engine.core.tasks.TaskHandlerCommand; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LiveMigrateDiskParameters; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskFactory.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskFactory.java similarity index 98% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskFactory.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskFactory.java index 0be5349..e732e7b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskFactory.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskFactory.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.core.bll; +package org.ovirt.engine.core.tasks; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; 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/tasks/AsyncTaskManager.java similarity index 99% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskManager.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskManager.java index 155f676..13f53cb 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/tasks/AsyncTaskManager.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.core.bll; +package org.ovirt.engine.core.tasks; import java.util.ArrayList; import java.util.HashMap; @@ -11,7 +11,7 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.lang.exception.ExceptionUtils; -import org.ovirt.engine.core.bll.tasks.AsyncTaskUtils; +import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskState.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskState.java similarity index 89% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskState.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskState.java index 40e1f3c..3a8ef19 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AsyncTaskState.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskState.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.core.bll; +package org.ovirt.engine.core.tasks; public enum AsyncTaskState { Initializing, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskUtils.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskUtils.java similarity index 94% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskUtils.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskUtils.java index 57697ca..b2fb212 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskUtils.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/AsyncTaskUtils.java @@ -1,6 +1,5 @@ -package org.ovirt.engine.core.bll.tasks; +package org.ovirt.engine.core.tasks; -import org.ovirt.engine.core.bll.SPMAsyncTask; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntityAsyncTask.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityAsyncTask.java similarity index 97% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntityAsyncTask.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityAsyncTask.java index 0dd8a08..3854abe 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntityAsyncTask.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityAsyncTask.java @@ -1,9 +1,12 @@ -package org.ovirt.engine.core.bll; +package org.ovirt.engine.core.tasks; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; +import org.ovirt.engine.core.bll.Backend; +import org.ovirt.engine.core.bll.CommandBase; +import org.ovirt.engine.core.bll.CommandsFactory; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.job.ExecutionContext; @@ -75,7 +78,7 @@ } @Override - protected void ConcreteStartPollingTask() { + public void ConcreteStartPollingTask() { EntityMultiAsyncTasks entityInfo = GetEntityMultiAsyncTasks(); entityInfo.StartPollingTask(getTaskID()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntityMultiAsyncTasks.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityMultiAsyncTasks.java similarity index 99% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntityMultiAsyncTasks.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityMultiAsyncTasks.java index 7706695..39fe46c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EntityMultiAsyncTasks.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/EntityMultiAsyncTasks.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.core.bll; +package org.ovirt.engine.core.tasks; import java.util.List; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SPMAsyncTask.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTask.java similarity index 99% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SPMAsyncTask.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTask.java index 75ee506..e1980e4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SPMAsyncTask.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTask.java @@ -1,5 +1,6 @@ -package org.ovirt.engine.core.bll; +package org.ovirt.engine.core.tasks; +import org.ovirt.engine.core.bll.Backend; import static org.ovirt.engine.core.common.config.ConfigValues.UknownTaskPrePollingLapse; import org.ovirt.engine.core.bll.job.ExecutionHandler; @@ -152,7 +153,7 @@ return idlePeriodPassed; } - protected void ConcreteStartPollingTask() { + public void ConcreteStartPollingTask() { setState(AsyncTaskState.Polling); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/SPMAsyncTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTaskHandler.java similarity index 95% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/SPMAsyncTaskHandler.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTaskHandler.java index 2140daa..24bef5e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/SPMAsyncTaskHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/SPMAsyncTaskHandler.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.core.bll.tasks; +package org.ovirt.engine.core.tasks; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TaskHandlerCommand.java similarity index 95% rename from backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java rename to backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TaskHandlerCommand.java index 98974e9..4e2e475 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskHandlerCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TaskHandlerCommand.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.core.bll.tasks; +package org.ovirt.engine.core.tasks; import org.ovirt.engine.core.bll.job.ExecutionContext; import org.ovirt.engine.core.common.VdcObjectType; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TasksUtil.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TasksUtil.java new file mode 100644 index 0000000..d5ef1bd --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/tasks/TasksUtil.java @@ -0,0 +1,170 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.ovirt.engine.core.tasks; + +import java.util.ArrayList; +import javax.transaction.Transaction; +import org.ovirt.engine.core.bll.CommandBase; +import org.ovirt.engine.core.bll.job.ExecutionHandler; +import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +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.AsyncTaskResultEnum; +import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus; +import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; +import org.ovirt.engine.core.common.businessentities.AsyncTasks; +import org.ovirt.engine.core.common.job.ExternalSystemType; +import org.ovirt.engine.core.common.job.Step; +import org.ovirt.engine.core.common.job.StepEnum; +import org.ovirt.engine.core.common.vdscommands.SPMTaskGuidBaseVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +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; +import org.ovirt.engine.core.utils.transaction.TransactionSupport; + +/** + * + * @author rnori + */ +public class TasksUtil { + public static final TasksUtil instance = new TasksUtil(); + public static final Log log = LogFactory.getLog(instance.getClass()); + /** + * Use this method in order to create task in the AsyncTaskManager in a safe way. If you use this method within a + * certain command, make sure that the command implemented the ConcreteCreateTask method. + * + * @param asyncTaskCreationInfo + * info to send to AsyncTaskManager when creating the task. + * @param parentCommand + * VdcActionType of the command that its EndAction we want to invoke when tasks are finished. + * @param description + * A message which describes the task + * @param entityType + * type of entities that are associated with the task + * @param entityIds + * Ids of entities to be associated with task + * @return Guid of the created task. + */ + public static Guid createTask( + CommandBase command, + AsyncTaskCreationInfo asyncTaskCreationInfo, + VdcActionType parentCommand, + String description, VdcObjectType entityType, Guid... entityIds) { + Guid retValue = Guid.Empty; + + Transaction transaction = TransactionSupport.suspend(); + + try { + Step taskStep = + ExecutionHandler.addTaskStep(command.getExecutionContext(), + StepEnum.getStepNameByTaskType(asyncTaskCreationInfo.getTaskType()), + description); + if (taskStep != null) { + asyncTaskCreationInfo.setStepId(taskStep.getId()); + } + SPMAsyncTask task = concreteCreateTask(command, asyncTaskCreationInfo, parentCommand); + retValue = task.getTaskID(); + task.setEntityType(entityType); + task.setAssociatedEntities(entityIds); + AsyncTaskUtils.addOrUpdateTaskInDB(task); + getAsyncTaskManager().lockAndAddTaskToManager(task); + retValue = task.getTaskID(); + ExecutionHandler.updateStepExternalId(taskStep, retValue, ExternalSystemType.VDSM); + } catch (RuntimeException ex) { + log.errorFormat("Error during CreateTask for command: {0}. Exception {1}", instance.getClass().getName(), ex); + } finally { + TransactionSupport.resume(transaction); + } + + return retValue; + } + + /** + * Create the {@link SPMAsyncTask} object to be run + * @param asyncTaskCreationInfo Info on how to create the task + * @param parentCommand The type of command issuing the task + * @return An {@link SPMAsyncTask} object representing the task to be run + */ + public static SPMAsyncTask concreteCreateTask(CommandBase command, + AsyncTaskCreationInfo asyncTaskCreationInfo, + VdcActionType parentCommand) { + + VdcActionParametersBase parentParameters = command.getParametersForTask(parentCommand, command.getParameters()); + if (parentParameters.getParametersCurrentUser() == null && command.getCurrentUser() != null) { + parentParameters.setParametersCurrentUser(command.getCurrentUser()); + } + AsyncTaskParameters p = + new AsyncTaskParameters(asyncTaskCreationInfo, new AsyncTasks(parentCommand, + AsyncTaskResultEnum.success, + AsyncTaskStatusEnum.running, + asyncTaskCreationInfo.getTaskID(), + parentParameters, + command.getParameters(), + asyncTaskCreationInfo.getStepId(), + command.getCommandId(),asyncTaskCreationInfo.getStoragePoolID(), + asyncTaskCreationInfo.getTaskType())); + p.setEntityId(command.getParameters().getEntityId()); + return AsyncTaskManager.getInstance().CreateTask(internalGetTaskType(command), p); + } + + public static void cancelTasks(final CommandBase command) { + if (command.hasTasks()) { + ThreadPoolUtil.execute(new Runnable() { + @Override + public void run() { + log.infoFormat("Rollback for command: {0}.", command.getClass().getName()); + try { + getAsyncTaskManager().CancelTasks(command.getReturnValue().getTaskIdList()); + } catch (Exception e) { + log.errorFormat("Failed to cancel tasks for command: {0}.", + command.getClass().getName()); + } + } + }); + } + } + + public static void revertTasks(CommandBase command) { + if (command.getParameters().getTaskIds() != null) { + // list to send to the PollTasks method + ArrayList<Guid> taskIdAsList = new ArrayList<Guid>(); + + for (Guid taskId : command.getParameters().getTaskIds()) { + taskIdAsList.add(taskId); + ArrayList<AsyncTaskStatus> tasksStatuses = getAsyncTaskManager().PollTasks( + taskIdAsList); + // call revert task only if ended successfully + if (tasksStatuses.get(0).getTaskEndedSuccessfully()) { + SPMTaskGuidBaseVDSCommandParameters tempVar = new SPMTaskGuidBaseVDSCommandParameters( + command.getStoragePool().getId(), taskId); + tempVar.setCompatibilityVersion(command.getStoragePool().getcompatibility_version().toString()); + command.getBackend().getResourceManager().RunVdsCommand(VDSCommandType.SPMRevertTask, tempVar); + } + taskIdAsList.clear(); + } + } + } + + + /** @return The type of task that should be created for this command. Commands that do not create async tasks should throw a {@link UnsupportedOperationException} */ + public static AsyncTaskType internalGetTaskType(CommandBase command) { + if (command.hasTaskHandlers()) { + if (command.getParameters().getExecutionReason() == VdcActionParametersBase.CommandExecutionReason.REGULAR_FLOW) { + return command.getCurrentTaskHandler().getTaskType(); + } + return command.getCurrentTaskHandler().getRevertTaskType(); + } + return command.getTaskType(); + } + + public static AsyncTaskManager getAsyncTaskManager() { + return AsyncTaskManager.getInstance(); + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java index 6a059b0..53b14b5 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java @@ -1,5 +1,8 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.tasks.AsyncTaskState; +import org.ovirt.engine.core.tasks.EntityAsyncTask; +import org.ovirt.engine.core.tasks.SPMAsyncTask; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java index 88b4128..f1ad4c5 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CommandBaseTest.java @@ -22,7 +22,7 @@ import org.junit.ClassRule; import org.junit.Test; import org.ovirt.engine.core.bll.session.SessionDataContainer; -import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.tasks.SPMAsyncTaskHandler; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.config.ConfigValues; -- To view, visit http://gerrit.ovirt.org/12693 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7d2770f355274159c30def80c7c263bb590a64f7 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