Hi, developers
I found that in ScriptOperator.close(), when it catch an IOException, it
doesn't check the status of the scriptPid, I mean if the process is null.
which may cause a race condition.
I did a change that
In ScriptOperator.close()
try {
if ( scriptOutWriter != null ) {
scriptOutWriter.close();
}
} catch (IOException e ) {
if ( (isBrokenPipeException(e) && allowPartialConsumption()) *||
(scriptPid != null && scriptPid.exitValue() == 0)*) {
...
}
Also the related logic in ScriptOperator.processOp().
After that, I found the following UT cases failed, because got a successful
job instead of a failure:
[junit] Tests run: 332, Failures: 2, Errors: 0, Time elapsed: 836.821
sec
[junit] Test org.apache.hadoop.hive.cli.TestNegativeCliDriver FAILED
script_broken_pipe1.q
script_broken_pipe2.q
[junit] Tests run: 2, Failures: 1, Errors: 0, Time elapsed: 40.389 sec
[junit] Test org.apache.hadoop.hive.cli.TestNegativeMinimrCliDriver
FAILED
minimr_broken_pipe.q
Is it acceptable?
Thanks,
- Bing