<!--
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.
-->
<workflow-app xmlns="uri:oozie:workflow:0.1" name="recovery-wf">
    <start to="fs1"/>
    <action name="fs1">
        <fs>
            <mkdir path="${nnbase}/p1"/>
        </fs>
        <ok to="fs2"/>
        <error to="k"/>
    </action>
    <action name="fs2">
        <fs>
            <move source="${nnbase}/p1" target="${base}/p2"/>
        </fs>
        <ok to="dec3"/>
        <error to="k"/>
    </action>
    <decision name="dec3">
        <switch>
            <case to="fs4">${fs:exists(concat(nnbase, '/p2'))}</case>
            <default to="k"/>
        </switch>
    </decision>
    <action name="fs4">
        <fs>
            <move source="${nnbase}/p2" target="${base}/p3"/>
        </fs>
        <ok to="end"/>
        <error to="k"/>
    </action>
    <kill name="k">
        <message>kill</message>
    </kill>
    <end name="end"/>
</workflow-app>
