[ 
https://issues.apache.org/activemq/browse/CAMEL-3009?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

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: https://issues.apache.org/activemq/browse/CAMEL-3009
>             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.

Reply via email to