It seems the tzOffset() function is not accounting for DST. I am in Pacific
Daylight Saving Time right now, which is a -7 offset from UTC. However, a
coordinator configured to use tzOffset to calculate localtime paths and date
strings is returning offsets of -8, which is the Standard Time offset.
Below is a test coordinator I put together for debugging purposes along with
dryrun output showing that it's offsetting by -8 hours. Can someone please
verify if the tzOffset() function is supposed to be accounting for time changes?
Thank you,
Paul Chavez
Relevant part of coordinator XML, I'm trying to get both the Current hour
(local) when the coordinator triggers, as well as the Previous hour. The
coordinator was submitted with a start date of 5pm UTC which is currently 10am
Pacific Daylight Time.
<coordinator-app xmlns="uri:oozie:coordinator:0.1" name="Test tzOffset"
frequency="60" start="2013-05-14T17:00Z" end="2013-11-01T08:30Z" timezone="UTC"
freq_timeunit="MINUTE" end_of_duration="NONE">
<input-events>
<data-in name="CurrentHourLogs" dataset="LogPath">
<dataset name="LogPath" frequency="60"
initial-instance="2013-04-27T07:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>hdfs://nameservice1/logs/datekey=${YEAR}${MONTH}${DAY}/hour=${HOUR}</uri-template>
<done-flag />
</dataset>
<instance>${coord:current(coord:tzOffset()/60)}</instance>
</data-in>
</input-events>
<output-events>
<data-out name="CurrentHour" dataset="IntHour">
<dataset name="IntHour" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${HOUR}</uri-template>
</dataset>
<instance>${coord:current(coord:tzOffset()/60)}</instance>
</data-out>
<data-out name="CurrentDay" dataset="IntDay">
<dataset name="IntDay" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${YEAR}${MONTH}${DAY}</uri-template>
</dataset>
<instance>${coord:current(coord:tzOffset()/60)}</instance>
</data-out>
<data-out name="PreviousHour" dataset="IntHour">
<dataset name="IntHour" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${HOUR}</uri-template>
</dataset>
<instance>${coord:current((coord:tzOffset()/60)-1)}</instance>
</data-out>
<data-out name="PreviousDay" dataset="IntDay">
<dataset name="IntDay" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${YEAR}${MONTH}${DAY}</uri-template>
</dataset>
<instance>${coord:current((coord:tzOffset()/60)-1)}</instance>
</data-out>
</output-events>
Dryrun output, expecting CurrentHour to be 10 and PreviousHour to be 09:
coordAction instance: 1:
<coordinator-app xmlns="uri:oozie:coordinator:0.1" name="Test tzOffset"
frequency="60" timezone="UTC" freq_timeunit="MINUTE" end_of_duration="NONE"
instance-number="1" action-nominal-time="2013-05-14T17:00Z"
action-actual-time="2013-05-14T17:14Z">
<input-events>
<data-in name="CurrentHourLogs" dataset="LogPath">
<uris>hdfs://nameservice1/logs/datekey=20130514/hour=09</uris>
<dataset name="LogPath" frequency="60"
initial-instance="2013-04-27T07:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>hdfs://nameservice1/logs/datekey=${YEAR}${MONTH}${DAY}/hour=${HOUR}</uri-template>
<done-flag />
</dataset>
</data-in>
</input-events>
<output-events>
<data-out name="CurrentHour" dataset="IntHour">
<uris>09</uris>
<dataset name="IntHour" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${HOUR}</uri-template>
</dataset>
</data-out>
<data-out name="CurrentDay" dataset="IntDay">
<uris>20130514</uris>
<dataset name="IntDay" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${YEAR}${MONTH}${DAY}</uri-template>
</dataset>
</data-out>
<data-out name="PreviousHour" dataset="IntHour">
<uris>08</uris>
<dataset name="IntHour" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${HOUR}</uri-template>
</dataset>
</data-out>
<data-out name="PreviousDay" dataset="IntDay">
<uris>20130514</uris>
<dataset name="IntDay" frequency="60"
initial-instance="2013-05-09T00:00Z" timezone="America/Los_Angeles"
freq_timeunit="MINUTE" end_of_duration="NONE">
<uri-template>${YEAR}${MONTH}${DAY}</uri-template>
</dataset>
</data-out>
</output-events>