Github user roshannaik commented on a diff in the pull request:

    https://github.com/apache/storm/pull/2241#discussion_r135695333
  
    --- Diff: conf/defaults.yaml ---
    @@ -231,20 +234,35 @@ topology.multilang.serializer: 
"org.apache.storm.multilang.JsonSerializer"
     topology.shellbolt.max.pending: 100
     topology.skip.missing.kryo.registrations: false
     topology.max.task.parallelism: null
    -topology.max.spout.pending: null
    +topology.max.spout.pending: 995  # Used in ACK mode only. Should be less 
than `topology.executor.receive.buffer.size` to avoid deadlocked cycles 
involving ACKer
    --- End diff --
    
    I agree and yes I am still looking to avoid relying on this. 
    Unfortunately discovered a corner case during testing that requires it as 
of now ... which i alluded to in that comment.  
    
    **Details:** The issue is that ACKer bolt creates a cycle in the topology. 
So if ACKer bolt's recvQ is full, and also the spout's recvQ is full. Then 
spout & ACKer can end up in a deadlock while trying to send msg to each other. 
    
    Setting m.s.p to a value slightly smaller than the recvQ size avoids this 
situation. 
    
    One option is to make this an internal setting that is automatically set 
based on the revQ size and users dont have to set. 
    I am investigating an alternative that allows the spout to process incoming 
ACKs if outbound Q is full...and thus break the deadlock. 
    
    Hope to revert that setting back to null soon. 
    I do not plan to remove that setting as now. Will remove it after ensuring 
@revans2's prior noted concerns in relation to removing it have been addressed.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to