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 zj...@apache.org on 2015/02/18 22:19:32 UTC

[34/50] [abbrv] hadoop git commit: HDFS-6662. WebHDFS cannot open a file if its path contains "%". Contributed by Gerson Carlos.

HDFS-6662. WebHDFS cannot open a file if its path contains "%". Contributed by Gerson Carlos.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/043e44bc
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/043e44bc
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/043e44bc

Branch: refs/heads/YARN-2928
Commit: 043e44bc36fc7f7c59406d3722b0a93607b6fa49
Parents: 00b8095
Author: Haohui Mai <wh...@apache.org>
Authored: Tue Feb 17 13:04:38 2015 -0800
Committer: Haohui Mai <wh...@apache.org>
Committed: Tue Feb 17 13:04:38 2015 -0800

----------------------------------------------------------------------
 hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt            |  3 +++
 .../server/datanode/web/webhdfs/ParameterParser.java   |  2 +-
 .../hadoop-hdfs/src/main/webapps/hdfs/explorer.js      |  7 +++++++
 .../datanode/web/webhdfs/TestParameterParser.java      | 13 +++++++++++++
 4 files changed, 24 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/043e44bc/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 48eb61c..391005c 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -970,6 +970,9 @@ Release 2.7.0 - UNRELEASED
     HDFS-7798. Checkpointing failure caused by shared KerberosAuthenticator.
     (Chengbing Liu via yliu)
 
+    HDFS-6662. WebHDFS cannot open a file if its path contains "%".
+    (Gerson Carlos via wheat9)
+
     BREAKDOWN OF HDFS-7584 SUBTASKS AND RELATED JIRAS
 
       HDFS-7720. Quota by Storage Type API, tools and ClientNameNode

http://git-wip-us.apache.org/repos/asf/hadoop/blob/043e44bc/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/ParameterParser.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/ParameterParser.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/ParameterParser.java
index e1930b0..5749504 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/ParameterParser.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/ParameterParser.java
@@ -50,7 +50,7 @@ class ParameterParser {
   private final Map<String, List<String>> params;
 
   ParameterParser(QueryStringDecoder decoder, Configuration conf) {
-    this.path = decoder.path().substring(WEBHDFS_PREFIX_LENGTH);
+    this.path = QueryStringDecoder.decodeComponent(decoder.path().substring(WEBHDFS_PREFIX_LENGTH));
     this.params = decoder.parameters();
     this.conf = conf;
   }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/043e44bc/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js b/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js
index ca73506..87d47fa 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js
@@ -102,6 +102,13 @@
       menus.change();
     }
 
+    function encode_path(abs_path) {
+      abs_path = encodeURIComponent(abs_path);
+      var re = /%2F/g;
+      return abs_path.replace(re, '/');
+    }
+
+    abs_path = encode_path(abs_path);
     var url = '/webhdfs/v1' + abs_path + '?op=GET_BLOCK_LOCATIONS';
     $.get(url).done(function(data) {
       var d = get_response(data, "LocatedBlocks");

http://git-wip-us.apache.org/repos/asf/hadoop/blob/043e44bc/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/TestParameterParser.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/TestParameterParser.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/TestParameterParser.java
index 8b4235b..6a6c5d0 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/TestParameterParser.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/web/webhdfs/TestParameterParser.java
@@ -52,4 +52,17 @@ public class TestParameterParser {
     final Token<DelegationTokenIdentifier> tok2 = testParser.delegationToken();
     Assert.assertTrue(HAUtil.isTokenForLogicalUri(tok2));
   }
+
+  @Test
+  public void testDecodePath() {
+    final String SCAPED_PATH = "hdfs-6662/test%25251%26%3Dtest?op=OPEN";
+    final String EXPECTED_PATH = "/hdfs-6662/test%251&=test";
+
+    Configuration conf = DFSTestUtil.newHAConfiguration(LOGICAL_NAME);
+    QueryStringDecoder decoder = new QueryStringDecoder(
+      WebHdfsHandler.WEBHDFS_PREFIX + "/"
+      + SCAPED_PATH);
+    ParameterParser testParser = new ParameterParser(decoder, conf);
+    Assert.assertEquals(EXPECTED_PATH, testParser.path());
+  }
 }