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 2008/04/17 00:05:46 UTC
svn commit: r648877 - in /httpcomponents/httpclient/trunk/module-client/src:
main/java/org/apache/http/conn/ main/java/org/apache/http/impl/conn/
main/java/org/apache/http/impl/conn/tsccm/
test/java/org/apache/http/impl/conn/ test/java/org/apache/http/...
Author: olegk
Date: Wed Apr 16 15:05:35 2008
New Revision: 648877
URL: http://svn.apache.org/viewvc?rev=648877&view=rev
Log:
Refactored configuration of the thread-safe connection manager and its components. Parameters now apply at the construction time only
Modified:
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/ClientConnectionManager.java
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/SingleClientConnManager.java
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/AbstractConnPool.java
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java
httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/TestTSCCMNoServer.java
httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestSpuriousWakeup.java
httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestWaitingThread.java
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/ClientConnectionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/ClientConnectionManager.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/ClientConnectionManager.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/ClientConnectionManager.java Wed Apr 16 15:05:35 2008
@@ -34,13 +34,9 @@
import java.util.concurrent.TimeUnit;
-import org.apache.http.params.HttpParams;
-
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.scheme.SchemeRegistry;
-
-
/**
* Management interface for {@link ManagedClientConnection client connections}.
*
@@ -56,15 +52,6 @@
* @since 4.0
*/
public interface ClientConnectionManager {
-
- /**
- * Obtains the parameters of this manager.
- *
- * @return the parameters, never <code>null</code>
- */
- HttpParams getParams()
- ;
-
/**
* Obtains the scheme registry used by this manager.
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/SingleClientConnManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/SingleClientConnManager.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/SingleClientConnManager.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/SingleClientConnManager.java Wed Apr 16 15:05:35 2008
@@ -81,9 +81,6 @@
/** The schemes supported by this connection manager. */
protected SchemeRegistry schemeRegistry;
- /** The parameters of this connection manager. */
- protected HttpParams params;
-
/** The operator for opening and updating connections. */
protected ClientConnectionOperator connOperator;
@@ -115,15 +112,10 @@
public SingleClientConnManager(HttpParams params,
SchemeRegistry schreg) {
- if (params == null) {
- throw new IllegalArgumentException
- ("Parameters must not be null.");
- }
if (schreg == null) {
throw new IllegalArgumentException
("Scheme registry must not be null.");
}
- this.params = params;
this.schemeRegistry = schreg;
this.connOperator = createConnectionOperator(schreg);
this.uniquePoolEntry = new PoolEntry(connOperator.createConnection());
@@ -134,11 +126,6 @@
} // <constructor>
-
- // non-javadoc, see interface ClientConnectionManager
- public HttpParams getParams() {
- return this.params;
- }
// non-javadoc, see interface ClientConnectionManager
public SchemeRegistry getSchemeRegistry() {
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/AbstractConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/AbstractConnPool.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/AbstractConnPool.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/AbstractConnPool.java Wed Apr 16 15:05:35 2008
@@ -48,7 +48,6 @@
import org.apache.http.conn.ConnectionPoolTimeoutException;
import org.apache.http.conn.OperatedClientConnection;
import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.params.HttpParams;
import org.apache.http.impl.conn.IdleConnectionHandler;
@@ -86,12 +85,6 @@
/** The current total number of connections. */
protected int numConnections;
- /** The parameters of this connection pool. */
- //@@@ allow get/set? synchronized?
- //@@@ currently needed for connection limits
- protected HttpParams params;
-
-
/**
* The connection manager.
* This weak reference is used only to detect garbage collection
@@ -141,9 +134,6 @@
* @param mgr the connection manager
*/
protected AbstractConnPool(ClientConnectionManager mgr) {
-
- params = mgr.getParams();
-
issuedConnections = new HashSet<BasicPoolEntryRef>();
idleConnHandler = new IdleConnectionHandler();
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.java Wed Apr 16 15:05:35 2008
@@ -47,6 +47,7 @@
import org.apache.http.conn.ConnectionPoolTimeoutException;
import org.apache.http.conn.params.ConnPerRoute;
import org.apache.http.conn.params.HttpConnectionManagerParams;
+import org.apache.http.params.HttpParams;
@@ -86,19 +87,24 @@
*/
protected final Map<HttpRoute, RouteSpecificPool> routeToPool;
-
-
+ protected final int maxTotalConnections;
+
+ private final ConnPerRoute connPerRoute;
+
/**
* Creates a new connection pool, managed by route.
*
* @param mgr the connection manager
*/
- public ConnPoolByRoute(ClientConnectionManager mgr) {
+ public ConnPoolByRoute(final ClientConnectionManager mgr, final HttpParams params) {
super(mgr);
-
freeConnections = createFreeConnQueue();
waitingThreads = createWaitingThreadQueue();
routeToPool = createRouteToPoolMap();
+ maxTotalConnections = HttpConnectionManagerParams
+ .getMaxTotalConnections(params);
+ connPerRoute = HttpConnectionManagerParams
+ .getMaxConnectionsPerRoute(params);
}
@@ -142,7 +148,7 @@
* @return the new pool
*/
protected RouteSpecificPool newRouteSpecificPool(HttpRoute route) {
- return new RouteSpecificPool(route);
+ return new RouteSpecificPool(route, connPerRoute.getMaxForRoute(route));
}
@@ -261,14 +267,6 @@
Aborter aborter)
throws ConnectionPoolTimeoutException, InterruptedException {
- int maxTotalConnections = HttpConnectionManagerParams
- .getMaxTotalConnections(this.params);
-
- ConnPerRoute connPerRoute = HttpConnectionManagerParams
- .getMaxConnectionsPerRoute(params);
-
- int maxHostConnections = connPerRoute.getMaxForRoute(route);
-
Date deadline = null;
if (timeout > 0) {
deadline = new Date
@@ -299,12 +297,12 @@
if (entry != null) {
// we're fine
//@@@ yeah this is ugly, but historical... will be revised
- } else if ((rospl.getEntryCount() < maxHostConnections) &&
+ } else if ((rospl.getEntryCount() < rospl.getMaxEntries()) &&
(numConnections < maxTotalConnections)) {
entry = createEntry(rospl, operator);
- } else if ((rospl.getEntryCount() < maxHostConnections) &&
+ } else if ((rospl.getEntryCount() < rospl.getMaxEntries()) &&
(freeConnections.size() > 0)) {
deleteLeastUsedEntry();
@@ -419,7 +417,7 @@
poolLock.lock();
try {
- entry = rospl.allocEntry();
+ entry = rospl.allocEntry(state);
if (entry != null) {
if (LOG.isDebugEnabled()) {
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/RouteSpecificPool.java Wed Apr 16 15:05:35 2008
@@ -46,6 +46,9 @@
/** The route this pool is for. */
protected final HttpRoute route;
+ /** the maximum number of entries allowed for this pool */
+ protected final int maxEntries;
+
/**
* The list of free entries.
* This list is managed LIFO, to increase idle times and
@@ -63,10 +66,12 @@
/**
* Creates a new route-specific pool.
*
- * @param r the route for which to pool
+ * @param route the route for which to pool
+ * @param maxEntries the maximum number of entries allowed for this pool
*/
- public RouteSpecificPool(HttpRoute route) {
+ public RouteSpecificPool(HttpRoute route, int maxEntries) {
this.route = route;
+ this.maxEntries = maxEntries;
this.freeEntries = new LinkedList<BasicPoolEntry>();
this.waitingThreads = new LinkedList<WaitingThread>();
this.numEntries = 0;
@@ -82,7 +87,17 @@
return route;
}
-
+
+ /**
+ * Obtains the maximum number of entries allowed for this pool.
+ *
+ * @return the max entry number
+ */
+ public final int getMaxEntries() {
+ return maxEntries;
+ }
+
+
/**
* Indicates whether this pool is unused.
* A pool is unused if there is neither an entry nor a waiting thread.
@@ -113,7 +128,7 @@
*
* @return an available pool entry, or <code>null</code> if there is none
*/
- public BasicPoolEntry allocEntry() {
+ public BasicPoolEntry allocEntry(final Object state) {
BasicPoolEntry entry = null;
Modified: httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java Wed Apr 16 15:05:35 2008
@@ -74,9 +74,6 @@
/** The schemes supported by this connection manager. */
protected SchemeRegistry schemeRegistry;
- /** The parameters of this connection manager. */
- protected HttpParams params;
-
/** The pool of connections being managed. */
protected final AbstractConnPool connectionPool;
@@ -96,11 +93,10 @@
SchemeRegistry schreg) {
if (params == null) {
- throw new IllegalArgumentException("Parameters must not be null.");
+ throw new IllegalArgumentException("HTTP parameters may not be null");
}
- this.params = params;
this.schemeRegistry = schreg;
- this.connectionPool = createConnectionPool();
+ this.connectionPool = createConnectionPool(params);
this.connOperator = createConnectionOperator(schreg);
} // <constructor>
@@ -111,9 +107,9 @@
*
* @return the connection pool to use
*/
- protected AbstractConnPool createConnectionPool() {
+ protected AbstractConnPool createConnectionPool(final HttpParams params) {
- AbstractConnPool acp = new ConnPoolByRoute(this);
+ AbstractConnPool acp = new ConnPoolByRoute(this, params);
boolean conngc = true; //@@@ check parameters to decide
if (conngc) {
acp.enableConnectionGC();
@@ -269,11 +265,6 @@
connectionPool.deleteClosedConnections();
}
-
- // non-javadoc, see interface ClientConnectionManager
- public HttpParams getParams() {
- return this.params;
- }
} // class ThreadSafeClientConnManager
Modified: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/TestTSCCMNoServer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/TestTSCCMNoServer.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/TestTSCCMNoServer.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/TestTSCCMNoServer.java Wed Apr 16 15:05:35 2008
@@ -145,15 +145,9 @@
HttpParams params = createDefaultParams();
SchemeRegistry schreg = createSchemeRegistry();
- final String paramkey = "test.parameter";
- final String paramval = "Value of the test parameter.";
- params.setParameter(paramkey, paramval);
-
ThreadSafeClientConnManager mgr =
new ThreadSafeClientConnManager(params, schreg);
assertNotNull(mgr);
- assertNotNull(mgr.getParams());
- assertEquals(paramval, mgr.getParams().getParameter(paramkey));
mgr.shutdown();
mgr = null;
@@ -170,8 +164,6 @@
mgr = new ThreadSafeClientConnManager(params, schreg);
assertNotNull(mgr);
- assertNotNull(mgr.getParams());
- assertEquals(paramval, mgr.getParams().getParameter(paramkey));
mgr.shutdown();
mgr = null;
Modified: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestSpuriousWakeup.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestSpuriousWakeup.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestSpuriousWakeup.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestSpuriousWakeup.java Wed Apr 16 15:05:35 2008
@@ -97,8 +97,8 @@
protected WaitingThread newestWT;
- public XConnPoolByRoute(ClientConnectionManager mgr) {
- super(mgr);
+ public XConnPoolByRoute(ClientConnectionManager mgr, HttpParams params) {
+ super(mgr, params);
}
protected synchronized
@@ -125,8 +125,8 @@
super(params, schreg);
}
- protected AbstractConnPool createConnectionPool() {
- extendedCPBR = new XConnPoolByRoute(this);
+ protected AbstractConnPool createConnectionPool(HttpParams params) {
+ extendedCPBR = new XConnPoolByRoute(this, params);
// no connection GC required
return extendedCPBR;
}
Modified: httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestWaitingThread.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestWaitingThread.java?rev=648877&r1=648876&r2=648877&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestWaitingThread.java (original)
+++ httpcomponents/httpclient/trunk/module-client/src/test/java/org/apache/http/impl/conn/tsccm/TestWaitingThread.java Wed Apr 16 15:05:35 2008
@@ -83,7 +83,7 @@
assertNull ("thread from nowhere", wt.getThread());
HttpRoute route = new HttpRoute(TARGET);
- RouteSpecificPool rospl = new RouteSpecificPool(route);
+ RouteSpecificPool rospl = new RouteSpecificPool(route, 10);
wt = new WaitingThread(cnd, rospl);
assertEquals("wrong condition", cnd, wt.getCondition());
assertEquals("wrong pool", rospl, wt.getPool());