Ravi Nori has uploaded a new change for review.

Change subject: engine : Persist Async Task root command in command_entities
......................................................................

engine : Persist Async Task root command in command_entities

Persist async task's root command information
in command entities table.

Modifies the async tasks table and the upgrade scripts.
The updgrade script now has to get action type from command
entities table

Change-Id: I7ec5c072c6f3153c9396b0ce0be8e7c59cbefea1
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/CoCoAsyncTaskHelper.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTasks.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAODbFacadeImpl.java
M packaging/dbscripts/async_tasks_sp.sql
A packaging/dbscripts/upgrade/03_06_0240_async_tasks_add_root_command_id.sql
M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py
10 files changed, 162 insertions(+), 130 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/37/31737/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 83b54fc..d150223 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
@@ -2189,7 +2189,7 @@
         }
     }
 
-    private CommandEntity buildCommandEntity(Guid parentCommandId, boolean 
callBackEnabled) {
+    public CommandEntity buildCommandEntity(Guid parentCommandId, boolean 
callBackEnabled) {
         return CommandEntity.buildCommandEntity(getCommandId(),
                 parentCommandId,
                 getExecutionContext().getJob() == null ? Guid.Empty : 
getExecutionContext().getJob().getId(),
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 6a51f63..f949791 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,7 +9,7 @@
 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.common.businessentities.CommandEntity;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
@@ -28,26 +28,40 @@
     public static SPMAsyncTask construct(CommandCoordinator coco, 
AsyncTaskCreationInfo creationInfo) {
         AsyncTasks asyncTask = 
coco.getByVdsmTaskId(creationInfo.getVdsmTaskId());
         if (asyncTask == null || asyncTask.getActionParameters() == null) {
-            CommandStatus cmdStatus = asyncTask == null ? 
CommandStatus.UNKNOWN : asyncTask.getCommandStatus();
-            asyncTask =
-                    new AsyncTasks(VdcActionType.Unknown,
-                            AsyncTaskResultEnum.success,
-                            AsyncTaskStatusEnum.running,
-                            creationInfo.getVdsmTaskId(),
-                            new VdcActionParametersBase(),
-                            new VdcActionParametersBase(),
-                            creationInfo.getStepId(),
-                            asyncTask == null ? Guid.newGuid() : 
asyncTask.getCommandId(),
+            asyncTask = new AsyncTasks(AsyncTaskResultEnum.success,
+                    AsyncTaskStatusEnum.running,
+                    creationInfo.getVdsmTaskId(),
+                    creationInfo.getStepId(),
+                    creationInfo.getStoragePoolID(),
+                    creationInfo.getTaskType(),
+                    getCommandEntity(coco,
                             asyncTask == null ? Guid.newGuid() : 
asyncTask.getRootCommandId(),
-                            creationInfo.getStoragePoolID(),
-                            creationInfo.getTaskType(),
-                            cmdStatus);
+                            VdcActionType.Unknown,
+                            new VdcActionParametersBase()),
+                    getCommandEntity(coco,
+                            asyncTask == null ? Guid.newGuid() : 
asyncTask.getRootCommandId(),
+                            VdcActionType.Unknown,
+                            new VdcActionParametersBase()));
             creationInfo.setTaskType(AsyncTaskType.unknown);
         }
         AsyncTaskParameters asyncTaskParams = new 
AsyncTaskParameters(creationInfo, asyncTask);
         return construct(coco, creationInfo.getTaskType(), asyncTaskParams, 
true);
     }
 
+    private static CommandEntity getCommandEntity(CommandCoordinator coco,
+                                           Guid cmdId,
+                                           VdcActionType actionType,
+                                           VdcActionParametersBase paramaters) 
{
+        CommandEntity cmdEntity = Guid.isNullOrEmpty(cmdId) ? null : 
coco.getCommandEntity(cmdId);
+        if (cmdId == null) {
+            cmdEntity = new CommandEntity();
+            cmdEntity.setId(cmdId);
+            cmdEntity.setCommandType(actionType);
+            cmdEntity.setCommandParameters(paramaters);
+        }
+        return cmdEntity;
+    }
+
     public static SPMAsyncTask construct(CommandCoordinator coco, 
AsyncTaskCreationInfo creationInfo, AsyncTasks asyncTask) {
         AsyncTaskParameters asyncTaskParams = new 
AsyncTaskParameters(creationInfo, asyncTask);
         return construct(coco, creationInfo.getTaskType(), asyncTaskParams, 
true);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
index 639b6df..c129b8a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
@@ -100,11 +100,10 @@
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
-        AsyncTaskParameters p =
+        return createTask(internalGetTaskType(command),
                 new AsyncTaskParameters(asyncTaskCreationInfo,
-                        getAsyncTask(taskId, command, asyncTaskCreationInfo, 
parentCommand));
-        p.setEntityInfo(command.getParameters().getEntityInfo());
-        return createTask(internalGetTaskType(command), p);
+                        getAsyncTask(taskId, command, asyncTaskCreationInfo, 
parentCommand)).
+                        
withEntityInfo(command.getParameters().getEntityInfo()));
     }
 
     public void revertTasks(CommandBase command) {
@@ -148,32 +147,20 @@
     public List<AsyncTasks> getAllAsyncTasksFromDb(CommandCoordinator coco) {
         List<AsyncTasks> asyncTasks = 
DbFacade.getInstance().getAsyncTaskDao().getAll();
         for (AsyncTasks asyncTask : asyncTasks) {
-            map(coco.getCommandEntity(asyncTask.getCommandId()), asyncTask);
+            
asyncTask.setParentCmdEntity(getCommandEntity(asyncTask.getRootCommandId()));
+            
asyncTask.setChildCmdEntity(getCommandEntity(asyncTask.getCommandId()));
         }
         return asyncTasks;
     }
 
-    private void map(CommandEntity cmdEntity, AsyncTasks asyncTask) {
-        if (cmdEntity != null) {
-            asyncTask.setTaskParameters(cmdEntity.getCommandParameters());
-            asyncTask.setRootCommandId(cmdEntity.getRootCommandId());
-            asyncTask.setCommandStatus(cmdEntity.getCommandStatus());
-            asyncTask.setCommandType(cmdEntity.getCommandType());
-            asyncTask.setCreatedAt(cmdEntity.getCreatedAt());
-            asyncTask.setCallBackEnabled(cmdEntity.isCallBackEnabled());
+    private CommandEntity getCommandEntity(Guid cmdId) {
+        CommandEntity cmdEntity = Guid.isNullOrEmpty(cmdId) ? null : 
coco.getCommandEntity(cmdId);
+        if (cmdEntity == null) {
+            cmdEntity = new CommandEntity();
+            cmdEntity.setId(cmdId);
+            cmdEntity.setCommandType(VdcActionType.Unknown);
+            cmdEntity.setCommandParameters(new VdcActionParametersBase());
         }
-    }
-
-    private CommandEntity map(AsyncTasks asyncTask, CommandEntity entity) {
-        CommandStatus status = entity == null ? asyncTask.getCommandStatus() : 
entity.getCommandStatus();
-        CommandEntity cmdEntity = entity == null ? new CommandEntity() : 
entity;
-        cmdEntity.setId(asyncTask.getCommandId());
-        cmdEntity.setCommandParameters(asyncTask.getTaskParameters());
-        cmdEntity.setRootCommandId(asyncTask.getRootCommandId());
-        cmdEntity.setCommandStatus(status);
-        cmdEntity.setCommandType(asyncTask.getCommandType());
-        cmdEntity.setCreatedAt(asyncTask.getCreatedAt());
-        cmdEntity.setCallBackEnabled(asyncTask.isCallBackEnabled());
         return cmdEntity;
     }
 
@@ -187,7 +174,12 @@
             @Override
             public Void runInTransaction() {
                 DbFacade.getInstance().getAsyncTaskDao().save(asyncTask);
-                coco.persistCommand(map(asyncTask, 
coco.getCommandEntity(asyncTask.getCommandId())));
+                if (!Guid.isNullOrEmpty(asyncTask.getRootCommandId())) {
+                    coco.persistCommand(asyncTask.getParentCmdEntity());
+                }
+                if (!Guid.isNullOrEmpty(asyncTask.getCommandId())) {
+                    coco.persistCommand(asyncTask.getChildCmdEntity());
+                }
                 return null;
             }
         });
@@ -196,7 +188,8 @@
     public AsyncTasks getAsyncTaskFromDb(Guid asyncTaskId) {
         AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().get(asyncTaskId);
         if (asyncTask != null) {
-            map(coco.getCommandEntity(asyncTask.getCommandId()), asyncTask);
+            
asyncTask.setParentCmdEntity(getCommandEntity(asyncTask.getRootCommandId()));
+            
asyncTask.setChildCmdEntity(getCommandEntity(asyncTask.getCommandId()));
         }
         return asyncTask;
     }
@@ -222,7 +215,8 @@
     public AsyncTasks getByVdsmTaskId(Guid vdsmTaskId) {
         AsyncTasks asyncTask = 
DbFacade.getInstance().getAsyncTaskDao().getByVdsmTaskId(vdsmTaskId);
         if (asyncTask != null) {
-            map(coco.getCommandEntity(asyncTask.getCommandId()), asyncTask);
+            
asyncTask.setParentCmdEntity(getCommandEntity(asyncTask.getRootCommandId()));
+            
asyncTask.setChildCmdEntity(getCommandEntity(asyncTask.getCommandId()));
         }
         return asyncTask;
     }
@@ -250,11 +244,12 @@
 
             @Override
             public Void runInTransaction() {
-                CommandEntity cmdEntity = 
coco.getCommandEntity(asyncTask.getCommandId());
-                if (asyncTask.getstatus() == AsyncTaskStatusEnum.finished) {
-                    cmdEntity.setCommandStatus(CommandStatus.SUCCEEDED);
+                if (!Guid.isNullOrEmpty(asyncTask.getRootCommandId())) {
+                    coco.persistCommand(asyncTask.getParentCmdEntity());
                 }
-                coco.persistCommand(map(asyncTask, cmdEntity));
+                if (!Guid.isNullOrEmpty(asyncTask.getCommandId())) {
+                    coco.persistCommand(asyncTask.getChildCmdEntity());
+                }
                 
DbFacade.getInstance().getAsyncTaskDao().saveOrUpdate(asyncTask);
                 return null;
             }
@@ -295,25 +290,49 @@
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
+        Guid parentCommandId = command.getParameters().getParentParameters() 
== null ? Guid.Empty : 
command.getParameters().getParentParameters().getCommandId();
         VdcActionParametersBase parentParameters = 
command.getParentParameters(parentCommand);
         if 
(VdcActionType.Unknown.equals(command.getParameters().getCommandType())) {
             command.getParameters().setCommandType(command.getActionType());
         }
-        AsyncTasks asyncTask = new AsyncTasks(parentCommand,
-                AsyncTaskResultEnum.success,
+        AsyncTasks asyncTask = new AsyncTasks(AsyncTaskResultEnum.success,
                 AsyncTaskStatusEnum.running,
                 asyncTaskCreationInfo.getVdsmTaskId(),
-                parentParameters,
-                command.getParameters(),
                 asyncTaskCreationInfo.getStepId(),
-                command.getCommandId(),
-                command.getParameters().getParentParameters() == null ? 
Guid.Empty : command.getParameters().getParentParameters().getCommandId(),
                 asyncTaskCreationInfo.getStoragePoolID(),
                 asyncTaskCreationInfo.getTaskType(),
-                command.getCommandStatus());
+                getParentCommandEntity(parentCommandId,
+                        parentCommand,
+                        parentParameters),
+                getChildCommandEntity(command, parentCommand));
         return asyncTask;
     }
 
+    private CommandEntity getChildCommandEntity(CommandBase command, 
VdcActionType parentCommand) {
+        CommandEntity cmdEntity = 
coco.getCommandEntity(command.getCommandId());
+        if (cmdEntity == null) {
+            command.persistCommand(parentCommand, command.getCallBack() != 
null);
+        }
+        return coco.getCommandEntity(command.getCommandId());
+    }
+
+    private CommandEntity getParentCommandEntity(Guid cmdId,
+                                                 VdcActionType actionType,
+                                                 VdcActionParametersBase 
parameters) {
+        CommandEntity cmdEntity = Guid.isNullOrEmpty(cmdId) ? null : 
coco.getCommandEntity(cmdId);
+        if (cmdEntity == null) {
+            cmdEntity = new CommandEntity();
+            cmdEntity.setId(cmdId);
+            cmdEntity.setCommandType(actionType);
+            cmdEntity.setCommandParameters(parameters);
+            if (!Guid.isNullOrEmpty(cmdId)) {
+                cmdEntity.setCommandStatus(CommandStatus.ACTIVE);
+                coco.persistCommand(cmdEntity);
+            }
+        }
+        return cmdEntity;
+    }
+
     public VdcReturnValueBase endAction(SPMTask task, ExecutionContext 
context) {
         AsyncTasks dbAsyncTask = task.getParameters().getDbAsyncTask();
         VdcActionType actionType = getEndActionType(dbAsyncTask);
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 1254fe6..c39f934 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
@@ -46,6 +46,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator;
 import org.ovirt.engine.core.dao.AsyncTaskDAO;
+import org.ovirt.engine.core.dao.CommandEntityDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 import org.ovirt.engine.core.utils.RandomUtils;
@@ -84,6 +85,9 @@
         AsyncTaskDAO asyncTaskDao = mock(AsyncTaskDAO.class);
         when(asyncTaskDao.getAll()).thenReturn(Collections.EMPTY_LIST);
         when(dbFacade.getAsyncTaskDao()).thenReturn(asyncTaskDao);
+        CommandEntityDao cmdEntityDao = mock(CommandEntityDao.class);
+        when(dbFacade.getCommandEntityDao()).thenReturn(cmdEntityDao);
+        when(cmdEntityDao.getAll()).thenReturn(Collections.EMPTY_LIST);
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes"})
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskParameters.java
index 0147e8f..d43af10 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskParameters.java
@@ -45,8 +45,9 @@
         return (_entityInfo == null) ? 
getDbAsyncTask().getActionParameters().getEntityInfo() : _entityInfo;
     }
 
-    public void setEntityInfo(EntityInfo entityInfo) {
+    public AsyncTaskParameters withEntityInfo(EntityInfo entityInfo) {
         _entityInfo = entityInfo;
+        return this;
     }
 
     public AsyncTaskParameters() {
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 b24c61e..700c028 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
@@ -12,67 +12,55 @@
 
 public class AsyncTasks implements Serializable {
     private static final long serialVersionUID = 5913365704117183118L;
-    private CommandEntity cmdEntity;
-    private VdcActionType actionType;
     private AsyncTaskResultEnum result;
-    private Date startTime;
+    private AsyncTaskStatusEnum status;
     private Guid vdsmTaskId;
     private Guid storagePoolId;
-    private VdcActionParametersBase actionParameters;
     private Guid taskId;
     private Guid commandId;
+    private Guid rootCommandId;
     private Guid stepId;
     private AsyncTaskType taskType;
+    private Date startTime;
+    private CommandEntity parentCmdEntity;
+    private CommandEntity childCmdEntity;
 
     public AsyncTasks() {
-        actionType = VdcActionType.Unknown;
         result = AsyncTaskResultEnum.success;
         status = AsyncTaskStatusEnum.unknown;
         vdsmTaskId = Guid.Empty;
         commandId = Guid.Empty;
-        cmdEntity = new CommandEntity();
-        cmdEntity.setId(commandId);
-        cmdEntity.setRootCommandId(Guid.Empty);
-        cmdEntity.setCommandType(VdcActionType.Unknown);
+        rootCommandId = Guid.Empty;
     }
 
-    public AsyncTasks(VdcActionType action_type,
-                      AsyncTaskResultEnum result,
+    public AsyncTasks(AsyncTaskResultEnum result,
                       AsyncTaskStatusEnum status,
                       Guid vdsmTaskId,
-                      VdcActionParametersBase parentParameters,
-                      VdcActionParametersBase taskParameters,
                       Guid stepId,
-                      Guid commandId,
-                      Guid rootCommandId,
                       Guid storagePoolId,
                       AsyncTaskType taskType,
-                      CommandStatus cmdStatus) {
-        this.actionType = action_type;
+                      CommandEntity parentCmdEntity,
+                      CommandEntity childCmdEntity) {
         this.result = result;
         this.status = status;
         this.vdsmTaskId = vdsmTaskId;
-        this.actionParameters = parentParameters;
         this.stepId = stepId;
         this.startTime = new Date();
-        this.commandId = commandId;
+        this.commandId = childCmdEntity.getId();
+        this.rootCommandId = parentCmdEntity.getId();
         this.storagePoolId = storagePoolId;
         this.taskId = Guid.newGuid();
         this.taskType = taskType;
-        cmdEntity = new CommandEntity();
-        cmdEntity.setId(commandId);
-        cmdEntity.setRootCommandId(rootCommandId);
-        cmdEntity.setCommandStatus(cmdStatus);
-        cmdEntity.setCommandParameters(taskParameters);
-        cmdEntity.setCommandType(taskParameters.getCommandType());
+        this.parentCmdEntity = parentCmdEntity;
+        this.childCmdEntity = childCmdEntity;
     }
 
     public VdcActionType getaction_type() {
-        return actionType;
+        return parentCmdEntity.getCommandType();
     }
 
     public void setaction_type(VdcActionType value) {
-        this.actionType = value;
+        this.parentCmdEntity.setCommandType(value);
     }
 
     public Date getStartTime() {
@@ -90,8 +78,6 @@
     public void setresult(AsyncTaskResultEnum value) {
         this.result = value;
     }
-
-    private AsyncTaskStatusEnum status;
 
     public AsyncTaskStatusEnum getstatus() {
         return this.status;
@@ -118,19 +104,19 @@
     }
 
     public VdcActionParametersBase getActionParameters() {
-        return actionParameters;
+        return parentCmdEntity.getCommandParameters();
     }
 
     public void setActionParameters(VdcActionParametersBase value) {
-        this.actionParameters = value;
+        this.parentCmdEntity.setCommandParameters(value);
     }
 
     public VdcActionParametersBase getTaskParameters() {
-        return cmdEntity.getCommandParameters();
+        return childCmdEntity.getCommandParameters();
     }
 
     public void setTaskParameters(VdcActionParametersBase value) {
-        cmdEntity.setCommandParameters(value);
+        childCmdEntity.setCommandParameters(value);
     }
 
     public Guid getStepId() {
@@ -150,35 +136,35 @@
     }
 
     public CommandStatus getCommandStatus() {
-        return cmdEntity.getCommandStatus();
+        return childCmdEntity.getCommandStatus();
     }
 
     public void setCommandStatus(CommandStatus status) {
-        cmdEntity.setCommandStatus(status);
+        childCmdEntity.setCommandStatus(status);
     }
 
     public void setCommandType(VdcActionType cmdType) {
-        cmdEntity.setCommandType(cmdType);
+        childCmdEntity.setCommandType(cmdType);
     }
 
     public VdcActionType getCommandType() {
-        return cmdEntity.getCommandType();
+        return childCmdEntity.getCommandType();
     }
 
     public void setCreatedAt(Date createdAt) {
-        cmdEntity.setCreatedAt(createdAt);
+        childCmdEntity.setCreatedAt(createdAt);
     }
 
     public Date getCreatedAt() {
-        return cmdEntity.getCreatedAt();
+        return childCmdEntity.getCreatedAt();
     }
 
     public Guid getRootCommandId() {
-        return cmdEntity.getRootCommandId();
+        return rootCommandId;
     }
 
     public void setRootCommandId(Guid rootCommandId) {
-        cmdEntity.setRootCommandId(rootCommandId);
+        this.rootCommandId = rootCommandId;
     }
 
     public Guid getCommandId() {
@@ -187,7 +173,6 @@
 
     public void setCommandId(Guid commandId) {
         this.commandId = commandId;
-        this.cmdEntity.setId(commandId);
     }
 
     public Guid getStoragePoolId() {
@@ -207,11 +192,11 @@
     }
 
     public void setCallBackEnabled(boolean enabled) {
-        cmdEntity.setCallBackEnabled(enabled);
+        childCmdEntity.setCallBackEnabled(enabled);
     }
 
     public boolean isCallBackEnabled() {
-        return cmdEntity.isCallBackEnabled();
+        return childCmdEntity.isCallBackEnabled();
     }
 
     @Override
@@ -221,7 +206,7 @@
         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 + ((actionType == null) ? 0 : 
actionType.hashCode());
+        results = prime * results + ((parentCmdEntity.getCommandType() == 
null) ? 0 : parentCmdEntity.getCommandType().hashCode());
         results = prime * results + ((result == null) ? 0 : result.hashCode());
         results = prime * results + ((status == null) ? 0 : status.hashCode());
         results = prime * results + ((startTime == null) ? 0 : 
startTime.hashCode());
@@ -246,11 +231,27 @@
                 && ObjectUtils.objectsEqual(taskId, other.taskId)
                 && ObjectUtils.objectsEqual(stepId, other.stepId)
                 && ObjectUtils.objectsEqual(commandId, other.commandId)
-                && actionType == other.actionType
+                && parentCmdEntity.getCommandType() == 
other.parentCmdEntity.getCommandType()
                 && result == other.result
                 && status == other.status
                 && ObjectUtils.objectsEqual(startTime, other.startTime)
                 && ObjectUtils.objectsEqual(storagePoolId, other.storagePoolId)
                 && ObjectUtils.objectsEqual(taskType, other.taskType));
     }
+
+    public CommandEntity getParentCmdEntity() {
+        return parentCmdEntity;
+    }
+
+    public void setParentCmdEntity(CommandEntity parentCmdEntity) {
+        this.parentCmdEntity = parentCmdEntity;
+    }
+
+    public CommandEntity getChildCmdEntity() {
+        return childCmdEntity;
+    }
+
+    public void setChildCmdEntity(CommandEntity childCmdEntity) {
+        this.childCmdEntity = childCmdEntity;
+    }
 }
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 1c5235e..81cad1d 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
@@ -8,7 +8,6 @@
 
 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.AsyncTaskType;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskEntity;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskResultEnum;
@@ -63,14 +62,13 @@
         @Override
         public AsyncTasks mapRow(ResultSet rs, int rowNum) throws SQLException 
{
             AsyncTasks entity = new AsyncTasks();
-            
entity.setaction_type(VdcActionType.forValue(rs.getInt("action_type")));
             
entity.setresult(AsyncTaskResultEnum.forValue(rs.getInt("result")));
             
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.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"));
@@ -92,15 +90,13 @@
 
         public AsyncTaskParameterSource(DbEngineDialect dialect, AsyncTasks 
task) {
             super(dialect);
-            addValue("action_type", task.getaction_type());
             addValue("result", task.getresult());
             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("step_id", task.getStepId());
             addValue("command_id", task.getCommandId());
+            addValue("root_command_id", task.getRootCommandId());
         }
 
         private static String serializeParameters(VdcActionParametersBase 
params) {
diff --git a/packaging/dbscripts/async_tasks_sp.sql 
b/packaging/dbscripts/async_tasks_sp.sql
index 01ad67a..ef85398 100644
--- a/packaging/dbscripts/async_tasks_sp.sql
+++ b/packaging/dbscripts/async_tasks_sp.sql
@@ -1,36 +1,32 @@
 ----------------------------------------------------------------
 -- [async_tasks] Table
 --
-Create or replace FUNCTION Insertasync_tasks(v_action_type INTEGER,
-       v_result INTEGER,
+Create or replace FUNCTION Insertasync_tasks(v_result INTEGER,
        v_status INTEGER,
        v_vdsm_task_id UUID,
        v_task_id UUID,
-        v_action_parameters text,
-       v_action_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, 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_action_parameters, v_action_params_class, v_step_id, v_command_id, 
v_started_at, v_storage_pool_id, v_async_task_type);
+INSERT INTO async_tasks(result, status, vdsm_task_id, task_id, step_id, 
command_id, root_command_id, started_at,storage_pool_id, task_type)
+       VALUES(v_result, v_status, v_vdsm_task_id, v_task_id, v_step_id, 
v_command_id, v_root_command_id, v_started_at, v_storage_pool_id, 
v_async_task_type);
 END; $procedure$
 LANGUAGE plpgsql;
 
 
-Create or replace FUNCTION Updateasync_tasks(v_action_type INTEGER,
-       v_result INTEGER,
+Create or replace FUNCTION Updateasync_tasks(v_result INTEGER,
        v_status INTEGER,
        v_vdsm_task_id UUID,
        v_task_id UUID,
-       v_action_parameters text,
-       v_action_params_class varchar(256),
        v_step_id UUID,
        v_command_id UUID,
+       v_root_command_id UUID,
         v_storage_pool_id UUID)
 RETURNS VOID
 
@@ -38,28 +34,24 @@
    AS $procedure$
 BEGIN
       UPDATE async_tasks
-      SET action_type = v_action_type,
-          result = v_result,
+      SET result = v_result,
           status = v_status,
-          action_parameters = v_action_parameters,
-          action_params_class = v_action_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;
 END; $procedure$
 LANGUAGE plpgsql;
 
-Create or replace FUNCTION InsertOrUpdateAsyncTasks(v_action_type INTEGER,
-       v_result INTEGER,
+Create or replace FUNCTION InsertOrUpdateAsyncTasks(v_result INTEGER,
        v_status INTEGER,
        v_vdsm_task_id UUID,
        v_task_id UUID,
-       v_action_parameters text,
-       v_action_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)
@@ -67,10 +59,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_step_id, 
v_command_id, v_started_at, v_storage_pool_id, v_async_task_type);
+            PERFORM Insertasync_tasks(v_result, v_status, v_vdsm_task_id, 
v_task_id,
+            v_step_id, v_command_id, v_root_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_step_id, v_command_id, v_storage_pool_id);
+            PERFORM Updateasync_tasks(v_result, v_status, v_vdsm_task_id, 
v_task_id, v_step_id, v_command_id, v_root_command_id, v_storage_pool_id);
       END IF;
 END; $procedure$
 LANGUAGE plpgsql;
diff --git 
a/packaging/dbscripts/upgrade/03_06_0240_async_tasks_add_root_command_id.sql 
b/packaging/dbscripts/upgrade/03_06_0240_async_tasks_add_root_command_id.sql
new file mode 100644
index 0000000..ef47bea
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_06_0240_async_tasks_add_root_command_id.sql
@@ -0,0 +1,4 @@
+select fn_db_add_column('async_tasks', 'root_command_id', 'UUID DEFAULT NULL');
+select fn_db_drop_column ('async_tasks', 'action_type');
+select fn_db_drop_column ('async_tasks', 'action_parameters');
+select fn_db_drop_column ('async_tasks', 'action_params_class');
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py
index dc73be9..3d10732 100644
--- 
a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py
+++ 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py
@@ -163,12 +163,13 @@
         tasks = dbstatement.execute(
             statement="""
                 select
-                async_tasks.action_type,
+                command_entities.command_type as action_type,
                 async_tasks.task_id,
                 async_tasks.started_at,
                 storage_pool.name
-                from async_tasks, storage_pool
+                from async_tasks, storage_pool, command_entities
                 where async_tasks.storage_pool_id = storage_pool.id
+                  and async_tasks.root_command_id = command_entities.command_id
             """,
             ownConnection=True,
             transaction=False,


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

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