camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ben O'Day (JIRA)" <>
Subject [jira] Updated: (CAMEL-3009) Add option to quartz consumer to ignore jobs being triggered due restarting
Date Fri, 27 Aug 2010 23:46:40 GMT


Ben O'Day updated CAMEL-3009:

    Attachment: camel-quartz-maxTimeDelay-patch.txt

I ran into an issue with skipping all missed jobs.  This is because a job's scheduledFireTime
is ALWAYS before the current time.  This difference is usually just a few millis, but can
be much longer depending on system load.  So, unless I assume an allowable delay to account
for this, every run looks like a delayed job...  

So, I settled on a simpler solution for now.  The attached patch just adds a "maxTimeDelay"
attribute to skip jobs that have been delayed by more than a specified value (in millis).
 When a context/route is suspended/resumed, only the jobs that have been delayed less than
the maxTimeDelay will be executed.  This should handle the majority of cases for long delays
and prevent multiple "catch up" jobs from running.  

Some examples,

trigger every 5s with maxTimeDelay=2000 (ms)
consumer is paused for 2 hours
at most, a single "catch up" job will execute

trigger every Wed at noon, maxTimeDelay=60000
consumer paused on Tuesday, resumes on Thursday
missed job is skipped, next job will run the following Wed at noon

The one remaining case is where you want the delayed job to run (regardless of the delay),
but only once.  This was my original patch, but seems less useful (and more confusing) than
just specifying the max allowed delay.  If you think this mode is still valuable, let me know
and I can add this back in as well...

> Add option to quartz consumer to ignore jobs being triggered due restarting
> ---------------------------------------------------------------------------
>                 Key: CAMEL-3009
>                 URL:
>             Project: Apache Camel
>          Issue Type: New Feature
>          Components: camel-quartz
>    Affects Versions: 2.4.0
>            Reporter: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.5.0
>         Attachments: camel-quartz-maxTimeDelay-patch.txt, camel-quartz-skip-missed-jobs-patch.txt
> Quartz scheduler may by default try to catch up if a quartz consumer has been stopped
for a while.
> Then when its started it may trigger a series of jobs due they were supposed to be triggered
if the consumer has been always running.
> We should make it easy to configure an option to tell Camel to ignore those jobs.
> For example if you have a trigger to run every 5th second. And you pause a consumer for
2 hours. You may not want quartz to fire 12 * 60 * 2 jobs when its started to catch up for
those 2 hours.
> Quartz itself may have an option you can configure on the job but it may not be obviously
how to do this.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message