JIRA: https://issues.apache.org/jira/browse/STORM-873
On Jun 17, 2015, at 11:38 PM, P. Taylor Goetz <[email protected]> wrote: > Romeo, > > I have a fix (see below). Should be included in the next release (beta or > final). I will follow up with a JIRA ID for tracking. > > ---------- TOPOLOGY DETAILS ---------- > Topology Name: diamond-topology > --------------- SPOUTS --------------- > spout-1 [1] (backtype.storm.testing.TestWordSpout) > ---------------- BOLTS --------------- > A [1] (org.apache.storm.flux.wrappers.bolts.LogInfoBolt) > B [1] (org.apache.storm.flux.wrappers.bolts.LogInfoBolt) > C [1] (org.apache.storm.flux.wrappers.bolts.LogInfoBolt) > D [1] (org.apache.storm.flux.wrappers.bolts.LogInfoBolt) > --------------- STREAMS --------------- > spout-1 --FIELDS--> A > A --SHUFFLE--> B > A --SHUFFLE--> C > C --SHUFFLE--> D > B --SHUFFLE--> D > -------------------------------------- > > Thanks again for reporting this, and helping out with beta testing. > > - Taylor > > > On Jun 17, 2015, at 4:54 PM, P. Taylor Goetz <[email protected]> wrote: > >> Hi Romeo, >> >> Thanks for reporting that. It’s a bug, and your approach for a fix is >> correct. >> >> If you’d like, feel free to open a JIRA and optionally a pull request for a >> fix. Otherwise, I can take care of it. >> >> -Taylor >> >> On Jun 17, 2015, at 4:07 PM, Romeo Nocon <[email protected]> wrote: >> >>> Hi, >>> >>> I'm testing migrating over a topology I have to flux. The >>> >>> spout: >>> - id: "spout" >>> >>> bolts: >>> - id: "bolt_A" >>> className: "com.blah.boltA" >>> parallelism: 1 >>> - id: "bolt_B" >>> className: "com.blah.boltB" >>> parallelism: 1 >>> - id: "bolt_C" >>> className: "com.blah.boltC" >>> parallelism: 1 >>> - id: "bolt_D" >>> className: "com.blah.boltD" >>> parallelism: 1 >>> >>> streams: >>> - name: "" >>> from: "spout" >>> to: "bolt_A" >>> grouping: >>> type: SHUFFLE >>> - name: "A-->B" >>> from: "bolt_A" >>> to: "bolt_B" >>> grouping: >>> streamId: "forB" >>> - name: "A-->C" >>> from: "bolt_A" >>> to: "bolt_C" >>> grouping: >>> streamId: "forC" >>> - name: "B-->D" >>> from: "bolt_B" >>> to: "bolt_D" >>> - name: "C-->D" >>> from: "bolt_C" >>> to: "bolt_D" >>> >>> It builds something like below (imagine the arrow from A-> B, A-> C, >>> B->D, and C->D) >>> --------------------------------------------------------- >>> Bolt_B >>> Spout -> Bolt_A -> Bolt_D >>> Bolt_C >>> --------------------------------------------------------- >>> >>> I get an error below in FLUX. >>> >>> Exception in thread "main" java.lang.IllegalArgumentException: Bolt >>> has already been declared for id bolt_D >>> at >>> backtype.storm.topology.TopologyBuilder.validateUnusedId(TopologyBuilder.java:212) >>> at >>> backtype.storm.topology.TopologyBuilder.setBolt(TopologyBuilder.java:139) >>> at >>> org.apache.storm.flux.FluxBuilder.buildStreamDefinitions(FluxBuilder.java:158) >>> at org.apache.storm.flux.FluxBuilder.buildTopology(FluxBuilder.java:94) >>> at org.apache.storm.flux.Flux.runCli(Flux.java:153) >>> at org.apache.storm.flux.Flux.main(Flux.java:98) >>> >>> Looking at the buildStreamDefinitions code in the FluxBuilder it >>> iterates through each of the defined streams then calls the >>> appropriate >>> >>> builder.setBolt(stream.getTo()...). >>> >>> Since I have two streams going to Bolt_D it ends up getting the error >>> above. Does someone have a patch or fix out there already? >>> >>> A possible fix is to cache the BoltDeclarer by getTo() id then skip >>> the builder.setBolt method so the code can continue setting the >>> different types of groupings on the rest of streams. Just a thought. >>> >>> Thanks, >>> Romeo >> >
signature.asc
Description: Message signed with OpenPGP using GPGMail
