[ https://issues.apache.org/jira/browse/HIVE-19700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16491173#comment-16491173 ]
Yongzhi Chen commented on HIVE-19700: ------------------------------------- I think I understand the issue. JLine has an issue of misusing null and ConsoleReader.NULL_MASK . In beforeReadLine, it should check mask != ConsoleReader.NULL_MASK not mask!=null Your workaround try to feed null value which the beforeReadLine can properly handle. The fix LGTM +1 > Workaround for JLine issue with UnsupportedTerminal > --------------------------------------------------- > > Key: HIVE-19700 > URL: https://issues.apache.org/jira/browse/HIVE-19700 > Project: Hive > Issue Type: Bug > Reporter: Naveen Gangam > Assignee: Naveen Gangam > Priority: Major > Fix For: 2.2.1 > > Attachments: HIVE-19700.patch > > > From the JLine's ConsoleReader, readLine(prompt, mask) calls the following > beforeReadLine() method. > {code} > try { > // System.out.println("is terminal supported " + > terminal.isSupported()); > if (!terminal.isSupported()) { > beforeReadLine(prompt, mask); > } > {code} > So specifically when using UnsupportedTerminal {{-Djline.terminal}} and > {{prompt=null}} and {{mask!=null}}, a "null" string gets printed to the > console before and after the query result. {{UnsupportedTerminal}} is > required to be used when running beeline as a background process, hangs > otherwise. > {code} > private void beforeReadLine(final String prompt, final Character mask) { > if (mask != null && maskThread == null) { > final String fullPrompt = "\r" + prompt > + " " > + " " > + " " > + "\r" + prompt; > maskThread = new Thread() > { > public void run() { > while (!interrupted()) { > try { > Writer out = getOutput(); > out.write(fullPrompt); > {code} > So the {{prompt}} is null and {{mask}} is NOT in atleast 2 scenarios in > beeline. > when beeline's silent=true, prompt is null > * > https://github.com/apache/hive/blob/master/beeline/src/java/org/apache/hive/beeline/BeeLine.java#L1264 > when running multiline queries > * > https://github.com/apache/hive/blob/master/beeline/src/java/org/apache/hive/beeline/Commands.java#L1093 > When executing beeline in script mode (commands in a file), there should not > be any masking while reading lines from the script file. aka, entire line > should be a beeline command or part of a multiline hive query. > So it should be safe to use a null mask instead of > {{ConsoleReader.NULL_MASK}} when using UnsupportedTerminal as jline terminal. -- This message was sent by Atlassian JIRA (v7.6.3#76005)