hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Denis Dzenskevich (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HTTPASYNC-3) I/O reactor has been shut down (Example code is attached)
Date Sun, 24 Apr 2011 12:48:05 GMT

    [ 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


Mime
View raw message