Michael Kublin has uploaded a new change for review. Change subject: engine: AsyncTaskManager - fix restart part 1 (DB) ......................................................................
engine: AsyncTaskManager - fix restart part 1 (DB) The following patch contains a changes for DB schema which is required in order to solve a problem. The changes are: added a new two collums to async_task table. Those columns are respresenting a parameters of command which is associated with task Change-Id: I3beb5c4a675c567abdf789f40c26fd9fa0a1fb4d Signed-off-by: Michael Kublin <[email protected]> --- M backend/manager/dbscripts/async_tasks_sp.sql M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/AsyncTaskDAOTest.java 3 files changed, 38 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/29/12129/1 diff --git a/backend/manager/dbscripts/async_tasks_sp.sql b/backend/manager/dbscripts/async_tasks_sp.sql index 970b2bd..508bffd 100644 --- a/backend/manager/dbscripts/async_tasks_sp.sql +++ b/backend/manager/dbscripts/async_tasks_sp.sql @@ -7,6 +7,8 @@ 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_entity_type varchar(128), @@ -17,8 +19,8 @@ RETURNS VOID AS $procedure$ BEGIN -INSERT INTO async_tasks(action_type, result, status, 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_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(action_type, result, status, task_id, action_parameters,action_params_class, 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_task_id, v_action_parameters,v_action_params_class, v_task_parameters, v_task_params_class, v_step_id, v_command_id, v_started_at, v_storage_pool_id, v_async_task_type); INSERT INTO async_tasks_entities (async_task_id,entity_id,entity_type) SELECT v_task_id,fnsplitteruuid(v_entity_ids),v_entity_type; END; $procedure$ @@ -31,6 +33,8 @@ 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) RETURNS VOID @@ -44,6 +48,8 @@ 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 WHERE task_id = v_task_id; @@ -56,6 +62,8 @@ 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_entity_type varchar(128), @@ -68,9 +76,9 @@ 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_task_id, v_action_parameters, - v_action_params_class, v_step_id, v_command_id, v_entity_type, v_started_at, v_storage_pool_id, v_async_task_type, v_entity_ids); + v_action_params_class, v_task_parameters, v_task_params_class, v_step_id, v_command_id, v_entity_type, v_started_at, v_storage_pool_id, v_async_task_type, v_entity_ids); ELSE - PERFORM Updateasync_tasks(v_action_type, v_result, v_status, v_task_id, v_action_parameters, v_action_params_class, v_step_id, v_command_id); + PERFORM Updateasync_tasks(v_action_type, v_result, v_status, v_task_id, v_action_parameters, v_action_params_class, v_task_parameters, v_task_params_class, v_step_id, v_command_id); END IF; END; $procedure$ LANGUAGE plpgsql; 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 2052f8f..4d31e72 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 @@ -54,7 +54,8 @@ entity.setresult(AsyncTaskResultEnum.forValue(rs.getInt("result"))); entity.setstatus(AsyncTaskStatusEnum.forValue(rs.getInt("status"))); entity.settask_id(Guid.createGuidFromString(rs.getString("task_id"))); - entity.setaction_parameters(deserializeParameters(rs.getString("action_parameters"),rs.getString("action_params_class"))); + 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(NGuid.createGuidFromString(rs.getString("step_id"))); entity.setCommandId(Guid.createGuidFromString(rs.getString("command_id"))); entity.setStartTime(DbFacadeUtils.fromDate(rs.getTimestamp("started_at"))); @@ -81,8 +82,10 @@ addValue("result", task.getresult()); addValue("status", task.getstatus()); addValue("task_id", task.gettask_id()); - addValue("action_parameters", serializeParameters(task.getaction_parameters())); - addValue("action_params_class",task.getaction_parameters().getClass().getName()); + 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()); } @@ -153,7 +156,7 @@ } private static void logNullParameters(AsyncTasks task) { - if (task.getaction_parameters() == null) { + if (task.getActionParameters() == null) { StringBuilder sb = new StringBuilder("Null action_parameters:\n"); StackTraceElement[] st = Thread.currentThread().getStackTrace(); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/AsyncTaskDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/AsyncTaskDAOTest.java index 653aaf3..047c2ac 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/AsyncTaskDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/AsyncTaskDAOTest.java @@ -12,6 +12,7 @@ import org.junit.Test; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.AddDiskParameters; +import org.ovirt.engine.core.common.action.AddImageFromScratchParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; @@ -33,6 +34,7 @@ private AsyncTasks existingAsyncTask; private VdcActionParametersBase params; + private VdcActionParametersBase taskParams; @Override @Before @@ -44,6 +46,11 @@ params.setSessionId("ASESSIONID"); params.setTransactionScopeOption(TransactionScopeOption.RequiresNew); + taskParams = new VdcActionParametersBase(); + taskParams.setSessionId("ASESSIONID"); + taskParams.setTransactionScopeOption(TransactionScopeOption.RequiresNew); + taskParams.setParentParameters(params); + // create some test data newAsyncTask = new AsyncTasks(); newAsyncTask.settask_id(Guid.NewGuid()); @@ -51,7 +58,8 @@ newAsyncTask.setaction_type(VdcActionType.AddDisk); newAsyncTask.setstatus(AsyncTaskStatusEnum.running); newAsyncTask.setresult(AsyncTaskResultEnum.success); - newAsyncTask.setaction_parameters(params); + newAsyncTask.setActionParameters(params); + newAsyncTask.setTaskParameters(taskParams); newAsyncTask.setCommandId(Guid.NewGuid()); newAsyncTask.setTaskType(AsyncTaskType.copyImage); newAsyncTask.setStoragePoolId(Guid.NewGuid()); @@ -160,7 +168,11 @@ existingAsyncTask.setaction_type(VdcActionType.AddDisk); AddDiskParameters addDiskToVmParams = new AddDiskParameters(); addDiskToVmParams.setSessionId("SESSION_ID"); - existingAsyncTask.setaction_parameters(addDiskToVmParams); + AddImageFromScratchParameters taskParameters = new AddImageFromScratchParameters(); + taskParameters.setParentParameters(addDiskToVmParams); + taskParameters.setParentCommand(VdcActionType.AddDisk); + existingAsyncTask.setActionParameters(addDiskToVmParams); + existingAsyncTask.setTaskParameters(taskParameters); dao.update(existingAsyncTask); AsyncTasks result = dao.get(existingAsyncTask.gettask_id()); @@ -196,7 +208,11 @@ existingAsyncTask.setaction_type(VdcActionType.AddDisk); AddDiskParameters addDiskToVmParams = new AddDiskParameters(); addDiskToVmParams.setSessionId("SESSION_ID"); - existingAsyncTask.setaction_parameters(addDiskToVmParams); + AddImageFromScratchParameters taskParameters = new AddImageFromScratchParameters(); + taskParameters.setParentParameters(addDiskToVmParams); + taskParameters.setParentCommand(VdcActionType.AddDisk); + existingAsyncTask.setActionParameters(addDiskToVmParams); + existingAsyncTask.setTaskParameters(taskParameters); List<AsyncTasks> tasks = dao.getAll(); assertNotNull(tasks); int tasksNumber = tasks.size(); -- To view, visit http://gerrit.ovirt.org/12129 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3beb5c4a675c567abdf789f40c26fd9fa0a1fb4d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Michael Kublin <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
