You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Alex Kormukhin (JIRA)" <ji...@apache.org> on 2018/12/19 16:25:00 UTC

[jira] [Created] (THRIFT-4681) Java async client cannot be reused after a model exception

Alex Kormukhin created THRIFT-4681:
--------------------------------------

             Summary: Java async client cannot be reused after a model exception
                 Key: THRIFT-4681
                 URL: https://issues.apache.org/jira/browse/THRIFT-4681
             Project: Thrift
          Issue Type: Bug
          Components: Java - Library
    Affects Versions: 0.11.0
            Reporter: Alex Kormukhin
         Attachments: bug-async-client-not-reusable.zip

After any model (business) exception, java async client comes to an illegal state. This prevents it from being used again in the client pool. However, the synchronous client in the same case remains operational.

This feature of the asynchronous client makes it less efficient compared to synchronous when using client pools.

Attached test demonstrates this issue.
{code:java}
Tests run: 8, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 1.963 sec <<< FAILURE!
async_client_must_be_reusable_after_model_exceptions[serverImplementationType = SYNC_SERVER](org.apache.thrift.test.ClientReusabilityTest) Time elapsed: 0.032 sec <<< ERROR!
java.lang.IllegalStateException: Client has an error!
at org.apache.thrift.async.TAsyncClient.checkReady(TAsyncClient.java:83)
at org.apache.thrift.test.model.TAppService01$AsyncClient.doSomething(TAppService01.java:91)
at org.apache.thrift.test.ClientReusabilityTest.checkAsyncClientReusability(ClientReusabilityTest.java:152)
at org.apache.thrift.test.ClientReusabilityTest.async_client_must_be_reusable_after_model_exceptions(ClientReusabilityTest.java:105)
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.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
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.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
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.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
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.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: TExampleException(message:example model exception)
at org.apache.thrift.test.model.TAppService01$doSomething_result$doSomething_resultStandardScheme.read(TAppService01.java:1099)
at org.apache.thrift.test.model.TAppService01$doSomething_result$doSomething_resultStandardScheme.read(TAppService01.java:1077)
at org.apache.thrift.test.model.TAppService01$doSomething_result.read(TAppService01.java:1019)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:88)
at org.apache.thrift.test.model.TAppService01$Client.recv_doSomething(TAppService01.java:62)
at org.apache.thrift.test.model.TAppService01$AsyncClient$doSomething_call.getResult(TAppService01.java:121)
at org.apache.thrift.test.model.TAppService01$AsyncClient$doSomething_call.getResult(TAppService01.java:97)
at org.apache.thrift.async.TAsyncMethodCall.cleanUpAndFireCallback(TAsyncMethodCall.java:235)
at org.apache.thrift.async.TAsyncMethodCall.doReadingResponseBody(TAsyncMethodCall.java:225)
at org.apache.thrift.async.TAsyncMethodCall.transition(TAsyncMethodCall.java:201)
at org.apache.thrift.async.TAsyncClientManager$SelectThread.transitionMethods(TAsyncClientManager.java:143)
at org.apache.thrift.async.TAsyncClientManager$SelectThread.run(TAsyncClientManager.java:113)

{code}



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