You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by sz...@apache.org on 2019/01/04 11:29:37 UTC

hive git commit: HIVE-21033 : Forgetting to close operation cuts off any more HiveServer2 output (Szehon, reviewed by Aihua)

Repository: hive
Updated Branches:
  refs/heads/master 138b00cad -> 16d39c6ab


HIVE-21033 : Forgetting to close operation cuts off any more HiveServer2 output (Szehon, reviewed by Aihua)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/16d39c6a
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/16d39c6a
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/16d39c6a

Branch: refs/heads/master
Commit: 16d39c6abbc7ad6d2fc6732eadf04b09eaaf8809
Parents: 138b00c
Author: Szehon Ho <sz...@gmail.com>
Authored: Fri Jan 4 11:45:03 2019 +0100
Committer: Szehon Ho <sz...@gmail.com>
Committed: Fri Jan 4 12:28:15 2019 +0100

----------------------------------------------------------------------
 .../org/apache/hadoop/hive/cli/CliDriver.java   |  5 ++-
 .../hadoop/hive/cli/TestCliDriverMethods.java   | 17 ++++----
 .../hive/common/io/CachingPrintStream.java      |  3 +-
 .../hadoop/hive/common/io/FetchConverter.java   |  3 +-
 .../hadoop/hive/common/io/SessionStream.java    | 45 ++++++++++++++++++++
 .../org/apache/hive/hcatalog/cli/HCatCli.java   |  6 +--
 .../hcatalog/pig/TestHCatLoaderEncryption.java  |  3 +-
 .../hadoop/hive/ql/history/TestHiveHistory.java |  6 +--
 .../TestCLIAuthzSessionContext.java             |  5 ++-
 .../org/apache/hadoop/hive/ql/QTestUtil.java    |  7 +--
 .../hadoop/hive/ql/session/SessionState.java    |  7 +--
 .../hive/ql/processors/TestSetProcessor.java    |  6 +--
 .../cli/operation/HiveCommandOperation.java     | 16 +++----
 .../service/cli/operation/SQLOperation.java     |  9 ++--
 14 files changed, 91 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
----------------------------------------------------------------------
diff --git a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
index 2e7adae..325a82d 100644
--- a/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
+++ b/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
@@ -61,6 +61,7 @@ import org.apache.hadoop.hive.common.cli.EscapeCRLFHelper;
 import org.apache.hadoop.hive.common.cli.ShellCmdExecutor;
 import org.apache.hadoop.hive.common.io.CachingPrintStream;
 import org.apache.hadoop.hive.common.io.FetchConverter;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveVariableSource;
 import org.apache.hadoop.hive.conf.Validator;
