Ravi Nori has uploaded a new change for review.

Change subject: engine : Add User Id to async tasks table
......................................................................

engine : Add User Id to async tasks table

Add user id to async tasks table, the user id
will be used to determine if the user has permissions
to see the tasks for which the user requested statuses

Change-Id: Ib5b9f3dfb38d6d56f186aa87f3ff75007a0d3997
Bug-Url: https://bugzilla.redhat.com/1153043
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/GetTasksStatusesByTasksIDsQuery.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/CoCoAsyncTaskHelper.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/CommandCoordinatorUtil.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTask.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 packaging/dbscripts/async_tasks_sp.sql
A packaging/dbscripts/upgrade/03_06_0500_add_user_id_to_async_tasks.sql
12 files changed, 68 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/16/34616/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 206db85..740110c 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
@@ -1673,7 +1673,7 @@
             VdcActionType parentCommand,
             String description,
             Map<Guid, VdcObjectType> entitiesMap) {
-        return CommandCoordinatorUtil.createTask(taskId, this, 
asyncTaskCreationInfo, parentCommand, description, entitiesMap);
+        return CommandCoordinatorUtil.createTask(this.getUserId(), taskId, 
this, asyncTaskCreationInfo, parentCommand, description, entitiesMap);
     }
 
     /**
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
index 2cf21eb..0acb666 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
@@ -11,6 +11,8 @@
 
     @Override
     protected void executeQueryCommand() {
+        this.getUserID();
+
         
getQueryReturnValue().setReturnValue(CommandCoordinatorUtil.pollTasks(getParameters().getTasksIDs()));
     }
 }
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 c85b64d..6f076fe 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
@@ -31,6 +31,7 @@
         if (asyncTask == null || asyncTask.getActionParameters() == null) {
             asyncTask = new AsyncTask(AsyncTaskResultEnum.success,
                     AsyncTaskStatusEnum.running,
+                    Guid.Empty,
                     creationInfo.getVdsmTaskId(),
                     creationInfo.getStepId(),
                     creationInfo.getStoragePoolID(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
index f89dbae..0bd94b8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CoCoAsyncTaskHelper.java
@@ -63,7 +63,8 @@
      *            Ids of entities to be associated with task
      * @return Guid of the created task.
      */
-    public Guid createTask(Guid taskId,
+    public Guid createTask(Guid userId,
+                           Guid taskId,
                            CommandBase command,
                            AsyncTaskCreationInfo asyncTaskCreationInfo,
                            VdcActionType parentCommand,
@@ -76,7 +77,7 @@
         if (taskStep != null) {
             asyncTaskCreationInfo.setStepId(taskStep.getId());
         }
-        SPMAsyncTask task = concreteCreateTask(taskId, command, 
asyncTaskCreationInfo, parentCommand);
+        SPMAsyncTask task = concreteCreateTask(userId, taskId, command, 
asyncTaskCreationInfo, parentCommand);
         task.setEntitiesMap(entitiesMap);
         AsyncTaskUtils.addOrUpdateTaskInDB(task);
         getAsyncTaskManager().lockAndAddTaskToManager(task);
@@ -98,13 +99,14 @@
      * @return An {@link SPMAsyncTask} object representing the task to be run
      */
     public SPMAsyncTask concreteCreateTask(
+            Guid userId,
             Guid taskId,
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
         AsyncTaskParameters p =
                 new AsyncTaskParameters(asyncTaskCreationInfo,
-                        getAsyncTask(taskId, command, asyncTaskCreationInfo, 
parentCommand));
+                        getAsyncTask(userId, taskId, command, 
asyncTaskCreationInfo, parentCommand));
         p.setEntityInfo(command.getParameters().getEntityInfo());
         return createTask(internalGetTaskType(command), p);
     }
@@ -254,7 +256,8 @@
         });
     }
 
