This is an automated email from the ASF dual-hosted git repository.

dkuzmenko 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 a57c402f579 HIVE-26821: Fetch task caching should only depend on fetch 
task conversion (Sourabh Badhya, reviewed by Denys Kuzmenko)
a57c402f579 is described below

commit a57c402f579bb8665ce1f13c30cf47344a01b208
Author: Sourabh Badhya <[email protected]>
AuthorDate: Mon Dec 12 14:14:41 2022 +0530

    HIVE-26821: Fetch task caching should only depend on fetch task conversion 
(Sourabh Badhya, reviewed by Denys Kuzmenko)
    
    Closes #3848
---
 .../org/apache/hadoop/hive/ql/exec/FetchTask.java  | 12 +++++++----
 .../hive/ql/optimizer/SimpleFetchOptimizer.java    |  2 ++
 .../org/apache/hadoop/hive/ql/TestTxnCommands.java | 24 ++++++++++++++++++++++
 3 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
index 61157c35a60..1d7581f2f9b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.hive.ql.exec;
 
-import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.Context;
 import org.apache.hadoop.hive.ql.QueryPlan;
 import org.apache.hadoop.hive.ql.QueryState;
@@ -55,7 +54,7 @@ public class FetchTask extends Task<FetchWork> implements 
Serializable {
   private int totalRows;
   private static final Logger LOG = LoggerFactory.getLogger(FetchTask.class);
   JobConf job = null;
-  private boolean cachingEnabled;
+  private boolean cachingEnabled = false;
 
   public FetchTask() {
     super();
@@ -69,8 +68,6 @@ public class FetchTask extends Task<FetchWork> implements 
Serializable {
   public void initialize(QueryState queryState, QueryPlan queryPlan, TaskQueue 
taskQueue, Context context) {
     super.initialize(queryState, queryPlan, taskQueue, context);
     work.initializeForFetch(context.getOpContext());
-
-    cachingEnabled = HiveConf.getBoolVar(conf, 
HiveConf.ConfVars.HIVEFETCHTASKCACHING);
     fetchedData = new ArrayList<>();
 
     try {
@@ -236,4 +233,11 @@ public class FetchTask extends Task<FetchWork> implements 
Serializable {
     ExecMapper.setDone(false);
   }
 
+  public void setCachingEnabled(boolean cachingEnabled) {
+    this.cachingEnabled = cachingEnabled;
+  }
+
+  public boolean isCachingEnabled() {
+    return cachingEnabled;
+  }
 }
\ No newline at end of file
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java
index 5464b4e2d40..83f6d9e7226 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java
@@ -143,6 +143,8 @@ public class SimpleFetchOptimizer extends Transform {
     if (fetch != null && checkThreshold(fetch, limit, pctx)) {
       FetchWork fetchWork = fetch.convertToWork();
       FetchTask fetchTask = (FetchTask) TaskFactory.get(fetchWork);
+      fetchTask.setCachingEnabled(HiveConf.getBoolVar(pctx.getConf(),
+              HiveConf.ConfVars.HIVEFETCHTASKCACHING));
       fetchWork.setSink(fetch.completed(pctx, fetchWork));
       fetchWork.setSource(source);
       fetchWork.setLimit(limit);
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java 
b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
index 95b42dd5be3..2240b99b114 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
@@ -2498,4 +2498,28 @@ public class TestTxnCommands extends 
TxnCommandsBaseForTests {
     runStatementOnDriver("alter table "+dbName+"."+tbName+" PARTITION (" 
+partition+") compact '"+compactiontype + "'" );
     TestTxnCommands2.runWorker(hiveConf);
   }
+
+  @Test
+  public void testFetchTaskCachingWithConversion() throws Exception {
+    dropTable(new String[]{"fetch_task_table"});
+    List actualRes = new ArrayList<>();
+    runStatementOnDriver("create table fetch_task_table (a INT, b INT) stored 
as orc" +
+            " tblproperties ('transactional'='true')");
+    runStatementOnDriver("insert into table fetch_task_table values (1,2), 
(3,4), (5,6)");
+    List expectedRes = runStatementOnDriver("select * from fetch_task_table");
+
+    hiveConf.setBoolVar(HiveConf.ConfVars.HIVEFETCHTASKCACHING, true);
+    hiveConf.setVar(HiveConf.ConfVars.HIVEFETCHTASKCONVERSION, "none");
+    d.run("select * from fetch_task_table");
+    Assert.assertFalse(d.getFetchTask().isCachingEnabled());
+    d.getFetchTask().fetch(actualRes);
+    Assert.assertEquals(actualRes, expectedRes);
+    actualRes.clear();
+
+    hiveConf.setVar(HiveConf.ConfVars.HIVEFETCHTASKCONVERSION, "more");
+    d.run("select * from fetch_task_table");
+    Assert.assertTrue(d.getFetchTask().isCachingEnabled());
+    d.getFetchTask().fetch(actualRes);
+    Assert.assertEquals(actualRes, expectedRes);
+  }
 }

Reply via email to