Eli Mesika has uploaded a new change for review.

Change subject: [WIP] core: DB, DAO and related BE patch for external..
......................................................................

[WIP] core: DB, DAO and related BE patch for external..

core: DB, DAO and related BE patch for external tasks support

Change-Id: I04a2d92fecd43d218f82e39c3a85f27cd3fad1e8
Signed-off-by: Eli Mesika <emes...@redhat.com>
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=872719
---
M backend/manager/dbscripts/job_sp.sql
A backend/manager/dbscripts/upgrade/03_03_0180_add_external_tasks_support.sql
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Job.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Step.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/JobDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StepDaoDbFacadeImpl.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
7 files changed, 132 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/15221/1

diff --git a/backend/manager/dbscripts/job_sp.sql 
b/backend/manager/dbscripts/job_sp.sql
index f10cc76..1380ac3 100644
--- a/backend/manager/dbscripts/job_sp.sql
+++ b/backend/manager/dbscripts/job_sp.sql
@@ -11,7 +11,8 @@
     v_start_time TIMESTAMP WITH TIME ZONE,
     v_end_time TIMESTAMP WITH TIME ZONE,
     v_last_update_time TIMESTAMP WITH TIME ZONE,
-    v_correlation_id VARCHAR(50))
+    v_correlation_id VARCHAR(50),
+    v_is_external boolean)
 RETURNS VOID
 AS $procedure$
 BEGIN
@@ -25,7 +26,8 @@
         start_time,
         end_time,
         last_update_time,
-        correlation_id)
+        correlation_id,
+        is_external)
     VALUES (
         v_job_id,
         v_action_type,
@@ -36,7 +38,8 @@
         v_start_time,
         v_end_time,
         v_last_update_time,
-        v_correlation_id);
+        v_correlation_id,
+        v_is_external);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -156,7 +159,8 @@
 AS $procedure$
 BEGIN
     DELETE FROM job
-    WHERE end_time < v_end_time
+    WHERE is_auto_cleared
+    AND end_time < v_end_time
     AND status = any (string_to_array(v_status,',')::VARCHAR[] );
 END; $procedure$
 LANGUAGE plpgsql;
@@ -238,7 +242,8 @@
     v_end_time TIMESTAMP WITH TIME ZONE,
     v_correlation_id VARCHAR(50),
     v_external_id UUID,
-    v_external_system_type VARCHAR(32))
+    v_external_system_type VARCHAR(32),
+    v_is_external boolean)
 RETURNS VOID
 AS $procedure$
 BEGIN
@@ -254,7 +259,8 @@
         end_time,
         correlation_id,
         external_id,
-        external_system_type)
+        external_system_type,
+        is_external)
     VALUES (
         v_step_id,
         v_parent_step_id,
@@ -267,7 +273,8 @@
         v_end_time,
         v_correlation_id,
         v_external_id,
-        v_external_system_type);
+        v_external_system_type,
+        v_is_external);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -468,7 +475,8 @@
 AS $procedure$
 BEGIN
     DELETE FROM job
