Author: cnauroth Date: Tue Mar 4 06:15:56 2014 New Revision: 1573881 URL: http://svn.apache.org/r1573881 Log: HDFS-6039. Merging change r1573879 from trunk to branch-2.
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/FSAclBaseTest.java hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testAclCLI.xml Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1573881&r1=1573880&r2=1573881&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Tue Mar 4 06:15:56 2014 @@ -419,6 +419,9 @@ Release 2.4.0 - UNRELEASED HDFS-6028. Print clearer error message when user attempts to delete required mask entry from ACL. (cnauroth) + HDFS-6039. Uploading a File under a Dir with default acls throws "Duplicated + ACLFeature". (cnauroth) + Release 2.3.1 - UNRELEASED INCOMPATIBLE CHANGES Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java?rev=1573881&r1=1573880&r2=1573881&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java Tue Mar 4 06:15:56 2014 @@ -2246,6 +2246,7 @@ public class FSDirectory implements Clos final Quota.Counts counts = child.computeQuotaUsage(); updateCount(iip, pos, counts.get(Quota.NAMESPACE), counts.get(Quota.DISKSPACE), checkQuota); + boolean isRename = (child.getParent() != null); final INodeDirectory parent = inodes[pos-1].asDirectory(); boolean added = false; try { @@ -2260,7 +2261,9 @@ public class FSDirectory implements Clos -counts.get(Quota.NAMESPACE), -counts.get(Quota.DISKSPACE)); } else { iip.setINode(pos - 1, child.getParent()); - AclStorage.copyINodeDefaultAcl(child); + if (!isRename) { + AclStorage.copyINodeDefaultAcl(child); + } addToInodeMap(child); } return added; Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/FSAclBaseTest.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/FSAclBaseTest.java?rev=1573881&r1=1573880&r2=1573881&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/FSAclBaseTest.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/FSAclBaseTest.java Tue Mar 4 06:15:56 2014 @@ -1064,6 +1064,45 @@ public abstract class FSAclBaseTest { } @Test + public void testDefaultAclRenamedFile() throws Exception { + Path dirPath = new Path(path, "dir"); + FileSystem.mkdirs(fs, dirPath, FsPermission.createImmutable((short)0750)); + List<AclEntry> aclSpec = Lists.newArrayList( + aclEntry(DEFAULT, USER, "foo", ALL)); + fs.setAcl(dirPath, aclSpec); + Path filePath = new Path(path, "file1"); + fs.create(filePath).close(); + fs.setPermission(filePath, FsPermission.createImmutable((short)0640)); + Path renamedFilePath = new Path(dirPath, "file1"); + fs.rename(filePath, renamedFilePath); + AclEntry[] expected = new AclEntry[] { }; + AclStatus s = fs.getAclStatus(renamedFilePath); + AclEntry[] returned = s.getEntries().toArray(new AclEntry[0]); + assertArrayEquals(expected, returned); + assertPermission(renamedFilePath, (short)0640); + assertAclFeature(renamedFilePath, false); + } + + @Test + public void testDefaultAclRenamedDir() throws Exception { + Path dirPath = new Path(path, "dir"); + FileSystem.mkdirs(fs, dirPath, FsPermission.createImmutable((short)0750)); + List<AclEntry> aclSpec = Lists.newArrayList( + aclEntry(DEFAULT, USER, "foo", ALL)); + fs.setAcl(dirPath, aclSpec); + Path subdirPath = new Path(path, "subdir"); + FileSystem.mkdirs(fs, subdirPath, FsPermission.createImmutable((short)0750)); + Path renamedSubdirPath = new Path(dirPath, "subdir"); + fs.rename(subdirPath, renamedSubdirPath); + AclEntry[] expected = new AclEntry[] { }; + AclStatus s = fs.getAclStatus(renamedSubdirPath); + AclEntry[] returned = s.getEntries().toArray(new AclEntry[0]); + assertArrayEquals(expected, returned); + assertPermission(renamedSubdirPath, (short)0750); + assertAclFeature(renamedSubdirPath, false); + } + + @Test public void testSkipAclEnforcementPermsDisabled() throws Exception { Path bruceDir = new Path(path, "bruce"); Path bruceFile = new Path(bruceDir, "file"); Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testAclCLI.xml URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testAclCLI.xml?rev=1573881&r1=1573880&r2=1573881&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testAclCLI.xml (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testAclCLI.xml Tue Mar 4 06:15:56 2014 @@ -972,5 +972,55 @@ </comparator> </comparators> </test> + <test> + <description>copyFromLocal: copying file into a directory with a default ACL</description> + <test-commands> + <command>-fs NAMENODE -mkdir /dir1</command> + <command>-fs NAMENODE -setfacl -m default:user:charlie:rwx /dir1</command> + <command>-fs NAMENODE -copyFromLocal CLITEST_DATA/data15bytes /dir1/data15bytes</command> + <command>-fs NAMENODE -getfacl /dir1/data15bytes</command> + </test-commands> + <cleanup-commands> + <command>-fs NAMENODE -rm -R /dir1</command> + </cleanup-commands> + <comparators> + <comparator> + <type>RegexpComparator</type> + <expected-output>^# file: /dir1/data15bytes$</expected-output> + </comparator> + <comparator> + <type>RegexpComparator</type> + <expected-output>^# owner: USERNAME$</expected-output> + </comparator> + <comparator> + <type>RegexpComparator</type> + <expected-output>^# group: supergroup$</expected-output> + </comparator> + <comparator> + <type>RegexpComparator</type> + <expected-output>^user::rw-$</expected-output> + </comparator> + <comparator> + <type>RegexpComparator</type> + <expected-output>^user:charlie:rwx\t#effective:r--$</expected-output> + </comparator> + <comparator> + <type>RegexpComparator</type> + <expected-output>^group::r-x\t#effective:r--$</expected-output> + </comparator> + <comparator> + <type>RegexpComparator</type> + <expected-output>^mask::r--$</expected-output> + </comparator> + <comparator> + <type>RegexpComparator</type> + <expected-output>^other::r--$</expected-output> + </comparator> + <comparator> + <type>RegexpAcrossOutputComparator</type> + <expected-output>.*(?!default).*</expected-output> + </comparator> + </comparators> + </test> </tests> </configuration>