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