You are correct about the put restarting the clock for removing the tuple tree from the acker map, but the timeout code in the acker does not trigger a timeout of a tuple, it just purges the tuple from the ackers memory. The timeout code for a tuple is actually in the spout. It has a corresponding RotatingMap https://github.com/apache/storm/blob/master/storm-core/src/clj/backtype/storm/daemon/executor.clj#L493 It does a put once, when the tuple is emitted, and when it expires the fail is called. - Bobby
On Monday, November 16, 2015 6:46 AM, Stephen Powis <spo...@salesforce.com> wrote: I'm trying to better understand the acker behavior and how it deals with tuple time outs. I've read the documentation on the storm website, but from my rudimentary knowledge of clojure, it seems like the docs and the code don't completely align (or I'm completely missing something) The short of it is I'm wondering if the line linked below in acker.clj resets the tuple timeout value every time a bolt acks a tuple: https://github.com/apache/storm/blob/master/storm-core/src/clj/backtype/storm/daemon/acker.clj#L65 It seems like for every tuple coming into the acker, it calls rotatingMap.put() on the instance, which in turn resets its timeout countdown. Does this sound correct?