You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I believe I have found a bug in the CronSequenceGenerator. According to your documentation in the next(...) method the plan is to first round up to the next whole second instead the code just sets the milliseconds filed to 0. I believe the originalTimestamp should be 'long originalTimestamp = calendar.getTimeInMillis() + 1000;' in order to round up to the next second per "The Plan"
Here is the FQDN of the class
org.springframework.scheduling.support.CronSequenceGenerator
Here is the method in question:
public Date next(Date date) {
/*
The plan:
1 Round up to the next whole second
2 If seconds match move on, otherwise find the next match:
2.1 If next match is in the next minute then roll forwards
3 If minute matches move on, otherwise find the next match
3.1 If next match is in the next hour then roll forwards
3.2 Reset the seconds and go to 2
4 If hour matches move on, otherwise find the next match
4.1 If next match is in the next day then roll forwards,
4.2 Reset the minutes and seconds and go to 2
...
*/
Calendar calendar = new GregorianCalendar();
calendar.setTimeZone(this.timeZone);
calendar.setTime(date);
// First, just reset the milliseconds and try to calculate from there...
calendar.set(Calendar.MILLISECOND, 0);
long originalTimestamp = calendar.getTimeInMillis();
doNext(calendar, calendar.get(Calendar.YEAR));
if (calendar.getTimeInMillis() == originalTimestamp) {
// We arrived at the original timestamp - round up to the next whole second and try again...
calendar.add(Calendar.SECOND, 1);
doNext(calendar, calendar.get(Calendar.YEAR));
}
return calendar.getTime();
}
This works as designed: #14094 intentionally refined the rounding-up there. I'll update that outdated "plan" comment but since it isn't even in javadoc this isn't really a track-worthy issue.
Philippe Perrault opened SPR-14589 and commented
I believe I have found a bug in the CronSequenceGenerator. According to your documentation in the next(...) method the plan is to first round up to the next whole second instead the code just sets the milliseconds filed to 0. I believe the originalTimestamp should be 'long originalTimestamp = calendar.getTimeInMillis() + 1000;' in order to round up to the next second per "The Plan"
Here is the FQDN of the class
org.springframework.scheduling.support.CronSequenceGenerator
Here is the method in question:
public Date next(Date date) {
/*
The plan:
Affects: 3.2.17, 4.2.7, 4.3.1
Issue Links:
The text was updated successfully, but these errors were encountered: