Repository: hadoop Updated Branches: refs/heads/branch-2 caa658a01 -> 193724cca
HDFS-7243. HDFS concat operation should not be allowed in Encryption Zone. (clamb via yliu) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/193724cc Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/193724cc Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/193724cc Branch: refs/heads/branch-2 Commit: 193724ccaf01f836f31df5d7895b2050443b6df1 Parents: caa658a Author: yliu <[email protected]> Authored: Fri Oct 24 11:41:49 2014 +0800 Committer: yliu <[email protected]> Committed: Fri Oct 24 11:41:49 2014 +0800 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hdfs/server/namenode/FSNamesystem.java | 7 ++++++- .../apache/hadoop/hdfs/TestEncryptionZones.java | 22 ++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/193724cc/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 88e9111..2af4429 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -659,6 +659,9 @@ Release 2.6.0 - UNRELEASED HDFS-7180. NFSv3 gateway frequently gets stuck due to GC (brandonli) + HDFS-7243. HDFS concat operation should not be allowed in Encryption Zone. + (clamb via yliu) + BREAKDOWN OF HDFS-6581 SUBTASKS AND RELATED JIRAS HDFS-6921. Add LazyPersist flag to FileStatus. (Arpit Agarwal) http://git-wip-us.apache.org/repos/asf/hadoop/blob/193724cc/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 70fd643..6c45ac5 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 @@ -2041,7 +2041,12 @@ public class FSNamesystem implements Namesystem, FSClusterStats, // replication and blocks sizes should be the same for ALL the blocks // check the target - final INodeFile trgInode = INodeFile.valueOf(dir.getINode4Write(target), + final INodesInPath trgIip = dir.getINodesInPath4Write(target); + if (dir.getEZForPath(trgIip) != null) { + throw new HadoopIllegalArgumentException( + "concat can not be called for files in an encryption zone."); + } + final INodeFile trgInode = INodeFile.valueOf(trgIip.getLastINode(), target); if(trgInode.isUnderConstruction()) { throw new HadoopIllegalArgumentException("concat: target file " http://git-wip-us.apache.org/repos/asf/hadoop/blob/193724cc/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 c8cefbf..1f98a62 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 @@ -1221,6 +1221,28 @@ public class TestEncryptionZones { fs.delete(target, true); } + @Test(timeout = 60000) + public void testConcatFailsInEncryptionZones() throws Exception { + final int len = 8192; + final Path ez = new Path("/ez"); + fs.mkdirs(ez); + dfsAdmin.createEncryptionZone(ez, TEST_KEY); + final Path src1 = new Path(ez, "src1"); + final Path src2 = new Path(ez, "src2"); + final Path target = new Path(ez, "target"); + DFSTestUtil.createFile(fs, src1, len, (short)1, 0xFEED); + DFSTestUtil.createFile(fs, src2, len, (short)1, 0xFEED); + DFSTestUtil.createFile(fs, target, len, (short)1, 0xFEED); + try { + fs.concat(target, new Path[] { src1, src2 }); + fail("expected concat to throw en exception for files in an ez"); + } catch (IOException e) { + assertExceptionContains( + "concat can not be called for files in an encryption zone", e); + } + fs.delete(ez, true); + } + /** * Test running the OfflineImageViewer on a system with encryption zones. */
