Repository: hadoop Updated Branches: refs/heads/branch-2 27ef6e4a6 -> 8d98d8774
HDFS-7530. Allow renaming of encryption zone roots. Contributed by Charles Lamb. (cherry picked from commit b0b9084433d5e80131429e6e76858b099deb2dda) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8d98d877 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8d98d877 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8d98d877 Branch: refs/heads/branch-2 Commit: 8d98d87745374090d83437705c928ab18c0b895a Parents: 27ef6e4 Author: Andrew Wang <w...@apache.org> Authored: Thu Dec 18 14:06:53 2014 -0800 Committer: Andrew Wang <w...@apache.org> Committed: Thu Dec 18 14:18:14 2014 -0800 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++ .../server/namenode/EncryptionZoneManager.java | 4 +++ .../apache/hadoop/hdfs/TestEncryptionZones.java | 13 +++++++++ .../src/test/resources/testCryptoConf.xml | 30 +++++++++++++++++--- 4 files changed, 45 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8d98d877/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 8da7a94..372d917 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -217,6 +217,8 @@ Release 2.7.0 - UNRELEASED HDFS-7543. Avoid path resolution when getting FileStatus for audit logs. (wheat9) + HDFS-7530. Allow renaming of encryption zone roots. (Charles Lamb via wang) + OPTIMIZATIONS HDFS-7454. Reduce memory footprint for AclEntries in NameNode. http://git-wip-us.apache.org/repos/asf/hadoop/blob/8d98d877/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java index 5c4f39d..3fe748d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java @@ -249,6 +249,10 @@ public class EncryptionZoneManager { final boolean dstInEZ = (dstEZI != null); if (srcInEZ) { if (!dstInEZ) { + if (srcEZI.getINodeId() == srcIIP.getLastINode().getId()) { + // src is ez root and dest is not in an ez. Allow the rename. + return; + } throw new IOException( src + " can't be moved from an encryption zone."); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/8d98d877/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java index cc00055..13eb4cf 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java @@ -538,6 +538,19 @@ public class TestEncryptionZones { !wrapper.exists(pathFooBaz) && wrapper.exists(pathFooBar)); assertEquals("Renamed file contents not the same", contents, DFSTestUtil.readFile(fs, pathFooBarFile)); + + // Verify that we can rename an EZ root + final Path newFoo = new Path(testRoot, "newfoo"); + assertTrue("Rename of EZ root", fs.rename(pathFoo, newFoo)); + assertTrue("Rename of EZ root failed", + !wrapper.exists(pathFoo) && wrapper.exists(newFoo)); + + // Verify that we can't rename an EZ root onto itself + try { + wrapper.rename(newFoo, newFoo); + } catch (IOException e) { + assertExceptionContains("are the same", e); + } } @Test(timeout = 60000) http://git-wip-us.apache.org/repos/asf/hadoop/blob/8d98d877/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml index ebbf773..89c93e2 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml @@ -238,13 +238,35 @@ </test> <test> - <description>Test failure of renaming a non-EZ file from an EZ</description> + <description>Test failure of renaming an EZ file into a non-EZ</description> + <test-commands> + <command>-fs NAMENODE -mkdir /src</command> + <command>-fs NAMENODE -mkdir /dst</command> + <command>-fs NAMENODE -ls /</command>- + <crypto-admin-command>-createZone -path /src -keyName myKey</crypto-admin-command> + <command>-fs NAMENODE -touchz /src/foo</command> + <command>-fs NAMENODE -mv /src/foo /dst</command>- + </test-commands> + <cleanup-commands> + <command>-fs NAMENODE -rm /src/foo</command> + <command>-fs NAMENODE -rmdir /src</command> + <command>-fs NAMENODE -rmdir /dst</command> + </cleanup-commands> + <comparators> + <comparator> + <type>SubstringComparator</type> + <expected-output>/src/foo can't be moved from an encryption zone.</expected-output> + </comparator> + </comparators> + </test> + + <test> + <description>Test success of renaming an EZ root</description> <test-commands> <command>-fs NAMENODE -mkdir /src</command> - <command>-fs NAMENODE -mkdir /dst</command> - <command>-fs NAMENODE -ls /</command>- <crypto-admin-command>-createZone -path /src -keyName myKey</crypto-admin-command> <command>-fs NAMENODE -mv /src /dst</command>- + <command>-fs NAMENODE -ls /</command>- </test-commands> <cleanup-commands> <command>-fs NAMENODE -rmdir /src</command> @@ -253,7 +275,7 @@ <comparators> <comparator> <type>SubstringComparator</type> - <expected-output>/src can't be moved from an encryption zone</expected-output> + <expected-output>/dst</expected-output> </comparator> </comparators> </test>