On Thu, 2009-08-06 at 15:01 -0400, Bob Cronin wrote:
> Just for my own edification, could you explain in a bit more detail
> why Lookup doesn't terminate when the records I am NOT feeding back to
> it via the fanintwo (i.e. what would constitute the sole source of
> records on the primary input were the fanintwo not there) runs out? I
> mean, if there's no more records there, there's no chance anything
> else will arrive on the secondary input of the fanintwo ...

Bob,  here in essence is your pipeline:
   . . . |
f: fanintwo |
l: lookup |
   . . .

l: | f:

"fanintwo" doesn't terminate until either its output stream
goes to end-of-file (i.e., "lookup" terminates) or BOTH of its
input streams go to end-of-file.

Its first input stream will go to end-of-file when all of the
input records have been processed.  But its secondary input
stream won't terminate until "lookup" terminates.

"lookup" won't terminate until it sees end-of-file on its
input (or until all of its outputs go to end-of-file, which
doesn't happen here).

Thus, "lookup" is waiting for "fanintwo" to terminate, and
"fanintwo" is waiting for "lookup" to terminate.  There is
no way for either of them to know that there are no more
records.  As long as they still have an input stream
connected, which both of them do, they have to continue
running in case any more records show up.

This is a classic stall.

Does that help?

Melinda

Reply via email to