2014-03-25 187 views
0

我在主工作流程中創建了子工作流程,並且它們在序列中調用,意味着當完成後會觸發下一個子工作流程,但是在子工作流程失敗時,我的主工作流程不會中止並且下一個子工作流程正在觸發。主工作流程示例如下:如何在子工作流失敗時中止oozie工作流?

<?xml version="1.0"?> 
<workflow-app xmlns="uri:oozie:workflow:0.4" name="Mainworkflow_"> 
    <start to="subworkflow-node-abc"/> 
    <action name="subworkflow-node-abc"> 
    <sub-workflow> 
     <app-path>hdfs://link/abc.xml</app-path> 
     <configuration> 
     <property> 
      <name>autoReconnect</name> 
      <value>true</value> 
     </property> 
     <property> 
      <name>TableName</name> 
      <value>abc</value> 
     </property> 
     <property> 
      <name>targetDirPath</name> 
      <value>${targetDirPath}</value> 
     </property> 
     </configuration> 
    </sub-workflow> 
    <ok to="subworkflow-node-def"/> 
    <error to="kill"/> 
    </action> 
    <action name="subworkflow-node-def"> 
    <sub-workflow> 
     <app-path>hdfs://def.xml</app-path> 
     <configuration> 
     <property> 
      <name>autoReconnect</name> 
      <value>true</value> 
     </property> 
     <property> 
      <name>TableName</name> 
      <value>def</value> 
     </property> 
     <property> 
      <name>targetDirPath</name> 
      <value>${targetDirPath}</value> 
     </property> 
     </configuration> 
    </sub-workflow> 
    <ok to="end"/> 
    <error to="kill"/> 
    </action> 
    <kill name="kill"> 
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
    </kill> 
    <end name="end"/> 
</workflow-app> 

所以在上面的例子中,第二個工作流程正在被觸發。任何人都可以告訴方式殺死主要工作流程,以防止它中止。

回答

0

出現了不同的錯誤。由於錯誤,Kill節點沒有得到執行。我們必須僅在主工作流程中使用EL命令,因此在Kill節點,工作流程具有其他參數,這使得殺死節點被卡住,主要工作流程不會中止。

0

可以使用Decision Control Node

例如,如果SUV的工作流的輸出不存在 - 發送結束/失敗。

+0

出現了不同的錯誤。由於錯誤,Kill節點沒有得到執行。我們必須僅在主工作流程中使用EL命令,因此在Kill節點,工作流程的另一個參數使kill節點停滯不前,主工作流程也沒有中止。 –