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

Reply via email to