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(