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