You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2017/11/16 19:20:29 UTC

[1/2] httpcomponents-client git commit: CPoolProxy to use AtomicReference to keep a reference to nullable reference

Repository: httpcomponents-client
Updated Branches:
  refs/heads/4.6.x 11190331d -> 7d16ce5a5


CPoolProxy to use AtomicReference to keep a reference to nullable reference


Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/commit/4e3ec2b2
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/tree/4e3ec2b2
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/diff/4e3ec2b2

Branch: refs/heads/4.6.x
Commit: 4e3ec2b2b1ee3c39a113ec13a526be559f2cbf1a
Parents: 1119033
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Thu Nov 16 17:53:59 2017 +0100
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Thu Nov 16 17:53:59 2017 +0100

----------------------------------------------------------------------
 .../org/apache/http/impl/conn/CPoolProxy.java    | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/4e3ec2b2/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java
----------------------------------------------------------------------
diff --git a/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java b/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java
index 8c8f623..8e2b03f 100644
--- a/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java
+++ b/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java
@@ -29,6 +29,7 @@ package org.apache.http.impl.conn;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.Socket;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.net.ssl.SSLSession;
 
@@ -46,25 +47,23 @@ import org.apache.http.protocol.HttpContext;
  */
 class CPoolProxy implements ManagedHttpClientConnection, HttpContext {
 
-    private volatile CPoolEntry poolEntry;
+    private final AtomicReference<CPoolEntry> poolEntryRef;
 
     CPoolProxy(final CPoolEntry entry) {
         super();
-        this.poolEntry = entry;
+        this.poolEntryRef = new AtomicReference<CPoolEntry>(entry);
     }
 
     CPoolEntry getPoolEntry() {
-        return this.poolEntry;
+        return this.poolEntryRef.get();
     }
 
     CPoolEntry detach() {
-        final CPoolEntry local = this.poolEntry;
-        this.poolEntry = null;
-        return local;
+        return this.poolEntryRef.getAndSet(null);
     }
 
     ManagedHttpClientConnection getConnection() {
-        final CPoolEntry local = this.poolEntry;
+        final CPoolEntry local = this.poolEntryRef.get();
         if (local == null) {
             return null;
         }
@@ -81,7 +80,7 @@ class CPoolProxy implements ManagedHttpClientConnection, HttpContext {
 
     @Override
     public void close() throws IOException {
-        final CPoolEntry local = this.poolEntry;
+        final CPoolEntry local = this.poolEntryRef.get();
         if (local != null) {
             local.closeConnection();
         }
@@ -89,7 +88,7 @@ class CPoolProxy implements ManagedHttpClientConnection, HttpContext {
 
     @Override
     public void shutdown() throws IOException {
-        final CPoolEntry local = this.poolEntry;
+        final CPoolEntry local = this.poolEntryRef.get();
         if (local != null) {
             local.shutdownConnection();
         }
@@ -97,7 +96,7 @@ class CPoolProxy implements ManagedHttpClientConnection, HttpContext {
 
     @Override
     public boolean isOpen() {
-        final CPoolEntry local = this.poolEntry;
+        final CPoolEntry local = this.poolEntryRef.get();
         if (local != null) {
             return !local.isClosed();
         } else {


[2/2] httpcomponents-client git commit: HTTPCLIENT-1879: re-apply SocketConfig#socketTimeout to connections leased by the pooling and basic connection managers

Posted by ol...@apache.org.
HTTPCLIENT-1879: re-apply SocketConfig#socketTimeout to connections leased by the pooling and basic connection managers


Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/commit/7d16ce5a
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/tree/7d16ce5a
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/diff/7d16ce5a

Branch: refs/heads/4.6.x
Commit: 7d16ce5a5a18689398a0dde4de374eda09342dcd
Parents: 4e3ec2b
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Thu Nov 16 20:17:16 2017 +0100
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Thu Nov 16 20:17:16 2017 +0100

----------------------------------------------------------------------
 .../conn/BasicHttpClientConnectionManager.java  |  2 ++
 .../PoolingHttpClientConnectionManager.java     | 36 ++++++++++++++------
 2 files changed, 27 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/7d16ce5a/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java b/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
index 08153cd..5f69443 100644
--- a/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
+++ b/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
@@ -258,6 +258,7 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
         if (this.conn == null) {
             this.conn = this.connFactory.create(route, this.connConfig);
         }
+        this.conn.setSocketTimeout(this.socketConfig.getSoTimeout());
         this.leased = true;
         return this.conn;
     }
@@ -284,6 +285,7 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
                 this.expiry = Long.MAX_VALUE;
             } else {
                 this.state = state;
+                this.conn.setSocketTimeout(0);
                 if (this.log.isDebugEnabled()) {
                     final String s;
                     if (keepalive > 0) {

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/7d16ce5a/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java b/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
index 81928ac..b20e024 100644
--- a/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
+++ b/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
@@ -28,7 +28,6 @@ package org.apache.http.impl.conn;
 
 import java.io.Closeable;
 import java.io.IOException;
-import java.net.InetSocketAddress;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -246,6 +245,17 @@ public class PoolingHttpClientConnectionManager
         return buf.toString();
     }
 
+    private SocketConfig resolveSocketConfig(final HttpHost host) {
+        SocketConfig socketConfig = this.configData.getSocketConfig(host);
+        if (socketConfig == null) {
+            socketConfig = this.configData.getDefaultSocketConfig();
+        }
+        if (socketConfig == null) {
+            socketConfig = SocketConfig.DEFAULT;
+        }
+        return socketConfig;
+    }
+
     @Override
     public ConnectionRequest requestConnection(
             final HttpRoute route,
@@ -266,7 +276,18 @@ public class PoolingHttpClientConnectionManager
             public HttpClientConnection get(
                     final long timeout,
                     final TimeUnit tunit) throws InterruptedException, ExecutionException, ConnectionPoolTimeoutException {
-                return leaseConnection(future, timeout, tunit);
+                final HttpClientConnection conn = leaseConnection(future, timeout, tunit);
+                if (conn.isOpen()) {
+                    final HttpHost host;
+                    if (route.getProxyHost() != null) {
+                        host = route.getProxyHost();
+                    } else {
+                        host = route.getTargetHost();
+                    }
+                    final SocketConfig socketConfig = resolveSocketConfig(host);
+                    conn.setSocketTimeout(socketConfig.getSoTimeout());
+                }
+                return conn;
             }
 
         };
@@ -319,6 +340,7 @@ public class PoolingHttpClientConnectionManager
                         }
                         this.log.debug("Connection " + format(entry) + " can be kept alive " + s);
                     }
+                    conn.setSocketTimeout(0);
                 }
             } finally {
                 this.pool.release(entry, conn.isOpen() && entry.isRouteComplete());
@@ -348,16 +370,8 @@ public class PoolingHttpClientConnectionManager
         } else {
             host = route.getTargetHost();
         }
-        final InetSocketAddress localAddress = route.getLocalSocketAddress();
-        SocketConfig socketConfig = this.configData.getSocketConfig(host);
-        if (socketConfig == null) {
-            socketConfig = this.configData.getDefaultSocketConfig();
-        }
-        if (socketConfig == null) {
-            socketConfig = SocketConfig.DEFAULT;
-        }
         this.connectionOperator.connect(
-                conn, host, localAddress, connectTimeout, socketConfig, context);
+                conn, host, route.getLocalSocketAddress(), connectTimeout, resolveSocketConfig(host), context);
     }
 
     @Override