You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pig.apache.org by "Weijun Qian (JIRA)" <ji...@apache.org> on 2017/08/03 01:25:00 UTC

[jira] [Updated] (PIG-5254) Hit Ctrl-D to quit grunt shell fail

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

Weijun Qian updated PIG-5254:
-----------------------------
    Affects Version/s: 0.17.1
                       0.18.0
                 Tags: PIG-5254
               Status: Patch Available  (was: Open)

Cause:
When hit Ctrl + D in grunt shell, the method ConsoleLineInputStream.read() in ConsoleReaderInputStream.java will call reader.readline(), which will return null. In this case, if we use the null to call getBytes(), it will throw a NullPointerException.

Solution:
Define a temporary String buff to store the return value from reader.readline(), check if it is null(the reason why it returns null could be found in jline.console.ConsoleReader.readLine()), if yes, assign "quit" to the temp buff, and then it will function as if we input a quit in the console.

Possible Improvement: There do exist a EOF token, a quit() hook in PigScriptParser.jj, and a corresponding case of EOF could also be found in PigScriptParser.java, however the process of converting a bytestream we get from ConsoleLineInputStream to a token recognizable by PigScriptParser is not clear(relates to a bunch of java.io files). If we can figure out how it works, we may resolve this problem in a more elegant way.
https://issues.apache.org/jira/browse/PIG-5254

> Hit Ctrl-D to quit grunt shell fail
> -----------------------------------
>
>                 Key: PIG-5254
>                 URL: https://issues.apache.org/jira/browse/PIG-5254
>             Project: Pig
>          Issue Type: Bug
>          Components: impl
>    Affects Versions: 0.18.0, 0.17.1
>            Reporter: Daniel Dai
>            Assignee: Weijun Qian
>             Fix For: 0.18.0, 0.17.1
>
>
> Exception:
> {code}
> java.lang.NullPointerException
>         at org.apache.pig.tools.grunt.ConsoleReaderInputStream$ConsoleLineInputStream.read(ConsoleReaderInputStream.java:107)
>         at java.io.InputStream.read(InputStream.java:170)
>         at java.io.SequenceInputStream.read(SequenceInputStream.java:207)
>         at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
>         at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
>         at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
>         at java.io.InputStreamReader.read(InputStreamReader.java:184)
>         at java.io.BufferedReader.fill(BufferedReader.java:161)
>         at java.io.BufferedReader.read1(BufferedReader.java:212)
>         at java.io.BufferedReader.read(BufferedReader.java:286)
>         at org.apache.pig.tools.pigscript.parser.JavaCharStream.FillBuff(JavaCharStream.java:143)
>         at org.apache.pig.tools.pigscript.parser.JavaCharStream.ReadByte(JavaCharStream.java:171)
>         at org.apache.pig.tools.pigscript.parser.JavaCharStream.readChar(JavaCharStream.java:274)
>         at org.apache.pig.tools.pigscript.parser.JavaCharStream.BeginToken(JavaCharStream.java:193)
>         at org.apache.pig.tools.pigscript.parser.PigScriptParserTokenManager.getNextToken(PigScriptParserTokenManager.java:3215)
>         at org.apache.pig.tools.pigscript.parser.PigScriptParser.jj_ntk(PigScriptParser.java:1511)
>         at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:117)
>         at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:230)
>         at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205)
>         at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:66)
>         at org.apache.pig.Main.run(Main.java:564)
>         at org.apache.pig.Main.main(Main.java:175)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
>         at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)