HDFS-7530. Allow renaming of encryption zone roots. Contributed by Charles Lamb.

This commit is contained in:
Andrew Wang 2014-12-18 14:06:53 -08:00
parent c4d97136e0
commit b0b9084433
4 changed files with 45 additions and 4 deletions

View File

@ -474,6 +474,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.

View File

@ -249,6 +249,10 @@ void checkMoveValidity(INodesInPath srcIIP, INodesInPath dstIIP, String src)
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.");
}

View File

@ -538,6 +538,19 @@ private void doRenameEncryptionZone(FSTestWrapper wrapper) throws Exception {
!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)

View File

@ -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>