Ravi Nori has uploaded a new change for review.

Change subject: engine : Introduction of CallBack interface
......................................................................

engine : Introduction of CallBack interface

CallBack interface with endAction method has been
introduced. This reduces the depency of AsyncTaskManager
on bll.

Change-Id: I0df6ec6d605ee667bdbc76b7a4e27bda6a7ba6e9
Signed-off-by: Ravi Nori <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/job/ExecutionHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskFactory.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java
R 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/EntityAsyncTask.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/SPMAsyncTask.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/TaskManagerUtil.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CallBack.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCoordinator.java
10 files changed, 107 insertions(+), 37 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/13821/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
index 83322dc..8e15288 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
@@ -36,6 +36,12 @@
     private static ConcurrentMap<String, Class<CommandBase<? extends 
VdcActionParametersBase>>> commandsCache =
             new ConcurrentHashMap<String, Class<CommandBase<? extends 
VdcActionParametersBase>>>(VdcActionType.values().length);
 
+    private static CommandsFactory instance = new CommandsFactory();
+
+    public static CommandsFactory getInstance() {
+        return instance;
+    }
+
     @SuppressWarnings("unchecked")
     public static <P extends VdcActionParametersBase> CommandBase<P> 
CreateCommand(VdcActionType action, P parameters) {
         try {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/job/ExecutionHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/job/ExecutionHandler.java
index 26847d5..9fdfcea 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/job/ExecutionHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/job/ExecutionHandler.java
@@ -50,6 +50,12 @@
 
     private static final List<Class<?>> validationGroups = Arrays.asList(new 
Class<?>[] { PreRun.class });
 
+    private static final ExecutionHandler instance = new ExecutionHandler();
+
+    public static ExecutionHandler getInstance() {
+        return instance;
+    }
+
     /**
      * Creates and returns an instance of {@link Job} entity.
      *
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskFactory.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskFactory.java
index b65e160..27247d3 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskFactory.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskFactory.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.bll.tasks;
 
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
@@ -27,7 +28,7 @@
      *            the info by which we construct the task.
      * @return
      */
-    public static SPMAsyncTask Construct(AsyncTaskCreationInfo creationInfo) {
+    public static SPMAsyncTask Construct(CommandCoordinator coco, 
AsyncTaskCreationInfo creationInfo) {
         AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().get(creationInfo.getTaskID());
         if (asyncTask == null || asyncTask.getActionParameters() == null) {
             asyncTask =
@@ -44,7 +45,7 @@
             creationInfo.setTaskType(AsyncTaskType.unknown);
         }
         AsyncTaskParameters asyncTaskParams = new 
AsyncTaskParameters(creationInfo, asyncTask);
-        return Construct(creationInfo.getTaskType(), asyncTaskParams, true);
+        return Construct(coco, creationInfo.getTaskType(), asyncTaskParams, 
true);
     }
 
     /**
@@ -60,13 +61,13 @@
      *            the parameters by which we construct the task.
      * @return
      */
-    public static SPMAsyncTask Construct(AsyncTaskType taskType, 
AsyncTaskParameters asyncTaskParams, boolean duringInit) {
+    public static SPMAsyncTask Construct(CommandCoordinator coco, 
AsyncTaskType taskType, AsyncTaskParameters asyncTaskParams, boolean 
duringInit) {
         try {
             SPMAsyncTask result = null;
             if (taskType == AsyncTaskType.unknown) {
-                result = new SPMAsyncTask(asyncTaskParams);
+                result = new SPMAsyncTask(coco, asyncTaskParams);
             } else {
-                result = new EntityAsyncTask(asyncTaskParams, duringInit);
+                result = new EntityAsyncTask(coco, asyncTaskParams, 
duringInit);
             }
             return result;
         }
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 f8d9bb9..6c99afa 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
@@ -12,6 +12,7 @@
 
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.bll.Backend;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
@@ -60,17 +61,23 @@
 
     /**Map of tasks in DB per storage pool that exist after restart **/
     private ConcurrentMap<Guid, List<AsyncTasks>> tasksInDbAfterRestart = null;
+    private static AsyncTaskManager taskManager;
+    private static final Object LOCK = new Object();
+    private CommandCoordinator coco;
 
-
-
-    private static final AsyncTaskManager _taskManager = new 
AsyncTaskManager();
-
-    public static AsyncTaskManager getInstance() {
-        return _taskManager;
+    public static AsyncTaskManager getInstance(CommandCoordinator coco) {
+        if (taskManager == null) {
+            synchronized(LOCK) {
+                if (taskManager == null) {
+                    taskManager = new AsyncTaskManager(coco);
+                }
+            }
+        }
+        return taskManager;
     }
 
-
-    private AsyncTaskManager() {
+    private AsyncTaskManager(CommandCoordinator coco) {
+        this.coco = coco;
         _tasks = new ConcurrentHashMap<Guid, SPMAsyncTask>();
 
         SchedulerUtil scheduler = SchedulerUtilQuartzImpl.getInstance();
@@ -437,7 +444,7 @@
     }
 
     public SPMAsyncTask CreateTask(AsyncTaskType taskType, AsyncTaskParameters 
taskParameters) {
-        return AsyncTaskFactory.Construct(taskType, taskParameters, false);
+        return AsyncTaskFactory.Construct(coco, taskType, taskParameters, 
false);
     }
 
     public synchronized void StartPollingTask(Guid taskID) {
@@ -505,7 +512,7 @@
                     creationInfo.setStoragePoolID(sp.getId());
                     if (!_tasks.containsKey(creationInfo.getTaskID())) {
                         try {
-                            SPMAsyncTask task = 
AsyncTaskFactory.Construct(creationInfo);
+                            SPMAsyncTask task = 
AsyncTaskFactory.Construct(coco, creationInfo);
                             addTaskToManager(task);
                             newlyAddedTasks.add(task);
                         } catch (Exception e) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java
similarity index 81%
rename from 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinator.java
rename to 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java
index f96dcf5..973ae01 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorImpl.java
@@ -1,14 +1,22 @@
 package org.ovirt.engine.core.bll.tasks;
 
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 import javax.transaction.Transaction;
 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.interfaces.BackendInternal;
+import org.ovirt.engine.core.bll.job.ExecutionContext;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
+import org.ovirt.engine.core.bll.tasks.interfaces.CallBack;
 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.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskParameters;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskResultEnum;
@@ -21,21 +29,24 @@
 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.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;
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
-public class CommandCoordinator {
+public class CommandCoordinatorImpl implements CallBack, CommandCoordinator {
 
-    private static final CommandCoordinator instance = new 
CommandCoordinator();
-    private static final Log log = LogFactory.getLog(CommandCoordinator.class);
+    private static final CommandCoordinatorImpl instance = new 
CommandCoordinatorImpl();
+    private static final Log log = 
LogFactory.getLog(CommandCoordinatorImpl.class);
 
-    public static CommandCoordinator getInstance() {
+    public static CommandCoordinatorImpl getInstance() {
         return instance;
     }
 
-    private CommandCoordinator() {
+    Map<NGuid, ExecutionContext> executionContextMap;
+    private CommandCoordinatorImpl() {
+        executionContextMap = new HashMap<>();
     }
 
     /**
@@ -112,7 +123,7 @@
                         
command.getCommandId(),asyncTaskCreationInfo.getStoragePoolID(),
                         asyncTaskCreationInfo.getTaskType()));
         p.setEntityId(command.getParameters().getEntityId());
-        return 
AsyncTaskManager.getInstance().CreateTask(command.internalGetTaskType(), p);
+        return getAsyncTaskManager().CreateTask(command.internalGetTaskType(), 
p);
     }
 
     public void cancelTasks(final CommandBase command) {
@@ -153,11 +164,23 @@
         }
     }
 
-    private static AsyncTaskManager getAsyncTaskManager() {
-        return AsyncTaskManager.getInstance();
+    @Override
+    public VdcReturnValueBase endAction(
+            NGuid stepId,
+            VdcActionType actionType,
+            AsyncTasks dbAsyncTask,
+            ExecutionContext context) {
+        VdcActionParametersBase parameters = dbAsyncTask.getActionParameters();
+        CommandBase<?> command = 
CommandsFactory.getInstance().CreateCommand(actionType, parameters);
+        command.setContext(new CommandContext(context));
+        return command.endAction();
     }
 
-    protected BackendInternal getBackend() {
+    private AsyncTaskManager getAsyncTaskManager() {
+        return AsyncTaskManager.getInstance(this);
+    }
+
+    private BackendInternal getBackend() {
         return Backend.getInstance();
     }
 
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 2779fdb..c69ccd0 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
@@ -4,13 +4,12 @@
 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;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
+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;
@@ -52,8 +51,8 @@
         return GetEntityMultiAsyncTasksByContainerId(getContainerId());
     }
 
-    public EntityAsyncTask(AsyncTaskParameters parameters, boolean duringInit) 
{
-        super(parameters);
+    public EntityAsyncTask(CommandCoordinator coco, AsyncTaskParameters 
parameters, boolean duringInit) {
+        super(coco, parameters);
         boolean isNewCommandAdded = false;
         synchronized (_lockObject) {
             if (!_multiTasksByEntities.containsKey(getContainerId())) {
@@ -159,9 +158,11 @@
                 }
 
                 vdcReturnValue =
-                        
Backend.getInstance().endAction(entityInfo.getActionType(),
-                                dbAsyncTask.getActionParameters(),
-                                new CommandContext(context));
+                        coco.endAction(
+                                stepId,
+                                entityInfo.getActionType(),
+                                dbAsyncTask,
+                                context);
             } catch (VdcBLLException 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/SPMAsyncTask.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/SPMAsyncTask.java
index c3e1e16..292bf37 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/SPMAsyncTask.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/SPMAsyncTask.java
@@ -4,6 +4,7 @@
 import static 
org.ovirt.engine.core.common.config.ConfigValues.UknownTaskPrePollingLapse;
 
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCoordinator;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskParameters;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus;
@@ -20,7 +21,9 @@
 import org.ovirt.engine.core.utils.log.LogFactory;
 
 public class SPMAsyncTask {
-    public SPMAsyncTask(AsyncTaskParameters parameters) {
+    CommandCoordinator coco;
+    public SPMAsyncTask(CommandCoordinator coco, AsyncTaskParameters 
parameters) {
+        this.coco = coco;
         setParameters(parameters);
         setState(AsyncTaskState.Initializing);
     }
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 1c4dc55..f0865ae 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
@@ -48,7 +48,7 @@
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand,
             String description, VdcObjectType entityType, Guid... entityIds) {
-        return CommandCoordinator.getInstance().createTask(command,
+        return CommandCoordinatorImpl.getInstance().createTask(command,
                 asyncTaskCreationInfo,
                 parentCommand,
                 description,
@@ -60,21 +60,21 @@
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
-        return CommandCoordinator.getInstance().concreteCreateTask(command,
+        return CommandCoordinatorImpl.getInstance().concreteCreateTask(command,
                 asyncTaskCreationInfo,
                 parentCommand);
     }
 
     public static void cancelTasks(final CommandBase command) {
-        CommandCoordinator.getInstance().cancelTasks(command);
+        CommandCoordinatorImpl.getInstance().cancelTasks(command);
     }
 
     public static void revertTasks(final CommandBase command) {
-        CommandCoordinator.getInstance().revertTasks(command);
+        CommandCoordinatorImpl.getInstance().revertTasks(command);
     }
 
     private static AsyncTaskManager getAsyncTaskManager() {
-        return AsyncTaskManager.getInstance();
+        return 
AsyncTaskManager.getInstance(CommandCoordinatorImpl.getInstance());
     }
 
 }
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
new file mode 100644
index 0000000..57f972f
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CallBack.java
@@ -0,0 +1,11 @@
+package org.ovirt.engine.core.bll.tasks.interfaces;
+
+import org.ovirt.engine.core.bll.job.ExecutionContext;
+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, VdcActionType 
actionType, AsyncTasks dbAsyncTask, ExecutionContext context);
+}
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
new file mode 100644
index 0000000..11df2aa
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/CommandCoordinator.java
@@ -0,0 +1,12 @@
+package org.ovirt.engine.core.bll.tasks.interfaces;
+
+import org.ovirt.engine.core.bll.job.ExecutionContext;
+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 CommandCoordinator {
+    VdcReturnValueBase endAction(NGuid stepId, VdcActionType actionType, 
AsyncTasks dbAsyncTask, ExecutionContext context);
+}


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0df6ec6d605ee667bdbc76b7a4e27bda6a7ba6e9
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

Reply via email to