You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by br...@apache.org on 2014/09/05 23:46:49 UTC

svn commit: r1622806 - in /hive/trunk: common/src/java/org/apache/hadoop/hive/common/ shims/0.20/src/main/java/org/apache/hadoop/hive/shims/ shims/0.20S/src/main/java/org/apache/hadoop/hive/shims/ shims/0.23/src/main/java/org/apache/hadoop/hive/shims/ ...

Author: brock
Date: Fri Sep  5 21:46:48 2014
New Revision: 1622806

URL: http://svn.apache.org/r1622806
Log:
HIVE-7927 - Checking sticky bit needs shim (Navis via Brock)

Modified:
    hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java
    hive/trunk/shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java
    hive/trunk/shims/0.20S/src/main/java/org/apache/hadoop/hive/shims/Hadoop20SShims.java
    hive/trunk/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java
    hive/trunk/shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java

Modified: hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java?rev=1622806&r1=1622805&r2=1622806&view=diff
==============================================================================
--- hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java (original)
+++ hive/trunk/common/src/java/org/apache/hadoop/hive/common/FileUtils.java Fri Sep  5 21:46:48 2014
@@ -655,18 +655,28 @@ public final class FileUtils {
     }
 
     final FileSystem fs = path.getFileSystem(conf);
-    if (!fs.exists(path)) {
+    // check user has write permissions on the parent dir
+    FileStatus stat = null;
+    try {
+      stat = fs.getFileStatus(path);
+    } catch (FileNotFoundException e) {
+      // ignore
+    }
+    if (stat == null) {
       // no file/dir to be deleted
       return;
     }
-    Path parPath = path.getParent();
-    // check user has write permissions on the parent dir
-    FileStatus stat = fs.getFileStatus(path);
     FileUtils.checkFileAccessWithImpersonation(fs, stat, FsAction.WRITE, user);
 
+    HadoopShims shims = ShimLoader.getHadoopShims();
+    if (!shims.supportStickyBit()) {
+      // not supports sticky bit
+      return;
+    }
+
     // check if sticky bit is set on the parent dir
-    FileStatus parStatus = fs.getFileStatus(parPath);
-    if (!parStatus.getPermission().getStickyBit()) {
+    FileStatus parStatus = fs.getFileStatus(path.getParent());
+    if (!shims.hasStickyBit(parStatus.getPermission())) {
       // no sticky bit, so write permission on parent dir is sufficient
       // no further checks needed
       return;

Modified: hive/trunk/shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java
URL: http://svn.apache.org/viewvc/hive/trunk/shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java?rev=1622806&r1=1622805&r2=1622806&view=diff
==============================================================================
--- hive/trunk/shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java (original)
+++ hive/trunk/shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java Fri Sep  5 21:46:48 2014
@@ -55,6 +55,7 @@ import org.apache.hadoop.fs.PathFilter;
 import org.apache.hadoop.fs.ProxyFileSystem;
 import org.apache.hadoop.fs.Trash;
 import org.apache.hadoop.fs.permission.FsAction;
+import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil;
 import org.apache.hadoop.io.LongWritable;
@@ -895,4 +896,14 @@ public class Hadoop20Shims implements Ha
     // No password API, just retrieve value from conf
     return conf.get(name);
   }
+
+  @Override
+  public boolean supportStickyBit() {
+    return false;
+  }
+
+  @Override
+  public boolean hasStickyBit(FsPermission permission) {
+    return false;   // not supported
+  }
 }

Modified: hive/trunk/shims/0.20S/src/main/java/org/apache/hadoop/hive/shims/Hadoop20SShims.java
URL: http://svn.apache.org/viewvc/hive/trunk/shims/0.20S/src/main/java/org/apache/hadoop/hive/shims/Hadoop20SShims.java?rev=1622806&r1=1622805&r2=1622806&view=diff
==============================================================================
--- hive/trunk/shims/0.20S/src/main/java/org/apache/hadoop/hive/shims/Hadoop20SShims.java (original)
+++ hive/trunk/shims/0.20S/src/main/java/org/apache/hadoop/hive/shims/Hadoop20SShims.java Fri Sep  5 21:46:48 2014
@@ -40,6 +40,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.PathFilter;
 import org.apache.hadoop.fs.ProxyFileSystem;
 import org.apache.hadoop.fs.Trash;
+import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.mapred.ClusterStatus;
@@ -513,4 +514,14 @@ public class Hadoop20SShims extends Hado
     // No password API, just retrieve value from conf
     return conf.get(name);
   }
+
+  @Override
+  public boolean supportStickyBit() {
+    return false;
+  }
+
+  @Override
+  public boolean hasStickyBit(FsPermission permission) {
+    return false;   // not supported
+  }
 }

Modified: hive/trunk/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java
URL: http://svn.apache.org/viewvc/hive/trunk/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java?rev=1622806&r1=1622805&r2=1622806&view=diff
==============================================================================
--- hive/trunk/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java (original)
+++ hive/trunk/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java Fri Sep  5 21:46:48 2014
@@ -19,21 +19,17 @@ package org.apache.hadoop.hive.shims;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.InetSocketAddress;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.security.AccessControlException;
-import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.BlockLocation;
@@ -817,4 +813,14 @@ public class Hadoop23Shims extends Hadoo
       }
     }
   }
+
+  @Override
+  public boolean supportStickyBit() {
+    return true;
+  }
+
+  @Override
+  public boolean hasStickyBit(FsPermission permission) {
+    return permission.getStickyBit();
+  }
 }

Modified: hive/trunk/shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java
URL: http://svn.apache.org/viewvc/hive/trunk/shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java?rev=1622806&r1=1622805&r2=1622806&view=diff
==============================================================================
--- hive/trunk/shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java (original)
+++ hive/trunk/shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java Fri Sep  5 21:46:48 2014
@@ -44,6 +44,7 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.PathFilter;
 import org.apache.hadoop.fs.permission.FsAction;
+import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.mapred.ClusterStatus;
 import org.apache.hadoop.mapred.InputSplit;
@@ -694,4 +695,16 @@ public interface HadoopShims {
    */
   public String getPassword(Configuration conf, String name) throws IOException;
 
+  /**
+   * check whether current hadoop supports sticky bit
+   * @return
+   */
+  boolean supportStickyBit();
+
+  /**
+   * Check stick bit in the permission
+   * @param permission
+   * @return sticky bit
+   */
+  boolean hasStickyBit(FsPermission permission);
 }