<!--
  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="1" start='2009-02-01T01:00Z' end='2009-02-03T23:59Z'
    timezone='UTC' freq_timeunit='DAY' end_of_duration='NONE'>
    <controls>
        <timeout>10</timeout>
        <concurrency>2</concurrency>
        <execution>LIFO</execution>
    </controls>
    <input-events>
        <data-in name='A' dataset='a'>
            <dataset name='a' frequency='1' initial-instance='2009-02-01T00:00Z'
                timezone='UTC' freq_timeunit='HOUR' end_of_duration='NONE'>
                <uri-template>file://#testDir/${YEAR}/${MONTH}/${DAY}/${HOUR}
                </uri-template>
            </dataset>
            <start-instance>${coordext:today(-1,0)}</start-instance>
            <end-instance>${coordext:today(0,0)}</end-instance>
        </data-in>
    </input-events>
    <output-events>
        <data-out name='LOCAL_A' dataset='local_a'>
            <dataset name='local_a' frequency='1'
                initial-instance='2009-02-01T00:00Z' timezone='UTC'
                freq_timeunit='HOUR' end_of_duration='NONE'>
                <uri-template>file://#testDir/${YEAR}/${DAY}
                </uri-template>
            </dataset>
            <instance>${coordext:today(0,0)}</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>