@@ -722,8 +723,8 @@ public class CliDriver {
     CliSessionState ss = new CliSessionState(new HiveConf(SessionState.class));
     ss.in = System.in;
     try {
-      ss.out = new PrintStream(System.out, true, "UTF-8");
-      ss.info = new PrintStream(System.err, true, "UTF-8");
+      ss.out = new SessionStream(System.out, true, "UTF-8");
+      ss.info = new SessionStream(System.err, true, "UTF-8");
       ss.err = new CachingPrintStream(System.err, true, "UTF-8");
     } catch (UnsupportedEncodingException e) {
       return 3;

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java
----------------------------------------------------------------------
diff --git a/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java b/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java
index 8419c33..4a2bae5 100644
--- a/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java
+++ b/cli/src/test/org/apache/hadoop/hive/cli/TestCliDriverMethods.java
@@ -47,6 +47,7 @@ import junit.framework.TestCase;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
@@ -110,10 +111,10 @@ public class TestCliDriverMethods extends TestCase {
 
     // Capture stdout and stderr
     ByteArrayOutputStream dataOut = new ByteArrayOutputStream();
-    PrintStream out = new PrintStream(dataOut);
+    SessionStream out = new SessionStream(dataOut);
     System.setOut(out);
     ByteArrayOutputStream dataErr = new ByteArrayOutputStream();
-    PrintStream err = new PrintStream(dataErr);
+    SessionStream err = new SessionStream(dataErr);
     System.setErr(err);
 
     CliSessionState ss = new CliSessionState(new HiveConf());
@@ -175,7 +176,7 @@ public class TestCliDriverMethods extends TestCase {
     when(proc.getSchema()).thenReturn(mockSchema);
 
     CliSessionState mockSS = mock(CliSessionState.class);
-    PrintStream mockOut = mock(PrintStream.class);
+    SessionStream mockOut = mock(SessionStream.class);
 
     mockSS.out = mockOut;
 
@@ -245,8 +246,8 @@ public class TestCliDriverMethods extends TestCase {
   public void testQuit() throws Exception {
 
     CliSessionState ss = new CliSessionState(new HiveConf());
-    ss.err = System.err;
-    ss.out = System.out;
+    ss.err = new SessionStream(System.err);
+    ss.out = new SessionStream(System.out);
 
     try {
       CliSessionState.start(ss);
@@ -276,7 +277,7 @@ public class TestCliDriverMethods extends TestCase {
     CliSessionState sessinState = new CliSessionState(new HiveConf());
     CliSessionState.start(sessinState);
     ByteArrayOutputStream data = new ByteArrayOutputStream();
-    sessinState.err = new PrintStream(data);
+    sessinState.err = new SessionStream(data);
     sessinState.database = "database";
     CliDriver driver = new CliDriver();
 
@@ -311,8 +312,8 @@ public class TestCliDriverMethods extends TestCase {
 
     ByteArrayOutputStream data = new ByteArrayOutputStream();
 
-    sessionState.err = new PrintStream(data);
-    sessionState.out = System.out;
+    sessionState.err = new SessionStream(data);
+    sessionState.out = new SessionStream(System.out);
     try {
       CliSessionState.start(sessionState);
       CliDriver cliDriver = new CliDriver();

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/common/src/java/org/apache/hadoop/hive/common/io/CachingPrintStream.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/io/CachingPrintStream.java b/common/src/java/org/apache/hadoop/hive/common/io/CachingPrintStream.java
index a7c6e6e..70dab87 100644
--- a/common/src/java/org/apache/hadoop/hive/common/io/CachingPrintStream.java
+++ b/common/src/java/org/apache/hadoop/hive/common/io/CachingPrintStream.java
@@ -20,13 +20,12 @@ package org.apache.hadoop.hive.common.io;
 
 import java.io.FileNotFoundException;
 import java.io.OutputStream;
-import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.List;
 
 // A printStream that stores messages logged to it in a list.
-public class CachingPrintStream extends PrintStream {
+public class CachingPrintStream extends SessionStream {
 
   List<String> output = new ArrayList<String>();
 

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/common/src/java/org/apache/hadoop/hive/common/io/FetchConverter.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/io/FetchConverter.java b/common/src/java/org/apache/hadoop/hive/common/io/FetchConverter.java
index 01eef60..62b3d2d 100644
--- a/common/src/java/org/apache/hadoop/hive/common/io/FetchConverter.java
+++ b/common/src/java/org/apache/hadoop/hive/common/io/FetchConverter.java
@@ -19,10 +19,9 @@
 package org.apache.hadoop.hive.common.io;
 
 import java.io.OutputStream;
-import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;
 
-public abstract class FetchConverter extends PrintStream {
+public abstract class FetchConverter extends SessionStream {
 
   protected volatile boolean queryfound;
   protected volatile boolean fetchStarted;

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/common/src/java/org/apache/hadoop/hive/common/io/SessionStream.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hadoop/hive/common/io/SessionStream.java b/common/src/java/org/apache/hadoop/hive/common/io/SessionStream.java
new file mode 100644
index 0000000..a186a6a
--- /dev/null
+++ b/common/src/java/org/apache/hadoop/hive/common/io/SessionStream.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.common.io;
+
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * The Session uses this stream instead of PrintStream to prevent closing of System out and System err.
+ * Ref: HIVE-21033
+ */
+public class SessionStream extends PrintStream {
+
+  public SessionStream(OutputStream out) {
+    super(out);
+  }
+
+  public SessionStream(OutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException {
+    super(out, autoFlush, encoding);
+  }
+
+  @Override
+  public void close() {
+    if (out != System.out && out != System.err) {
+      //Don't close if system out or system err
+      super.close();
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/HCatCli.java
----------------------------------------------------------------------
diff --git a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/HCatCli.java b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/HCatCli.java
index d7a9bb0..7a58964 100644
--- a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/HCatCli.java
+++ b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/HCatCli.java
@@ -23,7 +23,6 @@ import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
@@ -38,6 +37,7 @@ import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.Parser;
 import org.apache.commons.lang.StringUtils;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.fs.permission.FsPermission;
@@ -70,8 +70,8 @@ public class HCatCli {
     CliSessionState ss = new CliSessionState(new HiveConf(SessionState.class));
     ss.in = System.in;
     try {
-      ss.out = new PrintStream(System.out, true, "UTF-8");
-      ss.err = new PrintStream(System.err, true, "UTF-8");
+      ss.out = new SessionStream(System.out, true, "UTF-8");
+      ss.err = new SessionStream(System.err, true, "UTF-8");
     } catch (UnsupportedEncodingException e) {
       System.exit(1);
     }

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/hcatalog/hcatalog-pig-adapter/src/test/java/org/apache/hive/hcatalog/pig/TestHCatLoaderEncryption.java
----------------------------------------------------------------------
diff --git a/hcatalog/hcatalog-pig-adapter/src/test/java/org/apache/hive/hcatalog/pig/TestHCatLoaderEncryption.java b/hcatalog/hcatalog-pig-adapter/src/test/java/org/apache/hive/hcatalog/pig/TestHCatLoaderEncryption.java
index 872d7af..5f5c9f7 100644
--- a/hcatalog/hcatalog-pig-adapter/src/test/java/org/apache/hive/hcatalog/pig/TestHCatLoaderEncryption.java
+++ b/hcatalog/hcatalog-pig-adapter/src/test/java/org/apache/hive/hcatalog/pig/TestHCatLoaderEncryption.java
@@ -43,6 +43,7 @@ import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.fs.LocalFileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.cli.CliSessionState;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.ql.DriverFactory;
@@ -184,7 +185,7 @@ public class TestHCatLoaderEncryption {
 
     driver = DriverFactory.newDriver(hiveConf);
 
-    SessionState.get().out = System.out;
+    SessionState.get().out = new SessionStream(System.out);
 
     createTable(BASIC_TABLE, "a int, b string");
     createTableInSpecifiedPath(ENCRYPTED_TABLE, "a int, b string",

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
----------------------------------------------------------------------
diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
index 9b50fd4..5fd0ef9 100644
--- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
+++ b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/history/TestHiveHistory.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.hive.ql.history;
 
 
-import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Proxy;
 import java.util.LinkedList;
@@ -32,6 +31,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.cli.CliSessionState;
 import org.apache.hadoop.hive.common.LogUtils;
 import org.apache.hadoop.hive.common.LogUtils.LogInitializationException;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.Warehouse;
@@ -135,8 +135,8 @@ public class TestHiveHistory extends TestCase {
       CliSessionState ss = new CliSessionState(hconf);
       ss.in = System.in;
       try {
-        ss.out = new PrintStream(System.out, true, "UTF-8");
-        ss.err = new PrintStream(System.err, true, "UTF-8");
+        ss.out = new SessionStream(System.out, true, "UTF-8");
+        ss.err = new SessionStream(System.err, true, "UTF-8");
       } catch (UnsupportedEncodingException e) {
         System.exit(3);
       }

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/authorization/TestCLIAuthzSessionContext.java
----------------------------------------------------------------------
diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/authorization/TestCLIAuthzSessionContext.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/authorization/TestCLIAuthzSessionContext.java
index 8f1abb6..fa359f9 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/authorization/TestCLIAuthzSessionContext.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/authorization/TestCLIAuthzSessionContext.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue;
 
 import org.apache.hadoop.hive.cli.CliDriver;
 import org.apache.hadoop.hive.cli.CliSessionState;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.ql.security.HiveAuthenticationProvider;
@@ -67,8 +68,8 @@ public class TestCLIAuthzSessionContext {
 
     // once SessionState for thread is set, CliDriver picks conf from it
     CliSessionState ss = new CliSessionState(conf);
-    ss.err = System.err;
-    ss.out = System.out;
+    ss.err = new SessionStream(System.err);
+    ss.out = new SessionStream(System.out);
     SessionState.start(ss);
     TestCLIAuthzSessionContext.driver = new CliDriver();
  }

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java
----------------------------------------------------------------------
diff --git a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java
index 886f85e..9fe9d05 100644
--- a/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java
+++ b/itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java
@@ -76,6 +76,7 @@ import org.apache.hadoop.hive.cli.CliSessionState;
 import org.apache.hadoop.hive.cli.control.AbstractCliConfig;
 import org.apache.hadoop.hive.common.io.CachingPrintStream;
 import org.apache.hadoop.hive.common.io.DigestPrintStream;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.common.io.SortAndDigestPrintStream;
 import org.apache.hadoop.hive.common.io.SortPrintStream;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -1169,7 +1170,7 @@ public class QTestUtil {
     } else if (qSortNHashQuerySet.contains(fileName)) {
       ss.out = new SortAndDigestPrintStream(fo, "UTF-8");
     } else {
-      ss.out = new PrintStream(fo, true, "UTF-8");
+      ss.out = new SessionStream(fo, true, "UTF-8");
     }
     ss.err = new CachingPrintStream(fo, true, "UTF-8");
     ss.setIsSilent(true);
@@ -1203,8 +1204,8 @@ public class QTestUtil {
 
     CliSessionState ss = new CliSessionState(conf);
     ss.in = System.in;
-    ss.out = System.out;
-    ss.err = System.out;
+    ss.out = new SessionStream(System.out);
+    ss.err = new SessionStream(System.out);
 
     SessionState oldSs = SessionState.get();
 

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
index e406060..de5cd8b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java
@@ -55,6 +55,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.JavaUtils;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.common.log.ProgressMonitor;
 import org.apache.hadoop.hive.common.type.Timestamp;
 import org.apache.hadoop.hive.common.type.TimestampTZ;
@@ -179,9 +180,9 @@ public class SessionState {
    * Streams to read/write from.
    */
   public InputStream in;
-  public PrintStream out;
-  public PrintStream info;
-  public PrintStream err;
+  public SessionStream out;
+  public SessionStream info;
+  public SessionStream err;
   /**
    * Standard output from any child process(es).
    */

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/ql/src/test/org/apache/hadoop/hive/ql/processors/TestSetProcessor.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/processors/TestSetProcessor.java b/ql/src/test/org/apache/hadoop/hive/ql/processors/TestSetProcessor.java
index e85cf2d..b8d79bd 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/processors/TestSetProcessor.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/processors/TestSetProcessor.java
@@ -19,12 +19,12 @@
 package org.apache.hadoop.hive.ql.processors;
 
 import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
 import java.lang.reflect.Field;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.SystemVariables;
 import org.apache.hadoop.hive.ql.session.SessionState;
@@ -55,9 +55,9 @@ public class TestSetProcessor {
   }
 
   @Before
-  public void setupTest() {
+  public void setupTest() throws Exception {
     baos = new ByteArrayOutputStream();
-    state.out = new PrintStream(baos);
+    state.out = new SessionStream(baos);
     processor = new SetProcessor();
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java b/service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java
index 99eaf02..ae90278 100644
--- a/service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java
+++ b/service/src/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java
@@ -24,13 +24,13 @@ import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
-import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang3.CharEncoding;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.metastore.api.Schema;
 import org.apache.hadoop.hive.ql.processors.CommandProcessor;
 import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse;
@@ -50,7 +50,6 @@ import org.apache.hive.service.cli.session.HiveSession;
 public class HiveCommandOperation extends ExecuteStatementOperation {
   private final CommandProcessor commandProcessor;
   private TableSchema resultSchema = null;
-  private boolean closeSessionStreams = true; // Only close file based streams, not System.out and System.err.
 
   /**
    * For processors other than Hive queries (Driver), they output to session.out (a temp file)
@@ -72,20 +71,19 @@ public class HiveCommandOperation extends ExecuteStatementOperation {
       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 and tmp error output
       sessionState.out =
-          new PrintStream(new FileOutputStream(sessionState.getTmpOutputFile()), true, CharEncoding.UTF_8);
+          new SessionStream(new FileOutputStream(sessionState.getTmpOutputFile()), true, CharEncoding.UTF_8);
       sessionState.err =
-          new PrintStream(new FileOutputStream(sessionState.getTmpErrOutputFile()), true,CharEncoding.UTF_8);
+          new SessionStream(new FileOutputStream(sessionState.getTmpErrOutputFile()), true,CharEncoding.UTF_8);
     } catch (IOException e) {
       LOG.error("Error in creating temp output file ", e);
 
       // Close file streams to avoid resource leaking
       ServiceUtils.cleanup(LOG, parentSession.getSessionState().out, parentSession.getSessionState().err);
-      closeSessionStreams = false;
 
       try {
         sessionState.in = null;
-        sessionState.out = new PrintStream(System.out, true, CharEncoding.UTF_8);
-        sessionState.err = new PrintStream(System.err, true, CharEncoding.UTF_8);
+        sessionState.out = new SessionStream(System.out, true, CharEncoding.UTF_8);
+        sessionState.err = new SessionStream(System.err, true, CharEncoding.UTF_8);
       } catch (UnsupportedEncodingException ee) {
         LOG.error("Error creating PrintStream", e);
         ee.printStackTrace();
@@ -97,9 +95,7 @@ public class HiveCommandOperation extends ExecuteStatementOperation {
 
 
   private void tearDownSessionIO() {
-    if (closeSessionStreams) {
-      ServiceUtils.cleanup(LOG, parentSession.getSessionState().out, parentSession.getSessionState().err);
-    }
+    ServiceUtils.cleanup(LOG, parentSession.getSessionState().out, parentSession.getSessionState().err);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hive/blob/16d39c6a/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java b/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java
index f975199..429dbcd 100644
--- a/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java
+++ b/service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java
@@ -20,7 +20,6 @@ package org.apache.hive.service.cli.operation;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;
 import java.security.PrivilegedExceptionAction;
 import java.sql.SQLException;
@@ -40,6 +39,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.CharEncoding;
 import org.apache.hadoop.hive.common.LogUtils;
+import org.apache.hadoop.hive.common.io.SessionStream;
 import org.apache.hadoop.hive.common.metrics.common.Metrics;
 import org.apache.hadoop.hive.common.metrics.common.MetricsConstant;
 import org.apache.hadoop.hive.common.metrics.common.MetricsFactory;
@@ -55,7 +55,6 @@ import org.apache.hadoop.hive.ql.QueryState;
 import org.apache.hadoop.hive.ql.exec.FetchTask;
 import org.apache.hadoop.hive.ql.log.PerfLogger;
 import org.apache.hadoop.hive.ql.metadata.Hive;
-import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.hive.serde.serdeConstants;
@@ -139,9 +138,9 @@ public class SQLOperation extends ExecuteStatementOperation {
   private void setupSessionIO(SessionState sessionState) {
     try {
       sessionState.in = null; // hive server's session input stream is not used
-      sessionState.out = new PrintStream(System.out, true, CharEncoding.UTF_8);
-      sessionState.info = new PrintStream(System.err, true, CharEncoding.UTF_8);
-      sessionState.err = new PrintStream(System.err, true, CharEncoding.UTF_8);
+      sessionState.out = new SessionStream(System.out, true, CharEncoding.UTF_8);
+      sessionState.info = new SessionStream(System.err, true, CharEncoding.UTF_8);
+      sessionState.err = new SessionStream(System.err, true, CharEncoding.UTF_8);
     } catch (UnsupportedEncodingException e) {
         LOG.error("Error creating PrintStream", e);
         e.printStackTrace();