[ 
https://issues.apache.org/jira/browse/STORM-3514?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16942263#comment-16942263
 ] 

Stig Rohde Døssing commented on STORM-3514:
-------------------------------------------

I took a look at where Storm actually uses the "topology.message.timeout.secs" 
parameter, and it is only used here 
https://github.com/apache/storm/blob/v1.2.3/storm-core/src/clj/org/apache/storm/daemon/executor.clj#L361

What happens in that line is when we decide whether or not to enable tick 
tuples for an executor. Tick tuples are sent periodically to bolts for 
timekeeping, and are used for timing out tuples in the spout, and to make sure 
that ackers don't keep around data for failed tuples for longer than necessary. 
Tick tuples can only affect acking of tuples in the sense that they can cause 
the ackers to throw away data about still live tuples. As you may note in the 
linked code, ackers still receive ticks even when 
"topology.message.timeout.secs" is false. This may or may not have been 
intentional, but it's probably why you're seeing this issue. When the normal 
tuple timeout (30s) is reached, the acker will throw away data about your live 
tuple, so when it receives acks it doesn't know what to do with them.

We can fix this by also disabling tick tuples for ackers if the 
"topology.message.timeout.secs" is false.

As an aside, you may consider upgrading to Storm 2.0.0, as it has a new 
backpressure mechanism that doesn't depend on the ackers, so you could probably 
disable acking entirely if you upgraded to that version.

> "topology.enable.message.timeouts: false" has no effect on ackers
> -----------------------------------------------------------------
>
>                 Key: STORM-3514
>                 URL: https://issues.apache.org/jira/browse/STORM-3514
>             Project: Apache Storm
>          Issue Type: Bug
>    Affects Versions: 1.2.3
>            Reporter: Evgheni Melman
>            Priority: Major
>
> "topology.enable.message.timeouts: false" does prevent tuples from being 
> failed if not acked in "topology.message.timeout.secs" seconds, but it still 
> prevents __ackers from acking anchored tuples to the spout. When used with 
> "topology.max.spout.pending" this effectively stalls the spout completely as 
> the tuple is neither failed, nor acked.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to