[
https://issues.apache.org/jira/browse/OFBIZ-9374?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jacques Le Roux updated OFBIZ-9374:
-----------------------------------
Fix Version/s: (was: Release Branch 16.11)
16.11.03
Hi Michael,
We don't use the "Released versions" in the "Fix Version/s" field for the
pending release but the corresponding one in "Unreleased versions". So I
changed from "Release Branch R16.11" to "16.11.03"
I know the rules are a bit complicated, I tried to explain them here
https://cwiki.apache.org/confluence/display/OFBADMIN/OFBiz+Committers+Roles+and+Responsibilities#OFBizCommittersRolesandResponsibilities-ManageJIRA%27sissues
To complete: last exchange with Jacopo about it https://s.apache.org/awBU
Thanks
> Fix TemporalExpressions.Frequency to avoid moving job start times away from
> given freqCount raster
> ---------------------------------------------------------------------------------------------------
>
> Key: OFBIZ-9374
> URL: https://issues.apache.org/jira/browse/OFBIZ-9374
> Project: OFBiz
> Issue Type: Bug
> Components: framework
> Affects Versions: Trunk
> Reporter: Tobias Laufkötter
> Assignee: Michael Brohl
> Fix For: Release Branch 14.12, Release Branch 15.12, 16.11.03
>
> Attachments: OFBIZ-9374.patch
>
>
> If a job is scheduled using TemporalExpressions.Frequency the start time of
> the job will gradually move forward when the excecution of the job is delayed
> by one or more units of the frequency type.
> Example: Job is set up to start at 2017-01-01 00:00:00 and run every ten
> minutes. One month later due to some circumstances the job starts at
> 2017-02-01 00:01:01 which results in the next execution to be scheduled at
> 2017-02-01 01:11:00 in stead of 2017-02-01 01:10:00.
> The reason behind this behaviour is the
> TemporalExpressions.Frequency#prepareCal function. It has the purpose to jump
> from the first starting time to the latest possible execution of the job. But
> instead it just sets it to the current time (with the precision of the chosen
> frequency type) and calculates the next execution time from this point.
> {code:title=Frequencies.java}
> protected Calendar prepareCal(Calendar cal) {
> // Performs a "sane" skip forward in time - avoids time consuming
> loops
> // like incrementing every second from Jan 1 2000 until today
> Calendar skip = (Calendar) cal.clone();
> skip.setTime(this.start);
> long deltaMillis = cal.getTimeInMillis() - this.start.getTime();
> if (deltaMillis < 1000) {
> return skip;
> }
> long divisor = deltaMillis;
> if (this.freqType == Calendar.DAY_OF_MONTH) {
> divisor = 86400000;
> } else if (this.freqType == Calendar.HOUR) {
> divisor = 3600000;
> } else if (this.freqType == Calendar.MINUTE) {
> divisor = 60000;
> } else if (this.freqType == Calendar.SECOND) {
> divisor = 1000;
> } else {
> return skip;
> }
> float units = deltaMillis / divisor;
> units = (units / this.freqCount) * this.freqCount;
> skip.add(this.freqType, (int)units);
> while (skip.after(cal)) {
> skip.add(this.freqType, -this.freqCount);
> }
> return skip;
> }
> {code}
> The error is at {{units = (units / this.freqCount) * this.freqCount;}}. This
> is no operation. What should have been done (and to me it looks like this was
> the intention), is a substraction of the remainder of an integer division of
> {{units}} and {{this.freqCount}} to get the number of units of the frequency
> type that have passed since the first start time.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)