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