Yair Zaslavsky has uploaded a new change for review. Change subject: [WIP] core: Implementing insertAsyncTaskEntities using batch ......................................................................
[WIP] core: Implementing insertAsyncTaskEntities using batch Change-Id: Ifb4889cbc71b9beadf107430cdc0d5db3b081dea Signed-off-by: Yair Zaslavsky <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskUtils.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAO.java 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 4 files changed, 58 insertions(+), 7 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/16447/1 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 9b6e28c..aa70ca3 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 @@ -1,10 +1,14 @@ package org.ovirt.engine.core.bll.tasks; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.ovirt.engine.core.bll.SPMAsyncTask; import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.businessentities.AsyncTaskEntity; import org.ovirt.engine.core.common.businessentities.AsyncTasks; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.TransactionScopeOption; @@ -34,12 +38,11 @@ public Void runInTransaction() { addOrUpdateTaskInDB(asyncTask.getParameters().getDbAsyncTask()); Map<Guid, VdcObjectType> entitiesMap = asyncTask.getEntitiesMap(); - for (Entry<Guid, VdcObjectType> entry : entitiesMap.entrySet()) { - getAsyncTaskDao().insertAsyncTaskEntity(asyncTask.getParameters() - .getDbAsyncTask().getTaskId(), entry.getKey(), entry.getValue()); - } + List<AsyncTaskEntity> asyncTaskEntities = buildAsyncTaskEntities(asyncTask.getParameters().getDbAsyncTask().getTaskId(),entitiesMap); + getAsyncTaskDao().insertAsyncTaskEntities(asyncTaskEntities); return null; } + }); } } catch (RuntimeException e) { @@ -48,6 +51,17 @@ asyncTask.getVdsmTaskId()), e); } } + + private static List<AsyncTaskEntity> buildAsyncTaskEntities( + Guid taskId, Map<Guid, VdcObjectType> entitiesMap) { + List<AsyncTaskEntity> results = new ArrayList<>(); + for (Map.Entry<Guid, VdcObjectType> entry: entitiesMap.entrySet()) { + results.add(new AsyncTaskEntity(taskId,entry.getValue(), entry.getKey())); + + } + return results; + } + private static void addOrUpdateTaskInDB(AsyncTasks asyncTask) { getAsyncTaskDao().saveOrUpdate(asyncTask, null, (Guid[]) null); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAO.java index 7339008..9fccb14 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AsyncTaskDAO.java @@ -1,8 +1,10 @@ package org.ovirt.engine.core.dao; import java.util.List; +import java.util.Map; import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.businessentities.AsyncTaskEntity; import org.ovirt.engine.core.common.businessentities.AsyncTasks; import org.ovirt.engine.core.compat.Guid; @@ -95,4 +97,6 @@ List<AsyncTasks> getTasksByEntity(Guid entityId); void insertAsyncTaskEntity(Guid taskId, Guid entityId, VdcObjectType value); + + void insertAsyncTaskEntities(List<AsyncTaskEntity> asyncTaskEntities); } 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 6518e7d..7997f89 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 @@ -10,6 +10,7 @@ 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; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; import org.ovirt.engine.core.common.businessentities.AsyncTasks; @@ -17,6 +18,7 @@ import org.ovirt.engine.core.dal.dbbroker.CustomMapSqlParameterSource; import org.ovirt.engine.core.dal.dbbroker.DbEngineDialect; import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils; +import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper; import org.ovirt.engine.core.utils.ReflectionUtils; import org.ovirt.engine.core.utils.SerializationFactory; import org.ovirt.engine.core.utils.log.Log; @@ -98,6 +100,20 @@ return SerializationFactory.getSerializer().serialize(params); } } + + // Cannot be static as depends on dialect which is a non static field + private MapSqlParameterMapper<AsyncTaskEntity> mapper = new MapSqlParameterMapper<AsyncTaskEntity>() { + + @Override + public MapSqlParameterSource map(AsyncTaskEntity entity) { + CustomMapSqlParameterSource paramSource = getCustomMapSqlParameterSource(); + paramSource.addValue("task_id", entity.getTaskId()). + addValue("entity_id", entity.getEntityId()). + addValue("entity_type", entity.getEntityType()); + return paramSource; + + } + }; @Override public AsyncTasks get(Guid id) { @@ -213,4 +229,9 @@ getCallsHandler().executeModification("InsertAsyncTaskEntities", parameterSource); } + + @Override + public void insertAsyncTaskEntities(List<AsyncTaskEntity> asyncTaskEntities) { + getCallsHandler().executeStoredProcAsBatch("InsertAsyncTaskEntities", asyncTaskEntities, mapper); + } } 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 9260b80..64263c2 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 @@ -5,6 +5,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -16,6 +17,7 @@ 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; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; import org.ovirt.engine.core.common.businessentities.AsyncTasks; @@ -24,8 +26,8 @@ /** * <code>AsyncTaskDAOTest</code> performs tests against the {@link AsyncTaskDAO} type. - * - * + * + * */ public class AsyncTaskDAOTest extends BaseDAOTestCase { private static final int TASK_COUNT = 2; @@ -252,7 +254,7 @@ } @Test - public void testInsertAsyncTaskEntities() { + public void testInsertAsyncTaskEntitity() { dao.save(newAsyncTask); Guid newEntityId = Guid.newGuid(); dao.insertAsyncTaskEntity(newAsyncTask.getTaskId(), newEntityId, VdcObjectType.VM); @@ -263,4 +265,14 @@ assertEquals(newAsyncTask.getTaskId(), taskIdFromDb); } + + @Test + public void testInsertAsyncTaskEntitities() { + dao.save(newAsyncTask); + List<AsyncTaskEntity> asyncTaskEntities = new ArrayList<AsyncTaskEntity>(); + asyncTaskEntities.add(new AsyncTaskEntity(newAsyncTask.getTaskId(), VdcObjectType.Storage, Guid.newGuid())); + asyncTaskEntities.add(new AsyncTaskEntity(newAsyncTask.getTaskId(), VdcObjectType.Disk, Guid.newGuid())); + dao.insertAsyncTaskEntities(asyncTaskEntities); + // TODO: Missing DAO API to get all entities associated with a single task + } } -- To view, visit http://gerrit.ovirt.org/16447 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifb4889cbc71b9beadf107430cdc0d5db3b081dea Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yair Zaslavsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
