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

Reply via email to