[ 
https://issues.apache.org/jira/browse/STORM-442?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

DashengJu updated STORM-442:
----------------------------

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

  was:
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.


> 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