-    WHERE (end_time < v_succeeded_end_time
+    WHERE (is_auto_cleared
+    AND end_time < v_succeeded_end_time
     AND    status = 'FINISHED')
     OR    (end_time < v_failed_end_time
     AND    status IN ('FAILED', 'ABORTED', 'UNKNOWN'));
diff --git 
a/backend/manager/dbscripts/upgrade/03_03_0180_add_external_tasks_support.sql 
b/backend/manager/dbscripts/upgrade/03_03_0180_add_external_tasks_support.sql
new file mode 100644
index 0000000..79f1630
--- /dev/null
+++ 
b/backend/manager/dbscripts/upgrade/03_03_0180_add_external_tasks_support.sql
@@ -0,0 +1,38 @@
+select fn_db_add_column('job', 'is_external', 'boolean default false');
+select fn_db_add_column('job', 'is_auto_cleared', 'boolean default true');
+select fn_db_add_column('step', 'is_external', 'boolean default false');
+
+-- Add External Task Injection priviledge to super user
+INSERT INTO roles_groups(role_id,action_group_id) 
VALUES('00000000-0000-0000-0000-000000000001',1500);
+
+-- define a role for External Task injection
+-----------------------------------
+-- EXTERNAL_TASK_CREATOR_USER role
+-----------------------------------
+Create or replace FUNCTION 
__temp_insert_predefined_externa_tasks_creator_role()
+RETURNS VOID
+   AS $procedure$
+   DECLARE
+   v_external_task_creator_user_id UUID;
+BEGIN
+   v_external_task_creator_user_id := 'DEF0000D-0000-0000-0000-DEF000000000';
+
+INSERT INTO 
roles(id,name,description,is_readonly,role_type,allows_viewing_children) SELECT 
v_external_task_creator_user_id, 'ExternalTasksCreator', 'External Tasks 
Creator', true, 2, false
+WHERE NOT EXISTS (SELECT id,name,description,is_readonly,role_type
+                  FROM roles
+                  WHERE id = v_external_task_creator_user_id
+                  AND name='ExternalTasksCreator'
+                  AND description='External Tasks Creator'
+                  AND is_readonly=true
+                  AND role_type=2);
+
+INSERT INTO roles_groups(role_id,action_group_id) 
VALUES(v_external_task_creator_user_id, 1500);
+
+RETURN;
+END; $procedure$
+LANGUAGE plpgsql;
+
+SELECT __temp_insert_predefined_externa_tasks_creator_role();
+DROP function __temp_insert_predefined_externa_tasks_creator_role();
+
+
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Job.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Job.java
index dd2b93a..198ae97 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Job.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Job.java
@@ -75,6 +75,16 @@
     private String correlationId;
 
     /**
+     * A flag defining if this Job were invoked from external plug-in
+     */
+    private boolean isExternal = false;
+
+    /**
+     * A flag indicating if the Job is auto cleared from the table after the 
configured time for succeeded/failed jobs
+     */
+    private boolean isAutoCleared = true;
+
+    /**
      * A collection which holds the entities associated with the Job
      */
     private Map<Guid, VdcObjectType> jobSubjectEntities;
@@ -143,6 +153,22 @@
 
     public void setIsAsyncJob(boolean isAsyncJob) {
         this.isAsyncJob = isAsyncJob;
+    }
+
+    public boolean isExternal() {
+        return isExternal;
+    }
+
+    public void setExternal(boolean isExternal) {
+        this.isExternal = isExternal;
+    }
+
+    public boolean isAutoCleared() {
+        return isAutoCleared;
+    }
+
+    public void setAutoCleared(boolean isAutoCleared) {
+        this.isAutoCleared = isAutoCleared;
     }
 
     public boolean isAsyncJob() {
@@ -280,6 +306,7 @@
         result = prime * result + ((startTime == null) ? 0 : 
startTime.hashCode());
         result = prime * result + ((status == null) ? 0 : status.hashCode());
         result = prime * result + ((steps == null) ? 0 : steps.hashCode());
+        result = prime * result + (isExternal ? 1231 : 1237);
         return result;
     }
 
@@ -360,8 +387,10 @@
         } else if (!steps.equals(other.steps)) {
             return false;
         }
+        if (isExternal != other.isExternal) {
+            return false;
+        }
+
         return true;
     }
-
-
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Step.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Step.java
index 17db4ef..c6b976b 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Step.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/Step.java
@@ -71,6 +71,11 @@
     private String correlationId;
 
     /**
+     * A flag defining if this step were invoked from external plug-in
+     */
+    private boolean isExternal = false;
+
+    /**
      * An external system referenced by the step (e.g. VDSM)
      */
     private ExternalSystem externalSystem = new ExternalSystem();
@@ -180,6 +185,14 @@
         return correlationId;
     }
 
+    public boolean isExternal() {
+        return isExternal;
+    }
+
+    public void setExternal(boolean isExternal) {
+        this.isExternal = isExternal;
+    }
+
     public Step addStep(StepEnum childStepType, String description) {
         Step childStep = new Step(childStepType);
         childStep.setParentStepId(id);
@@ -274,6 +287,7 @@
         result = prime * result + stepNumber;
         result = prime * result + ((stepType == null) ? 0 : 
stepType.hashCode());
         result = prime * result + ((steps == null) ? 0 : steps.hashCode());
+        result = prime * result + (isExternal ? 1231 : 1237);
         return result;
     }
 
@@ -361,6 +375,9 @@
         } else if (!steps.equals(other.steps)) {
             return false;
         }
+        if (isExternal != other.isExternal) {
+            return false;
+        }
         return true;
     }
 
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/JobDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/JobDaoDbFacadeImpl.java
index 55e1eaa..9f640fd 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/JobDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/JobDaoDbFacadeImpl.java
@@ -41,7 +41,9 @@
                 .addValue("start_time", entity.getStartTime())
                 .addValue("end_time", entity.getEndTime())
                 .addValue("last_update_time", entity.getLastUpdateTime())
-                .addValue("correlation_id", entity.getCorrelationId());
+                .addValue("correlation_id", entity.getCorrelationId())
+                .addValue("is_external", entity.isExternal())
+                .addValue("is_auto_cleared", entity.isAutoCleared());
     }
 
     @Override
@@ -124,7 +126,8 @@
             
job.setEndTime(DbFacadeUtils.fromDate(rs.getTimestamp("end_time")));
             
job.setLastUpdateTime(DbFacadeUtils.fromDate(rs.getTimestamp("last_update_time")));
             job.setCorrelationId(rs.getString("correlation_id"));
-
+            job.setExternal(rs.getBoolean("is_external"));
+            job.setExternal(rs.getBoolean("is_auto_cleared"));
             return job;
         }
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StepDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StepDaoDbFacadeImpl.java
index 4917b93..73763b4 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StepDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StepDaoDbFacadeImpl.java
@@ -48,7 +48,8 @@
                 .addValue("end_time", entity.getEndTime())
                 .addValue("correlation_id", entity.getCorrelationId())
                 .addValue("external_id", entity.getExternalSystem().getId())
