Repository: hive
Updated Branches:
  refs/heads/branch-2 b3a6e524a -> 988c491dd


http://git-wip-us.apache.org/repos/asf/hive/blob/988c491d/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/FolderPermissionBase.java
----------------------------------------------------------------------
diff --git 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/FolderPermissionBase.java
 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/FolderPermissionBase.java
index 2ae9cc0..bf6b7e1 100644
--- 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/FolderPermissionBase.java
+++ 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/FolderPermissionBase.java
@@ -60,11 +60,11 @@ public abstract class FolderPermissionBase {
     }
   };
 
-
   public abstract void setPermission(String locn, int permIndex) throws 
Exception;
 
   public abstract void verifyPermission(String locn, int permIndex) throws 
Exception;
 
+  public abstract void verifyInheritedPermission(String locn, int permIndex) 
throws Exception;
 
   public void setPermission(String locn) throws Exception {
     setPermission(locn, 0);
@@ -74,6 +74,9 @@ public abstract class FolderPermissionBase {
     verifyPermission(locn, 0);
   }
 
+  public void verifyInheritedPermission(String locn) throws Exception {
+    verifyInheritedPermission(locn, 0);
+  }
 
   public static void baseSetup() throws Exception {
     MiniDFSShim dfs = ShimLoader.getHadoopShims().getMiniDfs(conf, 4, true, 
null);
@@ -138,7 +141,7 @@ public abstract class FolderPermissionBase {
     Assert.assertEquals(0,ret.getResponseCode());
 
     assertExistence(warehouseDir + "/" + testDb + ".db");
-    verifyPermission(warehouseDir + "/" + testDb + ".db");
+    verifyInheritedPermission(warehouseDir + "/" + testDb + ".db");
 
     ret = driver.run("USE " + testDb);
     Assert.assertEquals(0,ret.getResponseCode());
@@ -146,22 +149,28 @@ public abstract class FolderPermissionBase {
     ret = driver.run("CREATE TABLE " + tableName + " (key string, value 
string)");
     Assert.assertEquals(0,ret.getResponseCode());
 
-    verifyPermission(warehouseDir + "/" + testDb + ".db/" + tableName);
+    verifyInheritedPermission(warehouseDir + "/" + testDb + ".db/" + 
tableName);
 
     ret = driver.run("insert into table " + tableName + " select key,value 
from default.mysrc");
     Assert.assertEquals(0,ret.getResponseCode());
 
     assertExistence(warehouseDir + "/" + testDb + ".db/" + tableName);
-    verifyPermission(warehouseDir + "/" + testDb + ".db/" + tableName);
+    verifyInheritedPermission(warehouseDir + "/" + testDb + ".db/" + 
tableName);
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + testDb + ".db/" + 
tableName).size() > 0);
     for (String child : listStatus(warehouseDir + "/" + testDb + ".db/" + 
tableName)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
+
     ret = driver.run("USE default");
     Assert.assertEquals(0,ret.getResponseCode());
 
+    ret = driver.run("DROP DATABASE " + testDb);
+    Assert.assertEquals(0,ret.getResponseCode());
+
     //cleanup after the test.
     fs.delete(warehouseDir, true);
     fs.mkdirs(warehouseDir);
@@ -186,21 +195,27 @@ public abstract class FolderPermissionBase {
     ret = driver.run("CREATE TABLE " + tableName + " (key string, value 
string)");
     Assert.assertEquals(0,ret.getResponseCode());
 
-    verifyPermission(warehouseDir + "/" + testDb + ".db/" + tableName);
+    verifyInheritedPermission(warehouseDir + "/" + testDb + ".db/" + 
tableName);
 
     ret = driver.run("insert into table " + tableName + " select key,value 
from default.mysrc");
     Assert.assertEquals(0,ret.getResponseCode());
 
     assertExistence(warehouseDir + "/" + testDb + ".db/" + tableName);
-    verifyPermission(warehouseDir + "/" + testDb + ".db/" + tableName);
+    verifyInheritedPermission(warehouseDir + "/" + testDb + ".db/" + 
tableName);
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + testDb + ".db/" + 
tableName).size() > 0);
     for (String child : listStatus(warehouseDir + "/" + testDb + ".db/" + 
tableName)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
+
     ret = driver.run("USE default");
     Assert.assertEquals(0,ret.getResponseCode());
+
+    ret = driver.run("DROP DATABASE " + testDb);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
 
@@ -223,7 +238,7 @@ public abstract class FolderPermissionBase {
     verifyPermission(warehouseDir + "/" + tableName);
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(tableLoc)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //case1B: insert overwrite non-partitioned-table
@@ -234,8 +249,11 @@ public abstract class FolderPermissionBase {
     verifyPermission(warehouseDir + "/" + tableName, 1);
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(tableLoc)) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -252,11 +270,11 @@ public abstract class FolderPermissionBase {
     Assert.assertEquals(0, ret.getResponseCode());
 
     verifyPermission(warehouseDir + "/" + tableName);
-    verifyPermission(warehouseDir + "/" + tableName + "/part1=1");
+    verifyInheritedPermission(warehouseDir + "/" + tableName + "/part1=1");
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + tableName + 
"/part1=1").size() > 0);
     for (String child : listStatus(warehouseDir + "/" + tableName + 
"/part1=1")) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //insert overwrite test
@@ -270,8 +288,11 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + tableName + 
"/part1=1").size() > 0);
     for (String child : listStatus(warehouseDir + "/" + tableName + 
"/part1=1")) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -288,12 +309,12 @@ public abstract class FolderPermissionBase {
     Assert.assertEquals(0, ret.getResponseCode());
 
     verifyPermission(warehouseDir + "/" + tableName);
-    verifyPermission(warehouseDir + "/" + tableName + "/part1=1");
-    verifyPermission(warehouseDir + "/" + tableName + "/part1=1/part2=1");
+    verifyInheritedPermission(warehouseDir + "/" + tableName + "/part1=1");
+    verifyInheritedPermission(warehouseDir + "/" + tableName + 
"/part1=1/part2=1");
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + tableName + 
"/part1=1/part2=1").size() > 0);
     for (String child : listStatus(warehouseDir + "/" + tableName + 
"/part1=1/part2=1")) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //insert overwrite test
@@ -310,8 +331,11 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + tableName + 
"/part1=1/part2=1").size() > 0);
     for (String child : listStatus(warehouseDir + "/" + tableName + 
"/part1=1/part2=1")) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -327,7 +351,7 @@ public abstract class FolderPermissionBase {
     ret = driver.run("insert into table " + tableName + " partition 
(part1,part2) select key,value,part1,part2 from mysrc");
     Assert.assertEquals(0, ret.getResponseCode());
 
-    verifyDualPartitionTable(warehouseDir + "/" + tableName, 0);
+    verifyDualPartitionTable(warehouseDir + "/" + tableName, 0, true);
 
     //Insert overwrite test, with permission set 1.  We need reset existing 
partitions to 1 since the permissions
     //should be inherited from existing partition
@@ -335,7 +359,10 @@ public abstract class FolderPermissionBase {
     ret = driver.run("insert overwrite table " + tableName + " partition 
(part1,part2) select key,value,part1,part2 from mysrc");
     Assert.assertEquals(0, ret.getResponseCode());
 
-    verifyDualPartitionTable(warehouseDir + "/" + tableName, 1);
+    verifyDualPartitionTable(warehouseDir + "/" + tableName, 1, false);
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -358,6 +385,7 @@ public abstract class FolderPermissionBase {
     setSinglePartition(tableLoc, 1);
     ret = driver.run("insert overwrite table " + tableName + " partition 
(part1) select key,value,part1 from mysrc");
     Assert.assertEquals(0,ret.getResponseCode());
+    // NOTE: OVERWRITE deletes partition directory, thus creating a new 
partition inheriting the previously set permissions.
     verifySinglePartition(tableLoc, 1);
 
     //delete and re-insert using insert overwrite.  There's different code 
paths insert vs insert overwrite for new tables.
@@ -373,6 +401,9 @@ public abstract class FolderPermissionBase {
     Assert.assertEquals(0, ret.getResponseCode());
 
     verifySinglePartition(tableLoc, 0);
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -394,13 +425,13 @@ public abstract class FolderPermissionBase {
     ret = driver.run("alter table " + tableName + " partition 
(part1='1',part2='1',part3='1') rename to partition 
(part1='2',part2='2',part3='2')");
     Assert.assertEquals(0,ret.getResponseCode());
 
-    verifyPermission(warehouseDir + "/" + tableName + "/part1=2", 1);
-    verifyPermission(warehouseDir + "/" + tableName + "/part1=2/part2=2", 1);
-    verifyPermission(warehouseDir + "/" + tableName + 
"/part1=2/part2=2/part3=2", 1);
+    verifyInheritedPermission(warehouseDir + "/" + tableName + "/part1=2", 1);
+    verifyInheritedPermission(warehouseDir + "/" + tableName + 
"/part1=2/part2=2", 1);
+    verifyInheritedPermission(warehouseDir + "/" + tableName + 
"/part1=2/part2=2/part3=2", 1);
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + tableName + 
"/part1=2/part2=2/part3=2").size() > 0);
     for (String child : listStatus(warehouseDir + "/" + tableName + 
"/part1=2/part2=2/part3=2")) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
 
     String tableName2 = "alterpart2";
@@ -414,9 +445,15 @@ public abstract class FolderPermissionBase {
 
     //alter exchange can not change base table's permission
     //alter exchange can only control final partition folder's permission
-    verifyPermission(warehouseDir + "/" + tableName2 + "/part1=2", 0);
-    verifyPermission(warehouseDir + "/" + tableName2 + "/part1=2/part2=2", 0);
-    verifyPermission(warehouseDir + "/" + tableName2 + 
"/part1=2/part2=2/part3=2", 1);
+    verifyInheritedPermission(warehouseDir + "/" + tableName2 + "/part1=2", 0);
+    verifyInheritedPermission(warehouseDir + "/" + tableName2 + 
"/part1=2/part2=2", 0);
+    verifyInheritedPermission(warehouseDir + "/" + tableName2 + 
"/part1=2/part2=2/part3=2", 1);
+
+    ret = driver.run("DROP TABLE " + tableName2);
+    Assert.assertEquals(0,ret.getResponseCode());
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -436,8 +473,11 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(myLocation).size() > 0);
     for (String child : listStatus(myLocation)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -459,7 +499,7 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(tableLoc)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //case1B: load data local into overwrite non-partitioned-table
@@ -472,9 +512,12 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(tableLoc)) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
 
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
+
     //case 2 is partitioned table.
     tableName = "loadlocalpartition";
 
@@ -491,7 +534,7 @@ public abstract class FolderPermissionBase {
     String partLoc = warehouseDir + "/" + tableName + "/part1=1/part2=1";
     Assert.assertTrue(listStatus(partLoc).size() > 0);
     for (String child : listStatus(partLoc)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //case 2B: insert data overwrite into partitioned table. set testing 
table/partition folder hierarchy 1
@@ -506,8 +549,11 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(partLoc)) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -530,7 +576,7 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(tableLoc)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //case1B: load data into overwrite non-partitioned-table
@@ -545,9 +591,12 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(tableLoc)) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
 
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
+
     //case 2 is partitioned table.
     tableName = "loadpartition";
 
@@ -565,7 +614,7 @@ public abstract class FolderPermissionBase {
     String partLoc = warehouseDir + "/" + tableName + "/part1=1/part2=1";
     Assert.assertTrue(listStatus(partLoc).size() > 0);
     for (String child : listStatus(partLoc)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //case 2B: insert data overwrite into partitioned table. set testing 
table/partition folder hierarchy 1
@@ -583,8 +632,11 @@ public abstract class FolderPermissionBase {
 
     Assert.assertTrue(listStatus(tableLoc).size() > 0);
     for (String child : listStatus(partLoc)) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -605,15 +657,21 @@ public abstract class FolderPermissionBase {
     Assert.assertEquals(0,ret.getResponseCode());
 
     assertExistence(warehouseDir + "/" + testDb + ".db/" + tableName);
-    verifyPermission(warehouseDir + "/" + testDb + ".db/" + tableName);
+    verifyInheritedPermission(warehouseDir + "/" + testDb + ".db/" + 
tableName);
 
     Assert.assertTrue(listStatus(warehouseDir + "/" + testDb + ".db/" + 
tableName).size() > 0);
     for (String child : listStatus(warehouseDir + "/" + testDb + ".db/" + 
tableName)) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
+
     ret = driver.run("USE default");
     Assert.assertEquals(0,ret.getResponseCode());
+
+    ret = driver.run("DROP DATABASE " + testDb);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   @Test
@@ -631,20 +689,20 @@ public abstract class FolderPermissionBase {
 
     //check if exported data has inherited the permissions.
     assertExistence(myLocation);
-    verifyPermission(myLocation);
+    verifyInheritedPermission(myLocation);
 
     assertExistence(myLocation + "/part1=1/part2=1");
-    verifyPermission(myLocation + "/part1=1/part2=1");
+    verifyInheritedPermission(myLocation + "/part1=1/part2=1");
     Assert.assertTrue(listStatus(myLocation + "/part1=1/part2=1").size() > 0);
     for (String child : listStatus(myLocation + "/part1=1/part2=1")) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     assertExistence(myLocation + "/part1=2/part2=2");
-    verifyPermission(myLocation + "/part1=2/part2=2");
+    verifyInheritedPermission(myLocation + "/part1=2/part2=2");
     Assert.assertTrue(listStatus(myLocation + "/part1=2/part2=2").size() > 0);
     for (String child : listStatus(myLocation + "/part1=2/part2=2")) {
-      verifyPermission(child);
+      verifyInheritedPermission(child);
     }
 
     //import the table back into another database
@@ -664,25 +722,31 @@ public abstract class FolderPermissionBase {
 
     //check permissions of imported, from the exported table
     assertExistence(warehouseDir + "/" + testDb + ".db/mysrc");
-    verifyPermission(warehouseDir + "/" + testDb + ".db/mysrc", 1);
+    verifyInheritedPermission(warehouseDir + "/" + testDb + ".db/mysrc", 1);
 
     myLocation = warehouseDir + "/" + testDb + ".db/mysrc";
     assertExistence(myLocation);
-    verifyPermission(myLocation, 1);
+    verifyInheritedPermission(myLocation, 1);
 
     assertExistence(myLocation + "/part1=1/part2=1");
-    verifyPermission(myLocation + "/part1=1/part2=1", 1);
+    verifyInheritedPermission(myLocation + "/part1=1/part2=1", 1);
     Assert.assertTrue(listStatus(myLocation + "/part1=1/part2=1").size() > 0);
     for (String child : listStatus(myLocation + "/part1=1/part2=1")) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
 
     assertExistence(myLocation + "/part1=2/part2=2");
-    verifyPermission(myLocation + "/part1=2/part2=2", 1);
+    verifyInheritedPermission(myLocation + "/part1=2/part2=2", 1);
     Assert.assertTrue(listStatus(myLocation + "/part1=2/part2=2").size() > 0);
     for (String child : listStatus(myLocation + "/part1=2/part2=2")) {
-      verifyPermission(child, 1);
+      verifyInheritedPermission(child, 1);
     }
+
+    ret = driver.run("USE default");
+    Assert.assertEquals(0,ret.getResponseCode());
+
+    ret = driver.run("DROP DATABASE " + testDb + " CASCADE");
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   /**
@@ -705,13 +769,16 @@ public abstract class FolderPermissionBase {
     assertExistence(warehouseDir + "/" + tableName);
 
     verifyPermission(warehouseDir + "/" + tableName);
-    verifyPermission(partition);
+    verifyInheritedPermission(partition);
 
     ret = driver.run("TRUNCATE TABLE " + tableName);
     Assert.assertEquals(0, ret.getResponseCode());
 
+    // NOTE: TRUNCATE will delete partition directories and recreates them; 
restores previous permissions.
     assertExistence(warehouseDir + "/" + tableName);
+    assertExistence(partition);
     verifyPermission(warehouseDir + "/" + tableName);
+    verifyInheritedPermission(partition);
 
     ret = driver.run("insert into table " + tableName + " partition(part1='1') 
select key,value from mysrc where part1='1' and part2='1'");
     Assert.assertEquals(0, ret.getResponseCode());
@@ -719,14 +786,17 @@ public abstract class FolderPermissionBase {
     verifyPermission(warehouseDir + "/" + tableName);
 
     assertExistence(partition);
-    verifyPermission(partition);    
+    verifyInheritedPermission(partition);    
 
     // Also test the partition folder if the partition is truncated
     ret = driver.run("TRUNCATE TABLE " + tableName + " partition(part1='1')");
     Assert.assertEquals(0, ret.getResponseCode());
 
     assertExistence(partition);
-    verifyPermission(partition);
+    verifyInheritedPermission(partition);
+
+    ret = driver.run("DROP TABLE " + tableName);
+    Assert.assertEquals(0,ret.getResponseCode());
   }
 
   private void setSinglePartition(String tableLoc, int index) throws Exception 
{
@@ -735,17 +805,17 @@ public abstract class FolderPermissionBase {
   }
 
   private void verifySinglePartition(String tableLoc, int index) throws 
Exception {
-    verifyPermission(tableLoc + "/part1=1", index);
-    verifyPermission(tableLoc + "/part1=2", index);
+    verifyInheritedPermission(tableLoc + "/part1=1", index);
+    verifyInheritedPermission(tableLoc + "/part1=2", index);
 
     Assert.assertTrue(listStatus(tableLoc + "/part1=1").size() > 0);
     for (String child : listStatus(tableLoc + "/part1=1")) {
-      verifyPermission(child, index);
+      verifyInheritedPermission(child, index);
     }
 
     Assert.assertTrue(listStatus(tableLoc + "/part1=2").size() > 0);
     for (String child : listStatus(tableLoc + "/part1=2")) {
-      verifyPermission(child, index);
+      verifyInheritedPermission(child, index);
     }
   }
 
@@ -758,22 +828,27 @@ public abstract class FolderPermissionBase {
     setPermission(baseTablePath + "/part1=2/part2=2", index);
   }
 
-  private void verifyDualPartitionTable(String baseTablePath, int index) 
throws Exception {
+  private void verifyDualPartitionTable(String baseTablePath, int index, 
boolean inherit) throws Exception {
     verifyPermission(baseTablePath, index);
-    verifyPermission(baseTablePath + "/part1=1", index);
-    verifyPermission(baseTablePath + "/part1=1/part2=1", index);
+    if (inherit) {
+      verifyInheritedPermission(baseTablePath + "/part1=1", index);
+      verifyInheritedPermission(baseTablePath + "/part1=2", index);
+    } else {
+      verifyPermission(baseTablePath + "/part1=1", index);
+      verifyPermission(baseTablePath + "/part1=2", index);
+    }
 
-    verifyPermission(baseTablePath + "/part1=2", index);
-    verifyPermission(baseTablePath + "/part1=2/part2=2", index);
+    verifyInheritedPermission(baseTablePath + "/part1=1/part2=1", index);
+    verifyInheritedPermission(baseTablePath + "/part1=2/part2=2", index);
 
     Assert.assertTrue(listStatus(baseTablePath + "/part1=1/part2=1").size() > 
0);
     for (String child : listStatus(baseTablePath + "/part1=1/part2=1")) {
-      verifyPermission(child, index);
+      verifyInheritedPermission(child, index);
     }
 
     Assert.assertTrue(listStatus(baseTablePath + "/part1=2/part2=2").size() > 
0);
     for (String child : listStatus(baseTablePath + "/part1=2/part2=2")) {
-      verifyPermission(child, index);
+      verifyInheritedPermission(child, index);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/988c491d/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/TestFolderPermissions.java
----------------------------------------------------------------------
diff --git 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/TestFolderPermissions.java
 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/TestFolderPermissions.java
index 6cc2d18..16b75a2 100644
--- 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/TestFolderPermissions.java
+++ 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/security/TestFolderPermissions.java
@@ -49,4 +49,9 @@ public class TestFolderPermissions extends 
FolderPermissionBase {
     FsPermission actual =  fs.getFileStatus(new Path(locn)).getPermission();
     Assert.assertEquals(expected[permIndex], actual);
   }
+
+  @Override
+  public void verifyInheritedPermission(String locn, int permIndex) throws 
Exception {
+    verifyPermission(locn, permIndex);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/988c491d/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
----------------------------------------------------------------------
diff --git 
a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java 
b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
index 1ba580d..5caa262 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
@@ -515,7 +515,7 @@ public class HiveAlterHandler implements AlterHandler {
               }
 
               //rename the data directory
-              wh.renameDir(srcPath, destPath);
+              wh.renameDir(srcPath, destPath, 
FileUtils.shouldInheritPerms(hiveConf, destFs));
               LOG.info("Partition directory rename from " + srcPath + " to " + 
destPath + " done.");
               dataWasMoved = true;
             }

http://git-wip-us.apache.org/repos/asf/hive/blob/988c491d/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java 
b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index 68f5003..eefa8f7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -2938,7 +2938,8 @@ private void constructOneLBLocationMap(FileStatus fSta,
               Path destPath = mvFile(conf, srcFs, srcP, destFs, destf, 
isSrcLocal, isRenameAllowed);
 
               if (inheritPerms) {
-                FileUtils.inheritPerms(conf, fullDestStatus, srcGroup, destFs, 
destPath, false);
+                // TODO: These are all files.
+                FileUtils.inheritPerms(conf, fullDestStatus, srcGroup, destFs, 
destPath, false, false);
               }
 
               if (null != newFiles) {
@@ -3177,7 +3178,8 @@ private void constructOneLBLocationMap(FileStatus fSta,
                     final String group = srcStatus.getGroup();
                     if(destFs.rename(srcStatus.getPath(), destFile)) {
                       if (inheritPerms) {
-                        FileUtils.inheritPerms(conf, desiredStatus, group, 
destFs, destFile, false);
+                        // TODO: These are all files.
+                        FileUtils.inheritPerms(conf, desiredStatus, group, 
destFs, destFile, false, false);
                       }
                     } else {
                       throw new IOException("rename for src path: " + 
srcStatus.getPath() + " to dest path:"

Reply via email to