diff --git hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java index e0ccc70d52..70b5d395f7 100644 --- hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java +++ hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java @@ -328,8 +328,8 @@ public static String addUserHomeDirectoryIfApplicable(String origPathStr, String String newPath = "/user/" + user + "/" + uri.getPath(); uri = UriBuilder.fromUri(uri).replacePath(newPath).build(); } // no work needed for absolute paths - - return uri.toString(); + //Using UTF-8 per JavaDoc on decode() + return URLDecoder.decode(uri.toString(), "UTF-8"); } public static Path hadoopFsPath(String fname, final Configuration conf, String user) diff --git hcatalog/webhcat/svr/src/test/java/org/apache/hive/hcatalog/templeton/tool/TestTempletonUtils.java hcatalog/webhcat/svr/src/test/java/org/apache/hive/hcatalog/templeton/tool/TestTempletonUtils.java index 3dcdd64844..13a1bd9f18 100644 --- hcatalog/webhcat/svr/src/test/java/org/apache/hive/hcatalog/templeton/tool/TestTempletonUtils.java +++ hcatalog/webhcat/svr/src/test/java/org/apache/hive/hcatalog/templeton/tool/TestTempletonUtils.java @@ -26,7 +26,6 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hive.shims.HadoopShimsSecure; -import org.apache.hadoop.hive.shims.ShimLoader; import org.apache.hadoop.util.StringUtils; import org.junit.After; import org.junit.Assert; @@ -271,18 +270,19 @@ public void testConstructingUserHomeDirectory() throws Exception { String[] sources = new String[] { "output+", "/user/hadoop/output", "hdfs://container", "hdfs://container/", "hdfs://container/path", "output#link", "hdfs://cointaner/output#link", - "hdfs://container@acc/test" }; - String[] expectedResults = new String[] { "/user/webhcat/output+", + "hdfs://container@acc/test", "/user/webhcat/düsseldorf", "düsseldorf", "䶴狝A﨩O" }; + String[] expectedResults = new String[] { "/user/webhcat/output ", "/user/hadoop/output", "hdfs://container/user/webhcat", "hdfs://container/", "hdfs://container/path", "/user/webhcat/output#link", "hdfs://cointaner/output#link", - "hdfs://container@acc/test" }; + "hdfs://container@acc/test", "/user/webhcat/düsseldorf","/user/webhcat/düsseldorf", + "/user/webhcat/䶴狝A﨩O" }; for (int i = 0; i < sources.length; i++) { String source = sources[i]; String expectedResult = expectedResults[i]; String result = TempletonUtils.addUserHomeDirectoryIfApplicable(source, "webhcat"); - Assert.assertEquals(result, expectedResult); + Assert.assertEquals("i=" + i, expectedResult, result); } String badUri = "c:\\some\\path";