<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<coordinator-app name="NAME" frequency="${coord:days(1)}" start="2009-02-01T01:00Z" end="2009-02-03T23:59Z" timezone="UTC" xmlns="uri:oozie:coordinator:0.2">
 <controls>
  <concurrency>2</concurrency>
  <execution>LIFO</execution>
 </controls>
 <datasets>
	<!-- Note the initial-instance is set to a date older than the default date Jan 01, 1970 00:00Z. -->
  <dataset name="a" frequency="${coord:days(7)}" initial-instance="1960-02-01T01:00Z" timezone="UTC">
   <uri-template>file:///tmp/coord/workflows/${YEAR}/${DAY}</uri-template>
  </dataset>
  <dataset name="local_a" frequency="${coord:days(7)}" initial-instance="2009-02-01T01:00Z" timezone="UTC">
   <uri-template>file:///tmp/coord/workflows/${YEAR}/${DAY}</uri-template>
  </dataset>
 </datasets>
 <input-events>
   <data-in name="A" dataset="a">
     <instance>${coord:latest(0)}</instance>
   </data-in>
 </input-events>
 <output-events>
   <data-out name="LOCAL_A" dataset="local_a">
     <instance>${coord:current(-1)}</instance>
   </data-out>
 </output-events>
 <action>
  <workflow>
   <app-path>hdfs:///tmp/workflows/</app-path>
   <configuration>
    <property>
     <name>inputA</name>
     <value>${coord:dataIn('A')}</value>
    </property>
    <property>
     <name>inputB</name>
     <value>${coord:dataOut('LOCAL_A')}</value>
    </property>
   </configuration>
  </workflow>
 </action>
</coordinator-app>
