diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index a09b2bee02e..eede69ffec4 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -414,6 +414,9 @@ Release 2.8.0 - UNRELEASED HADOOP-12828. Print user when services are started. (Wei-Chiu Chuang via Yongjun Zhang) + HADOOP-11613. Remove commons-httpclient dependency from hadoop-azure. + (Masatake Iwasaki via cnauroth) + OPTIMIZATIONS HADOOP-11785. Reduce the number of listStatus operation in distcp diff --git a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/MockStorageInterface.java b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/MockStorageInterface.java index 2bb2a9ac75f..4fda017db64 100644 --- a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/MockStorageInterface.java +++ b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/MockStorageInterface.java @@ -33,9 +33,10 @@ import java.util.HashSet; import java.util.TimeZone; import java.util.List; -import org.apache.commons.httpclient.URIException; -import org.apache.commons.httpclient.util.URIUtil; +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.net.URLCodec; import org.apache.commons.lang.NotImplementedException; +import org.apache.http.client.utils.URIBuilder; import com.microsoft.azure.storage.AccessCondition; import com.microsoft.azure.storage.CloudStorageAccount; @@ -68,6 +69,7 @@ public class MockStorageInterface extends StorageInterface { private final ArrayList preExistingContainers = new ArrayList(); private String baseUriString; + private static final URLCodec codec = new URLCodec(); public InMemoryBlockBlobStore getBackingStore() { return backingStore; @@ -126,22 +128,17 @@ public StorageCredentials getCredentials() { */ private static String convertUriToDecodedString(URI uri) { try { - String result = URIUtil.decode(uri.toString()); - return result; - } catch (URIException e) { + return codec.decode(uri.toString()); + } catch (DecoderException e) { throw new AssertionError("Failed to decode URI: " + uri.toString()); } } private static URI convertKeyToEncodedUri(String key) { try { - String encodedKey = URIUtil.encodePath(key); - URI uri = new URI(encodedKey); - return uri; + return new URIBuilder().setPath(key).build(); } catch (URISyntaxException e) { throw new AssertionError("Failed to encode key: " + key); - } catch (URIException e) { - throw new AssertionError("Failed to encode key: " + key); } } @@ -149,11 +146,8 @@ private static URI convertKeyToEncodedUri(String key) { public CloudBlobContainerWrapper getContainerReference(String name) throws URISyntaxException, StorageException { String fullUri; - try { - fullUri = baseUriString + "/" + URIUtil.encodePath(name); - } catch (URIException e) { - throw new RuntimeException("problem encoding fullUri", e); - } + URIBuilder builder = new URIBuilder(baseUriString); + fullUri = builder.setPath(builder.getPath() + "/" + name).toString(); MockCloudBlobContainerWrapper container = new MockCloudBlobContainerWrapper( fullUri, name); @@ -243,8 +237,6 @@ public CloudPageBlobWrapper getPageBlobReference(String blobAddressUri) // helper to create full URIs for directory and blob. // use withTrailingSlash=true to get a good path for a directory. private String fullUriString(String relativePath, boolean withTrailingSlash) { - String fullUri; - String baseUri = this.baseUri; if (!baseUri.endsWith("/")) { baseUri += "/"; @@ -255,12 +247,11 @@ private String fullUriString(String relativePath, boolean withTrailingSlash) { } try { - fullUri = baseUri + URIUtil.encodePath(relativePath); - } catch (URIException e) { + URIBuilder builder = new URIBuilder(baseUri); + return builder.setPath(builder.getPath() + relativePath).toString(); + } catch (URISyntaxException e) { throw new RuntimeException("problem encoding fullUri", e); } - - return fullUri; } }