Heuristic completion: outcome state is mixed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException

Viewed 130

We are using neo4j and postgres together in our. application. There are so many use cases where we need to do transaction for neo4j and postgres atomically. So we have used the ChainedTransactionManager with both Jpa and neo4j transactionManager.

Neo4j Server version : 4.4.0 Below are the neo4j dependencies in the code:

    |         +--- org.neo4j:neo4j-ogm-core:3.2.16
    |         |    +--- org.neo4j:neo4j-ogm-api:3.2.16
    |         |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.9.9 -> 2.11.2 (*)
    |         |    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9 -> 2.11.2 (*)
    |         |    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9 -> 2.11.2 (*)
    |         |    |    \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
    |         |    +--- org.apache.commons:commons-lang3:3.8 -> 3.7
    |         |    \--- io.github.classgraph:classgraph:4.8.86
    |         +--- org.neo4j:neo4j-ogm-api:3.2.16 (*)
    |         +--- org.neo4j:neo4j-ogm-bolt-driver:3.2.16
    |         |    +--- org.neo4j:neo4j-ogm-api:3.2.16 (*)
    |         |    \--- org.neo4j.driver:neo4j-java-driver:4.0.2

With this some time in our application we have seen below issue even though we are not doing neo4j transaction.

    import javax.persistence.EntityManagerFactory;
    import org.neo4j.ogm.config.Configuration;
    import org.neo4j.ogm.session.SessionFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Primary;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
    import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
    import org.springframework.data.transaction.ChainedTransactionManager;
    import org.springframework.orm.jpa.JpaTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;

    @org.springframework.context.annotation.Configuration

    @EnableNeo4jRepositories(basePackages = "com.fb.logistics.network.masterdata.repository.graph")
    @EnableJpaRepositories(basePackages = {"com.fb.logistics.network.availability.repository",
            "com.fb.logistics.network.itinerary.repository",
            "com.fb.logistics.network.traversalpath.repository",
            "com.fb.logistics.network.common.repository",
            "com.fb.logistics.network.masterdata.repository.relational"})
    @EntityScan(basePackages = {"com.fb.logistics.network"})
    @EnableTransactionManagement
    public class DatabaseConfiguration {

        @Value("${com.neo4j.uri}")
        private String uri;

        @Value("${com.neo4j.username}")
        private String username;

        @Value("${com.neo4j.password}")
        private String password;

        @Value("${com.neo4j.auth.enabled}")
        private boolean authEnabled;

        @Bean
        public SessionFactory sessionFactory(Configuration configuration) {
            return new SessionFactory(configuration, "com.fb.logistics.network.masterdata");
        }

        @Bean
        public Configuration configuration() {
            Configuration.Builder builder = new Configuration.Builder();
            builder.uri(uri);
            if (authEnabled) {
                builder.credentials(username, password);
            }
            return builder.build();
        }


        @Bean("neo4jTransactionManager")
        public Neo4jTransactionManager transactionManager(SessionFactory sessionFactory) {
            return new Neo4jTransactionManager(sessionFactory);
        }

        @Bean("jpaTransactionManager")
        public JpaTransactionManager jpaTransactionManager(EntityManagerFactory entityManagerFactory) {
            return new JpaTransactionManager(entityManagerFactory);
        }

        @Bean(name = "transactionManager")
        @Primary
        public ChainedTransactionManager chainedTransactionManager(Neo4jTransactionManager neo4jTransactionManager,
                                                                   JpaTransactionManager jpaTransactionManager) {
            return new ChainedTransactionManager(neo4jTransactionManager, jpaTransactionManager);
        }
    }

