Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
0.9.3
-
None
Description
In ShellBolt, the _readerThread read command from python/shell process, and handle like this:
try
{ ShellMsg shellMsg = _process.readShellMsg(); ... } catch (InterruptedException e) {
} catch (Throwable t)
And in the die function, getProcessTerminationInfoString will read getErrorsString() from processErrorStream.
private void die(Throwable exception)
{ String processInfo = _process.getProcessInfoString() + _process.getProcessTerminationInfoString(); _exception = new RuntimeException(processInfo, exception); }so when ShellBolt got exception(for example, readShellMsg() throw NPE ) , but it is not an error from sub process, then getProcessTerminationInfoString will be hang because processErrorStream have no data to read.
On the other hand, as xiaokang says ShellBolt should fail fast on exception ( https://github.com/apache/incubator-storm/pull/46 ) , I think it is not a good idea to read error info from stream.
Because xiaokang 's PR is based old version, so I will move his code to this PR, and modify some other place in ShellSpout.