diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index 8378421..6a6a086 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -23,6 +23,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FsShell; @@ -4230,8 +4231,9 @@ private int truncateTable(Hive db, TruncateTableDesc truncateTableDesc) throws H // this is not transactional for (Path location : getLocations(db, table, partSpec)) { FileSystem fs = location.getFileSystem(conf); + FsPermission permission = fs.getFileStatus(location).getPermission(); fs.delete(location, true); - fs.mkdirs(location); + fs.mkdirs(location, permission); } } catch (Exception e) { throw new HiveException(e, ErrorMsg.GENERIC_ERROR); diff --git ql/src/test/queries/clientpositive/truncate_table_permissions.q ql/src/test/queries/clientpositive/truncate_table_permissions.q new file mode 100644 index 0000000..bbaa609 --- /dev/null +++ ql/src/test/queries/clientpositive/truncate_table_permissions.q @@ -0,0 +1,11 @@ +create table truncate_perm (key string, value string); + +dfs -chmod 777 ${hiveconf:hive.metastore.warehouse.dir}/truncate_perm; +dfs -ls -d ${hiveconf:hive.metastore.warehouse.dir}/truncate_perm; +TRUNCATE TABLE truncate_perm; +dfs -ls -d ${hiveconf:hive.metastore.warehouse.dir}/truncate_perm; + + + + + diff --git ql/src/test/results/clientpositive/truncate_table_permissions.q.out ql/src/test/results/clientpositive/truncate_table_permissions.q.out new file mode 100644 index 0000000..0d8fdd3 --- /dev/null +++ ql/src/test/results/clientpositive/truncate_table_permissions.q.out @@ -0,0 +1,16 @@ +PREHOOK: query: create table truncate_perm (key string, value string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@truncate_perm +POSTHOOK: query: create table truncate_perm (key string, value string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@truncate_perm +#### A masked pattern was here #### +PREHOOK: query: TRUNCATE TABLE truncate_perm +PREHOOK: type: TRUNCATETABLE +PREHOOK: Output: default@truncate_perm +POSTHOOK: query: TRUNCATE TABLE truncate_perm +POSTHOOK: type: TRUNCATETABLE +POSTHOOK: Output: default@truncate_perm +#### A masked pattern was here ####