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