You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by jo...@apache.org on 2012/01/12 15:21:35 UTC
svn commit: r1230562 - in /httpcomponents/httpclient/branches/4.1.x: ./
httpclient-cache/
httpclient-cache/src/main/java/org/apache/http/client/cache/
httpclient-cache/src/main/java/org/apache/http/impl/client/cache/
httpclient-cache/src/main/java/org/...
Author: jonm
Date: Thu Jan 12 14:21:34 2012
New Revision: 1230562
URL: http://svn.apache.org/viewvc?rev=1230562&view=rev
Log:
HTTPCLIENT-1157: MemcachedHttpCacheStroage should throw IOExceptions
instead of RuntimeExceptions. (Backport from trunk to 4.1.x).
Contributed by James Miller <jamesmiller01 at gmail dot com>.
Added:
httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/memcached/MemcachedOperationTimeoutException.java
- copied unchanged from r1230515, httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/memcached/MemcachedOperationTimeoutException.java
Modified:
httpcomponents/httpclient/branches/4.1.x/ (props changed)
httpcomponents/httpclient/branches/4.1.x/RELEASE_NOTES.txt
httpcomponents/httpclient/branches/4.1.x/httpclient/ (props changed)
httpcomponents/httpclient/branches/4.1.x/httpclient-cache/ (props changed)
httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheStorage.java (props changed)
httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCacheStorage.java (props changed)
httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/memcached/MemcachedHttpCacheStorage.java
httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/memcached/TestMemcachedHttpCacheStorage.java
httpcomponents/httpclient/branches/4.1.x/httpclient-contrib/src/main/java/org/apache/http/contrib/auth/BouncySpnegoTokenGenerator.java (props changed)
httpcomponents/httpclient/branches/4.1.x/httpclient/src/main/java/org/apache/http/impl/conn/HttpInetSocketAddress.java (props changed)
httpcomponents/httpclient/branches/4.1.x/httpclient/src/test/resources/test.keystore (props changed)
httpcomponents/httpclient/branches/4.1.x/src/docbkx/resources/ (props changed)
httpcomponents/httpclient/branches/4.1.x/src/site/ (props changed)
httpcomponents/httpclient/branches/4.1.x/src/site/apt/ntlm.apt (props changed)
Propchange: httpcomponents/httpclient/branches/4.1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,4 +1,4 @@
/httpcomponents/httpclient/branches/4.0.x:950681-950688
/httpcomponents/httpclient/branches/branch_4_1:755593-811107
/httpcomponents/httpclient/branches/notice-plugin-test:1024348-1031454
-/httpcomponents/httpclient/trunk:1087358,1091140-1091141,1091904,1104207-1104211,1132902-1132903,1133907,1138790-1138791,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk:1087358,1091140-1091141,1091904,1104207-1104211,1132902-1132903,1133907,1138790-1138791,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Modified: httpcomponents/httpclient/branches/4.1.x/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/branches/4.1.x/RELEASE_NOTES.txt?rev=1230562&r1=1230561&r2=1230562&view=diff
==============================================================================
--- httpcomponents/httpclient/branches/4.1.x/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpclient/branches/4.1.x/RELEASE_NOTES.txt Thu Jan 12 14:21:34 2012
@@ -1,5 +1,9 @@
Changes since 4.1.2
-------------------
+* [HTTPCLIENT-1157] MemcachedHttpCacheStroage should throw IOExceptions
+ instead of RuntimeExceptions.
+ Contributed by James Miller <jamesmiller01 at gmail dot com>.
+
* [HTTPCLIENT-1152] MemcachedHttpCacheStorage should verify class of
returned object before casting.
Contributed by Rajika Kumarasiri <rajika at wso2 dot com>.
Propchange: httpcomponents/httpclient/branches/4.1.x/httpclient/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,4 +1,4 @@
/httpcomponents/httpclient/branches/4.0.x/httpclient:950681-950688
/httpcomponents/httpclient/branches/branch_4_1/httpclient:755593-811107
/httpcomponents/httpclient/branches/notice-plugin-test/httpclient:1024348-1031454
-/httpcomponents/httpclient/trunk/httpclient:1087358,1088000-1088004,1091140-1091141,1091904,1100531-1100533,1104207-1104211,1132902-1132903,1138790-1138791,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/httpclient:1087358,1088000-1088004,1091140-1091141,1091904,1100531-1100533,1104207-1104211,1132902-1132903,1138790-1138791,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Propchange: httpcomponents/httpclient/branches/4.1.x/httpclient-cache/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,4 +1,4 @@
/httpcomponents/httpclient/branches/4.0.x/httpclient-cache:950681-950688
/httpcomponents/httpclient/branches/branch_4_1/httpclient-cache:755593-811107
/httpcomponents/httpclient/branches/notice-plugin-test/httpclient-cache:1024348-1031454
-/httpcomponents/httpclient/trunk/httpclient-cache:1080419,1080422,1080575,1084590,1084607,1084610-1084611,1084649,1084655,1087358,1133907,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/httpclient-cache:1080419,1080422,1080575,1084590,1084607,1084610-1084611,1084649,1084655,1087358,1133907,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Propchange: httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheStorage.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,3 +1,3 @@
/httpcomponents/httpclient/branches/4.0.x/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCache.java:950681-950688
/httpcomponents/httpclient/branches/branch_4_1/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCache.java:755593-811107
-/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheStorage.java:1080419,1080422,1080575,1084590,1084607,1084610-1084611,1084649,1084655,1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheStorage.java:1080419,1080422,1080575,1084590,1084607,1084610-1084611,1084649,1084655,1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Propchange: httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCacheStorage.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,3 +1,3 @@
/httpcomponents/httpclient/branches/4.0.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCache.java:950681-950688
/httpcomponents/httpclient/branches/branch_4_1/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCache.java:755593-811107
-/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCacheStorage.java:1080419,1080422,1080575,1084590,1084607,1084610-1084611,1084649,1084655,1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCacheStorage.java:1080419,1080422,1080575,1084590,1084607,1084610-1084611,1084649,1084655,1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Modified: httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/memcached/MemcachedHttpCacheStorage.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/memcached/MemcachedHttpCacheStorage.java?rev=1230562&r1=1230561&r2=1230562&view=diff
==============================================================================
--- httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/memcached/MemcachedHttpCacheStorage.java (original)
+++ httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/memcached/MemcachedHttpCacheStorage.java Thu Jan 12 14:21:34 2012
@@ -36,6 +36,7 @@ import net.spy.memcached.CASResponse;
import net.spy.memcached.CASValue;
import net.spy.memcached.MemcachedClient;
import net.spy.memcached.MemcachedClientIF;
+import net.spy.memcached.OperationTimeoutException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -124,7 +125,11 @@ public class MemcachedHttpCacheStorage i
public void putEntry(String url, HttpCacheEntry entry) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
serializer.writeTo(entry, bos);
- client.set(url, 0, bos.toByteArray());
+ try {
+ client.set(url, 0, bos.toByteArray());
+ } catch (OperationTimeoutException ex) {
+ throw new MemcachedOperationTimeoutException(ex);
+ }
}
private byte[] convertToByteArray(Object o) {
@@ -144,36 +149,47 @@ public class MemcachedHttpCacheStorage i
}
public HttpCacheEntry getEntry(String url) throws IOException {
- return reconstituteEntry(client.get(url));
+ try {
+ return reconstituteEntry(client.get(url));
+ } catch (OperationTimeoutException ex) {
+ throw new MemcachedOperationTimeoutException(ex);
+ }
}
public void removeEntry(String url) throws IOException {
- client.delete(url);
+ try {
+ client.delete(url);
+ } catch (OperationTimeoutException ex) {
+ throw new MemcachedOperationTimeoutException(ex);
+ }
}
public void updateEntry(String url, HttpCacheUpdateCallback callback)
throws HttpCacheUpdateException, IOException {
int numRetries = 0;
do {
-
- CASValue<Object> v = client.gets(url);
- HttpCacheEntry existingEntry = (v == null) ? null
- : reconstituteEntry(v.getValue());
- HttpCacheEntry updatedEntry = callback.update(existingEntry);
-
- if (v == null) {
- putEntry(url, updatedEntry);
- return;
-
- } else {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- serializer.writeTo(updatedEntry, bos);
- CASResponse casResult = client.cas(url, v.getCas(), bos.toByteArray());
- if (casResult != CASResponse.OK) {
- numRetries++;
- } else return;
+ try {
+ CASValue<Object> v = client.gets(url);
+ HttpCacheEntry existingEntry = (v == null) ? null
+ : reconstituteEntry(v.getValue());
+ HttpCacheEntry updatedEntry = callback.update(existingEntry);
+
+ if (v == null) {
+ putEntry(url, updatedEntry);
+ return;
+
+ } else {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ serializer.writeTo(updatedEntry, bos);
+ CASResponse casResult = client.cas(url, v.getCas(),
+ bos.toByteArray());
+ if (casResult != CASResponse.OK) {
+ numRetries++;
+ } else return;
+ }
+ } catch (OperationTimeoutException ex) {
+ throw new MemcachedOperationTimeoutException(ex);
}
-
} while (numRetries <= maxUpdateRetries);
throw new HttpCacheUpdateException("Failed to update");
Modified: httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/memcached/TestMemcachedHttpCacheStorage.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/memcached/TestMemcachedHttpCacheStorage.java?rev=1230562&r1=1230561&r2=1230562&view=diff
==============================================================================
--- httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/memcached/TestMemcachedHttpCacheStorage.java (original)
+++ httpcomponents/httpclient/branches/4.1.x/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/memcached/TestMemcachedHttpCacheStorage.java Thu Jan 12 14:21:34 2012
@@ -35,6 +35,7 @@ import junit.framework.TestCase;
import net.spy.memcached.CASResponse;
import net.spy.memcached.CASValue;
import net.spy.memcached.MemcachedClientIF;
+import net.spy.memcached.OperationTimeoutException;
import org.apache.http.client.cache.HttpCacheEntry;
import org.apache.http.client.cache.HttpCacheEntrySerializer;
@@ -102,6 +103,22 @@ public class TestMemcachedHttpCacheStora
}
@Test
+ public void testCacheGetThrowsTimeoutException()
+ throws UnsupportedEncodingException, IOException {
+ final String url = "foo";
+ EasyMock.expect(mockMemcachedClient.get(url)).andThrow(
+ new OperationTimeoutException("op timeout"));
+ replayMocks();
+ try {
+ impl.getEntry(url);
+ fail("IOException not thrown");
+ } catch (IOException ex) {
+ assertTrue(ex instanceof IOException);
+ }
+ verifyMocks();
+ }
+
+ @Test
public void testCacheGetNullEntry() throws IOException {
final String url = "foo";
@@ -187,6 +204,44 @@ public class TestMemcachedHttpCacheStora
}
@Test
+ public void testCacheUpdateThrowsTimeoutException() throws IOException, HttpCacheUpdateException {
+ final String url = "foo";
+ final HttpCacheEntry existingValue = HttpTestUtils.makeCacheEntry();
+ final HttpCacheEntry updatedValue = HttpTestUtils.makeCacheEntry();
+
+ CASValue<Object> v = new CASValue<Object>(1234, new byte[] {});
+
+ HttpCacheUpdateCallback callback = new HttpCacheUpdateCallback() {
+ public HttpCacheEntry update(HttpCacheEntry old) {
+ assertEquals(existingValue, old);
+ return updatedValue;
+ }
+ };
+
+ // get existing old entry
+ EasyMock.expect(mockMemcachedClient.gets(url)).andReturn(v);
+ EasyMock.expect(
+ mockSerializer.readFrom(EasyMock.isA(InputStream.class)))
+ .andReturn(existingValue);
+
+ // update
+ EasyMock.expect(
+ mockMemcachedClient.cas(EasyMock.eq(url), EasyMock.eq(v
+ .getCas()), EasyMock.aryEq(new byte[0]))).andThrow(
+ new OperationTimeoutException("op timeout"));
+ mockSerializer.writeTo(EasyMock.same(updatedValue), EasyMock
+ .isA(OutputStream.class));
+ replayMocks();
+ try {
+ impl.updateEntry(url, callback);
+ fail("IOException not thrown");
+ } catch(IOException ex) {
+ assertTrue(ex instanceof IOException);
+ }
+ verifyMocks();
+ }
+
+ @Test
public void testSingleCacheUpdateRetry() throws IOException,
HttpCacheUpdateException {
final String url = "foo";
@@ -264,4 +319,45 @@ public class TestMemcachedHttpCacheStora
verifyMocks();
}
+ @Test
+ public void testCachePutThrowsIOExceptionOnTimeout() throws Exception {
+ final String url = "foo";
+ final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry();
+ impl = new MemcachedHttpCacheStorage(mockMemcachedClient);
+
+ EasyMock.expect(mockMemcachedClient.set(EasyMock.eq(url), EasyMock.anyInt(), EasyMock.anyObject()))
+ .andThrow(new OperationTimeoutException(url));
+
+ replayMocks();
+ boolean sawIOException = false;
+ try {
+ impl.putEntry(url, entry);
+ fail("should have thrown exception");
+ } catch (IOException expected) {
+ sawIOException = true;
+ }
+ assertTrue(sawIOException);
+ verifyMocks();
+ }
+
+ @Test
+ public void testCacheDeleteThrowsIOExceptionOnTimeout() throws Exception {
+ final String url = "foo";
+ impl = new MemcachedHttpCacheStorage(mockMemcachedClient);
+
+ EasyMock.expect(mockMemcachedClient.delete(url))
+ .andThrow(new OperationTimeoutException(url));
+
+ replayMocks();
+ boolean sawIOException = false;
+ try {
+ impl.removeEntry(url);
+ fail("should have thrown exception");
+ } catch (IOException expected) {
+ sawIOException = true;
+ }
+ assertTrue(sawIOException);
+ verifyMocks();
+ }
+
}
Propchange: httpcomponents/httpclient/branches/4.1.x/httpclient-contrib/src/main/java/org/apache/http/contrib/auth/BouncySpnegoTokenGenerator.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,2 +1,2 @@
/httpcomponents/httpclient/branches/branch_4_1/contrib/org/apache/http/contrib/auth/BouncySpnegoTokenGenerator.java:755593-811107
-/httpcomponents/httpclient/trunk/httpclient-contrib/src/main/java/org/apache/http/contrib/auth/BouncySpnegoTokenGenerator.java:1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/httpclient-contrib/src/main/java/org/apache/http/contrib/auth/BouncySpnegoTokenGenerator.java:1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Propchange: httpcomponents/httpclient/branches/4.1.x/httpclient/src/main/java/org/apache/http/impl/conn/HttpInetSocketAddress.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -2,4 +2,4 @@
/httpcomponents/httpclient/branches/4.1.x/httpclient/src/main/java/org/apache/http/conn/HttpInetSocketAddress.java:1079518-1080165
/httpcomponents/httpclient/branches/branch_4_1/httpclient/src/main/java/org/apache/http/conn/HttpInetSocketAddress.java:755593-811107
/httpcomponents/httpclient/branches/notice-plugin-test/httpclient/src/main/java/org/apache/http/conn/HttpInetSocketAddress.java:1024348-1031454
-/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/HttpInetSocketAddress.java:1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/HttpInetSocketAddress.java:1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Propchange: httpcomponents/httpclient/branches/4.1.x/httpclient/src/test/resources/test.keystore
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,2 +1,2 @@
-/httpcomponents/httpclient/trunk/httpclient/src/test/resources/test.keystore:1087358,1132902-1132903,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/httpclient/src/test/resources/test.keystore:1087358,1132902-1132903,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
/httpcomponents/httpcore/branches/ibm_compat_branch/httpcore-nio/src/test/resources/test.keystore:755687-758898
Propchange: httpcomponents/httpclient/branches/4.1.x/src/docbkx/resources/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,2 +1,2 @@
-/httpcomponents/httpclient/trunk/src/docbkx/resources:1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/src/docbkx/resources:1087358,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
/httpcomponents/httpcore/branches/ibm_compat_branch/src/docbkx/resources:755687-758898
Propchange: httpcomponents/httpclient/branches/4.1.x/src/site/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1,4 +1,4 @@
/httpcomponents/httpclient/branches/4.0.x/src/site:950681-950688
/httpcomponents/httpclient/branches/branch_4_1/src/site:755593-811107
/httpcomponents/httpclient/branches/notice-plugin-test/src/site:1024348-1031454
-/httpcomponents/httpclient/trunk/src/site:1087358,1091140-1091141,1091904,1095921-1100531,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/src/site:1087358,1091140-1091141,1091904,1095921-1100531,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515
Propchange: httpcomponents/httpclient/branches/4.1.x/src/site/apt/ntlm.apt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 12 14:21:34 2012
@@ -1 +1 @@
-/httpcomponents/httpclient/trunk/src/site/apt/ntlm.apt:825864-828185,954258,956989-957002,1147280,1198939,1198941,1229169,1229172,1229176,1229203
+/httpcomponents/httpclient/trunk/src/site/apt/ntlm.apt:825864-828185,954258,956989-957002,1147280,1198939,1198941,1229169,1229172,1229176,1229203,1230174,1230515