Some of the content of this page has been adapted from sections of the paper by Tom Oinn et al.
The Freefluo engine used by Taverna 1.7.x relieves the user of most of the details of the execution flow of the workflow and expands on control flow. It manages list and tree data structures, implicitly iterates over collections of inputs and implements fault recovery strategies on behalf of the user. This saves the user explicitly handling these within Taverna 1.7.x Workbench and avoids mixing the mechanics of the workflow with its conceptual purpose. The Scufl produced by the Taverna 1.7.x Workbench is simplified to the extent that these are implicit. (A drawback is that an expert user needs to understand the behavioural semantics of this layer to avoid duplicating the implicit behaviour.)
The Freefluo engine fills in these implicit assumptions by interpreting a model that encodes the data that pass through a workflow run. This data model is lightweight; it contains some basic data structures such as lists and trees, and enables the decoration of data with MIME types.
List handling
The addition of data structures such as lists to the model brings about an added complexity. There are a number of ways in which the list could be handled by the service. Taverna uses an implicit, but configurable, iteration mechanism. When a processor takes a single list as inputs, the enactment engine will invoke the processor multiple times and collate the results into a new list. Where a processor takes two (or more) list inputs, the service will be invoked with either the cross or dot product of the two lists.
Fault tolerance
Taverna supports fault tolerance through a configurable mechanism; processor will retry a failed service invocation a number of times, often with increasing delays, between retry attempts before, finally, reporting failure. Users can specify alternate services for any Scufl processor in the order they should be substituted. Alternative services are typically either an identical service supplied by an alternative service provider or, rarely, a completely different service that the user deems to be substitutable without damaging the workflow’s intention. As alternates are few, they are currently predefined statically before the execution of the workflow.







