Error preparing queries for accessor in cassandra

1k Views Asked by At

In lagom project, I'm trying to use Accessors But I get an error.

java.util.concurrent.CompletionException: java.lang.RuntimeException: Error preparing queries for accessor TestAccessor at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273) at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:991) at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2124) at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:110) at org.test.impl.persist.CassandraRepository.getAll(CassandraRepository.java:98) at org.test.impl.workers.Worker.lambda$testMessage$2(Worker.java:91) at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:952) at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:926) at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474) at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1962) at com.spotify.futures.ListenableToCompletableFutureWrapper.onSuccess(ListenableToCompletableFutureWrapper.java:49) at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1237) at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:911) at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:822) at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:664) at com.google.common.util.concurrent.AbstractTransformFuture$TransformFuture.setResult(AbstractTransformFuture.java:245) at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:177) at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:911) at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:822) at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:664) at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:174) at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:198) at com.datastax.driver.core.RequestHandler.access$2600(RequestHandler.java:50) at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:852) at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:556) at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1087) at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1010) at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) at com.datastax.driver.core.InboundTrafficMeter.channelRead(InboundTrafficMeter.java:38) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:647) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:582) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:499) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:461) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.RuntimeException: Error preparing queries for accessor TestAccessor at com.datastax.driver.mapping.AccessorMapper.prepare(AccessorMapper.java:61) at com.datastax.driver.mapping.MappingManager.getAccessor(MappingManager.java:335) at com.datastax.driver.mapping.MappingManager.createAccessor(MappingManager.java:297) at org.test.impl.persist.CassandraRepository.lambda$getAll$5(CassandraRepository.java:99) at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:981) ... 61 common frames omitted Caused by: java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.OperationTimedOutException: [localhost/127.0.0.1:9042] Timed out waiting for server response at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482) at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79) at com.datastax.driver.mapping.AccessorMapper.prepare(AccessorMapper.java:57) ... 65 common frames omitted Caused by: com.datastax.driver.core.exceptions.OperationTimedOutException: [localhost/127.0.0.1:9042] Timed out waiting for server response at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onTimeout(RequestHandler.java:825) at com.datastax.driver.core.Connection$ResponseHandler$1.run(Connection.java:1392) at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:668) at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:743) at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:471) ... 2 common frames omitted

Accessor

@Accessor
public interface TestAccessor {
    @Query("SELECT * FROM test_table")
    Result<TestTable> getAll();
}

Usage

TestAccessor acc = mappingManager.createAccessor(TestAccessor.class);
Result<TestTable> channels = acc.getAll();

Provide session and mapper.

public class Module extends AbstractModule implements ServiceGuiceSupport, AkkaGuiceSupport {
    private static CompletableFuture<Void> codecRegistrationPromise = new CompletableFuture<>();

    @Override
    protected void configure() {
        bindService(TestService.class, TestServiceImpl.class);
    }

    @Provides
    @Singleton
    public CompletionStage<MappingManager> provideMappingManager(CompletionStage<Session> session) {
        return session.thenApply(MappingManager::new));
    }

    @Provides
    public CompletionStage<Cluster> provideCassandraCluster(CompletionStage<Session> session) {
        return session.thenApply(Session::getCluster);
    }

    @Provides
    @Singleton
    public CompletionStage<Session> provideCassandraSession(CassandraSession sessionWrapper) {
        CompletableFuture<Session> future = new CompletableFuture<>();
        completeWithSession(sessionWrapper, future);
        return future;
    }

    private void completeWithSession(CassandraSession sessionWrapper, CompletableFuture<Session> future) {
        sessionWrapper.underlying().whenComplete((session, throwable) -> {
            if (throwable != null) {
                if (throwable instanceof NoServiceLocatorException) {
                    log.error("Failed to obtain Cassandra session, try again", throwable);
                    completeWithSession(sessionWrapper, future);
                } else {
                    log.error("Failed to obtain Cassandra session", throwable);
                    future.completeExceptionally(throwable);
                }
            } else {
                log.info("Cassandra session obtained");
                future.complete(session);
            }
        });
    }
}

Usage in some class

@Inject
    public CassandraRepository(CompletionStage<MappingManager> mappingManagerPromise, ActorSystem system) {
        this.mappingManagerPromise = mappingManagerPromise;
        this.system = system;
    }



    mappingManagerPromise.thenApply(mappingManager -> {
                    TestAccessor acc = mappingManager.createAccessor(TestAccessor.class);
Result<TestTable> channels = acc.getAll();
                })

If I'm using mapper.getAsync all fine.

Mapper<TestTable> mapper = mappingManager.mapper(TestTable.class);
            return toCompletableFuture(mapper.getAsync(id));
0

There are 0 best solutions below