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)