<!--
  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 xmlns="uri:oozie:coordinator:0.2" name="NAME" frequency="${coord:days(1)}" start="2009-02-01T01:00Z" end="2009-02-03T23:59Z" timezone="UTC">
  <controls>
    <concurrency>2</concurrency>
    <execution>LIFO</execution>
  </controls>
  <datasets>
    <dataset name="a" frequency="${coord:days(7)}" initial-instance="2009-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">
    <start-instance>${coord:latest(0)}</start-instance>
    <end-instance>${coord:latest(0)},${coord:latest(-1)}</end-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>