Naveen Gangam created HIVE-19700:
------------------------------------
Summary: 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
Fix For: 2.2.1
>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)