cartridge-java icon indicating copy to clipboard operation
cartridge-java copied to clipboard

Unsupported metadata format: key 'spaces' must contain a map of spaces names to space metadata

Open dkasimovskiy opened this issue 2 years ago • 0 comments

Red Hat Enterprise Linux Server release 7.9 (Maipo) Tarantool 2.10.0-0-g0a5ce0b Cartridge 2.7.4 cartridge-driver 0.8.0

Java client cannot refresh spaces and indexes metadata.

Java code:

TarantoolClient<TarantoolTuple, TarantoolResult<TarantoolTuple>> client = TarantoolClientFactory.createClient()
    .withAddress("some-host:3301")
    .withCredentials(USER_NAME, PASSWORD)
     .withProxyMethodMapping()
    .build();
TarantoolTupleFactory tupleFactory = new DefaultTarantoolTupleFactory(new DefaultMessagePackMapper());
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> space = client.space("space");

Console output:

2022-06-01 17:07:21.247 DEBUG 45157 [aitility-thread] d.c.c.AbstractTarantoolConnectionManager Current connection mode: FULL
2022-06-01 17:07:21.600  INFO 45157 [ntLoopGroup-2-1] d.c.c.AbstractTarantoolConnectionManager Connected to Tarantool server at srv8-dustpietre/172.18.48.36:3301
2022-06-01 17:07:21.669 ERROR 45157 [aitility-thread] t.c.a.s.CacheServiceWithDirectConnection Failed to refresh spaces and indexes metadata

io.tarantool.driver.exceptions.TarantoolClientException: Failed to refresh spaces and indexes metadata
	at io.tarantool.driver.core.metadata.TarantoolMetadata.awaitInitLatch(TarantoolMetadata.java:89)
	at io.tarantool.driver.core.metadata.TarantoolMetadata.getSpaceMetadata(TarantoolMetadata.java:41)
	at io.tarantool.driver.core.metadata.TarantoolMetadata.getSpaceByName(TarantoolMetadata.java:126)
	at io.tarantool.driver.core.ProxyTarantoolClient.space(ProxyTarantoolClient.java:110)
	at com.nexign.tarantool.cartridge.app.service.CacheServiceWithDirectConnection.lambda$test$0(CacheServiceWithDirectConnection.java:54)
	at org.awaitility.core.CallableCondition$ConditionEvaluationWrapper.eval(CallableCondition.java:99)
	at org.awaitility.core.ConditionAwaiter$ConditionPoller.call(ConditionAwaiter.java:232)
	at org.awaitility.core.ConditionAwaiter$ConditionPoller.call(ConditionAwaiter.java:219)
	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: io.tarantool.driver.exceptions.TarantoolMetadataRequestException: Failed to retrieve space and index metadata using proxy function ddl.get_schema
	at io.tarantool.driver.core.metadata.ProxyMetadataProvider.lambda$getMetadata$0(ProxyMetadataProvider.java:51)
	at java.base/java.util.concurrent.CompletableFuture.uniExceptionally(CompletableFuture.java:986)
	at java.base/java.util.concurrent.CompletableFuture$UniExceptionally.tryFire(CompletableFuture.java:970)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
	at io.tarantool.driver.handlers.TarantoolResponseHandler.channelRead0(TarantoolResponseHandler.java:53)
	at io.tarantool.driver.handlers.TarantoolResponseHandler.channelRead0(TarantoolResponseHandler.java:23)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	... 1 common frames omitted
Caused by: java.util.concurrent.CompletionException: io.tarantool.driver.exceptions.TarantoolClientException: Unsupported metadata format: key 'spaces' must contain a map of spaces names to space metadata
	at java.base/java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:367)
	at java.base/java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:376)
	at java.base/java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:1019)
	... 26 common frames omitted
Caused by: io.tarantool.driver.exceptions.TarantoolClientException: Unsupported metadata format: key 'spaces' must contain a map of spaces names to space metadata
	at io.tarantool.driver.core.metadata.DDLTarantoolSpaceMetadataConverter.fromValue(DDLTarantoolSpaceMetadataConverter.java:66)
	at io.tarantool.driver.core.metadata.DDLTarantoolSpaceMetadataConverter.fromValue(DDLTarantoolSpaceMetadataConverter.java:29)
	at io.tarantool.driver.core.SingleValueCallResultImpl.<init>(SingleValueCallResultImpl.java:32)
	at io.tarantool.driver.mappers.converters.value.custom.SingleValueCallResultConverter.fromValue(SingleValueCallResultConverter.java:26)
	at io.tarantool.driver.mappers.converters.value.custom.SingleValueCallResultConverter.fromValue(SingleValueCallResultConverter.java:14)
	at io.tarantool.driver.mappers.DefaultMessagePackMapper.fromValue(DefaultMessagePackMapper.java:115)
	at io.tarantool.driver.mappers.DefaultMessagePackMapper.fromValue(DefaultMessagePackMapper.java:95)
	at io.tarantool.driver.mappers.AbstractResultMapper.fromValue(AbstractResultMapper.java:37)
	at io.tarantool.driver.handlers.TarantoolResponseHandler.channelRead0(TarantoolResponseHandler.java:51)
	... 23 common frames omitted

The problem is located in io.tarantool.driver.core.metadata.DDLTarantoolSpaceMetadataConverter in function fromValue(). Type of spacesMap.get(SPACES_KEY) is not a Map.

https://user-images.githubusercontent.com/106586241/171426758-3b9da7df-4516-4939-9fdc-9dcc9d6f5f38.png

Original ticket: https://github.com/tarantool/cartridge/issues/1827

dkasimovskiy avatar Jun 02 '22 07:06 dkasimovskiy