-    public AsyncTask getAsyncTask(Guid taskId,
+    public AsyncTask getAsyncTask(Guid userId,
+            Guid taskId,
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
@@ -295,6 +298,7 @@
         }
         AsyncTask asyncTask = new AsyncTask(AsyncTaskResultEnum.success,
                 AsyncTaskStatusEnum.running,
+                command.getUserId(),
                 asyncTaskCreationInfo.getVdsmTaskId(),
                 asyncTaskCreationInfo.getStepId(),
                 asyncTaskCreationInfo.getStoragePoolID(),
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 3f83177..96d5d2e 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
@@ -300,7 +300,7 @@
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
-        return coCoAsyncTaskHelper.getAsyncTask(taskId, command, 
asyncTaskCreationInfo, parentCommand);
+        return coCoAsyncTaskHelper.getAsyncTask(command.getUserId(), taskId, 
command, asyncTaskCreationInfo, parentCommand);
     }
 
     public AsyncTask createAsyncTask(
@@ -310,13 +310,14 @@
         return coCoAsyncTaskHelper.createAsyncTask(command, 
asyncTaskCreationInfo, parentCommand);
     }
 
-    public Guid createTask(Guid taskId,
+    public Guid createTask(Guid userId,
+                           Guid taskId,
                            CommandBase command,
                            AsyncTaskCreationInfo asyncTaskCreationInfo,
                            VdcActionType parentCommand,
                            String description,
                            Map<Guid, VdcObjectType> entitiesMap) {
-        return coCoAsyncTaskHelper.createTask(taskId, command, 
asyncTaskCreationInfo, parentCommand, description, entitiesMap);
+        return coCoAsyncTaskHelper.createTask(userId, taskId, command, 
asyncTaskCreationInfo, parentCommand, description, entitiesMap);
 
     }
 
@@ -325,7 +326,7 @@
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand) {
-        return coCoAsyncTaskHelper.concreteCreateTask(taskId, command, 
asyncTaskCreationInfo, parentCommand);
+        return coCoAsyncTaskHelper.concreteCreateTask(command.getUserId(), 
taskId, command, asyncTaskCreationInfo, parentCommand);
     }
 
     public void cancelTasks(final CommandBase command) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
index f23a173..7605375 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
@@ -55,13 +55,15 @@
     }
 
     public static Guid createTask(
+            Guid userId,
             Guid taskId,
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
             VdcActionType parentCommand,
             String description,
             Map<Guid, VdcObjectType> entitiesMap) {
-        return coco.createTask(taskId,
+        return coco.createTask(userId,
+                taskId,
                 command,
                 asyncTaskCreationInfo,
                 parentCommand,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java
index 94c875b..6c72f80 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/interfaces/TaskHelper.java
@@ -31,6 +31,7 @@
     VDSReturnValue clearTask(Guid storagePoolID, Guid vdsmTaskID);
 
     Guid createTask(
+            Guid userId,
             Guid taskId,
             CommandBase command,
             AsyncTaskCreationInfo asyncTaskCreationInfo,
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTask.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTask.java
index 837821d..da58284 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTask.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/AsyncTask.java
@@ -14,6 +14,7 @@
     private static final long serialVersionUID = 5913365704117183118L;
     private AsyncTaskResultEnum result;
     private AsyncTaskStatusEnum status;
+    private Guid userId;
     private Guid vdsmTaskId;
     private Guid storagePoolId;
     private Guid taskId;
@@ -28,6 +29,7 @@
     public AsyncTask() {
         result = AsyncTaskResultEnum.success;
         status = AsyncTaskStatusEnum.unknown;
+        userId = Guid.Empty;
         vdsmTaskId = Guid.Empty;
         commandId = Guid.Empty;
         rootCommandId = Guid.Empty;
@@ -37,6 +39,7 @@
 
     public AsyncTask(AsyncTaskResultEnum result,
                      AsyncTaskStatusEnum status,
+                     Guid userId,
                      Guid vdsmTaskId,
                      Guid stepId,
                      Guid storagePoolId,
@@ -45,6 +48,7 @@
                      CommandEntity childCmdEntity) {
         this.result = result;
         this.status = status;
+        this.userId = userId;
         this.vdsmTaskId = vdsmTaskId;
         this.stepId = stepId;
         this.startTime = new Date();
@@ -256,4 +260,12 @@
     public void setChildCmdEntity(CommandEntity childCmdEntity) {
         this.childCmdEntity = childCmdEntity;
     }
+
+    public Guid getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Guid userId) {
+        this.userId = userId;
+    }
 }
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 f8508e8..336ba98 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
@@ -93,6 +93,14 @@
      */
     List<AsyncTask> getTasksByEntity(Guid entityId);
 
+    /**
+     * Gets all the tasks that are associated with an user id
+     *
+     * @param userId
+     * @return
+     */
+    public List<Guid> getAsyncTaskIdsByUser(Guid userId);
+
     void insertAsyncTaskEntities(Collection<AsyncTaskEntity> 
asyncTaskEntities);
 
     List<AsyncTaskEntity> getAllAsyncTaskEntitiesByTaskId(Guid taskId);
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 57f3da7..5cc3d3a 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
@@ -64,6 +64,7 @@
             AsyncTask entity = new AsyncTask();
             
entity.setresult(AsyncTaskResultEnum.forValue(rs.getInt("result")));
             
entity.setstatus(AsyncTaskStatusEnum.forValue(rs.getInt("status")));
+            entity.setUserId(getGuidDefaultEmpty(rs, "user_id"));
             entity.setTaskId(getGuidDefaultEmpty(rs, "task_id"));
             entity.setVdsmTaskId(getGuid(rs, "vdsm_task_id"));
             entity.setStepId(getGuid(rs, "step_id"));
@@ -94,6 +95,7 @@
             addValue("result", task.getresult());
             addValue("status", task.getstatus());
             addValue("vdsm_task_id", task.getVdsmTaskId());
+            addValue("user_id", task.getUserId());
             addValue("task_id", task.getTaskId());
             addValue("step_id", task.getStepId());
             addValue("command_id", task.getCommandId());
@@ -207,6 +209,13 @@
     }
 
     @Override
+    public List<Guid> getAsyncTaskIdsByUser(Guid userId) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("user_id", userId);
+        return getCallsHandler().executeReadList("GetAsyncTasksIdsByUserId", 
IdRowMapper.instance, parameterSource);
+    }
+
+    @Override
     public List<Guid> getAsyncTaskIdsByStoragePoolId(Guid storagePoolId) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
                 .addValue("storage_pool_id", storagePoolId);
diff --git a/packaging/dbscripts/async_tasks_sp.sql 
b/packaging/dbscripts/async_tasks_sp.sql
index 005b885..ba84dfc 100644
--- a/packaging/dbscripts/async_tasks_sp.sql
+++ b/packaging/dbscripts/async_tasks_sp.sql
@@ -4,6 +4,7 @@
 Create or replace FUNCTION Insertasync_tasks(v_action_type INTEGER,
        v_result INTEGER,
        v_status INTEGER,
+       v_user_id UUID,
        v_vdsm_task_id UUID,
        v_task_id UUID,
        v_step_id UUID,
@@ -15,8 +16,8 @@
 RETURNS VOID
    AS $procedure$
 BEGIN
-INSERT INTO async_tasks(action_type, result, status, vdsm_task_id, task_id, 
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_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, user_id, vdsm_task_id, 
task_id, step_id, command_id, root_command_id, started_at,storage_pool_id, 
task_type)
+       VALUES(v_action_type, v_result, v_status, v_user_id, v_vdsm_task_id, 
v_task_id, v_step_id, v_command_id, v_root_command_id, v_started_at, 
v_storage_pool_id, v_async_task_type);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -24,6 +25,7 @@
 Create or replace FUNCTION Updateasync_tasks(v_action_type INTEGER,
        v_result INTEGER,
        v_status INTEGER,
+       v_user_id UUID,
        v_vdsm_task_id UUID,
        v_task_id UUID,
        v_step_id UUID,
@@ -51,6 +53,7 @@
 Create or replace FUNCTION InsertOrUpdateAsyncTasks(v_action_type INTEGER,
        v_result INTEGER,
        v_status INTEGER,
+       v_user_id UUID,
        v_vdsm_task_id UUID,
        v_task_id UUID,
        v_step_id UUID,
@@ -63,10 +66,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,
+            PERFORM Insertasync_tasks(v_action_type, v_result, v_status, 
v_user_id, v_vdsm_task_id, v_task_id,
             v_step_id, v_command_id, v_root_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_step_id, v_command_id, v_root_command_id, 
v_storage_pool_id);
+            PERFORM Updateasync_tasks(v_action_type, v_result, v_status, 
v_user_id, v_vdsm_task_id, v_task_id, v_step_id, v_command_id, 
v_root_command_id, v_storage_pool_id);
       END IF;
 END; $procedure$
 LANGUAGE plpgsql;
@@ -95,6 +98,16 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+
+CREATE OR REPLACE FUNCTION GetAsyncTasksIdsByUserId(v_user_id UUID)
+RETURNS SETOF idUuidType STABLE
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT task_id from async_tasks where user_id = v_user_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
 CREATE OR REPLACE FUNCTION  GetAsyncTaskEntitiesByTaskId(v_task_id UUID)
 RETURNS SETOF async_tasks_entities STABLE
    AS $procedure$
diff --git 
a/packaging/dbscripts/upgrade/03_06_0500_add_user_id_to_async_tasks.sql 
b/packaging/dbscripts/upgrade/03_06_0500_add_user_id_to_async_tasks.sql
new file mode 100644
index 0000000..bac6fdf
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_06_0500_add_user_id_to_async_tasks.sql
@@ -0,0 +1 @@
+select fn_db_add_column('async_tasks', 'user_id', 'UUID DEFAULT NULL');


-- 
To view, visit http://gerrit.ovirt.org/34616
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib5b9f3dfb38d6d56f186aa87f3ff75007a0d3997
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

Reply via email to