Below is the stacktrace which we have seen while doing some postgres transaction commit:

    org.springframework.transaction.HeuristicCompletionException: Heuristic completion: outcome state is mixed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Server at neo4j-core-xxx-69.test-iti-123.neo4j.io:7687 is no longer available; nested exception is org.neo4j.ogm.exception.TransactionException: Server at server-orch-0037.neo4j.io:7687 is no longer available
        at org.springframework.data.transaction.ChainedTransactionManager.commit(ChainedTransactionManager.java:177)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:633)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:386)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
        at com.fb.logistics.network.itinerary.handler.cron.impl.ComputeItineraryCronHandler$$EnhancerBySpringCGLIB$$6d7bb9f1.execute(<generated>)
        at com.fb.logistics.network.itinerary.service.impl.ItineraryGenerationServiceImpl.generateItineraries(ItineraryGenerationServiceImpl.java:58)
        at com.fb.logistics.network.itinerary.messaging.listener.CiCronEventsTimeoutWrapper.process(CiCronEventsTimeoutWrapper.java:117)
        at com.fb.logistics.network.itinerary.messaging.listener.CiCronEventsTimeoutWrapper.handleEvent(CiCronEventsTimeoutWrapper.java:112)
        at com.fb.logistics.network.itinerary.messaging.listener.CiCronEventsTimeoutWrapper.lambda$execute$0(CiCronEventsTimeoutWrapper.java:81)
        at com.fb.logistics.event.AggregateEventConsumer.executeServiceLogic(AggregateEventConsumer.java:164)
        at com.fb.logistics.event.AggregateEventConsumer.invokeIdempotentConsumer(AggregateEventConsumer.java:157)
        at com.fb.logistics.event.AggregateEventConsumer.execute(AggregateEventConsumer.java:118)
        at com.fb.logistics.event.AggregateEventConsumer.accept(AggregateEventConsumer.java:93)
        at com.fb.logistics.network.itinerary.messaging.listener.CiCronEventsTimeoutWrapper.execute(CiCronEventsTimeoutWrapper.java:85)
        at com.fb.logistics.network.itinerary.messaging.listener.CiCronEventsTimeoutWrapper.processEvent(CiCronEventsTimeoutWrapper.java:56)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.execute(MethodExecutionAction.java:116)
        at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.executeWithArgs(MethodExecutionAction.java:93)
        at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.execute(MethodExecutionAction.java:78)
        at com.netflix.hystrix.contrib.javanica.command.GenericCommand$1.execute(GenericCommand.java:48)
        at com.netflix.hystrix.contrib.javanica.command.AbstractHystrixCommand.process(AbstractHystrixCommand.java:145)
        at com.netflix.hystrix.contrib.javanica.command.GenericCommand.run(GenericCommand.java:45)
        at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
        at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
        at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
        at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
        at datadog.trace.instrumentation.rxjava.TracedOnSubscribe.call(TracedOnSubscribe.java:47)
        at datadog.trace.instrumentation.rxjava.TracedOnSubscribe.call(TracedOnSubscribe.java:14)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
        at rx.Observable.unsafeSubscribe(Observable.java:10327)
        at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
        at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
        at rx.Observable.unsafeSubscribe(Observable.java:10327)
        at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)
        at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
        at rx.Observable.unsafeSubscribe(Observable.java:10327)
        at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100)
        at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56)
        at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47)
        at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69)
        at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Server at neo4j-core-d8c94312-69.production-orch-0037.neo4j.io:7687 is no longer available; nested exception is org.neo4j.ogm.exception.TransactionException: Server at neo4j-core-d8c94312-69.production-orch-0037.neo4j.io:7687 is no longer available
        at org.springframework.data.neo4j.transaction.SessionFactoryUtils.convertOgmAccessException(SessionFactoryUtils.java:140)
        at org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doCommit(Neo4jTransactionManager.java:305)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:743)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:711)
        at org.springframework.data.transaction.MultiTransactionStatus.commit(MultiTransactionStatus.java:74)
        at org.springframework.data.transaction.ChainedTransactionManager.commit(ChainedTransactionManager.java:150)
        ... 58 common frames omitted
    Caused by: org.neo4j.ogm.exception.TransactionException: Server at neo4j-core-d8c94312-69.production-orch-0037.neo4j.io:7687 is no longer available
        at org.neo4j.ogm.drivers.bolt.transaction.BoltTransaction.commit(BoltTransaction.java:111)
        at org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doCommit(Neo4jTransactionManager.java:288)
        ... 62 common frames omitted
    Caused by: org.neo4j.driver.exceptions.SessionExpiredException: Server at neo4j-core-d8c94312-69.production-orch-0037.neo4j.io:7687 is no longer available
        at org.neo4j.driver.internal.util.Futures.blockingGet(Futures.java:143)
        at org.neo4j.driver.internal.InternalTransaction.commit(InternalTransaction.java:39)
        at org.neo4j.ogm.drivers.bolt.transaction.BoltTransaction.commit(BoltTransaction.java:96)
        ... 63 common frames omitted
        Suppressed: org.neo4j.driver.internal.util.ErrorUtil$InternalExceptionCause: null
            at org.neo4j.driver.internal.handlers.RoutingResponseHandler.handledServiceUnavailableException(RoutingResponseHandler.java:109)
            at org.neo4j.driver.internal.handlers.RoutingResponseHandler.handledError(RoutingResponseHandler.java:90)
            at org.neo4j.driver.internal.handlers.RoutingResponseHandler.onFailure(RoutingResponseHandler.java:62)
            at org.neo4j.driver.internal.async.inbound.InboundMessageDispatcher.handleChannelError(InboundMessageDispatcher.java:161)
            at org.neo4j.driver.internal.async.inbound.ChannelErrorHandler.fail(ChannelErrorHandler.java:99)
            at org.neo4j.driver.internal.async.inbound.ChannelErrorHandler.channelInactive(ChannelErrorHandler.java:77)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
            at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
            at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
            at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
            at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
            at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
            at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
            at org.neo4j.driver.internal.shaded.io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:1106)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
            at org.neo4j.driver.internal.shaded.io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1405)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
            at org.neo4j.driver.internal.shaded.io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:901)
            at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:818)
            at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
            at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
            at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:497)
            at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
            at org.neo4j.driver.internal.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
            at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
            ... 1 common frames omitted
    Caused by: org.neo4j.driver.exceptions.ServiceUnavailableException: Connection to the database terminated. Please ensure that your database is listening on the correct host and port and that you have compatible encryption settings both on Neo4j server and driver. Note that the default encryption setting has changed in Neo4j 4.0.
        at org.neo4j.driver.internal.util.ErrorUtil.newConnectionTerminatedError(ErrorUtil.java:53)
        at org.neo4j.driver.internal.util.ErrorUtil.newConnectionTerminatedError(ErrorUtil.java:46)
        at org.neo4j.driver.internal.async.inbound.ChannelErrorHandler.channelInactive(ChannelErrorHandler.java:76)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
        at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
        at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
        at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
        at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
        at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
        at org.neo4j.driver.internal.shaded.io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
        at org.neo4j.driver.internal.shaded.io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:1106)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
        at org.neo4j.driver.internal.shaded.io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1405)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
        at org.neo4j.driver.internal.shaded.io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:901)
        at org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:818)
        at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
        at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
        at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:497)
        at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at org.neo4j.driver.internal.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        ... 1 common frames omitted

0 Answers
Related