You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/10/23 19:00:07 UTC

svn commit: r1535072 - in /hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore: HiveMetaStore.java Warehouse.java

Author: hashutosh
Date: Wed Oct 23 17:00:07 2013
New Revision: 1535072

URL: http://svn.apache.org/r1535072
Log:
HIVE-5220 : Add option for removing intermediate directory for partition, which is empty (Navis via Ashutosh Chauhan)

Modified:
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java?rev=1535072&r1=1535071&r2=1535072&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java Wed Oct 23 17:00:07 2013
@@ -1993,6 +1993,7 @@ public class HiveMetaStore extends Thrif
             } else {
               assert (partPath != null);
               wh.deleteDir(partPath, true);
+              deleteParentRecursive(partPath.getParent(), part_vals.size() - 1);
             }
             // ok even if the data is not deleted
           }
@@ -2007,6 +2008,13 @@ public class HiveMetaStore extends Thrif
       return true;
     }
 
+    private void deleteParentRecursive(Path parent, int depth) throws IOException, MetaException {
+      if (depth > 0 && parent != null && wh.isWritable(parent) && wh.isEmpty(parent)) {
+        wh.deleteDir(parent, true);
+        deleteParentRecursive(parent.getParent(), depth - 1);
+      }
+    }
+
     @Override
     public boolean drop_partition(final String db_name, final String tbl_name,
         final List<String> part_vals, final boolean deleteData)

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java?rev=1535072&r1=1535071&r2=1535072&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java Wed Oct 23 17:00:07 2013
@@ -39,6 +39,7 @@ import org.apache.commons.lang.StringUti
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.ContentSummary;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -222,6 +223,14 @@ public class Warehouse {
     return fsHandler.deleteDir(fs, f, recursive, conf);
   }
 
+  public boolean isEmpty(Path path) throws IOException, MetaException {
+    ContentSummary contents = getFs(path).getContentSummary(path);
+    if (contents != null && contents.getFileCount() == 0 && contents.getDirectoryCount() == 1) {
+      return true;
+    }
+    return false;
+  }
+
   public boolean isWritable(Path path) throws IOException {
     if (!storageAuthCheck) {
       // no checks for non-secure hadoop installations