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());