private int setSpoutInfo( StormTopology oldTopology, StormTopology newTopology, int cnt, StormClusterState clusterState) throws Exception { Map<String, SpoutSpec> oldSpouts = oldTopology.get_spouts(); Map<String, SpoutSpec> spouts = newTopology.get_spouts(); for (Entry<String, SpoutSpec> entry : oldSpouts.entrySet()) { String spoutName = entry.getKey(); SpoutSpec oldSpout = entry.getValue(); SpoutSpec spout = spouts.get(spoutName); if (oldSpout.get_common().get_parallelism_hint() > spout.get_common().get_parallelism_hint()) { int removedTaskNum = oldSpout.get_common().get_parallelism_hint() - spout.get_common().get_parallelism_hint(); TreeSet<Integer> taskIds = new TreeSet<Integer>(clusterState.task_ids_by_componentId(topologyid, spoutName)); Iterator<Integer> descendIterator = taskIds.descendingIterator(); while (--removedTaskNum >= 0) { int taskId = descendIterator.next(); removeTask(topologyid, taskId, clusterState); LOG.info("Remove spout task, taskId=" + taskId + " for " + spoutName); } } else if (oldSpout.get_common().get_parallelism_hint() == spout.get_common().get_parallelism_hint()) { continue; } else { int delta = spout.get_common().get_parallelism_hint() - oldSpout.get_common().get_parallelism_hint(); Map<Integer, TaskInfo> taskInfoMap = new HashMap<Integer, TaskInfo>(); for (int i = 1; i <= delta; i++) { cnt++; TaskInfo taskInfo = new TaskInfo((String) entry.getKey(), "spout"); taskInfoMap.put(cnt, taskInfo); newTasks.add(cnt); LOG.info("Setup new spout task, taskId=" + cnt + " for " + spoutName); } clusterState.add_task(topologyid, taskInfoMap); } } return cnt; }