[
https://issues.apache.org/jira/browse/HIVE-11579?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14700775#comment-14700775
]
Ferdinand Xu commented on HIVE-11579:
-------------------------------------
This will cause the operation handlers leakage in the OperationManager side.
The general process is as follows:
{noformat}
HiveStatement#close -> HiveStatement#closeClientOperation ->
ThriftCLIService#closeOperation
-> CLIService#closeOperation -> HiveSessionImpl#closeOperation ->
HiveCommandOperation#close
-> HiveCommandOperation#teardownIO
{noformat}
And you can see the how IO is initialized in Operation:
{noformat}
private void setupSessionIO(SessionState sessionState) {
try {
LOG.info("Putting temp output to file " +
sessionState.getTmpOutputFile().toString());
sessionState.in = null; // hive server's session input stream is not used
// open a per-session file in auto-flush mode for writing temp results
sessionState.out = new PrintStream(new
FileOutputStream(sessionState.getTmpOutputFile()), true, "UTF-8");
// TODO: for hadoop jobs, progress is printed out to session.err,
// we should find a way to feed back job progress to client
sessionState.err = new PrintStream(System.err, true, "UTF-8");
} catch (IOException e) {
LOG.error("Error in creating temp output file ", e);
try {
sessionState.in = null;
sessionState.out = new PrintStream(System.out, true, "UTF-8");
sessionState.err = new PrintStream(System.err, true, "UTF-8");
} catch (UnsupportedEncodingException ee) {
LOG.error("Error creating PrintStream", e);
ee.printStackTrace();
sessionState.out = null;
sessionState.err = null;
}
}
}
{noformat}
And how it closed:
{noformat}
private void tearDownSessionIO() {
IOUtils.cleanup(LOG, parentSession.getSessionState().out);
IOUtils.cleanup(LOG, parentSession.getSessionState().err);
}
{noformat}
Another way we can get rid of is to add a tmp err file like tmp output file
instead of using the system.err file descriptor in the session level. But it
will cause no error printed in the server side.
> Invoke the set command will close standard error output[beeline-cli]
> --------------------------------------------------------------------
>
> Key: HIVE-11579
> URL: https://issues.apache.org/jira/browse/HIVE-11579
> Project: Hive
> Issue Type: Sub-task
> Components: CLI
> Reporter: Ferdinand Xu
> Assignee: Ferdinand Xu
> Attachments: HIVE-11579-beeline-cli.patch
>
>
> We can easily reproduce the debug by the following steps:
> {code}
> hive> set system:xx=yy;
> hive> lss;
> hive>
> {code}
> The error output disappeared since the err outputstream is closed when
> closing the Hive statement.
> This bug occurred also in the upstream when using the embeded mode as the new
> CLI uses.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)