HIVE-19892: Disable query results cache for for HiveServer2 doAs=true (Jason 
Dere, reviewed by Sergey Shelukhin)


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

Branch: refs/heads/master-txnstats
Commit: 9cd3960d0aebccae05682ef2f52a81affaf8c201
Parents: 596edd1
Author: Jason Dere <jd...@hortonworks.com>
Authored: Thu Jun 21 10:21:54 2018 -0700
Committer: Jason Dere <jd...@hortonworks.com>
Committed: Thu Jun 21 10:21:54 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hive/ql/cache/results/QueryResultsCache.java       | 6 ++++++
 .../org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java     | 7 ++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/9cd3960d/ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java 
b/ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java
index 11b9c27..d29c4da 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java
@@ -540,6 +540,12 @@ public final class QueryResultsCache {
       } else {
         // No actual result directory, no need to move anything.
         cachedResultsPath = zeroRowsPath;
+        // Even if there are no results to move, at least check that we have 
permission
+        // to check the existence of zeroRowsPath, or the read using the cache 
will fail.
+        // A failure here will cause this query to not be added to the cache.
+        FileSystem cacheFs = cachedResultsPath.getFileSystem(conf);
+        boolean fakePathExists = cacheFs.exists(zeroRowsPath);
+
         resultSize = 0;
         requiresMove = false;
       }

http://git-wip-us.apache.org/repos/asf/hive/blob/9cd3960d/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index c2bcedd..867ffe4 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -12130,7 +12130,7 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
     // If no masking/filtering required, then we can check the cache now, 
before
     // generating the operator tree and going through CBO.
     // Otherwise we have to wait until after the masking/filtering step.
-    boolean isCacheEnabled = 
conf.getBoolVar(HiveConf.ConfVars.HIVE_QUERY_RESULTS_CACHE_ENABLED);
+    boolean isCacheEnabled = isResultsCacheEnabled();
     QueryResultsCache.LookupInfo lookupInfo = null;
     boolean needsTransform = needsTransform();
     if (isCacheEnabled && !needsTransform && queryTypeCanUseCache()) {
@@ -14658,6 +14658,11 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
     return lookupInfo;
   }
 
+  private boolean isResultsCacheEnabled() {
+    return conf.getBoolVar(HiveConf.ConfVars.HIVE_QUERY_RESULTS_CACHE_ENABLED) 
&&
+        !(SessionState.get().isHiveServerQuery() && 
conf.getBoolVar(HiveConf.ConfVars.HIVE_SERVER2_ENABLE_DOAS));
+  }
+
   /**
    * Set the query plan to use cache entry passed in to return the query 
results.
    * @param cacheEntry The results cache entry that will be used to resolve 
the query.

Reply via email to