svn merge -c 1498962 from trunk for HDFS-4943. WebHdfsFileSystem does not work when original file path has encoded chars.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1498963 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Tsz-wo Sze 2013-07-02 14:59:55 +00:00
parent 2f0d853fd6
commit b189d3a968
3 changed files with 22 additions and 2 deletions

View File

@ -437,6 +437,9 @@ Release 2.1.0-beta - 2013-07-02
HDFS-4888. Refactor and fix FSNamesystem.getTurnOffTip. (Ravi Prakash via HDFS-4888. Refactor and fix FSNamesystem.getTurnOffTip. (Ravi Prakash via
kihwal) kihwal)
HDFS-4943. WebHdfsFileSystem does not work when original file path has
encoded chars. (Jerry He via szetszwo)
BREAKDOWN OF HDFS-347 SUBTASKS AND RELATED JIRAS BREAKDOWN OF HDFS-347 SUBTASKS AND RELATED JIRAS
HDFS-4353. Encapsulate connections to peers in Peer and PeerServer classes. HDFS-4353. Encapsulate connections to peers in Peer and PeerServer classes.

View File

@ -391,7 +391,7 @@ public class WebHdfsFileSystem extends FileSystem
final Param<?,?>... parameters) throws IOException { final Param<?,?>... parameters) throws IOException {
//initialize URI path and query //initialize URI path and query
final String path = PATH_PREFIX final String path = PATH_PREFIX
+ (fspath == null? "/": makeQualified(fspath).toUri().getPath()); + (fspath == null? "/": makeQualified(fspath).toUri().getRawPath());
final String query = op.toQueryString() final String query = op.toQueryString()
+ Param.toSortedString("&", getAuthParameters(op)) + Param.toSortedString("&", getAuthParameters(op))
+ Param.toSortedString("&", parameters); + Param.toSortedString("&", parameters);

View File

@ -26,6 +26,7 @@ import static org.mockito.Mockito.mock;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
@ -54,6 +55,22 @@ public class TestWebHdfsUrl {
UserGroupInformation.setConfiguration(new Configuration()); UserGroupInformation.setConfiguration(new Configuration());
} }
@Test(timeout=60000)
public void testEncodedPathUrl() throws IOException, URISyntaxException{
Configuration conf = new Configuration();
final WebHdfsFileSystem webhdfs = (WebHdfsFileSystem) FileSystem.get(
uri, conf);
// Construct a file path that contains percentage-encoded string
String pathName = "/hdtest010%2C60020%2C1371000602151.1371058984668";
Path fsPath = new Path(pathName);
URL encodedPathUrl = webhdfs.toUrl(PutOpParam.Op.CREATE, fsPath);
// We should get back the original file path after cycling back and decoding
Assert.assertEquals(WebHdfsFileSystem.PATH_PREFIX + pathName,
encodedPathUrl.toURI().getPath());
}
@Test(timeout=60000) @Test(timeout=60000)
public void testSimpleAuthParamsInUrl() throws IOException { public void testSimpleAuthParamsInUrl() throws IOException {
Configuration conf = new Configuration(); Configuration conf = new Configuration();