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

Oleg Kalnichevski commented on HTTPCLIENT-2193:
-----------------------------------------------

[~avasilev] I double-checked and tripple-checked and could not find anything of 
significance. Here's the exact HttpCore test code I have been using:
{code:java}
public class TestStuff {

    public final static void main(final String[] args) throws Exception {

        final Provider conscrypt = Conscrypt.newProvider();

        Security.insertProviderAt(conscrypt, 1);

        // Create and start requester
        final H2Config h2Config = H2Config.custom()
                .setPushEnabled(false)
                .build();

        final SSLContext sslContext = SSLContexts.custom()
                .setProvider(conscrypt)
                .loadTrustMaterial(new TrustStrategy() {
                    @Override
                    public boolean isTrusted(X509Certificate[] chain, String 
authType) throws CertificateException {
                        return true;
                    }
                })
                .build();

        final HttpAsyncRequester requester = H2RequesterBootstrap.bootstrap()
                .setH2Config(h2Config)
                .setTlsStrategy(new ConscryptClientTlsStrategy(sslContext))
                .setStreamListener(LoggingHttp1StreamListener.INSTANCE_SERVER)
                .setStreamListener(LoggingH2StreamListener.INSTANCE)
                .setIOSessionDecorator(LoggingIOSessionDecorator.INSTANCE)
                .setExceptionCallback(LoggingExceptionCallback.INSTANCE)
                .setIOSessionListener(LoggingIOSessionListener.INSTANCE)
                .create();
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                System.out.println("HTTP requester shutting down");
                requester.close(CloseMode.GRACEFUL);
            }
        });
        requester.start();

        final HttpHost target = new HttpHost("https", "netflix.com", 443);
        final String[] requestUris = new String[] {"/"};

        final CountDownLatch latch = new CountDownLatch(requestUris.length);
        for (final String requestUri: requestUris) {
            final Future<AsyncClientEndpoint> future = 
requester.connect(target, Timeout.ofDays(5));
            final AsyncClientEndpoint clientEndpoint = future.get();
            clientEndpoint.execute(
                    AsyncRequestBuilder.get()
                            .setHttpHost(target)
                            .setPath(requestUri)
                            .build(),
                    new BasicResponseConsumer<>(new 
StringAsyncEntityConsumer()),
                    new FutureCallback<Message<HttpResponse, String>>() {

                        @Override
                        public void completed(final Message<HttpResponse, 
String> message) {
                            clientEndpoint.releaseAndReuse();
                            final HttpResponse response = message.getHead();
                            final String body = message.getBody();
                            System.out.println(requestUri + "->" + 
response.getCode() + " " + response.getVersion());
                            System.out.println(body);
                            latch.countDown();
                        }

                        @Override
                        public void failed(final Exception ex) {
                            clientEndpoint.releaseAndDiscard();
                            System.out.println(requestUri + "->" + ex);
                            latch.countDown();
                        }

                        @Override
                        public void cancelled() {
                            clientEndpoint.releaseAndDiscard();
                            System.out.println(requestUri + " cancelled");
                            latch.countDown();
                        }

                    });
        }

        latch.await();
        System.out.println("Shutting down I/O reactor");
        requester.initiateShutdown();
    }

}
{code}

> HttpClient Hangs Indefinitely When Using Conscrypt
> --------------------------------------------------
>
>                 Key: HTTPCLIENT-2193
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2193
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (async)
>    Affects Versions: 5.1.2, 5.2-alpha1
>            Reporter: Andrei Vasilev
>            Priority: Minor
>         Attachments: Main.java, amazon(FAILURE).log, build.gradle, 
> google(SUCCESS).log, log4j2.xml, netflix(FAILURE).log, yahoo(SUCCESS).log
>
>
> When using an alternative security provider such as Conscrypt, requests will 
> fail the majority of the time, hanging indefinitely at various points during 
> the request / response process.
> All requests appear to successfully CONNECT, but retrieving data is very 
> intermittent. Either the entity is not streamed at all, partially streamed, 
> or fully streamed but the client then hangs forever. I let it run for 3 
> hours, and even then the client didn't shutdown.
> As you can see in the logs I have attached, requests to some major websites 
> will fail at different steps. I have also attached a minimally re-produceable 
> example program. I tested this with OkHttp client and all requests work just 
> fine using Conscrypt. Not sure what's going on.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

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

Reply via email to