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