java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java | 3 java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml | 16 ++ java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java | 16 ++ java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java | 4 java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml | 6 - java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java | 3 java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java | 57 +++++++--- java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java | 3 schema/spacewalk/common/data/rhnTaskoBunch.sql | 4 schema/spacewalk/common/tables/rhnTaskoTemplate.sql | 2 10 files changed, 85 insertions(+), 29 deletions(-)
New commits: commit 01deaffafe72ecff9e3bd4f6302ea1c24f0c1349 Author: Tomas Lestach tlestach@redhat.com Date: Fri Jun 11 17:56:44 2010 +0200
make taskomatic working again
diff --git a/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java b/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java index 812c500..54c4ac0 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java +++ b/java/code/src/com/redhat/rhn/taskomatic/NoSuchBunchTaskException.java @@ -21,4 +21,7 @@ package com.redhat.rhn.taskomatic; */ public class NoSuchBunchTaskException extends Exception {
+ public NoSuchBunchTaskException(String message) { + super(message); + } } diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml index 07efb14..2b8a2df 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml @@ -13,7 +13,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" </generator> </id>
- <property name="name" type="string" column="name"/> + <property name="name" type="string" column="name" unique="true"/> <property name="description" type="string" column="description"/> <property name="activeFrom" type="date" column="active_from"/> <property name="activeTill" type="date" column="active_till"/> @@ -33,15 +33,23 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" </class>
<query name="TaskoBunch.findById"> - <![CDATA[from com.redhat.rhn.taskomatic.TaskoBunch where id = :id]]> + <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE id = :id]]> </query>
<query name="TaskoBunch.findByName"> - <![CDATA[from com.redhat.rhn.taskomatic.TaskoBunch where name = :name]]> + <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE name = :name]]> + </query> + + <query name="TaskoBunch.findOrgBunchByName"> + <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is not null AND name = :name]]> + </query> + + <query name="TaskoBunch.findSatBunchByName"> + <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is null AND name = :name]]> </query>
<query name="TaskoBunch.listBunches"> - <![CDATA[from com.redhat.rhn.taskomatic.TaskoBunch as b]]> + <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch as b]]> </query>
</hibernate-mapping> diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java index d5806b9..4f477aa 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java @@ -40,11 +40,19 @@ public class TaskoFactory extends HibernateFactory { return log; }
- public static TaskoBunch lookupByName(String bunchName) { + public static TaskoBunch lookupOrgBunchByName(String bunchName) { Map params = new HashMap(); params.put("name", bunchName); return (TaskoBunch) singleton.lookupObjectByNamedQuery( - "TaskoBunch.findByName", params); + "TaskoBunch.findOrgBunchByName", params); + } + + public static TaskoTemplate lookupTemplateByBunchAndOrder(Long bunchId, Long order) { + Map params = new HashMap(); + params.put("bunch_id", bunchId); + params.put("order", order); + return (TaskoTemplate) singleton.lookupObjectByNamedQuery( + "TaskoTemplate.findByBunchAndOrder", params); }
public static List<TaskoBunch> listBunches() { diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java index 4ca9921..36b650e 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java @@ -58,7 +58,6 @@ public class TaskoRun implements Job { public TaskoRun(Integer orgIdIn, TaskoTemplate templateIn, String jobLabelIn) { setOrgId(orgIdIn); setTemplate(templateIn); - TaskoFactory.save(templateIn); setJobLabel(jobLabelIn); File logDir = new File(getStdLogDirName(orgId)); if (!logDir.isDirectory()) { diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml index c22c54d..edcaed8 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml @@ -24,7 +24,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" <property name="ordering" type="long" column="ordering"/> <property name="startIf" type="string" column="start_if"/>
- <set name="runHistory" inverse="true" lazy="false" table="rhnTaskoRun"> + <set name="runHistory" inverse="true" table="rhnTaskoRun"> <key column="template_id"/> <one-to-many class="com.redhat.rhn.taskomatic.TaskoRun"/> </set> @@ -35,4 +35,8 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" insert="false" update="false"/> </class>
+ <query name="TaskoTemplate.findByBunchAndOrder"> + <![CDATA[from com.redhat.rhn.taskomatic.TaskoTemplate where bunch.id = :bunch_id and ordering = :order]]> + </query> + </hibernate-mapping> diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java index 1296bc4..62850b0 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.java @@ -44,7 +44,7 @@ public class TaskoTemplate { * @param idIn The id to set. */ public void setId(Long idIn) { - this.id = id; + this.id = idIn; }
/** @@ -146,5 +146,4 @@ public class TaskoTemplate { public void setRunHistory(Set<TaskoRun> runHistoryIn) { this.runHistory = runHistoryIn; } - } diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java index 9490329..e0c9e1e 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java @@ -20,6 +20,7 @@ import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; +import org.quartz.Trigger;
import java.text.ParseException; import java.util.Date; @@ -47,7 +48,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel, Date startTime, Date endTime, String cronExpression, Map params) - throws ParseException, NoSuchTaskException, InvalidJobLabelException { + throws InvalidJobLabelException, NoSuchBunchTaskException, ParseException { try { JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params); // create trigger @@ -69,7 +70,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel, String cronExpression, Map params) - throws ParseException, NoSuchTaskException, InvalidJobLabelException { + throws ParseException, InvalidJobLabelException, NoSuchBunchTaskException { return scheduleBunch(orgId, bunchName, jobLabel, null, null, cronExpression, params); } @@ -87,7 +88,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel, Map params) - throws ParseException, NoSuchTaskException, InvalidJobLabelException { + throws ParseException, InvalidJobLabelException, NoSuchBunchTaskException { try { JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params); SimpleTrigger st = new SimpleTrigger(jobLabel, orgId.toString(), 1, 1); @@ -103,10 +104,14 @@ public class TaskoXmlRpcHandler {
private JobDetail createJob(String bunchName, Integer orgId, String jobLabel, Map params) - throws SchedulerException, InvalidJobLabelException { + throws SchedulerException, InvalidJobLabelException, NoSuchBunchTaskException { if (!checkUniqueName(jobLabel, orgId.toString())) { throw new InvalidJobLabelException(); } + TaskoBunch bunch = TaskoFactory.lookupOrgBunchByName(bunchName); + if (bunch == null) { + throw new NoSuchBunchTaskException("bunchName"); + } // create job JobDetail jobDetail = new JobDetail(jobLabel, orgId.toString(), TaskoBunch.class); diff --git a/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java b/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java index 089d91c..4eee7dd 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java +++ b/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java @@ -17,6 +17,7 @@ package com.redhat.rhn.taskomatic.core; import com.redhat.rhn.common.hibernate.HibernateRuntimeException; import com.redhat.rhn.taskomatic.TaskoBunch; import com.redhat.rhn.taskomatic.TaskoFactory; +import com.redhat.rhn.taskomatic.TaskoTemplate;
import org.quartz.Job; import org.quartz.SchedulerException; @@ -39,7 +40,7 @@ public class RhnJobFactory implements JobFactory { String bunchName = trigger.getJobDetail().getJobDataMap().getString("bunch_name");
try { - bunch = TaskoFactory.lookupByName(bunchName); + bunch = TaskoFactory.lookupOrgBunchByName(bunchName); } catch (HibernateRuntimeException re) { throw new SchedulerException("No such bunch task " + bunchName); diff --git a/schema/spacewalk/common/data/rhnTaskoBunch.sql b/schema/spacewalk/common/data/rhnTaskoBunch.sql index d2244ce..9f83e28 100644 --- a/schema/spacewalk/common/data/rhnTaskoBunch.sql +++ b/schema/spacewalk/common/data/rhnTaskoBunch.sql @@ -15,9 +15,9 @@
INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from) - VALUES (rhn_tasko_bunch_id_seq.nextval, 'daily-status', 'daily-status description', 'N', sysdate); + VALUES (rhn_tasko_bunch_id_seq.nextval, 'daily-status', 'daily-status description', '', sysdate);
INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from) - VALUES (rhn_tasko_bunch_id_seq.nextval, 'sat-sync', 'sat-sync description', 'N', sysdate); + VALUES (rhn_tasko_bunch_id_seq.nextval, 'sat-sync', 'sat-sync description', 'Y', sysdate);
commit; diff --git a/schema/spacewalk/common/tables/rhnTaskoTemplate.sql b/schema/spacewalk/common/tables/rhnTaskoTemplate.sql index bd9b2a1..03684b0 100644 --- a/schema/spacewalk/common/tables/rhnTaskoTemplate.sql +++ b/schema/spacewalk/common/tables/rhnTaskoTemplate.sql @@ -25,7 +25,7 @@ CREATE TABLE rhnTaskoTemplate CONSTRAINT rhn_tasko_template_task_fk REFERENCES rhnTaskoTask (id), ordering NUMBER NOT NULL, - start_if CHAR(1), + start_if CHAR(10), created DATE DEFAULT (sysdate) NOT NULL, modified DATE
commit 1d6c1012185b7ac03cf2253a3e925b9e2e271ebd Author: Tomas Lestach tlestach@redhat.com Date: Fri Jun 11 13:34:35 2010 +0200
create scheduleSingleBunchRun
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java index 5c309c6..d5806b9 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java @@ -56,6 +56,10 @@ public class TaskoFactory extends HibernateFactory { singleton.saveObject(taskoRun); }
+ public static void save(TaskoTemplate taskoTemplate) { + singleton.saveObject(taskoTemplate); + } + public static void sleep(long millis) { try { Thread.sleep(millis); diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java index 18b7667..4ca9921 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java @@ -58,6 +58,7 @@ public class TaskoRun implements Job { public TaskoRun(Integer orgIdIn, TaskoTemplate templateIn, String jobLabelIn) { setOrgId(orgIdIn); setTemplate(templateIn); + TaskoFactory.save(templateIn); setJobLabel(jobLabelIn); File logDir = new File(getStdLogDirName(orgId)); if (!logDir.isDirectory()) { @@ -83,14 +84,14 @@ public class TaskoRun implements Job { public void finished(JobExecutionContext context) { setEndTime(new Date()); String out = (String) context.getJobDetail().getJobDataMap().get("stdOutput"); - if ((out != null) && (out != "")) { + if ((out != null) && (!out.isEmpty())) { saveLogToFile(getStdOutputPath(), out); } else { setStdOutputPath(""); } String err = (String) context.getJobDetail().getJobDataMap().get("stdError"); - if ((err != null) && (err != "")) { + if ((err != null) && (!err.isEmpty())) { saveLogToFile(getStdErrorPath(), err); } else { diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java index d97176c..9490329 100644 --- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java +++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java @@ -19,6 +19,7 @@ import com.redhat.rhn.taskomatic.core.SchedulerKernel; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.SchedulerException; +import org.quartz.SimpleTrigger;
import java.text.ParseException; import java.util.Date; @@ -26,7 +27,7 @@ import java.util.Map;
public class TaskoXmlRpcHandler {
- private Boolean checkUserName(String name, String group) throws SchedulerException { + private Boolean checkUniqueName(String name, String group) throws SchedulerException { return ((SchedulerKernel.getScheduler().getTrigger(name, group) == null) && (SchedulerKernel.getScheduler().getJobDetail(name, group) == null)); } @@ -48,17 +49,7 @@ public class TaskoXmlRpcHandler { Date startTime, Date endTime, String cronExpression, Map params) throws ParseException, NoSuchTaskException, InvalidJobLabelException { try { - if (!checkUserName(jobLabel, orgId.toString())) { - throw new InvalidJobLabelException(); - } - // create job - JobDetail jobDetail = new JobDetail(jobLabel, orgId.toString(), - TaskoBunch.class); - // set job params - jobDetail.getJobDataMap().putAll(params); - jobDetail.getJobDataMap().put("org_id", orgId); - jobDetail.getJobDataMap().put("bunch_name", bunchName); - jobDetail.getJobDataMap().put("job_label", jobLabel); + JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params); // create trigger CronTrigger ct = new CronTrigger(jobLabel, orgId.toString(), cronExpression); @@ -94,6 +85,39 @@ public class TaskoXmlRpcHandler { } }
+ public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel, + Map params) + throws ParseException, NoSuchTaskException, InvalidJobLabelException { + try { + JobDetail jobDetail = createJob(bunchName, orgId, jobLabel, params); + SimpleTrigger st = new SimpleTrigger(jobLabel, orgId.toString(), 1, 1); + st.setEndTime(new Date()); + + // schedule job + return SchedulerKernel.getScheduler().scheduleJob(jobDetail, st); + } + catch (SchedulerException e) { + return null; + } + } + + private JobDetail createJob(String bunchName, Integer orgId, + String jobLabel, Map params) + throws SchedulerException, InvalidJobLabelException { + if (!checkUniqueName(jobLabel, orgId.toString())) { + throw new InvalidJobLabelException(); + } + // create job + JobDetail jobDetail = new JobDetail(jobLabel, orgId.toString(), + TaskoBunch.class); + // set job params + jobDetail.getJobDataMap().putAll(params); + jobDetail.getJobDataMap().put("org_id", orgId); + jobDetail.getJobDataMap().put("bunch_name", bunchName); + jobDetail.getJobDataMap().put("job_label", jobLabel); + return jobDetail; + } + public int listBunchRuns(Integer orgId, String triggerName) throws NoSuchTaskoTriggerException { try {
spacewalk-commits@lists.fedorahosted.org