You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (JIRA)" <ji...@apache.org> on 2017/09/19 17:41:00 UTC

[jira] [Commented] (HTTPCORE-490) concurrent bug when invoke future.cancel

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

Oleg Kalnichevski commented on HTTPCORE-490:
--------------------------------------------

Could you please test this patch and let me know if it resolves the problem for you?

https://github.com/ok2c/httpcore/commit/41d374cd352d71b725b60ea1c340b01c774eab58

Oleg

> concurrent bug when invoke future.cancel
> ----------------------------------------
>
>                 Key: HTTPCORE-490
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-490
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>    Affects Versions: 4.4.7
>            Reporter: wenqi.huang
>            Assignee: Oleg Kalnichevski
>             Fix For: 4.4.8
>
>
> The following code has a bug that the third http invoke will never respond. pay attention to the parameters setted in the code like socketTimeout,maxConnPerRoute,maxConnTotal, etc. and the url invoked must block for 5 seconds at server side(in other worlds, sleep for 5 seconds.)
>  
> {code:java}
> public class AsyncHttpClientTest {
>     public static void main(String[] args) throws InterruptedException {
>         //please attention to the socketTimeout,maxConnPerRoute,maxConnTotal
>         CloseableHttpAsyncClient c = HttpAsyncClientBuilder.create()
>                 .setDefaultRequestConfig(RequestConfig.custom().setSocketTimeout(4000).build())
>                 .setMaxConnPerRoute(1).setMaxConnTotal(1).build();
>         c.start();
>         //this url will block for 5 seconds at server side.
>         HttpGet httpGet = new HttpGet("http://localhost:8778/someUrlWillBlockForFiveSecondsAtServerSide");
>         Future f1 = execute(httpGet, c);
>         Future f2 = execute(httpGet, c);
>         //this http invoke will never success or fail.
>         Future f3 = execute(httpGet, c);
>         System.out.println("begin");
>         Thread.sleep(1000);
>         f1.cancel(true);
>         f2.cancel(true);
>     }
>     private static Future execute(HttpGet httpGet, CloseableHttpAsyncClient c){
>         return c.execute(httpGet, new FutureCallback<HttpResponse>() {
>             @Override
>             public void completed(HttpResponse result) {
>                 String ret = null;
>                 try {
>                     ret = IOUtils.toString(result.getEntity().getContent());
>                 } catch (IOException e) {
>                     e.printStackTrace();
>                 }
>                 System.out.println("completed:"+ret);
>             }
>             @Override
>             public void failed(Exception ex) {
>                 System.out.println("failed");
>                 ex.printStackTrace();
>             }
>             @Override
>             public void cancelled() {
>                 System.out.println("cancelled");
>             }
>         });
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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