Hi Fireworks Folks,
We’re building an application that manages data and processing within a facility. I’ve started looking at Fireworks as a possible solution to some of our workflow tasks. The philosophy and toolset seems to match really well with our development. I’ve been reading the docs and running the tutorials, but I’m left with a few questions that I’m hoping you can suggest some approaches.
The first question is how to handle “human” tasks. An example of one of our human tasks would be loading a tape. We want to execute a workflow where some of the data is currently offline. I’d like to have a task that basically pauses the workflow and asks the human to load the tape. When the tape is loaded we restart the workflow and finish the processing.
One option seems to be to fizzle the workflow and the resume it. The problem is that fizzle seems too harsh. Since any exception is shown as a fizzle it might be problematic mixing the pause with failures.
Another option would be to have a task that just went to sleep and woke up periodically to check external sources to see if the task is done. My concern there is that I don’t want to hold up a compute resource when the task is sleeping. Could I lower the priority on that task and let other tasks run? Fundamentally it feels sort of wrong to leave a task sitting idle like that.
Is there a better approach?
I’m also wondering if there’s some way to do branched workflows. For example, I might want to have one path that occurs if the task executes successfully and a different branch if the task fails. The failure path might attempt to perform some self healing, notify someone, etc, before it loops back to retry the task. Another example is a conditional task that looks at its input and decides which branch of a workflow to take. My failure path might keep a counter of the number of times a task is retried and give up if it has tried too many times.
It seems like I could create a set of fireworks templates that broke up the task to before, doit, heal, after. Then has the tasks launch before, which eventually launches doit. If doit works it launches after. If it doesn’t it launches heal, which again launches doit. If they passed around a retry counter the heal routine could eventually fail if the retry counter was too high. That just seems fairly complicated and would make monitoring much more difficult, since you’d have a bunch of separate fireworks to track for the original workflow.
Is there a way to create conditional branches in the workflow?