Yair Zaslavsky has uploaded a new change for review. Change subject: [WIP] core: Switching to map from entity ids to entity types ......................................................................
[WIP] core: Switching to map from entity ids to entity types The following patch uses fnsplittermap in order to start adding the ability to associate a task to more than one entity type Change-Id: Ia339c59db046cfc1fe2a99606072c9a7c8bceae7 Signed-off-by: Yair Zaslavsky <[email protected]> --- M backend/manager/dbscripts/async_tasks_sp.sql M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSource.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/dal/dbbroker/CustomMapSqlParameterSourceTest.java 4 files changed, 59 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/90/14990/1 diff --git a/backend/manager/dbscripts/async_tasks_sp.sql b/backend/manager/dbscripts/async_tasks_sp.sql index 4dbb06a..ae783e1 100644 --- a/backend/manager/dbscripts/async_tasks_sp.sql +++ b/backend/manager/dbscripts/async_tasks_sp.sql @@ -12,18 +12,18 @@ v_task_params_class varchar(256), v_step_id UUID, v_command_id UUID, - v_entity_type varchar(128), v_started_at timestamp, v_storage_pool_id UUID, v_async_task_type INTEGER, - v_entity_ids text) + v_entity_map text) 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, 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_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; + SELECT v_task_id,CAST (map_entities.map_key as UUID), map_entities.map_value ,v_entity_type FROM + (SELECT * FROM fnSplitterMap(v_entity_map)) as map_entities; END; $procedure$ LANGUAGE plpgsql; @@ -70,17 +70,16 @@ v_task_params_class varchar(256), v_step_id UUID, v_command_id UUID, - v_entity_type varchar(128), v_started_at timestamp, v_storage_pool_id UUID, v_async_task_type INTEGER, - v_entity_ids text) + v_entity_map text) RETURNS VOID 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_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_started_at, v_storage_pool_id, v_async_task_type, v_entity_map); 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); END IF; diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSource.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSource.java index 3d55d96..f4f20ed 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSource.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSource.java @@ -1,6 +1,9 @@ package org.ovirt.engine.core.dal.dbbroker; import java.lang.reflect.Method; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.core.compat.Version; @@ -34,6 +37,24 @@ return super.addValue(dialect.getParamNamePrefix() + paramName, tmpValue); } + private <K, V> String convertEntry(Entry<K, V> entry) { + return entry.getKey() + "=" + entry.getValue(); + } + + public <K, V> String mapToString(Map<K, V> map) { + StringBuilder result = new StringBuilder(); + Iterator<Entry<K, V>> iterator = map.entrySet().iterator(); + Entry<K, V> entry = iterator.next(); + result.append(convertEntry(entry)); + while (iterator.hasNext()) { + entry = iterator.next(); + result.append(","); + result.append(convertEntry(entry)); + } + + return result.toString(); + } + private static Object extractEnumValue(Object value) { Method getValueMethod = findMethodByName(value, "getValue"); if (getValueMethod != null) { 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 f08007f..725c70e 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 @@ -3,9 +3,11 @@ import java.io.Serializable; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; -import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; @@ -126,22 +128,22 @@ @Override public void save(AsyncTasks task, VdcObjectType entityType, Guid... entityIds) { AsyncTaskParameterSource parameterSource = getTaskParameterSource(task); - parameterSource.addValue("entity_type", (entityType != null) ? entityType.toString() : null); + Map<Guid, VdcObjectType> map = createEntitiesMapForSingleType(entityType, entityIds); parameterSource.addValue("started_at", task.getStartTime()); parameterSource.addValue("storage_pool_id",task.getStoragePoolId()); parameterSource.addValue("async_task_type", task.getTaskType()); - parameterSource.addValue("entity_ids", StringUtils.join(entityIds, ",")); + parameterSource.addValue("entity_map", parameterSource.mapToString(map)); getCallsHandler().executeModification("Insertasync_tasks", parameterSource); } @Override public void saveOrUpdate(AsyncTasks task, VdcObjectType entityType, Guid... entityIds) { AsyncTaskParameterSource parameterSource = getTaskParameterSource(task); - parameterSource.addValue("entity_type", (entityType != null) ? entityType.toString() : null); + Map<Guid, VdcObjectType> map = createEntitiesMapForSingleType(entityType, entityIds); parameterSource.addValue("started_at", task.getStartTime()); parameterSource.addValue("storage_pool_id",task.getStoragePoolId()); parameterSource.addValue("async_task_type", task.getTaskType()); - parameterSource.addValue("entity_ids", StringUtils.join(entityIds, ",")); + parameterSource.addValue("entity_map", parameterSource.mapToString(map)); getCallsHandler().executeModification("InsertOrUpdateAsyncTasks", parameterSource); } @@ -209,4 +211,17 @@ AsyncTaskRowMapper.instance, parameterSource); } + + protected Map<Guid, VdcObjectType> createEntitiesMapForSingleType(VdcObjectType objectType, Guid... entities) { + if (objectType == null || entities == null || entities.length == 0) { + return Collections.emptyMap(); + } + Map<Guid, VdcObjectType> result = new HashMap<Guid, VdcObjectType>(); + for (Guid id : entities) { + result.put(id, objectType); + } + + return result; + } + } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSourceTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSourceTest.java index 6709ab8..8f636f0 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSourceTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/CustomMapSqlParameterSourceTest.java @@ -5,6 +5,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.HashMap; +import java.util.Map; import java.util.Random; import java.util.UUID; @@ -100,4 +102,15 @@ assertNull("wrong value returned from parameter source", paramSource.getValue(paramName)); } + + @Test + public void testAddValueMap() { + Map<String, String> map = new HashMap<String, String>(); + map.put("name", "oVirt"); + map.put("desc", "open source virtualization management"); + paramSource.addValue("product", paramSource.mapToString(map)); + String result = (String) paramSource.getValue("product"); + assertEquals("name=oVirt,desc=open source virtualization management", result); + + } } -- To view, visit http://gerrit.ovirt.org/14990 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia339c59db046cfc1fe2a99606072c9a7c8bceae7 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
