Hi Alexander, If I understand correctly, you have a stateful bolt and a windowed bolt that extends BaseWindowedBolt in your topology and the tuples are acked before the execute method of the windowed bolt is invoked. I think this is because we auto ack the non-stateful bolt (windowed bolt) tuples. This should get fixed with the patch to remove auto acking for non stateful bolts.
Thanks, Arun From: Alexander T Reply-To: "[email protected]" Date: Tuesday, March 8, 2016 at 1:55 PM To: "[email protected]" Subject: Re: Stateful bolts and acking Hi Arun, Great to hear about the patch you are working on. I have another question if you have time: Right now I'm seeing acking a bit early in the chain, specifically for a windowed bolt we have which extends BaseWindowedBolt. The messages seem to be acked right before they reach this bolt, and if I replace it with a simple stateful bolt, the acking starts working as expected again. Is there support for non-stateful windowed bolts? Best regards Alexander On Mon, Mar 7, 2016 at 12:16 PM, Arun Mahadevan <[email protected]> wrote: Hi Alexander, You are right, the acking for the non-stateful bolts in a stateful topology is better handled by the bolts themselves. I plan to submit a patch soon. You can track it here - https://issues.apache.org/jira/browse/STORM-1608 Thanks, Arun From: Alexander T Reply-To: "[email protected]" Date: Monday, March 7, 2016 at 4:37 PM To: "[email protected]" Subject: Re: Stateful bolts and acking Hi Arun, After reading your messages a bit more thoroughly (sorry :) ) I managed to get the basic case working. If I understand you correctly, one should inherit from BaseRichBolt, which normally requires manual acking, but *not* perform any manual acking. And one should *not* extends BaseBasicBolt which normally auto-acks, since this auto-acking will not work as intended with stateful topologies. This would unfortunately mean that we cannot use bolts which were written for stateless topologies in stateful ones. Are there any plans of adapters or to change the interface so that they can interoperate? Best regards Alexander On Fri, Mar 4, 2016 at 7:26 PM, Arun Mahadevan <[email protected]> wrote: Hi Alexander, The simple topology like the one you have mentioned with a single spout and a stateful bolt with an empty execute works for me. I assume you are anchoring the tuple in the spout’s emit. For a stateful topology, the acking doesn’t work if a bolt extends from BaseBasicBolt or if theres an “ack" call in the bolt’s execute. You could open a JIRA (https://issues.apache.org/jira/browse/STORM) and share the sample topology code where you see this issue. Thanks, Arun From: Alexander T Reply-To: "[email protected]" Date: Friday, March 4, 2016 at 11:15 PM To: "[email protected]" Subject: Re: Stateful bolts and acking Hi Arun, Thank you for your reply. I have tried both manual and automatic acking, and neither works. Or rather, the acker is running but my spout is still receiving failure callbacks after the message timeout. I have a simple topology with a single spout reading from a file and a single empty bolt doing nothing. If I change from an empty stateless bolt to an empty stateful bolt the acking stops working. Should I proceed with sending this in as a reproducing test case? Or is there anything else which I might have missed? Regards, Alexander On Mar 4, 2016 5:30 PM, "Arun Mahadevan" <[email protected]> wrote: Hi Alexander, For a stateful topology the anchoring and acking is automatically taken care of. Can you check if any of your bolts inherit BaseBasicBolt or if you are manually acking. Your non-stateful bolts could inherit from BaseRichBolt instead. Thanks, Arun From: Alexander T Reply-To: "[email protected]" Date: Friday, March 4, 2016 at 8:04 PM To: "[email protected]" Subject: Stateful bolts and acking Hello! I'm on the 1.x-branch and trying to use the stateful bolts. But I cannot get it to work with acking. No matter what I try acking simply doesn't seem to have any effect. I see acking tasks suceeding in the logs (ack tuples forwarded to the acker, acker runs successfully), but still acking is not succesful and the tuples fail after the message timeout. I've not been successful in debugging the acker and the rotating map to figure out why acking is not completing. I was wondering if acking is supposed to work with stateful bolts, if so how and if there are any examples? Any ideas would be appreciated. Best regards, Alexander T
