[
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)