[kepler-users] token matching mixup due to unmatched boolean switches
Edward A. Lee
eal at eecs.berkeley.edu
Thu Oct 15 13:27:59 PDT 2009
The problem here is that you have an implicit notion of time,
and that notion is absent in PN.
I suggest using the SR director.
Edward
Tirath Ramdas wrote:
> Hi all,
>
> I have a situation which I have been able to address in a "kludgy" way,
> but I wonder if there may be a better way, so I am presenting the
> problem and my proposed solution here for your critique and
> counter-suggestions. I am sure it's a situation that many others have
> encountered. This is with the PN director: I'm not sure how, if at all,
> the DDF director might help. Anyway, here goes...
>
> THE PROBLEM:
>
> Let's say I have a single source of data that has to go through 3
> actors: A, B, and C. They are laid out in a fork/join configuration. The
> DataSource goes to A and B, and the outputs from those two actors go to
> C. In dot notation, this is what my business logic graph looks like:
>
> DataSource -> TaskA;
> DataSource -> TaskB;
> TaskA -> TaskC;
> TaskB -> TaskC;
>
> This is a trivial workflow. But now, I want to make my TaskA actor more
> sophisticated and detect failures in the computation (I mean business
> logic failures - not the kind of thing that can be fixed by
> re-execution). I will include in TaskA a boolean switch to detect
> successful jobs and push tokens to the output port only when they are
> good. But the important thing is that one bad piece of data should not
> stop the workflow: the rest of the data gets processed as usual.
>
> The problem is, TaskB never knows when one of TaskA's jobs fails, and it
> dutifully pushes all of it's tokens through. As a result, TaskC gets
> mixed up tokens.
>
> A contrived but indicative example: let's say my DataSource is a Ramp
> producing 1 to 9, TaskB is simply an expression that pushes all tokens
> through, and TaskA has an "error condition" where a token value "5" is
> considered an error and routed to the error port instead of the normal
> output port. Task C just merges both it's inputs into a 2-element array.
> A sample Kepler workflow is here:http://pastebin.com/m2faecfb3
>
> What happens is this:
>
> {0, 0}
> {1, 1}
> {2, 2}
> {3, 3}
> {4, 4}
> {6, 5} <- problem starts here
> {7, 6} <-
> {8, 7} <-
> {9, 8} <-
>
> What I want to see is this:
>
> {0, 0}
> {1, 1}
> {2, 2}
> {3, 3}
> {4, 4}
> {6, 6} <- desired result
> {7, 7} <-
> {8, 8} <-
> {9, 9} <-
>
> MY KLUDGE:
>
> I hacked around this simply by passing all of TaskB's results through
> "passthrough" ports in TaskA, so that TaskA's condition checking can be
> effectively applied to TaskB's results as well. This is ugly and
> seriously detracts from the business process flow that I want to express.
>
> I don't want to make TaskC responsible for doing TaskB's error checking:
> what if my TaskC is a very generic actor? In practice TaskB's
> error-checking is highly application-specific (grep-ing the output of a
> computational chemistry legacy app).
>
> However, I did consider a more generic approach to exception handling
> that would in fact place the burden on TaskC: I considered the
> possibility of mandating that every actor must output a record which
> contains the output data and also a "predication" [1] field. The
> predication field indicates when the data is valid. Any actor receiving
> tokens only proceeds with the computation if the predication fields on
> all it's inputs are set to valid; if even one is invalid, the whole lot
> gets routed to an error bin, but the next lot gets processed as though
> nothing went wrong. Also I vaguely recall reading that some other
> workflow engine does something like this. Anyway, I did not proceed with
> this yet because it sounds like a non-trivial amount of work to modify
> all the actors I use to adhere to this behavior.
>
> Any other ideas?
>
> regards,
> -tirath
>
> [1] Borrowing the word "predication" from Intel's Itanium branch
> misprediction handling, not sure who they borrowed the term from.
>
> _______________________________________________
> Kepler-users mailing list
> Kepler-users at kepler-project.org
> http://mercury.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
-------------- next part --------------
A non-text attachment was scrubbed...
Name: eal.vcf
Type: text/x-vcard
Size: 351 bytes
Desc: not available
URL: <http://lists.nceas.ucsb.edu/kepler/pipermail/kepler-users/attachments/20091015/89a101e7/attachment.vcf>
More information about the Kepler-users
mailing list