Henry Robinson created HIVE-6648:
------------------------------------
Summary: Permissions are not inherited correctly when tables have
multiple partition columns
Key: HIVE-6648
URL: https://issues.apache.org/jira/browse/HIVE-6648
Project: Hive
Issue Type: Bug
Affects Versions: 0.12.0
Reporter: Henry Robinson
{{Warehouse.mkdirs()}} always looks at the immediate parent of the path that it
creates when determining what permissions to inherit. However, it may have
created that parent directory as well, in which case it will have the default
permissions and will not have inherited them.
This is a problem when performing an {{INSERT}} into a table with more than one
partition column. E.g., in an empty table:
{{INSERT INTO TABLE tbl PARTITION(p1=1, p2=2) ... }}
A new subdirectory /p1=1/p2=2 will be created, and with permission inheritance
(per HIVE-2504) enabled, the intention is presumably for both new directories
to inherit the root table dir's permissions. However, {{mkdirs()}} will only
set the permission of the leaf directory (i.e. /p2=2/), and then only to the
permissions of /p1=1/, which was just created.
{code}
public boolean mkdirs(Path f) throws MetaException {
FileSystem fs = null;
try {
fs = getFs(f);
LOG.debug("Creating directory if it doesn't exist: " + f);
//Check if the directory already exists. We want to change the permission
//to that of the parent directory only for newly created directories.
if (this.inheritPerms) {
try {
return fs.getFileStatus(f).isDir();
} catch (FileNotFoundException ignore) {
}
}
boolean success = fs.mkdirs(f);
if (this.inheritPerms && success) {
// Set the permission of parent directory.
// HNR: This is the bug - getParent() may refer to a just-created
directory.
fs.setPermission(f, fs.getFileStatus(f.getParent()).getPermission());
}
return success;
} catch (IOException e) {
closeFs(fs);
MetaStoreUtils.logAndThrowMetaException(e);
}
return false;
}
{code}
--
This message was sent by Atlassian JIRA
(v6.2#6252)