This is an automated email from the ASF dual-hosted git repository. dmollitor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push: new 484d182 HIVE-23096: Review Code Path for getResults (David Mollitor reviewed by Naveen Gangnam) 484d182 is described below commit 484d1823152bb3becaf5a753673d581fa405d9e5 Author: David Mollitor <dmolli...@apache.org> AuthorDate: Wed Apr 1 09:25:15 2020 -0400 HIVE-23096: Review Code Path for getResults (David Mollitor reviewed by Naveen Gangnam) --- ql/src/java/org/apache/hadoop/hive/ql/Driver.java | 11 +++++++---- .../apache/hive/service/cli/operation/SQLOperation.java | 16 +++++++++------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java index 7024910..517b0cc 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.ql; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -888,9 +889,10 @@ public class Driver implements IDriver { } int numRows = 0; - String row = null; while (numRows < maxRows) { + final String row; + if (driverContext.getResStream() == null) { return (numRows > 0); } @@ -900,16 +902,17 @@ public class Driver implements IDriver { try { ss = Utilities.readColumn(driverContext.getResStream(), bos); if (bos.getLength() > 0) { - row = new String(bos.getData(), 0, bos.getLength(), "UTF-8"); + row = new String(bos.getData(), 0, bos.getLength(), StandardCharsets.UTF_8); } else if (ss == Utilities.StreamStatus.TERMINATED) { - row = new String(); + row = ""; + } else { + row = null; } if (row != null) { numRows++; res.add(row); } - row = null; } catch (IOException e) { CONSOLE.printError("FAILED: Unexpected IO exception : " + e.getMessage()); return false; 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 96770f4..eefd644 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 @@ -96,6 +96,7 @@ public class SQLOperation extends ExecuteStatementOperation { private ScheduledExecutorService timeoutExecutor; private final boolean runAsync; private final long operationLogCleanupDelayMs; + private final ArrayList<Object> convey = new ArrayList<>(); /** * A map to track query count running by each user @@ -444,8 +445,6 @@ public class SQLOperation extends ExecuteStatementOperation { return resultSchema; } - private transient final List<Object> convey = new ArrayList<Object>(); - @Override public RowSet getNextRowSet(FetchOrientation orientation, long maxRows) throws HiveSQLException { @@ -461,7 +460,6 @@ public class SQLOperation extends ExecuteStatementOperation { maxRows = 1; isBlobBased = true; } - driver.setMaxRows(Math.toIntExact(maxRows)); RowSet rowSet = RowSetFactory.create(getResultSetSchema(), getProtocolVersion(), isBlobBased); try { /* if client is requesting fetch-from-start and its not the first time reading from this operation @@ -471,15 +469,19 @@ public class SQLOperation extends ExecuteStatementOperation { driver.resetFetch(); } fetchStarted = true; - driver.setMaxRows(Math.toIntExact(maxRows)); + + final int capacity = Math.toIntExact(maxRows); + convey.ensureCapacity(capacity); + driver.setMaxRows(capacity); if (driver.getResults(convey)) { + if (convey.size() == capacity) { + LOG.info("Result set buffer filled to capacity [{}]", capacity); + } return decode(convey, rowSet); } return rowSet; - } catch (IOException e) { - throw new HiveSQLException(e); } catch (Exception e) { - throw new HiveSQLException(e); + throw new HiveSQLException("Unable to get the next row set", e); } finally { convey.clear(); }