hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Naveen Gangam (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-19700) Workaround for JLine issue with UnsupportedTerminal
Date Fri, 01 Jun 2018 15:58:00 GMT

    [ https://issues.apache.org/jira/browse/HIVE-19700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16498156#comment-16498156
] 

Naveen Gangam commented on HIVE-19700:
--------------------------------------

Thanks [~ychena] for the review. The code certainly seems to indicate that something should
get printed to the console when using UnsupportedTerminal. But that is not the case. Perhaps
these are console settings or escape characters that is not visible in the output even when
redirected to a file.
Also under normal circumstances, this code should never run because we never use UnsupportedTerminal
except for under special circumstances. and even then the output looked good to me. 

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

Mime
View raw message