DashengJu created STORM-442:
-------------------------------

             Summary: multilang ShellBolt/ShellSpout die() can be hang when 
Exception happened
                 Key: STORM-442
                 URL: https://issues.apache.org/jira/browse/STORM-442
             Project: Apache Storm (Incubating)
          Issue Type: Bug
    Affects Versions: 0.9.3-incubating
            Reporter: DashengJu


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) {
       die(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.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to