You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2014/07/11 06:00:29 UTC
[1/2] git commit: JCLOUDS-417: Remove ConsumeOnCloseInputStream
Repository: jclouds
Updated Branches:
refs/heads/master 66dab8d96 -> 1d218b170
JCLOUDS-417: Remove ConsumeOnCloseInputStream
ConsumeOnCloseInputStream can potentially perform a copy in finalize()
if the stream was not closed properly.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/afc0ca55
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/afc0ca55
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/afc0ca55
Branch: refs/heads/master
Commit: afc0ca557da9adb24da7f520c38457f18ad11c63
Parents: 66dab8d
Author: Tom Manville <td...@maginatics.com>
Authored: Thu Jan 2 14:58:21 2014 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Jul 10 20:59:09 2014 -0700
----------------------------------------------------------------------
.../BaseHttpCommandExecutorService.java | 41 --------------------
.../JavaUrlHttpCommandExecutorService.java | 2 +-
.../ApacheHCHttpCommandExecutorService.java | 2 +-
3 files changed, 2 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/afc0ca55/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java b/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
index dfb11ab..270a217 100644
--- a/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
+++ b/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
@@ -18,15 +18,11 @@ package org.jclouds.http.internal;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Throwables.propagate;
-import static com.google.common.io.ByteStreams.copy;
-import static com.google.common.io.ByteStreams.nullOutputStream;
import static org.jclouds.http.HttpUtils.checkRequestHasContentLengthOrChunkedEncoding;
import static org.jclouds.http.HttpUtils.wirePayloadIfEnabled;
import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-import java.io.FilterInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.util.concurrent.Callable;
import javax.annotation.Resource;
@@ -81,43 +77,6 @@ public abstract class BaseHttpCommandExecutorService<Q> implements HttpCommandEx
this.wire = checkNotNull(wire, "wire");
}
- public static InputStream consumeOnClose(InputStream in) {
- return new ConsumeOnCloseInputStream(in);
- }
-
- /**
- * Ensures the content is always flushed.
- *
- */
- static class ConsumeOnCloseInputStream extends FilterInputStream {
-
- protected ConsumeOnCloseInputStream(InputStream in) {
- super(in);
- }
-
- boolean closed;
-
- @Override
- public void close() throws IOException {
- if (!closed) {
- try {
- copy(this, nullOutputStream());
- } catch (IOException e) {
- } finally {
- closed = true;
- super.close();
- }
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- close();
- super.finalize();
- }
-
- }
-
@Override
public HttpResponse invoke(HttpCommand command) {
HttpResponse response = null;
http://git-wip-us.apache.org/repos/asf/jclouds/blob/afc0ca55/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
index ac49f8f..8d665fe 100644
--- a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
+++ b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
@@ -100,7 +100,7 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
HttpResponse.Builder<?> builder = HttpResponse.builder();
InputStream in = null;
try {
- in = consumeOnClose(connection.getInputStream());
+ in = connection.getInputStream();
} catch (IOException e) {
in = bufferAndCloseStream(connection.getErrorStream());
} catch (RuntimeException e) {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/afc0ca55/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java b/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
index 381c769..fac5592 100644
--- a/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
+++ b/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
@@ -83,7 +83,7 @@ public class ApacheHCHttpCommandExecutorService extends BaseHttpCommandExecutorS
Payload payload = null;
if (apacheResponse.getEntity() != null)
try {
- payload = Payloads.newInputStreamPayload(consumeOnClose(apacheResponse.getEntity().getContent()));
+ payload = Payloads.newInputStreamPayload(apacheResponse.getEntity().getContent());
if (apacheResponse.getEntity().getContentLength() >= 0)
payload.getContentMetadata().setContentLength(apacheResponse.getEntity().getContentLength());
if (apacheResponse.getEntity().getContentType() != null)
[2/2] git commit: JCLOUDS-417: Test closing a stream w/o reading it
Posted by ga...@apache.org.
JCLOUDS-417: Test closing a stream w/o reading it
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/1d218b17
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/1d218b17
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/1d218b17
Branch: refs/heads/master
Commit: 1d218b17056f955204f9aed5d49139fba5cf6252
Parents: afc0ca5
Author: Andrew Gaul <ga...@apache.org>
Authored: Tue Jul 8 15:51:52 2014 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Jul 10 20:59:10 2014 -0700
----------------------------------------------------------------------
...tpCommandExecutorServiceIntegrationTest.java | 22 ++++++++++++++++++++
1 file changed, 22 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/1d218b17/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java b/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java
index 9e4a14b..0ac1261 100644
--- a/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java
+++ b/core/src/test/java/org/jclouds/http/BaseHttpCommandExecutorServiceIntegrationTest.java
@@ -35,6 +35,7 @@ import java.io.InputStream;
import java.net.URLDecoder;
import java.util.Arrays;
import java.util.Random;
+import java.util.concurrent.TimeUnit;
import java.util.zip.GZIPInputStream;
import org.jclouds.io.ByteSources;
@@ -616,6 +617,27 @@ public abstract class BaseHttpCommandExecutorServiceIntegrationTest extends Base
}
}
+ @Test
+ public void testInterruptThrottledGet() throws Exception {
+ long timeoutMillis = 10 * 1000;
+ MockWebServer server = mockWebServer(new MockResponse().setBody(XML).throttleBody(XML.length() / 2, timeoutMillis, TimeUnit.MILLISECONDS));
+ IntegrationTestClient client = client(server.getUrl("/").toString());
+ try {
+ HttpResponse response = client.invoke(HttpRequest.builder()
+ .method("GET")
+ .endpoint(server.getUrl("/").toURI())
+ .build());
+ InputStream is = response.getPayload().getInput();
+ long now = System.currentTimeMillis();
+ is.close();
+ long diff = System.currentTimeMillis() - now;
+ assertTrue(diff < timeoutMillis / 2, "expected " + diff + " to be less than " + (timeoutMillis / 2));
+ } finally {
+ close(client, true);
+ server.shutdown();
+ }
+ }
+
@SuppressWarnings("unchecked")
private ByteSource getTestDataSupplier() throws IOException {
byte[] oneConstitution = toByteArray(new GZIPInputStream(