<!-- 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.3" name="test-coord"
frequency="1" freq_timeunit="DAY" start="2009-08-20T01:00Z" end="2009-10-10T23:59Z"
timezone="UTC" end_of_duration="NONE">
   <controls>
      <timeout>10</timeout>
      <concurrency>2</concurrency>
      <execution>LIFO</execution>
   </controls>
   <input-events>
      <data-in name="input" dataset="logs">
         <dataset name="logs" frequency="30" initial-instance="2008-08-20T01:17Z"
         timezone="UTC" freq_timeunit="MINUTE" end_of_duration="NONE">
            <uri-template>hdfs:///tmp/workflows/${YEAR}/${MONTH}/${DAY}/${HOUR}/${MINUTE};region=us</uri-template>
         </dataset>
         <start-instance>${startInstance}</start-instance>
         <end-instance>${endInstance}</end-instance>
      </data-in>
   </input-events>
   <action>
      <workflow>
         <app-path>hdfs:///tmp/workflows/</app-path>
      </workflow>
   </action>
</coordinator-app>