You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "zhao jintao (JIRA)" <ji...@apache.org> on 2019/03/19 03:48:00 UTC

[jira] [Commented] (KYLIN-3891) Kylin jdbc throws NoHttpResponseException

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

zhao jintao commented on KYLIN-3891:
------------------------------------

I search this exception use google,and I find that the httpclient of jdbc need retry when face NoHttpResponseException.
[apache stack|https://stackoverflow.com/questions/10570672/get-nohttpresponseexception-for-load-testing/10680629#10680629]

After I add retry  configuation in KylinClient.java of httpClient, It work fine in my jdbc test. 

httpClient.setHttpRequestRetryHandler((exception, executionCount, context) -> {
            if (executionCount > 3) {
                logger.warn("Maximum tries reached for client http pool ");
                return false;
            }

            if (exception instanceof NoHttpResponseException     //NoHttpResponseException 重试
//                    || exception instanceof ConnectTimeoutException //连接超时重试
//              || exception instanceof SocketTimeoutException    //响应超时不重试,避免造成业务数据不一致
                    ) {
                logger.warn("NoHttpResponseException on " + executionCount + " call");
                return true;
            }
            return false;
        });

I use this jdbc client in FineReort system, jdbc client connect SLB,SLB connect kylin.But I find that if I restart kylin, sometimes  jdbc client response 502 httpcode from SLB。
I use this jdbc client in FineReort system, jdbc client connect SLB,SLB connect kylin.But I find that if I restart kylin, sometimes  jdbc client accept 502 response from SLB。

This is FineReport log:

        at org.apache.kylin.jdbc.KylinConnection.<init>(KylinConnection.java:69)
        at org.apache.kylin.jdbc.KylinJdbcFactory.newConnection(KylinJdbcFactory.java:77)
        at org.apache.kylin.jdbc.shaded.org.apache.calcite.avatica.UnregisteredDriver.connect(UnregisteredDriver.java:138)
        at com.fr.third.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1461)
        at com.fr.third.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1525)
        at com.fr.third.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2099)
Caused by: java.io.IOException: POST failed, error code 502 and response: <!DOCTYPE html>^M

Does any one meet this same problem?

> Kylin jdbc throws NoHttpResponseException
> -----------------------------------------
>
>                 Key: KYLIN-3891
>                 URL: https://issues.apache.org/jira/browse/KYLIN-3891
>             Project: Kylin
>          Issue Type: Bug
>          Components: Driver - JDBC
>    Affects Versions: v2.5.2
>         Environment: Huawei FusionInsight
>            Reporter: zhao jintao
>            Priority: Major
>              Labels: easyfix
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> Hi Team;
> When I use kylin jdbc, I find that jdbc throws NoHttpResponseException. 
> Then I  do jdbc test cases in "DriverTest.java", I use one jdbc connection query 20 times, each time first wait 20 minutes. Unfortunately, I also find that jdbc also throws NoHttpResponseException.
> This is my test code:
>         try {
>             for (int j = 0; j < 20; j++) {
>                 Thread.sleep(1000*20);
>                 Statement state = conn.createStatement();
>                 ResultSet resultSet = state.executeQuery("select count(*) from KYLIN_SALES ;");
>                 printResultSetMetaData(resultSet);
>                 printResultSet(resultSet);
>                 resultSet.close();
>             }
>         } catch (InterruptedException e){
>             e.printStackTrace();
>         }
> This is NoHttpResponseException: 
> java.sql.SQLException: Error while executing SQL "select count(*) from KYLIN_SALES ;": java.sql.SQLException: org.apache.http.NoHttpResponseException: The target server failed to respond
> 	at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
> 	at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
> 	at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
> 	at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:218)
> 	at org.apache.kylin.jdbc.DriverTest.testHttpClient(DriverTest.java:299)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:498)
> 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
> 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
> 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> 	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
> 	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
> 	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
> 	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
> 	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
> Caused by: java.lang.RuntimeException: java.sql.SQLException: org.apache.http.NoHttpResponseException: The target server failed to respond
> 	at org.apache.kylin.jdbc.KylinMeta.prepareAndExecute(KylinMeta.java:115)
> 	at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:638)
> 	at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:149)
> 	... 24 more
> Caused by: java.sql.SQLException: org.apache.http.NoHttpResponseException: The target server failed to respond
> 	at org.apache.kylin.jdbc.KylinResultSet.execute(KylinResultSet.java:71)
> 	at org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:630)
> 	at org.apache.kylin.jdbc.KylinMeta.prepareAndExecute(KylinMeta.java:111)
> 	... 26 more
> Caused by: org.apache.http.NoHttpResponseException: The target server failed to respond
> 	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
> 	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
> 	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
> 	at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
> 	at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
> 	at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
> 	at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
> 	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
> 	at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
> 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
> 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
> 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
> 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
> 	at org.apache.kylin.jdbc.KylinClient.executeKylinQuery(KylinClient.java:407)
> 	at org.apache.kylin.jdbc.KylinClient.executeQuery(KylinClient.java:363)
> 	at org.apache.kylin.jdbc.KylinResultSet.execute(KylinResultSet.java:69)
> 	... 28 more
> Process finished with exit code -1



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)