Added new functionality to the pooling conn manager introduced by HTTPCORE-374

Contributed by Dmitry Potapov <potapov.d at gmail.com>

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1606665 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Oleg Kalnichevski 2014-06-30 10:12:31 +00:00
parent d20886cd56
commit dbf7a77171
2 changed files with 17 additions and 0 deletions

View File

@ -30,6 +30,7 @@ import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future; import java.util.concurrent.Future;
@ -445,6 +446,13 @@ public class PoolingHttpClientConnectionManager
return this.pool.getStats(route); return this.pool.getStats(route);
} }
/**
* @since 4.4
*/
public Set<HttpRoute> getRoutes() {
return this.pool.getRoutes();
}
public SocketConfig getDefaultSocketConfig() { public SocketConfig getDefaultSocketConfig() {
return this.configData.getDefaultSocketConfig(); return this.configData.getDefaultSocketConfig();
} }

View File

@ -31,6 +31,7 @@ import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.Socket; import java.net.Socket;
import java.net.SocketException; import java.net.SocketException;
import java.util.Collections;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -297,18 +298,21 @@ public class TestConnectionManagement extends LocalServerTestBase {
this.connManager.connect(conn, route, 0, context); this.connManager.connect(conn, route, 0, context);
this.connManager.routeComplete(conn, route, context); this.connManager.routeComplete(conn, route, context);
Assert.assertEquals(Collections.singleton(route), this.connManager.getRoutes());
Assert.assertEquals(1, this.connManager.getTotalStats().getLeased()); Assert.assertEquals(1, this.connManager.getTotalStats().getLeased());
Assert.assertEquals(1, this.connManager.getStats(route).getLeased()); Assert.assertEquals(1, this.connManager.getStats(route).getLeased());
this.connManager.releaseConnection(conn, null, 100, TimeUnit.MILLISECONDS); this.connManager.releaseConnection(conn, null, 100, TimeUnit.MILLISECONDS);
// Released, still active. // Released, still active.
Assert.assertEquals(Collections.singleton(route), this.connManager.getRoutes());
Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable()); Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable());
Assert.assertEquals(1, this.connManager.getStats(route).getAvailable()); Assert.assertEquals(1, this.connManager.getStats(route).getAvailable());
this.connManager.closeExpiredConnections(); this.connManager.closeExpiredConnections();
// Time has not expired yet. // Time has not expired yet.
Assert.assertEquals(Collections.singleton(route), this.connManager.getRoutes());
Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable()); Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable());
Assert.assertEquals(1, this.connManager.getStats(route).getAvailable()); Assert.assertEquals(1, this.connManager.getStats(route).getAvailable());
@ -317,6 +321,7 @@ public class TestConnectionManagement extends LocalServerTestBase {
this.connManager.closeExpiredConnections(); this.connManager.closeExpiredConnections();
// Time expired now, connections are destroyed. // Time expired now, connections are destroyed.
Assert.assertEquals(Collections.emptySet(), this.connManager.getRoutes());
Assert.assertEquals(0, this.connManager.getTotalStats().getAvailable()); Assert.assertEquals(0, this.connManager.getTotalStats().getAvailable());
Assert.assertEquals(0, this.connManager.getStats(route).getAvailable()); Assert.assertEquals(0, this.connManager.getStats(route).getAvailable());
@ -340,18 +345,21 @@ public class TestConnectionManagement extends LocalServerTestBase {
this.connManager.connect(conn, route, 0, context); this.connManager.connect(conn, route, 0, context);
this.connManager.routeComplete(conn, route, context); this.connManager.routeComplete(conn, route, context);
Assert.assertEquals(Collections.singleton(route), this.connManager.getRoutes());
Assert.assertEquals(1, this.connManager.getTotalStats().getLeased()); Assert.assertEquals(1, this.connManager.getTotalStats().getLeased());
Assert.assertEquals(1, this.connManager.getStats(route).getLeased()); Assert.assertEquals(1, this.connManager.getStats(route).getLeased());
// Release, let remain idle for forever // Release, let remain idle for forever
this.connManager.releaseConnection(conn, null, -1, TimeUnit.MILLISECONDS); this.connManager.releaseConnection(conn, null, -1, TimeUnit.MILLISECONDS);
// Released, still active. // Released, still active.
Assert.assertEquals(Collections.singleton(route), this.connManager.getRoutes());
Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable()); Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable());
Assert.assertEquals(1, this.connManager.getStats(route).getAvailable()); Assert.assertEquals(1, this.connManager.getStats(route).getAvailable());
this.connManager.closeExpiredConnections(); this.connManager.closeExpiredConnections();
// Time has not expired yet. // Time has not expired yet.
Assert.assertEquals(Collections.singleton(route), this.connManager.getRoutes());
Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable()); Assert.assertEquals(1, this.connManager.getTotalStats().getAvailable());
Assert.assertEquals(1, this.connManager.getStats(route).getAvailable()); Assert.assertEquals(1, this.connManager.getStats(route).getAvailable());
@ -360,6 +368,7 @@ public class TestConnectionManagement extends LocalServerTestBase {
this.connManager.closeExpiredConnections(); this.connManager.closeExpiredConnections();
// TTL expired now, connections are destroyed. // TTL expired now, connections are destroyed.
Assert.assertEquals(Collections.emptySet(), this.connManager.getRoutes());
Assert.assertEquals(0, this.connManager.getTotalStats().getAvailable()); Assert.assertEquals(0, this.connManager.getTotalStats().getAvailable());
Assert.assertEquals(0, this.connManager.getStats(route).getAvailable()); Assert.assertEquals(0, this.connManager.getStats(route).getAvailable());