Yes the static dispatch of overloads can cause issues here. Plan to address in 
https://issues.apache.org/jira/browse/STORM-1714. Thanks for bringing this up.

From:  Alexander T
Reply-To:  "user@storm.apache.org"
Date:  Friday, April 15, 2016 at 3:02 PM
To:  "user@storm.apache.org"
Subject:  Re: initState method not invoked in Storm 1.0

Hi Arun,

Yes, that is one way of getting it wrong. Another way is assigning your bolt to 
a variable of a stateless type before doing setBolt. Since Java lacks dynamic 
dispatch, the stateless overload will be chosen in that case.

Regards,
Alex

On Apr 15, 2016 11:16 AM, "Arun Mahadevan" <ar...@apache.org> wrote:
Ah, I see what you mean. The “setBolt” method without parallelism hint is not 
overloaded for stateful bolts so if parallelism hint is not specified it ends 
up as being normal bolt. Will raise a JIRA for fixing this.

Spico, 

For now, can you provide parallelism hint while you add stateful bolt to the 
topology ?

Thanks,
Arun

From: Alexander T
Reply-To: "user@storm.apache.org"
Date: Friday, April 15, 2016 at 2:38 PM
To: "user@storm.apache.org"
Subject: Re: initState method not invoked in Storm 1.0

Hi Arun,

I meant that it's very easy to use the wrong setBolt method overload by 
mistake, since stateful bolts are supertypes of stateless ones.

Regards
Alex
On Apr 15, 2016 10:54 AM, "Arun Mahadevan" <ar...@apache.org> wrote:
Its the same method (builder.setBolt) that adds stateful bolts to a topology. 
Heres an example - 
https://github.com/apache/storm/blob/master/examples/storm-starter/src/jvm/storm/starter/StatefulTopology.java

Spico,

Do you see any errors in the logs ? You might want to turn on debug logs and 
see whats happening. Can you also try running the StatefulTopology in the 
storm-starter and check if you see the same behavior ?

Thanks,
Arun

From: Alexander T
Reply-To: "user@storm.apache.org"
Date: Friday, April 15, 2016 at 2:06 PM
To: "user@storm.apache.org"
Subject: Re: initState method not invoked in Storm 1.0

Hi Spico,

Are you adding your bolt to the topology with the special methods for stateful 
bolts? It's quite easy to use the regular addBolt method and it will in that 
case be treated as a stateless one.

Cheers
Alex

On Apr 15, 2016 10:33 AM, "Spico Florin" <spicoflo...@gmail.com> wrote:
Hello! 
  I'm running a topology in LocalCluster that has a stasteful Bolt. Wile 
debugging, I have observed that the initState method is not invoked at all. 
The documentation said:
"The initState method is invoked by the framework during the bolt 
initialization with the previously saved state of the bolt. This is invoked 
after prepare but before the bolt starts processing any tuples".

Due to this, the state field remains null and I get NPE when I populate it with 
state .put
Any idea why the initState is not invoked?
Regards,
 Florin

Here is my code:

public class TimeSeriesStatefulBolt extends
BaseStatefulBolt<KeyValueState<Long, Map<String, Float>>> {

private KeyValueState<Long, Map<String, Float>> state;
@Override
public void initState(KeyValueState<Long, Map<String, Float>> state) {
this.state = state;
}

Reply via email to