A UNICORE job is a directed acyclic graph. The execution order of the tasks may be defined by dependencies. If no dependencies are defined, tasks are executed in arbitrary order or even in parallel. Each task can have one or more predecessors and one or more successors.
The dependencies are defined using the dependency editor in the right part of the job group panel.
When a task is selected a new dependency can be dragged to a second task with the right mouse button pressed. When the second task is highlighted the mouse button can be released and the new dependency will be established. The editor will not accept cyclic dependencies, because these would result in invalid Unicore jobs.
A dependency can be removed with a right mouse click. A small popup menu will then show up and give you the possibility to "Remove" the dependency from the graph.
Using the left mouse button, tasks and dependencies can be selected and moved in the graph. The graph layout will be stored with the job and will appear next time the job will be loaded.
If you do not want to drag around the tasks in the graph yourself you can use the "Arrange Graph" button at the bottom of the dependency editor. This will arrange the tasks automatically for you.
When using dependencies to specify a certain workflow the default behaviour of the UNICORE system is to abandon the successor action if the predecessor action fails. However, there are situations where only a temporal dependency is required, i.e. the successor action shall still be executed, independent of the outcome of the predecessor action. This mode can be enforced by setting the "Ignore failure" flag for the predecessor action. Scenarios for its use are:
Before execution of an application a restart file is imported. The application decides - based on the existence of the restart file - whether to restart or to start from the beginning. Therefore it makes sense to continue with the application even if the import has failed. The "Ignore failure" flag has to be set for the import action.
The condition of the new workflow task "IfThenElse" can be the status or return code of a previous action. The order has to be specified in the usual way by setting a direct or indirect dependency between the action and the IfThenElse task. An additional requirement is that the execution of the IfThenElse task is performed also if the predecessor action fails, because it is this outcome which will trigger the "Then" or "Else" branch. The "Ignore Failure" flag has to be set for the condition task of the IfThenElse.
The Ignore Failure flag is set in the Dependency Panel. Select one of the tasks or sub-jobs. By clicking the right mouse key a pop-up menu will show up where you can set the flag.
NB.: Clicking means to press and to release the key. Keeping the key pressed is used to drag a dependency arrow to a different action.