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

Bill Sobel commented on STORM-2183:
-----------------------------------

This is 100% reproducible.  If there is a loop in the graph (e.g. C subscribes 
to a steam from D above) then the stateful bolt wrapper queues tuples until it 
receives a state command message on the checkpoint stream.   Because C will not 
forward tuples until it receives one on each channel, D never receives the 
tuple to forward back to C.  It is clear from your comment you did not test 
this, as it is trivial to reproduce.

> BaseStatefulBoltExecutor does not handle cyclic graphs
> ------------------------------------------------------
>
>                 Key: STORM-2183
>                 URL: https://issues.apache.org/jira/browse/STORM-2183
>             Project: Apache Storm
>          Issue Type: Bug
>          Components: storm-core
>    Affects Versions: 1.x
>         Environment: Java 1.8
>            Reporter: Bill Sobel
>              Labels: State, cyclic
>   Original Estimate: 96h
>  Remaining Estimate: 96h
>
> BaseStatefulBoltExecutor::getCheckpointInputTaskCount() returns the number of 
> sources that a state transaction must wait for to process a transaction.  In 
> a graph where there is a loop (e.g. A->B->C->D->C) components 'C' and 'D' the 
> required number of tuples can will never be received.  The function 
> shouldProcessTransaction will never receive the correct number of tuples, 
> because the set required to come back form 'D' to 'C' will never be forwarded 
> from 'C' to  'D' to begin with.  
> Bolt 'C' and 'D' never finish the state initialization step and as such will 
> never pass tuples to their wrapped bolt.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to