14.06.2013 Views

Databases and Systems

Databases and Systems

Databases and Systems

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

286<br />

LabFlow Workflow Management System<br />

LabFlow provides a Perl5 object-oriented framework for describing laboratory (or<br />

other) workflows, The most significant classes in this framework are Worker, Step,<br />

<strong>and</strong> Router. Workers encapsulate the components which do the computational work<br />

of the information system. The Worker class defines interfaces that allow arbitrary<br />

programs to be connected to the workflow. Steps in LabFlow are analogous to those<br />

in LabBase, but whereas in LabBase a Step merely records data, in LabFlow a Step<br />

embodies the computation that generates the data, <strong>and</strong> the “glue” that connects the<br />

computation to the rest of the information system. (The LabBase <strong>and</strong> LabFlow Step<br />

concepts are so similar that we find it natural to use the same term for both). Each<br />

Step has two parts: an input queue (actually a State) containing Materials that are<br />

waiting for the Step to be performed, <strong>and</strong> a Worker which does the actually<br />

computation. Technically, a Step need not contain a Worker or may employ multiple<br />

Workers, but we will not discuss these complications. Routers connect Steps together<br />

by examining the answer produced by the Step (technically, the answer<br />

produced by the Step’s Worker) <strong>and</strong> deciding where to send the Material for<br />

subsequent processing. The LabFlow framework also includes classes for Materials<br />

<strong>and</strong> States which are analogous to those in LabBase, <strong>and</strong> a LabFlow class to<br />

represent entire workflows. LabFlow contains an “execution engine” that runs a<br />

workflow by invoking its Step repeatedly. A LabFlow can be packaged as a subworkflow<br />

<strong>and</strong> used subroutine-style within another workflow. A key limitation in our<br />

current software is that a given LabFlow operates on a single kind of Material.<br />

The system uses States to keep track of “where” each Material is in a LabFlow.<br />

We have already mentioned that States are used to represent the input queues of each<br />

Step. In addition, each Step has three other built-in States. One of these holds<br />

Materials that are actively being processed by the Step. A second holds Materials for<br />

which the Step (or its Worker) discovered a problem that contraindicates further<br />

progress, e.g., the Step checking for E. coli contamination would place contaminated<br />

Materials in this State. The final built-in State holds Materials that were being<br />

processed by the Step when its Worker or its component crashed; sometimes this is<br />

just a coincidence, but often it reflects a bug in the Worker or component software.<br />

In addition to these built-in States, the workflow designer is responsible for defining<br />

States that represent successful completions of the workflow. The designer may also<br />

define additional failure States, <strong>and</strong> States that represent points where the protocol<br />

“pauses”.<br />

The biggest job in creating a LIMS is to develop or acquire the components since<br />

these do the actual computational work of the project. The next biggest job is todevelop<br />

the Workers since these must accommodate the idiosyncrasies of the<br />

components. A typical system contains many Workers (dozens or more), <strong>and</strong> new<br />

ones must be developed as the computational needs of the project change. It is<br />

reasonable to expect that Workers may be reused in different applications, e.g., the

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!