Correct, that's the line that guards it. In Clojure destructuring nil like that causes all the destructured fields to be nil.
On Tue, Dec 23, 2014 at 7:20 AM, Daniel Schonfeld <[email protected]> wrote: > > Nathan, > > Is that guarded in executor.clj by the (when spout-id clause (on 441 on > v0.9.3 tag)? I'm assuming it would all be null since (.remove pending id) > would return back bulk after the first. > > Is my reading / understanding correct? > > Thanks much! It's interesting to look at the internals and see how our > topologies are powered. > > Daniel > > On Tuesday, December 23, 2014, Nathan Marz <[email protected]> wrote: > >> 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 >> > -- Twitter: @nathanmarz http://nathanmarz.com
