Ravi Nori has uploaded a new change for review.

Change subject: engine : Modify Async_tasks table to use CommandEntity
......................................................................

engine : Modify Async_tasks table to use CommandEntity

Drop columns from async_tasks table that hold the
information about the command. AsyncTasks class
has been modified to use CommandEntity to store
the command information. When async_task is persisted,
updated/deleted the corresponding CommandEntity is also
persisted, updated/deleted

Change-Id: Ied038b514f1285b4d46deff022beafd9dcfe5c29
Bug-Url: https://bugzilla.redhat.com/1083769
Signed-off-by: Ravi Nori <rn...@redhat.com>
---
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/tasks/AsyncTaskFactory.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskUtils.java
M 
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/SPMAsyncTask.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/CommandCoordinator.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTasks.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Compat.gwt.xml
M packaging/dbscripts/async_tasks_sp.sql
M packaging/dbscripts/command_entities_sp.sql
M packaging/dbscripts/upgrade/03_05_0160_add_command_entity_table.sql
A packaging/dbscripts/upgrade/03_05_0170_remove_command_from_async_tasks.sql
19 files changed, 223 insertions(+), 79 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/26687/1

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 b16ee19..54c4ad3 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
@@ -364,7 +364,7 @@
                 @Override
                 public Void runInTransaction() {
                     for (Guid asyncTaskId : 
getReturnValue().getTaskPlaceHolderIdList()) {
-                        AsyncTasks task = getAsyncTaskDao().get(asyncTaskId);
+                        AsyncTasks task = 
TaskManagerUtil.getAsyncTaskFromDb(asyncTaskId);
                         if (task != null && 
Guid.isNullOrEmpty(task.getVdsmTaskId())) {
                             
TaskManagerUtil.removeTaskFromDbByTaskId(task.getTaskId());
                         }
@@ -1399,7 +1399,7 @@
     }
 
     private void saveTaskAndPutInMap(String taskKey, AsyncTasks task) {
-        getAsyncTaskDao().save(task);
+        TaskManagerUtil.saveAsyncTaskToDb(task);
         taskKeyToTaskIdMap.put(taskKey, task.getTaskId());
     }
 
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 84d49fa..80bc1de 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
@@ -9,8 +9,8 @@
 import org.ovirt.engine.core.common.businessentities.AsyncTaskResultEnum;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum;
 import org.ovirt.engine.core.common.businessentities.AsyncTasks;
+import org.ovirt.engine.core.compat.CommandStatus;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -29,8 +29,10 @@
      * @return
      */
     public static SPMAsyncTask construct(CommandCoordinator coco, 
AsyncTaskCreationInfo creationInfo) {
-        AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().getByVdsmTaskId(creationInfo.getVdsmTaskId());
+        AsyncTasks asyncTask = 
coco.getByVdsmTaskId(creationInfo.getVdsmTaskId());
         if (asyncTask == null || asyncTask.getActionParameters() == null) {
+            Guid parentCmdId = asyncTask == null ? Guid.Empty : 
asyncTask.getParentCommandId();
+            CommandStatus cmdStatus = asyncTask == null ? 
CommandStatus.UNKNOWN : asyncTask.getCommandStatus();
             asyncTask =
                     new AsyncTasks(VdcActionType.Unknown,
                             AsyncTaskResultEnum.success,
@@ -43,6 +45,8 @@
                             asyncTask == null ? Guid.newGuid() : 
asyncTask.getRootCommandId(),
                             creationInfo.getStoragePoolID(),
                             creationInfo.getTaskType());
+            asyncTask.setParentCommandId(parentCmdId);
+            asyncTask.setCommandStatus(cmdStatus);
             creationInfo.setTaskType(AsyncTaskType.unknown);
         }
         AsyncTaskParameters asyncTaskParams = new 
AsyncTaskParameters(creationInfo, asyncTask);
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 701f887..4b638cd 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
@@ -34,7 +34,6 @@
 import org.ovirt.engine.core.compat.DateTime;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.utils.collections.MultiValueMapUtils;
@@ -104,7 +103,7 @@
 
     public void initAsyncTaskManager() {
         tasksInDbAfterRestart = new ConcurrentHashMap();
-        Map<Guid, List<AsyncTasks>> rootCommandIdToTasksMap = 
groupTasksByRootCommandId(DbFacade.getInstance().getAsyncTaskDao().getAll());
+        Map<Guid, List<AsyncTasks>> rootCommandIdToTasksMap = 
groupTasksByRootCommandId(coco.getAllAsyncTasksFromDb());
         int numberOfCommandsWithEmptyVdsmId = 0;
         for (Entry<Guid, List<AsyncTasks>> entry : 
rootCommandIdToTasksMap.entrySet()) {
             if 
(hasTasksWithoutVdsmId(rootCommandIdToTasksMap.get(entry.getKey()))) {
@@ -315,7 +314,7 @@
     }
 
     public void logAndFailTaskOfCommandWithEmptyVdsmId(Guid asyncTaskId, 
String message) {
-        AsyncTasks task = 
DbFacade.getInstance().getAsyncTaskDao().get(asyncTaskId);
+        AsyncTasks task = coco.getAsyncTaskFromDb(asyncTaskId);
         logAndFailTaskOfCommandWithEmptyVdsmId(task, message);
     }
 
@@ -359,7 +358,7 @@
 
     public static void removeTaskFromDbByTaskId(Guid taskId) {
         try {
-            if (DbFacade.getInstance().getAsyncTaskDao().remove(taskId) != 0) {
+            if (TaskManagerUtil.callRemoveTaskFromDbByTaskId(taskId) != 0) {
                 log.infoFormat("Removed task {0} from DataBase", taskId);
             }
         } catch (RuntimeException e) {
@@ -740,7 +739,7 @@
         if (tasksInDForStoragePool != null) {
             for (AsyncTasks task : tasksInDForStoragePool) {
                 if (!_tasks.containsKey(task.getVdsmTaskId())) {
-                    
DbFacade.getInstance().getAsyncTaskDao().removeByVdsmTaskId(task.getVdsmTaskId());
+                    coco.removeByVdsmTaskId(task.getVdsmTaskId());
                 }
             }
         }
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/bll/tasks/AsyncTaskUtils.java
index bc47a6a..398ad11 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/bll/tasks/AsyncTaskUtils.java
@@ -67,7 +67,7 @@
     }
 
     private static void addOrUpdateTaskInDB(AsyncTasks asyncTask) {
-        getAsyncTaskDao().saveOrUpdate(asyncTask);
+        TaskManagerUtil.addOrUpdateTaskInDB(asyncTask);
     }
 
     private static AsyncTaskDAO getAsyncTaskDao() {
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 1429a12..d994129 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
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.bll.tasks;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import org.ovirt.engine.core.bll.Backend;
 import org.ovirt.engine.core.bll.CommandBase;
@@ -34,10 +35,13 @@
 import org.ovirt.engine.core.compat.CommandStatus;
 import org.ovirt.engine.core.compat.DateTime;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.TransactionScopeOption;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 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.TransactionMethod;
+import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
 public class CommandCoordinatorImpl extends CommandCoordinator {
 
@@ -103,6 +107,15 @@
 
     }
 
+    private void persistCommand(CommandEntity cmdEntity) {
+        this.persistCommand(cmdEntity.getId(),
+                cmdEntity.getParentCommandId(),
+                cmdEntity.getRootCommandId(),
+                cmdEntity.getCommandType(),
+                cmdEntity.getActionParameters(),
+                cmdEntity.getCommandStatus());
+    }
+
     @Override
     public void persistCommand(Guid commandId,
                                Guid parentCommandId,
@@ -148,6 +161,103 @@
         commandsCache.updateCommandStatus(commandId, status);
     }
 
+    public List<AsyncTasks> getAllAsyncTasksFromDb() {
+        List<AsyncTasks> asyncTasks = 
DbFacade.getInstance().getAsyncTaskDao().getAll();
+        for (AsyncTasks asyncTask : asyncTasks) {
+            copyFromCommandEntity(asyncTask, 
commandsCache.get(asyncTask.getCommandId()));
+        }
+        return asyncTasks;
+    }
+
+    private void copyFromCommandEntity(AsyncTasks asyncTask, CommandEntity 
cmdEntity) {
+         if (cmdEntity != null) {
+             asyncTask.setActionParameters(cmdEntity.getActionParameters());
+             asyncTask.setParentCommandId(cmdEntity.getParentCommandId());
+             asyncTask.setRootCommandId(cmdEntity.getRootCommandId());
+             asyncTask.setCommandStatus(cmdEntity.getCommandStatus());
+             asyncTask.setCommandType(cmdEntity.getCommandType());
+             asyncTask.setCreatedAt(cmdEntity.getCreatedAt());
+         }
+    }
+
+    private CommandEntity copyToCommandEntity(AsyncTasks asyncTask, 
CommandEntity entity) {
+        CommandEntity cmdEntity = entity == null ? new CommandEntity() : 
entity;
+        cmdEntity.setId(asyncTask.getCommandId());
+        cmdEntity.setActionParameters(asyncTask.getActionParameters());
+        cmdEntity.setParentCommandId(asyncTask.getParentCommandId());
+        cmdEntity.setRootCommandId(asyncTask.getRootCommandId());
+        cmdEntity.setCommandStatus(asyncTask.getCommandStatus());
+        cmdEntity.setCommandType(asyncTask.getCommandType());
+        cmdEntity.setCreatedAt(asyncTask.getCreatedAt());
+        return cmdEntity;
+    }
+
+    public void saveAsyncTaskToDb(final AsyncTasks asyncTask) {
+        TransactionSupport.executeInScope( TransactionScopeOption.Required, 
new TransactionMethod<Void>() {
+
+            @Override
+            public Void runInTransaction() {
+                DbFacade.getInstance().getAsyncTaskDao().save(asyncTask);
+                persistCommand(copyToCommandEntity(asyncTask, 
commandsCache.get(asyncTask.getCommandId())));
+                return null;
+            }
+        });
+    }
+
+    public AsyncTasks getAsyncTaskFromDb(Guid asyncTaskId) {
+        AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().get(asyncTaskId);
+        copyFromCommandEntity(asyncTask, 
commandsCache.get(asyncTask.getCommandId()));
+        return asyncTask;
+    }
+
+    public int removeTaskFromDbByTaskId(final Guid taskId) throws 
RuntimeException {
+        return TransactionSupport.executeInScope( 
TransactionScopeOption.Required, new TransactionMethod<Integer>() {
+
+            @Override
+            public Integer runInTransaction() {
+                AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().get(taskId);
+                int retVal = 
DbFacade.getInstance().getAsyncTaskDao().remove(taskId);
+                if (!Guid.isNullOrEmpty(asyncTask.getCommandId())) {
+                    commandsCache.remove(asyncTask.getCommandId());
+                }
+                return retVal;
+            }
+        });
+    }
+
+    public AsyncTasks getByVdsmTaskId(Guid vdsmTaskId) {
+        AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().getByVdsmTaskId(vdsmTaskId);
+        copyFromCommandEntity(asyncTask, 
commandsCache.get(asyncTask.getCommandId()));
+        return asyncTask;
+    }
+
+    public int removeByVdsmTaskId(final Guid vdsmTaskId) {
+        return TransactionSupport.executeInScope( 
TransactionScopeOption.Required, new TransactionMethod<Integer>() {
+
+            @Override
+            public Integer runInTransaction() {
+                AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().getByVdsmTaskId(vdsmTaskId);
+                int retVal =  
DbFacade.getInstance().getAsyncTaskDao().removeByVdsmTaskId(vdsmTaskId);
+                if (!Guid.isNullOrEmpty(asyncTask.getCommandId())) {
+                    commandsCache.remove(asyncTask.getCommandId());
+                }
+                return retVal;
+            }
+        });
+    }
+
+    public void addOrUpdateTaskInDB(final AsyncTasks asyncTask) {
+        TransactionSupport.executeInScope( TransactionScopeOption.Required, 
new TransactionMethod<Void>() {
+
+            @Override
+            public Void runInTransaction() {
+                
DbFacade.getInstance().getAsyncTaskDao().saveOrUpdate(asyncTask);
+                persistCommand(copyToCommandEntity(asyncTask, 
commandsCache.get(asyncTask.getCommandId())));
+                return null;
+            }
+        });
+    }
+
     /**
      * Create the {@link SPMAsyncTask} object to be run
      * @param taskId the id of the async task place holder in the database
@@ -178,7 +288,7 @@
             VdcActionType parentCommand) {
         AsyncTasks asyncTask = null;
         if (!taskId.equals(Guid.Empty)) {
-            asyncTask = DbFacade.getInstance().getAsyncTaskDao().get(taskId);
+            asyncTask = getAsyncTaskFromDb(taskId);
         }
         if (asyncTask != null) {
             VdcActionParametersBase parentParameters = 
command.getParentParameters(parentCommand);
@@ -191,6 +301,9 @@
             asyncTask.setRootCommandId(parentParameters.getCommandId());
             
asyncTask.setStoragePoolId(asyncTaskCreationInfo.getStoragePoolID());
             asyncTask.setTaskType(asyncTaskCreationInfo.getTaskType());
+            
asyncTask.setParentCommandId(command.getParameters().getParentParameters() == 
null ? Guid.Empty : 
command.getParameters().getParentParameters().getCommandId());
+            asyncTask.setCommandStatus(command.getCommandStatus());
+            asyncTask.setCommandType(this.getEndActionType(asyncTask));
         } else {
             asyncTask = createAsyncTask(command, asyncTaskCreationInfo, 
parentCommand);
         }
@@ -202,7 +315,7 @@
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
         VdcActionParametersBase parentParameters = 
command.getParentParameters(parentCommand);
-        return new AsyncTasks(parentCommand,
+        AsyncTasks asyncTask = new AsyncTasks(parentCommand,
                 AsyncTaskResultEnum.success,
                 AsyncTaskStatusEnum.running,
                 asyncTaskCreationInfo.getVdsmTaskId(),
@@ -213,6 +326,10 @@
                 parentParameters.getCommandId(),
                 asyncTaskCreationInfo.getStoragePoolID(),
                 asyncTaskCreationInfo.getTaskType());
+        
asyncTask.setParentCommandId(command.getParameters().getParentParameters() == 
null ? Guid.Empty : 
command.getParameters().getParentParameters().getCommandId());
+        asyncTask.setCommandStatus(command.getCommandStatus());
+        asyncTask.setCommandType(this.getEndActionType(asyncTask));
+        return asyncTask;
     }
 
     /**
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 5464890..256cf04 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
@@ -16,7 +16,6 @@
 import org.ovirt.engine.core.common.job.JobExecutionStatus;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -244,7 +243,7 @@
 
     protected void RemoveTaskFromDB() {
         try {
-            if 
(DbFacade.getInstance().getAsyncTaskDao().removeByVdsmTaskId(getVdsmTaskId()) 
!= 0) {
+            if (coco.removeByVdsmTaskId(getVdsmTaskId()) != 0) {
                 log.infoFormat("BaseAsyncTask::RemoveTaskFromDB: Removed task 
{0} from DataBase", getVdsmTaskId());
             }
         }
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 fd7ee4f..71275fe 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
@@ -109,6 +109,22 @@
         AsyncTaskManager.removeTaskFromDbByTaskId(taskId);
     }
 
+    public static AsyncTasks getAsyncTaskFromDb(Guid asyncTaskId) {
+         return coco.getAsyncTaskFromDb(asyncTaskId);
+    }
+
+    public static void saveAsyncTaskToDb(AsyncTasks asyncTask) {
+        coco.saveAsyncTaskToDb(asyncTask);
+    }
+
+    public static int callRemoveTaskFromDbByTaskId(Guid taskId) {
+        return coco.removeTaskFromDbByTaskId(taskId);
+    }
+
+    public static void addOrUpdateTaskInDB(AsyncTasks asyncTask) {
+        coco.addOrUpdateTaskInDB(asyncTask);
+    }
+
     public CommandBase<?> retrieveCommand(Guid commandId) {
         return coco.retrieveCommand(commandId);
     }
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 01d376f4..d6d3337 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
@@ -3,9 +3,12 @@
 import org.ovirt.engine.core.bll.CommandBase;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.AsyncTasks;
 import org.ovirt.engine.core.compat.CommandStatus;
 import org.ovirt.engine.core.compat.DateTime;
 import org.ovirt.engine.core.compat.Guid;
+
+import java.util.List;
 
 public abstract class CommandCoordinator implements CallBack, TaskHelper, 
Poller {
 
@@ -14,5 +17,12 @@
     public abstract void removeCommand(Guid commandId);
     public abstract void removeAllCommandsBeforeDate(DateTime cutoff);
     public abstract void updateCommandStatus(Guid commandId, CommandStatus 
status);
+    public abstract List<AsyncTasks> getAllAsyncTasksFromDb();
+    public abstract void saveAsyncTaskToDb(AsyncTasks asyncTask);
+    public abstract AsyncTasks getAsyncTaskFromDb(Guid asyncTaskId);
+    public abstract int removeTaskFromDbByTaskId(Guid taskId) throws 
RuntimeException;
+    public abstract AsyncTasks getByVdsmTaskId(Guid vdsmTaskId);
+    public abstract int removeByVdsmTaskId(Guid vdsmTaskId);
+    public abstract void addOrUpdateTaskInDB(AsyncTasks asyncTask);
 
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTasks.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTasks.java
index 87c67e2..3db94ad 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTasks.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTasks.java
@@ -7,10 +7,12 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
 import org.ovirt.engine.core.common.utils.ObjectUtils;
+import org.ovirt.engine.core.compat.CommandStatus;
 import org.ovirt.engine.core.compat.Guid;
 
 public class AsyncTasks implements Serializable {
     private static final long serialVersionUID = 5913365704117183118L;
+    private CommandEntity cmdEntity;
 
     public AsyncTasks() {
         actionType = VdcActionType.Unknown;
@@ -18,7 +20,10 @@
         status = AsyncTaskStatusEnum.unknown;
         vdsmTaskId = Guid.Empty;
         commandId = Guid.Empty;
-        rootCommandId = Guid.Empty;
+        cmdEntity = new CommandEntity();
+        cmdEntity.setId(commandId);
+        cmdEntity.setRootCommandId(Guid.Empty);
+        cmdEntity.setCommandType(VdcActionType.Unknown);
     }
 
     public AsyncTasks(VdcActionType action_type, AsyncTaskResultEnum result, 
AsyncTaskStatusEnum status, Guid vdsmTaskId,
@@ -33,21 +38,23 @@
         this.result = result;
         this.status = status;
         this.vdsmTaskId = vdsmTaskId;
-        this.actionParameters = parentParameters;
         this.taskParameters = taskParameters;
         this.stepId = stepId;
         this.startTime = new Date();
         this.commandId = commandId;
-        this.rootCommandId = rootCommandId;
         this.storagePoolId = storagePoolId;
         this.taskId = Guid.newGuid();
         this.taskType = taskType;
+        cmdEntity = new CommandEntity();
+        cmdEntity.setId(commandId);
+        cmdEntity.setRootCommandId(rootCommandId);
+        cmdEntity.setActionParameters(parentParameters);
     }
 
     private VdcActionType actionType;
 
     public VdcActionType getaction_type() {
-        return this.actionType;
+        return actionType;
     }
 
     public void setaction_type(VdcActionType value) {
@@ -106,14 +113,12 @@
         this.taskId = value;
     }
 
-    private VdcActionParametersBase actionParameters;
-
     public VdcActionParametersBase getActionParameters() {
-        return this.actionParameters;
+        return cmdEntity.getActionParameters();
     }
 
     public void setActionParameters(VdcActionParametersBase value) {
-        this.actionParameters = value;
+        cmdEntity.setActionParameters(value);
     }
 
     private VdcActionParametersBase taskParameters;
@@ -138,12 +143,44 @@
 
     private Guid commandId;
 
+    public Guid getParentCommandId() {
+        return cmdEntity.getParentCommandId();
+    }
+
+    public void setParentCommandId(Guid parentCommandId) {
+        cmdEntity.setParentCommandId(parentCommandId);
+    }
+
+    public CommandStatus getCommandStatus() {
+        return cmdEntity.getCommandStatus();
+    }
+
+    public void setCommandStatus(CommandStatus status) {
+        cmdEntity.setCommandStatus(status);
+    }
+
+    public void setCommandType(VdcActionType cmdType) {
+        cmdEntity.setCommandType(cmdType);
+    }
+
+    public VdcActionType getCommandType() {
+        return cmdEntity.getCommandType();
+    }
+
+    public void setCreatedAt(Date createdAt) {
+        cmdEntity.setCreatedAt(createdAt);
+    }
+
+    public Date getCreatedAt() {
+        return cmdEntity.getCreatedAt();
+    }
+
     public Guid getRootCommandId() {
-        return rootCommandId;
+        return cmdEntity.getRootCommandId();
     }
 
     public void setRootCommandId(Guid rootCommandId) {
-        this.rootCommandId = rootCommandId;
+        cmdEntity.setRootCommandId(rootCommandId);
     }
 
     public Guid getCommandId() {
@@ -152,9 +189,8 @@
 
     public void setCommandId(Guid commandId) {
         this.commandId = commandId;
+        this.cmdEntity.setId(commandId);
     }
-
-    private Guid rootCommandId;
 
     public Guid getStoragePoolId() {
         return storagePoolId;
@@ -183,7 +219,6 @@
         results = prime * results + ((vdsmTaskId == null) ? 0 : 
vdsmTaskId.hashCode());
         results = prime * results + ((stepId == null) ? 0 : stepId.hashCode());
         results = prime * results + ((commandId == null) ? 0 : 
commandId.hashCode());
-        results = prime * results + ((rootCommandId == null) ? 0 : 
rootCommandId.hashCode());
         results = prime * results + ((actionType == null) ? 0 : 
actionType.hashCode());
         results = prime * results + ((result == null) ? 0 : result.hashCode());
         results = prime * results + ((status == null) ? 0 : status.hashCode());
@@ -209,7 +244,6 @@
                 && ObjectUtils.objectsEqual(taskId, other.taskId)
                 && ObjectUtils.objectsEqual(stepId, other.stepId)
                 && ObjectUtils.objectsEqual(commandId, other.commandId)
-                && ObjectUtils.objectsEqual(rootCommandId, other.rootCommandId)
                 && actionType == other.actionType
                 && result == other.result
                 && status == other.status
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
index 8082147..dcd7256 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java
@@ -1,9 +1,6 @@
 package org.ovirt.engine.core.common.businessentities;
 
-import java.util.Collections;
 import java.util.Date;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -49,16 +46,6 @@
     private VdcActionParametersBase actionParameters;
     private Date createdAt;
     private CommandStatus commandStatus = CommandStatus.UNKNOWN;
-
-    public Set<Guid> getChildCommandIds() {
-        return childCommandIds;
-    }
-
-    public void setChildCommandIds(Set<Guid> childCommandIds) {
-        this.childCommandIds = childCommandIds;
-    }
-
-    private Set<Guid> childCommandIds = Collections.newSetFromMap(new 
ConcurrentHashMap<Guid, Boolean>());
 
     public Date getCreatedAt() {
         return createdAt;
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAODbFacadeImpl.java
index 47ffddf..b2e64d2 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAODbFacadeImpl.java
@@ -68,11 +68,9 @@
             
entity.setstatus(AsyncTaskStatusEnum.forValue(rs.getInt("status")));
             entity.setTaskId(getGuidDefaultEmpty(rs, "task_id"));
             entity.setVdsmTaskId(getGuid(rs, "vdsm_task_id"));
-            
entity.setActionParameters(deserializeParameters(rs.getString("action_parameters"),
 rs.getString("action_params_class")));
             
entity.setTaskParameters(deserializeParameters(rs.getString("task_parameters"), 
rs.getString("task_params_class")));
             entity.setStepId(getGuid(rs, "step_id"));
             entity.setCommandId(getGuidDefaultEmpty(rs, "command_id"));
-            entity.setRootCommandId(getGuidDefaultEmpty(rs, 
"root_command_id"));
             
entity.setStartTime(DbFacadeUtils.fromDate(rs.getTimestamp("started_at")));
             entity.setTaskType(AsyncTaskType.forValue(rs.getInt("task_type")));
             entity.setStoragePoolId(getGuidDefaultEmpty(rs, 
"storage_pool_id"));
@@ -99,13 +97,10 @@
             addValue("status", task.getstatus());
             addValue("vdsm_task_id", task.getVdsmTaskId());
             addValue("task_id", task.getTaskId());
-            addValue("action_parameters", 
serializeParameters(task.getActionParameters()));
-            addValue("action_params_class", 
task.getActionParameters().getClass().getName());
             addValue("task_parameters", 
serializeParameters(task.getTaskParameters()));
             addValue("task_params_class", 
task.getTaskParameters().getClass().getName());
             addValue("step_id", task.getStepId());
             addValue("command_id", task.getCommandId());
-            addValue("root_command_id", task.getRootCommandId());
         }
 
         private static String serializeParameters(VdcActionParametersBase 
params) {
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
index 602b334..1f5a341 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java
@@ -50,10 +50,10 @@
 
     @Override
     protected MapSqlParameterSource createFullParametersMapper(CommandEntity 
entity) {
-        return getCustomMapSqlParameterSource().addValue("command_id", 
entity.getId())
+        return getCustomMapSqlParameterSource().addValue("command_id", 
Guid.isNullOrEmpty(entity.getId()) ? Guid.Empty : entity.getId())
                 .addValue("command_type", entity.getCommandType().getValue())
-                .addValue("parent_command_id", entity.getParentCommandId())
-                .addValue("root_command_id", entity.getRootCommandId())
+                .addValue("parent_command_id", 
Guid.isNullOrEmpty(entity.getParentCommandId()) ? null : 
entity.getParentCommandId())
+                .addValue("root_command_id", 
Guid.isNullOrEmpty(entity.getRootCommandId()) ? null : 
entity.getRootCommandId())
                 .addValue("action_parameters", 
serializeParameters(entity.getActionParameters()))
                 .addValue("action_parameters_class", 
entity.getActionParameters() == null ? null : 
entity.getActionParameters().getClass().getName())
                 .addValue("created_at", entity.getCreatedAt())
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 6bf306b..7c05aaf 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -88,9 +88,7 @@
         <column>action_type</column>
         <column>status</column>
         <column>result</column>
-        <column>action_parameters</column>
         <column>command_id</column>
-        <column>root_command_id</column>
         <column>started_at</column>
         <column>storage_pool_id</column>
         <column>task_type</column>
@@ -100,9 +98,7 @@
             <value>1</value> <!--  Add VM -->
             <value>2</value> <!--  Running -->
             <value>0</value> <!--  Success -->
-            <null />
             <value>340fd52b-3400-4cdd-8d3f-c9d03704b0aa</value>
-            <value>340fd52b-3400-4cdd-8d3f-c9d03704b000</value>
             <value>2010-12-01 14:13:07</value>
             <value>6d849ebf-755f-4552-ad09-9a090cda105d</value>
             <value>3</value>
@@ -113,9 +109,7 @@
             <value>1</value> <!--  Add VM -->
             <value>2</value> <!--  Running -->
             <value>0</value> <!--  Success -->
-            <null />
             <value>340fd52b-3400-4cdd-8d3f-c9d03704b0ab</value>
-            <value>340fd52b-3400-4cdd-8d3f-c9d03704b000</value>
             <value>2010-12-01 14:13:07</value>
             <value>6d849ebf-755f-4552-ad09-9a090cda105d</value>
             <value>3</value>
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index 46412db..9dfa4db 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -23,6 +23,7 @@
                <include name="common/businessentities/AuditLog.java" />
                <include name="common/businessentities/Bookmark.java" />
                <include name="common/businessentities/BaseDisk.java" />
+               <include name="common/businessentities/CommandEntity.java" />
                <include name="common/businessentities/DiskLunMap.java" />
                <include name="common/businessentities/DiskLunMapId.java" />
                <include name="common/businessentities/Disk.java" />
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Compat.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Compat.gwt.xml
index 89d02c4..a24b482 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Compat.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Compat.gwt.xml
@@ -11,6 +11,7 @@
                <!-- Required by common's entities -->
                <include name="compat/StringHelper.java" />
                <include name="compat/Guid.java" />
+               <include name="compat/CommandStatus.java" />
 
                <!-- Referenced directly by UICommon -->
                <include name="compat/IntegerCompat.java" />
diff --git a/packaging/dbscripts/async_tasks_sp.sql 
b/packaging/dbscripts/async_tasks_sp.sql
index e266183..694429f 100644
--- a/packaging/dbscripts/async_tasks_sp.sql
+++ b/packaging/dbscripts/async_tasks_sp.sql
@@ -6,21 +6,18 @@
        v_status INTEGER,
        v_vdsm_task_id UUID,
        v_task_id UUID,
-       v_action_parameters text,
-       v_action_params_class varchar(256),
         v_task_parameters text,
        v_task_params_class varchar(256),
        v_step_id UUID,
        v_command_id UUID,
-       v_root_command_id UUID,
         v_started_at timestamp WITH TIME ZONE,
        v_storage_pool_id UUID,
        v_async_task_type INTEGER)
 RETURNS VOID
    AS $procedure$
 BEGIN
-INSERT INTO async_tasks(action_type, result, status, vdsm_task_id, task_id, 
action_parameters,action_params_class, task_parameters, task_params_class, 
step_id, command_id, root_command_id, started_at,storage_pool_id, task_type)
-       VALUES(v_action_type, v_result, v_status, v_vdsm_task_id, v_task_id, 
v_action_parameters,v_action_params_class, v_task_parameters, 
v_task_params_class, v_step_id, v_command_id, v_root_command_id, v_started_at, 
v_storage_pool_id, v_async_task_type);
+INSERT INTO async_tasks(action_type, result, status, vdsm_task_id, task_id, 
task_parameters, task_params_class, step_id, command_id, 
started_at,storage_pool_id, task_type)
+       VALUES(v_action_type, v_result, v_status, v_vdsm_task_id, v_task_id, 
v_task_parameters, v_task_params_class, v_step_id, v_command_id, v_started_at, 
v_storage_pool_id, v_async_task_type);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -30,13 +27,10 @@
        v_status INTEGER,
        v_vdsm_task_id UUID,
        v_task_id UUID,
-       v_action_parameters text,
-       v_action_params_class varchar(256),
        v_task_parameters text,
        v_task_params_class varchar(256),
        v_step_id UUID,
        v_command_id UUID,
-       v_root_command_id UUID,
         v_storage_pool_id UUID)
 RETURNS VOID
 
@@ -47,13 +41,10 @@
       SET action_type = v_action_type,
           result = v_result,
           status = v_status,
-          action_parameters = v_action_parameters,
-          action_params_class = v_action_params_class,
           task_parameters = v_task_parameters,
           task_params_class = v_task_params_class,
           step_id = v_step_id,
           command_id = v_command_id,
-          root_command_id = v_root_command_id,
           vdsm_task_id = v_vdsm_task_id,
           storage_pool_id = v_storage_pool_id
       WHERE task_id = v_task_id;
@@ -65,13 +56,10 @@
        v_status INTEGER,
        v_vdsm_task_id UUID,
        v_task_id UUID,
-       v_action_parameters text,
-       v_action_params_class varchar(256),
        v_task_parameters text,
        v_task_params_class varchar(256),
        v_step_id UUID,
        v_command_id UUID,
-       v_root_command_id UUID,
         v_started_at timestamp WITH TIME ZONE,
        v_storage_pool_id UUID,
        v_async_task_type INTEGER)
@@ -79,10 +67,10 @@
    AS $procedure$
 BEGIN
       IF NOT EXISTS (SELECT 1 from async_tasks where async_tasks.task_id = 
v_task_id) THEN
-            PERFORM Insertasync_tasks(v_action_type, v_result, v_status, 
v_vdsm_task_id, v_task_id, v_action_parameters,
-            v_action_params_class, v_task_parameters, v_task_params_class, 
v_step_id, v_command_id, v_root_command_id, v_started_at, v_storage_pool_id, 
v_async_task_type);
+            PERFORM Insertasync_tasks(v_action_type, v_result, v_status, 
v_vdsm_task_id, v_task_id,
+            v_task_parameters, v_task_params_class, v_step_id, v_command_id, 
v_started_at, v_storage_pool_id, v_async_task_type);
       ELSE
-            PERFORM Updateasync_tasks(v_action_type, v_result, v_status, 
v_vdsm_task_id, v_task_id, v_action_parameters,  v_action_params_class, 
v_task_parameters, v_task_params_class, v_step_id, v_command_id, 
v_root_command_id,v_storage_pool_id);
+            PERFORM Updateasync_tasks(v_action_type, v_result, v_status, 
v_vdsm_task_id, v_task_id, v_task_parameters, v_task_params_class, v_step_id, 
v_command_id, v_storage_pool_id);
       END IF;
 END; $procedure$
 LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/command_entities_sp.sql 
b/packaging/dbscripts/command_entities_sp.sql
index 6934eb0..265e562 100644
--- a/packaging/dbscripts/command_entities_sp.sql
+++ b/packaging/dbscripts/command_entities_sp.sql
@@ -9,8 +9,8 @@
 RETURNS VOID
    AS $procedure$
 BEGIN
-       INSERT INTO command_entities(command_id, command_type, 
parent_command_id, root_command_id, action_parameters, action_parameters_class, 
created_at, status)
-              VALUES(v_command_id, v_command_type, v_parent_command_id, 
v_root_command_id, v_action_parameters, v_action_parameters_class, 
v_created_at, v_status);
+      INSERT INTO command_entities(command_id, command_type, 
parent_command_id, root_command_id, action_parameters, action_parameters_class, 
created_at, status)
+             VALUES(v_command_id, v_command_type, v_parent_command_id, 
v_root_command_id, v_action_parameters, v_action_parameters_class, 
v_created_at, v_status);
 END; $procedure$
 LANGUAGE plpgsql;
 
diff --git 
a/packaging/dbscripts/upgrade/03_05_0160_add_command_entity_table.sql 
b/packaging/dbscripts/upgrade/03_05_0160_add_command_entity_table.sql
index 1248d23..bda1280 100644
--- a/packaging/dbscripts/upgrade/03_05_0160_add_command_entity_table.sql
+++ b/packaging/dbscripts/upgrade/03_05_0160_add_command_entity_table.sql
@@ -9,11 +9,7 @@
     action_parameters_class varchar(256),
     created_at TIMESTAMP WITH TIME ZONE,
     status varchar(20) DEFAULT NULL,
-    CONSTRAINT pk_command_entities PRIMARY KEY(command_id),
-    CONSTRAINT FK_parent_command_id FOREIGN KEY(parent_command_id)
-       REFERENCES command_entities(command_id) ON DELETE CASCADE,
-    CONSTRAINT FK_root_command_id FOREIGN KEY(root_command_id)
-       REFERENCES command_entities(command_id) ON DELETE CASCADE
+    CONSTRAINT pk_command_entities PRIMARY KEY(command_id)
 );
 CREATE INDEX idx_parent_command_id ON command_entities(parent_command_id) 
WHERE parent_command_id IS NOT NULL;
 CREATE INDEX idx_root_command_id ON command_entities(root_command_id) WHERE 
root_command_id IS NOT NULL;
diff --git 
a/packaging/dbscripts/upgrade/03_05_0170_remove_command_from_async_tasks.sql 
b/packaging/dbscripts/upgrade/03_05_0170_remove_command_from_async_tasks.sql
new file mode 100644
index 0000000..80db561
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_05_0170_remove_command_from_async_tasks.sql
@@ -0,0 +1,3 @@
+select fn_db_drop_column ('async_tasks', 'action_parameters');
+select fn_db_drop_column ('async_tasks', 'action_params_class');
+select fn_db_drop_column ('async_tasks', 'root_command_id');


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

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

Reply via email to