Hi. IMO there seems to be race condition between BoltReaderRunnable.run() and ShellBolt.cleanup(). ShellBolt.cleanup() interrupts ReaderThread but actually few of methods inside BoltReaderRunnable.run() throws InterruptedException. (Accessing _pendingWrites throws InterruptedException, but I cannot find any others.) So we assume that interrupting ReaderThread doesn't stop its flow at that time before encountering _pendingWrite.
1. ReaderThread.run() passes "while(_running)" check and dive into loop. 2. ShellBolt.cleanup() interrupts ReaderThread. It has marked as 'interrupted'. 3. ShellBolt.cleanup() clears _inputs 4. ReaderThread.run() reads shell message, and it is emit, so it calls handleEmit(). 5. ShellBolt.handleEmit() checks _inputs but nothing found. So it throws RuntimeException, as you stated. I'll file relevant issue to Storm JIRA. Normally topologies are killed with deactivating spouts first, and having enough times to process any pending tuples, so when Bolt is cleared, Bolt doesn't process any tuples at that time. You may want to kill topology with enough times, maybe message timeout sec or twice would be fine. Thanks. Jungtaek Lim (HeartSaVioR) 2015-06-03 18:20 GMT+09:00 charlie quillard <[email protected]>: > Hello, > > > I have a problem with my shellbolt, which uses a cpp bolt(with this > wrapper : http://demeter.inf.ed.ac.uk/cross/stormcpp.html ) with the > multilang module. This one dies because the shellBolt's attribute "_inputs" > is empty and call the next runtime exception : "Anchored onto #Anchor after > ack/fail" . > > > The log: http://pastebin.com/pG9mHt8X > > > I used storm 0.9.4, and i think that my error is connected to this > reported issue : https://issues.apache.org/jira/browse/STORM-531 > > If someone can help me , i would appreciate it. > > > Best regards, > > Charlie > > > > > -- Name : 임 정택 Blog : http://www.heartsavior.net / http://dev.heartsavior.net Twitter : http://twitter.com/heartsavior LinkedIn : http://www.linkedin.com/in/heartsavior
