I think you're on the right track. I think that you do need to save off the 
new instance in getNewInstance(), so that when the user reconfigures, you 
can call cancel() on it to cancel the pending run. Then, instead of calling 
doAperiodicRun(), call doRun() which is inherited from AperiodicWork. This 
calls doAperiodicRun() and then sets up the new schedule. You don't need to 
create the new instance yourself.

  -- Dean

On Monday, May 6, 2013 10:36:51 AM UTC-7, Marc MacIntyre wrote:
>
> I've got a subclass of AsyncAperiodicWork firing off a task periodically, 
> at an interval that can be updated and configured by the user in the config.
>
> When the user updates the config, I am immediately scheduling a new run of 
> the task by instantiating a new instance and calling doAperiodicRun() on it.
>
> However, when I do that, the next scheduled run doesn't happen until the 
> previously configured recurrenceInterval has gone by (and the new interval 
> doesn't take effect until that happens, too).
>
> For example:
> at startup, recurrence of 10 minutes.
>
> at 1 minute, reconfigure for recurrence of 1 minute
> call doAperiodicRun() 
>
> Next occurrence of the task doesn't come until t=10minutes
>
> Then every minute afterward the task fires
>
> I tried a possible workaround, which was to grab the instance created in 
> getNewInstance() and store it in a class variable, and call 
> doAperiodicRun() on that when attempting to reschedule, but it didn't 
> change the behavior (and feels pretty dangerous, anyway).
>
> Is there something I'm supposed to be doing to force a reschedule of the 
> pending runs, or is this a bug?
>
> -- 
> Marc MacIntyre
>  

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to