<workflow-app name="gen_doi_author_list" xmlns="uri:oozie:workflow:0.5">
<parameters>
    <property>
        <name>sparkDriverMemory</name>
        <description>memory for driver process</description>
    </property>
    <property>
        <name>sparkExecutorMemory</name>
        <description>memory for individual executor</description>
    </property>
    <property>
        <name>sparkExecutorCores</name>
        <description>number of cores used by single executor</description>
    </property>
    <property>
        <name>spark2MaxExecutors</name>
        <value>20</value>
    </property>
    <property>
        <name>oozieActionShareLibForSpark2</name>
        <description>oozie action sharelib for spark 2.*</description>
    </property>
    <property>
        <name>spark2ExtraListeners</name>
        <value>com.cloudera.spark.lineage.NavigatorAppListener</value>
        <description>spark 2.* extra listeners classname</description>
    </property>
    <property>
        <name>spark2SqlQueryExecutionListeners</name>
        <value>com.cloudera.spark.lineage.NavigatorQueryListener</value>
        <description>spark 2.* sql query execution listeners classname</description>
    </property>
    <property>
        <name>spark2YarnHistoryServerAddress</name>
        <description>spark 2.* yarn history server address</description>
    </property>
    <property>
        <name>spark2EventLogDir</name>
        <description>spark 2.* event log dir location</description>
    </property>
    <property>
        <name>workingPath</name>
        <description>the working dir base path</description>
    </property>
</parameters>

<global>
    <job-tracker>${jobTracker}</job-tracker>
    <name-node>${nameNode}</name-node>
    <configuration>
        <property>
            <name>oozie.action.sharelib.for.spark</name>
            <value>${oozieActionShareLibForSpark2}</value>
        </property>
    </configuration>
</global>

<start to="ResetWorkingPath"/>

<kill name="Kill">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>

<action name="ResetWorkingPath">
    <fs>
        <delete path='${workingPath}/doi_author_list'/>
    </fs>
    <ok to="GenDoiAuthorList"/>
    <error to="Kill"/>
</action>

<action name="GenDoiAuthorList">
    <spark xmlns="uri:oozie:spark-action:0.2">
        <master>yarn-cluster</master>
        <mode>cluster</mode>
        <name>GenDoiAuthorList</name>
        <class>eu.dnetlib.doiboost.orcid.SparkGenerateDoiAuthorList</class>
        <jar>dhp-doiboost-${projectVersion}.jar</jar>
        <spark-opts>
            --executor-memory=${sparkExecutorMemory}
            --driver-memory=${sparkDriverMemory}
            --conf spark.extraListeners=${spark2ExtraListeners}
            --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress}
            --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir}
            --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners}
            --conf spark.dynamicAllocation.enabled=true
            --conf spark.dynamicAllocation.maxExecutors=${spark2MaxExecutors}
        </spark-opts>
        <arg>-w</arg><arg>${workingPath}/</arg>
        <arg>-a</arg><arg>authors/authors.seq</arg>
        <arg>-xw</arg><arg>xml/works/*.seq</arg>
        <arg>-o</arg><arg>doi_author_list/</arg>
    </spark>
    <ok to="End"/>
    <error to="Kill"/>
</action>

<end name="End"/>
</workflow-app>