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>

Reply via email to