[
https://issues.apache.org/jira/browse/OOZIE-2494?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15294361#comment-15294361
]
Peter Bacsko commented on OOZIE-2494:
-------------------------------------
Attached first version of the patch.
Some notes:
1) I talked with Robert. The way Oozie works is the following: timestamp is
always interpreted in UTC (so-called "Oozie processing time zone"). Timezone is
only used for determining proper DST.
2) CronExpression has a setTimeZone() method. However I didn't get it work
because it produced some funky results that I didn't understand so I chose a
different approach.
3) After calculating nextTime, we check if we went through a DST shift in
either direction. If we did, then we either add or subtract the DST offset
(which is supposed to be 1h in for all zones, but we determine it dynamically
just to be safe).
To do:
1) Tests with edge cases
2) Some Java docs
> Cron syntax not handling DST properly
> -------------------------------------
>
> Key: OOZIE-2494
> URL: https://issues.apache.org/jira/browse/OOZIE-2494
> Project: Oozie
> Issue Type: Bug
> Components: coordinator
> Affects Versions: 4.2.0
> Reporter: Dennis Pallett
> Assignee: Peter Bacsko
> Priority: Blocker
> Attachments: OOZIE-2494-001.patch
>
>
> When specifying a coordinator frequency, you can also specify a "timezone".
> While the frequency is always calculated in UTC, the timezone’s DST rules are
> still applied. We can see this in the following two Coordinators, which ran
> across the DST shift (March 13 2016 at 2am) for the America/Los_Angeles
> timezone. The "el-UTC" job has "UTC" as the timezone, while the "el-LA" job
> has “America/Los_Angeles” as the timezone. Both jobs have a frequency of
> {{$\{coord:days(1)\}}}.
> {noformat}
> Job Name : el-UTC
> Start Time : 2016-03-13 01:10 GMT | 2016-03-12 17:10 PST
> ---------------------------------------------------------
> ID Nominal Time (UTC) Nominal Time (LA)
> @1 2016-03-13 01:10 GMT 2016-03-12 17:10 PST
> @2 2016-03-14 01:10 GMT 2016-03-13 18:10 PDT
> {noformat}
> {noformat}
> Job Name : el-LA
> Start Time : 2016-03-13 01:10 GMT | 2016-03-12 17:10 PST
> ---------------------------------------------------------
> ID Nominal Time (UTC) Nominal Time (LA)
> @1 2016-03-13 01:10 GMT 2016-03-12 17:10 PST
> @2 2016-03-14 00:10 GMT 2016-03-13 17:10 PDT
> {noformat}
> As you can see, @2’s nominal time is adjusted to an hour earlier in the
> "el-LA" job, but not in the "el-UTC" job.
> However, when running a similar set of jobs, but using cron syntax [({{10 1
> 1/1 * *}}|http://crontab.guru/#10_1_1/1_*_*], which indicates 1:10 every day
> of every month), this isn’t the case:
> {noformat}
> Job Name : cron-UTC
> Start Time : 2016-03-13 01:08 GMT | 2016-03-12 17:08 PST
> ---------------------------------------------------------
> ID Nominal Time (UTC) Nominal Time (LA)
> @1 2016-03-13 01:10 GMT 2016-03-12 17:10 PST
> @2 2016-03-14 01:10 GMT 2016-03-13 18:10 PDT
> {noformat}
> {noformat}
> Job Name : cron-LA
> Start Time : 2016-03-13 01:08 GMT | 2016-03-12 17:08 PST
> ---------------------------------------------------------
> ID Nominal Time (UTC) Nominal Time (LA)
> @1 2016-03-13 01:10 GMT 2016-03-12 17:10 PST
> @2 2016-03-14 01:10 GMT 2016-03-13 18:10 PDT
> {noformat}
> As you can see, @2’s nominal time are the same in both the "cron-UTC" and
> "cron-LA" jobs. The "cron-LA" job should have the same nominal time as the
> "el-LA" job from earlier.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)