You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Denis Dzenskevich (JIRA)" <ji...@apache.org> on 2011/04/24 14:48:05 UTC

[jira] [Commented] (HTTPASYNC-3) I/O reactor has been shut down (Example code is attached)

    [ https://issues.apache.org/jira/browse/HTTPASYNC-3?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13024619#comment-13024619 ] 

Denis Dzenskevich commented on HTTPASYNC-3:
-------------------------------------------

I recently came into the same issue
The following seems to work (line numbers can differ slightly because of IDE reformat imports):

--- httpasyncclient/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java	(revision 1096308)
+++ httpasyncclient/src/main/java/org/apache/http/impl/nio/pool/SessionPool.java	(working copy)
@@ -199,7 +193,8 @@
                     E entry = this.availableSessions.remove();
                     entryShutdown(entry);
                     RouteSpecificPool<T, E> pool = getPool(entry.getRoute());
-                    pool.freeEntry(entry, false);
+		    if (this.leasedSessions.contains(entry))
+			throw new IllegalStateException("shouldn't happen");
                 }
             }

>From debugger, availableSessions and leasedSessions does not overlap, so no need to remove it from leasedSessions which is what freeEntry does. Trying to freeEnty then throws an exception and must be leaving connection in bad state which causes subsequent errors.

> I/O reactor has been shut down (Example code is attached)
> ---------------------------------------------------------
>
>                 Key: HTTPASYNC-3
>                 URL: https://issues.apache.org/jira/browse/HTTPASYNC-3
>             Project: HttpComponents HttpAsyncClient
>          Issue Type: Bug
>    Affects Versions: 4.0-alpha1
>            Reporter: Lokesh
>   Original Estimate: 1m
>  Remaining Estimate: 1m
>
> here is an example code to use the HTTP AsyncClient and seeing an exception. Please also let me know how to deal with this issue,
> /*
>  * To change this template, choose Tools | Templates
>  * and open the template in the editor.
>  */
> package httpanalysis.apache;
> import java.util.concurrent.CountDownLatch;
> import java.util.concurrent.Future;
> import java.util.concurrent.TimeUnit;
> import java.util.logging.Level;
> import java.util.logging.Logger;
> import org.apache.http.HttpHost;
> import org.apache.http.HttpResponse;
> import org.apache.http.client.methods.HttpGet;
> import org.apache.http.impl.nio.client.DefaultHttpAsyncClient;
> import org.apache.http.impl.nio.conn.PoolingClientConnectionManager;
> import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
> import org.apache.http.nio.client.HttpAsyncClient;
> import org.apache.http.nio.conn.scheme.Scheme;
> import org.apache.http.nio.conn.scheme.SchemeRegistry;
> import org.apache.http.nio.reactor.ConnectingIOReactor;
> import org.apache.http.nio.reactor.IOReactorException;
> import org.apache.http.params.BasicHttpParams;
> import org.apache.http.params.CoreConnectionPNames;
> /**
>  *
>  * @author lokesh
>  */
> public class HttpAnalysis {
>     PoolingClientConnectionManager poolManager;
>     HttpAsyncClient httpclient = null;
>     private PoolingClientConnectionManager sessionManager;
>     /**
>      * @param args the command line arguments
>      */
>     public static void main(String[] args) {
>         HttpAnalysis analysis = new HttpAnalysis();
>         analysis.process();
>     }
>     public HttpAnalysis() {
>         try {
>             BasicHttpParams basicHttpParams = new BasicHttpParams();
>             basicHttpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1);
>             basicHttpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 2);
>             basicHttpParams.setParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 2 * 1024);
>             basicHttpParams.setParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false);
>             basicHttpParams.setParameter(CoreConnectionPNames.SO_REUSEADDR, false);
>             
>             
>             
>             
>             ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(2, basicHttpParams);
>             SchemeRegistry schemeRegistry = new SchemeRegistry();
>             schemeRegistry.register(new Scheme("http", 80, null));
>             this.sessionManager = new PoolingClientConnectionManager(ioReactor, schemeRegistry, 5, TimeUnit.MINUTES);
>             sessionManager.setTotalMax(50);
>             sessionManager.setDefaultMaxPerHost(25);
>             
>             this.httpclient = new DefaultHttpAsyncClient(ioReactor, sessionManager,basicHttpParams);
>         } catch (IOReactorException ex) {
>             Logger.getLogger(HttpAnalysis.class.getName()).log(Level.SEVERE, null, ex);
>         }
>     }
>     private void process() {        
>         try {
>             int numRequests = 10000;
>             httpclient.start();
>             long startTime = System.currentTimeMillis();
>             final CountDownLatch countDownLatch = new CountDownLatch(numRequests);
>             for (int i = 0; i < numRequests; i++) {
>                 HttpGet request = new HttpGet("http://hc.apache.org/");
>                 Future<HttpResponse> future = httpclient.execute(request, new HttpCallback(this, countDownLatch));
>                 if(future == null){
>                     countDownLatch.countDown();
>                 }
>                 System.out.println("Request number = " + i);      
>                 //sessionManager.closeExpiredConnections();
>             }
>             countDownLatch.await();
>             System.out.println((System.currentTimeMillis() - startTime));
>             System.exit(1);
>         } catch (Exception ex) {
>             Logger.getLogger(HttpAnalysis.class.getName()).log(Level.SEVERE, null, ex);
>         }
>     }
> }

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org