private StreamBolt addStatefulBolt(TopologyBuilder topologyBuilder,
String boltId,
Set<ProcessorNode> initialProcessors,
List<ProcessorNode> group) {
StateQueryProcessor<?, ?> stateQueryProcessor = getStateQueryProcessor(group);
StatefulProcessorBolt<?, ?> bolt;
if (stateQueryProcessor == null) {
bolt = new StatefulProcessorBolt<>(boltId, graph, group);
BoltDeclarer boltDeclarer = topologyBuilder.setBolt(boltId, bolt, getParallelism(group));
bolt.setStreamToInitialProcessors(wireBolt(group, boltDeclarer, initialProcessors));
streamBolts.put(bolt, boltDeclarer);
} else {
ProcessorNode updateStateNode = stateQueryProcessor.getStreamState().getUpdateStateNode();
bolt = findStatefulProcessorBolt(updateStateNode);
for (ProcessorNode node : group) {
node.setComponentId(bolt.getId());
}
bolt.addNodes(group);
bolt.addStreamToInitialProcessors(wireBolt(bolt.getNodes(), streamBolts.get(bolt), initialProcessors));
}
return bolt;
}