[
https://issues.apache.org/jira/browse/HTTPASYNC-3?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13024643#comment-13024643
]
Oleg Kalnichevski commented on HTTPASYNC-3:
-------------------------------------------
Denis
The I/O reactor used internally by HttpAsyncClient to manage low level I/O
sessions is programmed to shut down itself in case of any unexpected (usually
runtime) exception. There can be various reasons why this can happen. Most
common cause are logical errors in custom request producers / response
consumers. I suspect that the issue encountered by the original reporter is
likely to be caused by his/her own HttpCallback class that under certain
conditions throws a runtime exception.
I guess in your case we are dealing with a genuine bug in HttpAsyncClient.
Could you please open a new JIRA for the issue and attach the stack trace of
the exception that caused the I/O reactor to shut down and if possible a test
case reproducing the problem?
Oleg
> 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: [email protected]
For additional commands, e-mail: [email protected]