The spout will ignore any acks or fails after the first one to account for this possibility.
On Mon, Dec 22, 2014 at 8:10 AM, Daniel Schonfeld <[email protected]> wrote: > > Hello, > > I am trying to understand some of the storm code base and I've run into > this question regarding the use of RotatingMap in acker.clj and > executor.clj. It's probably my lack of understand of how the code works, > but i figured there is no harm in asking. > > So I see that in the spout, the rotating map combined with a tick tuple > set to TOPOLOGY-MESSAGE-TIMEOUT-SECS is used to timeout the tuple at the > spout subsequently calling the fail() method. > > I also see that inside the acker the same mechanism is used. > > The question is what happens when the spout fails the tuple from a > timeout, but the bolts continue processing the tuple's children so part of > the tuple DAG. They keep sending ACK messages to the acker and update the > key in the RotatingMap there by causing the tuple to not timeout at the > acker even though it already did at the spout. > > Is there a possibility of receiving both a fail() and an ack() at the > *spout* given the above condition? > > Thanks! > Daniel > -- Twitter: @nathanmarz http://nathanmarz.com