-                .addValue("external_system_type", 
EnumUtils.nameOrNull(entity.getExternalSystem().getType()));
+                .addValue("external_system_type", 
EnumUtils.nameOrNull(entity.getExternalSystem().getType()))
+                .addValue("is_external", entity.isExternal());
     }
 
     @Override
@@ -96,6 +97,7 @@
             step.setCorrelationId(rs.getString("correlation_id"));
             
step.getExternalSystem().setId(NGuid.createGuidFromString(rs.getString("external_id")));
             
step.getExternalSystem().setType(ExternalSystemType.safeValueOf(rs.getString("external_system_type")));
+            step.setExternal(rs.getBoolean("is_external"));
             return step;
         }
     }
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 07c5098..39524b3 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -4138,6 +4138,8 @@
         <column>end_time</column>
         <column>last_update_time</column>
         <column>correlation_id</column>
+        <column>is_external</column>
+        <column>is_auto_cleared</column>
 
        <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5889</value>
@@ -4150,6 +4152,8 @@
             <null/>
             <value>2012-01-08 10:49:24</value>
             <value>54947df8-job1</value>
+            <value>false</value>
+            <value>true</value>
        </row>
        <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5111</value>
@@ -4162,6 +4166,8 @@
             <null/>
             <value>2012-01-01 10:49:24</value>
             <value>54947df8-job2</value>
+            <value>false</value>
+            <value>true</value>
        </row>
        <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5222</value>
@@ -4174,6 +4180,8 @@
             <value>2012-02-08 10:11:00</value>
             <value>2012-02-08 10:11:00</value>
             <value>54947df8-job3</value>
+            <value>false</value>
+            <value>true</value>
        </row>
        <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5333</value>
@@ -4186,6 +4194,8 @@
             <value>2012-02-08 10:11:00</value>
             <null/>
             <value>54947df8-job4</value>
+            <value>false</value>
+            <value>true</value>
        </row>
     </table>
 
@@ -4229,6 +4239,7 @@
         <column>correlation_id</column>
         <column>external_id</column>
         <column>external_system_type</column>
+        <column>is_external</column>
 
         <!-- Steps for Job 54947df8-0e9e-4471-a2f9-9af509fb5889 -->
         <row>
@@ -4244,6 +4255,7 @@
             <value>54947df8-job1</value>
             <null/>
             <null/>
+            <value>false</value>
         </row>
 
         <row>
@@ -4259,6 +4271,7 @@
             <value>54947df8-job1</value>
             <null/>
             <null/>
+            <value>false</value>
         </row>
         <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5224</value>
@@ -4273,6 +4286,7 @@
             <value>54947df8-job1</value>
             <value>54947df8-0e9e-4471-a2f9-9af509f12345</value>
             <value>VDSM</value>
+            <value>false</value>
         </row>
         <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5225</value>
@@ -4287,6 +4301,7 @@
             <value>54947df8-job1</value>
             <value>54947df8-0e9e-4471-a2f9-9af509f12345</value>
             <value>VDSM</value>
+            <value>false</value>
         </row>
         <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5226</value>
@@ -4301,6 +4316,7 @@
             <value>54947df8-job1</value>
             <value>54947df8-0e9e-4471-a2f9-9af509f12345</value>
             <value>VDSM</value>
+            <value>false</value>
         </row>
         <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5227</value>
@@ -4315,6 +4331,7 @@
             <value>54947df8-job1</value>
             <value>54947df8-0e9e-4471-a2f9-9af509f12345</value>
             <value>VDSM</value>
+            <value>false</value>
         </row>
         <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5228</value>
@@ -4329,6 +4346,7 @@
             <value>54947df8-job1</value>
             <value>54947df8-0e9e-4471-a2f9-9af509f12345</value>
             <value>VDSM</value>
+            <value>false</value>
         </row>
         <row>
             <value>54947df8-0e9e-4471-a2f9-9af509fb5229</value>
@@ -4343,6 +4361,7 @@
             <value>54947df8-job1</value>
             <value>54947df8-0e9e-4471-a2f9-9af509f12345</value>
             <value>VDSM</value>
+            <value>false</value>
         </row>
 
         <!-- Steps for Job 54947df8-0e9e-4471-a2f9-9af509fb5111 -->
@@ -4359,6 +4378,7 @@
             <value>54947df8-job2</value>
             <null/>
             <null/>
+            <value>false</value>
         </row>
 
         <!-- Steps for Job 54947df8-0e9e-4471-a2f9-9af509fb5222 -->
@@ -4375,6 +4395,7 @@
             <value>54947df8-job3</value>
             <value>54947df8-0e9e-4471-a2f9-9af509fbabab</value>
             <value>VDSM</value>
+            <value>false</value>
         </row>
 
         <!-- Steps for Job 54947df8-0e9e-4471-a2f9-9af509fb5333 -->
@@ -4391,6 +4412,7 @@
             <value>54947df8-job4</value>
             <null/>
             <null/>
+            <value>false</value>
         </row>
     </table>
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I04a2d92fecd43d218f82e39c3a85f27cd3fad1e8
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Eli Mesika <emes...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to