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 2011/05/07 14:34:10 UTC

svn commit: r1100521 - in /httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio: client/ conn/ pool/

Author: olegk
Date: Sat May  7 12:34:10 2011
New Revision: 1100521

URL: http://svn.apache.org/viewvc?rev=1100521&view=rev
Log:
Fixed a very nasty bug in the connection management logic; tweaked logging

Modified:
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingClientConnectionManager.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java?rev=1100521&r1=1100520&r2=1100521&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java Sat May  7 12:34:10 2011
@@ -125,6 +125,7 @@ class DefaultAsyncRequestDirector<T> imp
     private int redirectCount;
     private ByteBuffer tmpbuf;
     private boolean requestContentProduced;
+    private int execCount;
 
     public DefaultAsyncRequestDirector(
             final Log log,
@@ -238,9 +239,6 @@ class DefaultAsyncRequestDirector<T> imp
         this.localContext.setAttribute(ClientContext.PROXY_AUTH_STATE, this.proxyAuthState);
 
         this.httppocessor.process(this.currentRequest, this.localContext);
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("Request submitted: " + this.currentRequest.getRequestLine());
-        }
         this.currentRequest.incrementExecCount();
         if (this.currentRequest.getExecCount() > 1
                 && !this.requestProducer.isRepeatable()
@@ -248,6 +246,10 @@ class DefaultAsyncRequestDirector<T> imp
             throw new NonRepeatableRequestException("Cannot retry request " +
                 "with a non-repeatable request entity.");
         }
+        this.execCount++;
+        if (this.log.isDebugEnabled()) {
+            this.log.debug("Attempt " + this.execCount + " to execute request");
+        }
         return this.currentRequest;
     }
 
@@ -371,6 +373,8 @@ class DefaultAsyncRequestDirector<T> imp
                     this.log.debug("Connection can be kept alive " + s);
                 }
                 this.managedConn.setIdleDuration(duration, TimeUnit.MILLISECONDS);
+            } else {
+                releaseConnection();
             }
 
             if (this.finalResponse != null) {

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java?rev=1100521&r1=1100520&r2=1100521&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java Sat May  7 12:34:10 2011
@@ -346,6 +346,7 @@ class NHttpClientProtocolHandler impleme
             conn.resetInput();
         } else {
             if (!handler.keepAlive(response)) {
+                this.log.debug("Connection cannot be kept alive");
                 conn.close();
             }
         }

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingClientConnectionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingClientConnectionManager.java?rev=1100521&r1=1100520&r2=1100521&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingClientConnectionManager.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingClientConnectionManager.java Sat May  7 12:34:10 2011
@@ -96,13 +96,15 @@ public class PoolingClientConnectionMana
     }
 
     public void shutdown(long waitMs) throws IOException {
-        this.log.debug("Connection manager shut down");
+        this.log.debug("Connection manager is shutting down");
         this.pool.shutdown(waitMs);
+        this.log.debug("Connection manager shut down");
     }
 
     public void shutdown() throws IOException {
-        this.log.debug("Connection manager shut down");
+        this.log.debug("Connection manager is shutting down");
         this.pool.shutdown(2000);
+        this.log.debug("Connection manager shut down");
     }
 
     public Future<ManagedClientConnection> leaseConnection(
@@ -155,6 +157,9 @@ public class PoolingClientConnectionMana
         if (manager != null && manager != this) {
             throw new IllegalArgumentException("Connection not obtained from this manager");
         }
+        if (this.pool.isShutdown()) {
+            return;
+        }
         HttpPoolEntry entry = adaptor.getEntry();
         if (this.log.isDebugEnabled()) {
             HttpRoute route = entry.getPlannedRoute();

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java?rev=1100521&r1=1100520&r2=1100521&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java Sat May  7 12:34:10 2011
@@ -99,6 +99,10 @@ public abstract class SessionPool<T, E e
         this.maxTotal = maxTotal;
     }
 
+    public boolean isShutdown() {
+        return this.isShutDown;
+    }
+
     public void shutdown(long waitMs) throws IOException {
         if (this.isShutDown) {
             return ;