You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by wa...@apache.org on 2015/04/16 16:14:59 UTC
hadoop git commit: HDFS-8142. DistributedFileSystem encryption zone
commands should resolve relative paths. Contributed by Rakesh R.
Repository: hadoop
Updated Branches:
refs/heads/trunk 1b89a3e17 -> 2e8ea780a
HDFS-8142. DistributedFileSystem encryption zone commands should resolve relative paths. Contributed by Rakesh R.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/2e8ea780
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/2e8ea780
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/2e8ea780
Branch: refs/heads/trunk
Commit: 2e8ea780a45c0eccb8f106b2bf072b59446a1cc4
Parents: 1b89a3e
Author: Andrew Wang <wa...@apache.org>
Authored: Thu Apr 16 07:14:44 2015 -0700
Committer: Andrew Wang <wa...@apache.org>
Committed: Thu Apr 16 07:14:44 2015 -0700
----------------------------------------------------------------------
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 ++
.../hadoop/hdfs/DistributedFileSystem.java | 51 ++++++++++++++++++--
.../apache/hadoop/hdfs/TestEncryptionZones.java | 18 +++++++
3 files changed, 68 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2e8ea780/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 6523423..cc9d901 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -502,6 +502,9 @@ Release 2.8.0 - UNRELEASED
HDFS-8055. NullPointerException when topology script is missing.
(Anu Engineer via cnauroth)
+ HDFS-8142. DistributedFileSystem encryption zone commands should resolve
+ relative paths. (Rakesh R via wang)
+
Release 2.7.1 - UNRELEASED
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2e8ea780/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
index 21f5107..8e7daf3 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
@@ -2046,16 +2046,59 @@ public class DistributedFileSystem extends FileSystem {
}
/* HDFS only */
- public void createEncryptionZone(Path path, String keyName)
+ public void createEncryptionZone(final Path path, final String keyName)
throws IOException {
- dfs.createEncryptionZone(getPathName(path), keyName);
+ Path absF = fixRelativePart(path);
+ new FileSystemLinkResolver<Void>() {
+ @Override
+ public Void doCall(final Path p) throws IOException,
+ UnresolvedLinkException {
+ dfs.createEncryptionZone(getPathName(p), keyName);
+ return null;
+ }
+
+ @Override
+ public Void next(final FileSystem fs, final Path p) throws IOException {
+ if (fs instanceof DistributedFileSystem) {
+ DistributedFileSystem myDfs = (DistributedFileSystem) fs;
+ myDfs.createEncryptionZone(p, keyName);
+ return null;
+ } else {
+ throw new UnsupportedOperationException(
+ "Cannot call createEncryptionZone"
+ + " on a symlink to a non-DistributedFileSystem: " + path
+ + " -> " + p);
+ }
+ }
+ }.resolve(this, absF);
}
/* HDFS only */
- public EncryptionZone getEZForPath(Path path)
+ public EncryptionZone getEZForPath(final Path path)
throws IOException {
Preconditions.checkNotNull(path);
- return dfs.getEZForPath(getPathName(path));
+ Path absF = fixRelativePart(path);
+ return new FileSystemLinkResolver<EncryptionZone>() {
+ @Override
+ public EncryptionZone doCall(final Path p) throws IOException,
+ UnresolvedLinkException {
+ return dfs.getEZForPath(getPathName(p));
+ }
+
+ @Override
+ public EncryptionZone next(final FileSystem fs, final Path p)
+ throws IOException {
+ if (fs instanceof DistributedFileSystem) {
+ DistributedFileSystem myDfs = (DistributedFileSystem) fs;
+ return myDfs.getEZForPath(p);
+ } else {
+ throw new UnsupportedOperationException(
+ "Cannot call getEZForPath"
+ + " on a symlink to a non-DistributedFileSystem: " + path
+ + " -> " + p);
+ }
+ }
+ }.resolve(this, absF);
}
/* HDFS only */
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2e8ea780/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 dbb7ea5..e43593d 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
@@ -1310,4 +1310,22 @@ public class TestEncryptionZones {
true, fs.getFileStatus(zoneFile).isEncrypted());
DFSTestUtil.verifyFilesNotEqual(fs, zoneFile, rawFile, len);
}
+
+ @Test(timeout = 60000)
+ public void testEncryptionZonesOnRelativePath() throws Exception {
+ final int len = 8196;
+ final Path baseDir = new Path("/somewhere/base");
+ final Path zoneDir = new Path("zone");
+ final Path zoneFile = new Path("file");
+ fs.setWorkingDirectory(baseDir);
+ fs.mkdirs(zoneDir);
+ dfsAdmin.createEncryptionZone(zoneDir, TEST_KEY);
+ DFSTestUtil.createFile(fs, zoneFile, len, (short) 1, 0xFEED);
+
+ assertNumZones(1);
+ assertZonePresent(TEST_KEY, "/somewhere/base/zone");
+
+ assertEquals("Got unexpected ez path", "/somewhere/base/zone", dfsAdmin
+ .getEncryptionZoneForPath(zoneDir).getPath().toString());
+ }
}