HDFS-13281 Namenode#createFile should be /.reserved/raw/ aware.. Contributed by Rushabh S Shah
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e2289c8d Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e2289c8d Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e2289c8d Branch: refs/heads/YARN-1011 Commit: e2289c8d1496a5eff88e6bcb8776a11d45371ffc Parents: bccdfee Author: Rushabh Shah <shahr...@apache.org> Authored: Mon Jun 4 09:19:03 2018 -0500 Committer: Rushabh Shah <shahr...@apache.org> Committed: Mon Jun 4 09:19:03 2018 -0500 ---------------------------------------------------------------------- .../hdfs/server/namenode/FSNamesystem.java | 2 +- .../apache/hadoop/hdfs/TestEncryptionZones.java | 29 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2289c8d/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index c02eb84..19ff08d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -2416,7 +2416,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, } FileEncryptionInfo feInfo = null; - if (provider != null) { + if (!iip.isRaw() && provider != null) { EncryptionKeyInfo ezInfo = FSDirEncryptionZoneOp.getEncryptionKeyInfo( this, iip, supportedVersions); // if the path has an encryption zone, the lock was released while http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2289c8d/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 6f9ef29..d8524ae 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 @@ -21,6 +21,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintStream; import java.io.RandomAccessFile; import java.io.StringReader; @@ -77,6 +78,7 @@ import org.apache.hadoop.hdfs.protocol.LocatedBlocks; import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction; import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport.DiffReportEntry; import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport.DiffType; +import org.apache.hadoop.hdfs.server.common.HdfsServerConstants; import org.apache.hadoop.hdfs.server.namenode.EncryptionFaultInjector; import org.apache.hadoop.hdfs.server.namenode.EncryptionZoneManager; import org.apache.hadoop.hdfs.server.namenode.FSImageTestUtil; @@ -2302,4 +2304,31 @@ public class TestEncryptionZones { Assert.assertEquals((data[i] & 0XFF), in.read()); } } + + /** + * Tests that namenode doesn't generate edek if we are writing to + * /.reserved/raw directory. + * @throws Exception + */ + @Test + public void testWriteToEZReservedRaw() throws Exception { + String unEncryptedBytes = "hello world"; + // Create an Encryption Zone. + final Path zonePath = new Path("/zone"); + fsWrapper.mkdir(zonePath, FsPermission.getDirDefault(), false); + dfsAdmin.createEncryptionZone(zonePath, TEST_KEY, NO_TRASH); + Path p1 = new Path(zonePath, "p1"); + Path reservedRawPath = new Path("/.reserved/raw/" + p1.toString()); + // Create an empty file with /.reserved/raw/ path. + OutputStream os = fs.create(reservedRawPath); + os.close(); + try { + fs.getXAttr(reservedRawPath, HdfsServerConstants + .CRYPTO_XATTR_FILE_ENCRYPTION_INFO); + fail("getXAttr should have thrown an exception"); + } catch (IOException ioe) { + assertExceptionContains("At least one of the attributes provided was " + + "not found.", ioe); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org