use with gateway,but something throw io.lettuce.core.output.ValueOutput does not support set(long)
I have deployed multiple gateway services with the same code. However, in some instances of the service, a failure occurs after listening to specific Redis messages. The failure disappears after restarting the service, but it reappears after repackaging.
spring-cloud-starter-gateway:3.1.9
lettuce: 6.1.10.RELEASE
spring-data-redis: 2.7.18
convertAndSenddata:
{"apps":[“D3sX4"],"status": 2}
listen:
reactiveRedisTemplate.listenToChannel(Constant.Sentinel.RULE_SYNC_KEY).flatMap(data -> {});
error log:
2024-04-23 18:06:39.741|ERROR |9573|lettuce-epollEventLoop-5-1||Operator called default onErrorDropped
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.UnsupportedOperationException: io.lettuce.core.output.ValueOutput does not support set(long)
Caused by: java.lang.UnsupportedOperationException: io.lettuce.core.output.ValueOutput does not support set(long)
at io.lettuce.core.output.CommandOutput.set(CommandOutput.java:107) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.RedisStateMachine.safeSet(RedisStateMachine.java:778) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.RedisStateMachine.handleInteger(RedisStateMachine.java:404) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.RedisStateMachine$State$Type.handle(RedisStateMachine.java:206) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.RedisStateMachine.doDecode(RedisStateMachine.java:334) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.RedisStateMachine.decode(RedisStateMachine.java:295) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:842) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.CommandHandler.decode0(CommandHandler.java:793) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:767) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:659) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:599) ~[lettuce-core-6.1.10.RELEASE.jar:6.1.10.RELEASE]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:801) ~[netty-transport-classes-epoll-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:509) ~[netty-transport-classes-epoll-4.1.108.Final.jar:4.1.108.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:407) ~[netty-transport-classes-epoll-4.1.108.Final.jar:4.1.108.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.108.Final.jar:4.1.108.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.108.Final.jar:4.1.108.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.108.Final.jar:4.1.108.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
arthas data (input@ValueOutput respnull and Thread@StackTraceElement)
method=io.lettuce.core.protocol.RedisStateMachine.safeSet location=AtExit
ts=2024-05-24 17:17:38; [cost=0.899899ms] result=@ArrayList[
@ValueOutput[
codec=@ByteBufferCodec[
INSTANCE=@ByteBufferCodec[
INSTANCE=@ByteBufferCodec[INSTANCE],
$VALUES=@ByteBufferCodec[][isEmpty=false;size=1],
name=@String[INSTANCE],
ordinal=@Integer[0],
],
$VALUES=@ByteBufferCodec[][
@ByteBufferCodec[INSTANCE],
],
name=@String[INSTANCE],
ordinal=@Integer[0],
],
output=null,
error=@String[io.lettuce.core.output.ValueOutput does not support set(long)],
],
null,
@StackTraceElement[][
@StackTraceElement[
declaringClass=@String[java.lang.Thread],
methodName=@String[getStackTrace],
fileName=@String[Thread.java],
lineNumber=@Integer[1559],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[sun.reflect.NativeMethodAccessorImpl],
methodName=@String[invoke0],
fileName=@String[NativeMethodAccessorImpl.java],
lineNumber=@Integer[-2],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[sun.reflect.NativeMethodAccessorImpl],
methodName=@String[invoke],
fileName=@String[NativeMethodAccessorImpl.java],
lineNumber=@Integer[62],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[sun.reflect.DelegatingMethodAccessorImpl],
methodName=@String[invoke],
fileName=@String[DelegatingMethodAccessorImpl.java],
lineNumber=@Integer[43],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[java.lang.reflect.Method],
methodName=@String[invoke],
fileName=@String[Method.java],
lineNumber=@Integer[498],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.OgnlRuntime],
methodName=@String[invokeMethod],
fileName=@String[OgnlRuntime.java],
lineNumber=@Integer[899],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.OgnlRuntime],
methodName=@String[callAppropriateMethod],
fileName=@String[OgnlRuntime.java],
lineNumber=@Integer[1544],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.ObjectMethodAccessor],
methodName=@String[callMethod],
fileName=@String[ObjectMethodAccessor.java],
lineNumber=@Integer[68],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.OgnlRuntime],
methodName=@String[callMethod],
fileName=@String[OgnlRuntime.java],
lineNumber=@Integer[1620],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.ASTMethod],
methodName=@String[getValueBody],
fileName=@String[ASTMethod.java],
lineNumber=@Integer[91],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.SimpleNode],
methodName=@String[evaluateGetValueBody],
fileName=@String[SimpleNode.java],
lineNumber=@Integer[212],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.SimpleNode],
methodName=@String[getValue],
fileName=@String[SimpleNode.java],
lineNumber=@Integer[258],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.ASTChain],
methodName=@String[getValueBody],
fileName=@String[ASTChain.java],
lineNumber=@Integer[141],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.SimpleNode],
methodName=@String[evaluateGetValueBody],
fileName=@String[SimpleNode.java],
lineNumber=@Integer[212],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.SimpleNode],
methodName=@String[getValue],
fileName=@String[SimpleNode.java],
lineNumber=@Integer[258],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.ASTList],
methodName=@String[getValueBody],
fileName=@String[ASTList.java],
lineNumber=@Integer[60],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.SimpleNode],
methodName=@String[evaluateGetValueBody],
fileName=@String[SimpleNode.java],
lineNumber=@Integer[212],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.SimpleNode],
methodName=@String[getValue],
fileName=@String[SimpleNode.java],
lineNumber=@Integer[258],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.Ognl],
methodName=@String[getValue],
fileName=@String[Ognl.java],
lineNumber=@Integer[470],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.Ognl],
methodName=@String[getValue],
fileName=@String[Ognl.java],
lineNumber=@Integer[572],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[ognl.Ognl],
methodName=@String[getValue],
fileName=@String[Ognl.java],
lineNumber=@Integer[542],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[com.taobao.arthas.core.command.express.OgnlExpress],
methodName=@String[get],
fileName=@String[OgnlExpress.java],
lineNumber=@Integer[40],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[com.taobao.arthas.core.advisor.AdviceListenerAdapter],
methodName=@String[getExpressionResult],
fileName=@String[AdviceListenerAdapter.java],
lineNumber=@Integer[123],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[com.taobao.arthas.core.command.monitor200.WatchAdviceListener],
methodName=@String[watching],
fileName=@String[WatchAdviceListener.java],
lineNumber=@Integer[87],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[com.taobao.arthas.core.command.monitor200.WatchAdviceListener],
methodName=@String[finishing],
fileName=@String[WatchAdviceListener.java],
lineNumber=@Integer[71],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[com.taobao.arthas.core.command.monitor200.WatchAdviceListener],
methodName=@String[afterReturning],
fileName=@String[WatchAdviceListener.java],
lineNumber=@Integer[55],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[com.taobao.arthas.core.advisor.AdviceListenerAdapter],
methodName=@String[afterReturning],
fileName=@String[AdviceListenerAdapter.java],
lineNumber=@Integer[57],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[com.taobao.arthas.core.advisor.SpyImpl],
methodName=@String[atExit],
fileName=@String[SpyImpl.java],
lineNumber=@Integer[67],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[java.arthas.SpyAPI],
methodName=@String[atExit],
fileName=@String[SpyAPI.java],
lineNumber=@Integer[64],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.RedisStateMachine],
methodName=@String[safeSet],
fileName=@String[RedisStateMachine.java],
lineNumber=@Integer[782],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.RedisStateMachine],
methodName=@String[handleInteger],
fileName=@String[RedisStateMachine.java],
lineNumber=@Integer[404],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.RedisStateMachine$State$Type],
methodName=@String[handle],
fileName=@String[RedisStateMachine.java],
lineNumber=@Integer[206],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.RedisStateMachine],
methodName=@String[doDecode],
fileName=@String[RedisStateMachine.java],
lineNumber=@Integer[334],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.RedisStateMachine],
methodName=@String[decode],
fileName=@String[RedisStateMachine.java],
lineNumber=@Integer[295],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.CommandHandler],
methodName=@String[decode],
fileName=@String[CommandHandler.java],
lineNumber=@Integer[842],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.CommandHandler],
methodName=@String[decode0],
fileName=@String[CommandHandler.java],
lineNumber=@Integer[793],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.CommandHandler],
methodName=@String[decode],
fileName=@String[CommandHandler.java],
lineNumber=@Integer[767],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.CommandHandler],
methodName=@String[decode],
fileName=@String[CommandHandler.java],
lineNumber=@Integer[659],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.lettuce.core.protocol.CommandHandler],
methodName=@String[channelRead],
fileName=@String[CommandHandler.java],
lineNumber=@Integer[599],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.AbstractChannelHandlerContext],
methodName=@String[invokeChannelRead],
fileName=@String[AbstractChannelHandlerContext.java],
lineNumber=@Integer[442],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.AbstractChannelHandlerContext],
methodName=@String[invokeChannelRead],
fileName=@String[AbstractChannelHandlerContext.java],
lineNumber=@Integer[420],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.AbstractChannelHandlerContext],
methodName=@String[fireChannelRead],
fileName=@String[AbstractChannelHandlerContext.java],
lineNumber=@Integer[412],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.DefaultChannelPipeline$HeadContext],
methodName=@String[channelRead],
fileName=@String[DefaultChannelPipeline.java],
lineNumber=@Integer[1410],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.AbstractChannelHandlerContext],
methodName=@String[invokeChannelRead],
fileName=@String[AbstractChannelHandlerContext.java],
lineNumber=@Integer[440],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.AbstractChannelHandlerContext],
methodName=@String[invokeChannelRead],
fileName=@String[AbstractChannelHandlerContext.java],
lineNumber=@Integer[420],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.DefaultChannelPipeline],
methodName=@String[fireChannelRead],
fileName=@String[DefaultChannelPipeline.java],
lineNumber=@Integer[919],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe],
methodName=@String[epollInReady],
fileName=@String[AbstractEpollStreamChannel.java],
lineNumber=@Integer[801],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.epoll.EpollEventLoop],
methodName=@String[processReady],
fileName=@String[EpollEventLoop.java],
lineNumber=@Integer[509],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.channel.epoll.EpollEventLoop],
methodName=@String[run],
fileName=@String[EpollEventLoop.java],
lineNumber=@Integer[407],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.util.concurrent.SingleThreadEventExecutor$4],
methodName=@String[run],
fileName=@String[SingleThreadEventExecutor.java],
lineNumber=@Integer[997],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.util.internal.ThreadExecutorMap$2],
methodName=@String[run],
fileName=@String[ThreadExecutorMap.java],
lineNumber=@Integer[74],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[io.netty.util.concurrent.FastThreadLocalRunnable],
methodName=@String[run],
fileName=@String[FastThreadLocalRunnable.java],
lineNumber=@Integer[30],
serialVersionUID=@Long[6992337162326171013],
],
@StackTraceElement[
declaringClass=@String[java.lang.Thread],
methodName=@String[run],
fileName=@String[Thread.java],
lineNumber=@Integer[748],
serialVersionUID=@Long[6992337162326171013],
],
],
]
Hey @zafir-zhong , are you sure this issue does not belong to the spring-data-redis? From the information you've provided it is hard to understand what is going wrong. Could you provide a minimal sample so we can investigate further?
I am unable to reproduce this issue stably, but it always occurs sporadically.And, in the exception stack, only the relevant information of Lettuce can be seen.
it happen when gateway listen a message {"apps":[“D3sX4"],"status": 2} from redis,and causing the service to be unable to read data from Redis
Can you provide some suggestions on when Lettuce may throw this exception? Now all I know is that the service malfunctioned after receiving a Redis message
Can you provide some suggestions on when Lettuce may throw this exception? Now all I know is that the service malfunctioned after receiving a Redis message
This message means that the Lettuce driver is not set up to process the message that was returned. Each command has an implementation of the CommandOutput associated to it, to help parse the response from the server. In your case this is a ValueOutput. The ValueOutput does not handle long values and thus the processing fails.
Now why we are receiving the wrong value is a question I can't answer.
What type of serialization are you using for your ReactiveRedisTemplate? Are messages of mixed type expected on this channel? What is the purpose of this code?
I am unable to reproduce this issue stably, but it always occurs sporadically.And, in the exception stack, only the relevant information of Lettuce can be seen. it happen when gateway listen a message
{"apps":[“D3sX4"],"status": 2}from redis,and causing the service to be unable to read data from Redis
Have you asked your question in the spring-data-redis ?
Can you provide some suggestions on when Lettuce may throw this exception? Now all I know is that the service malfunctioned after receiving a Redis message
This message means that the Lettuce driver is not set up to process the message that was returned. Each command has an implementation of the
CommandOutputassociated to it, to help parse the response from the server. In your case this is aValueOutput. TheValueOutputdoes not handlelongvalues and thus the processing fails.Now why we are receiving the wrong value is a question I can't answer.
What type of serialization are you using for your ReactiveRedisTemplate? Are messages of mixed type expected on this channel? What is the purpose of this code?
use jason serialization I didn't find any of my own code in the exception message, so I can't actually confirm which line of code caused it
I am unable to reproduce this issue stably, but it always occurs sporadically.And, in the exception stack, only the relevant information of Lettuce can be seen. it happen when gateway listen a message
{"apps":[“D3sX4"],"status": 2}from redis,and causing the service to be unable to read data from RedisHave you asked your question in the spring-data-redis ?
i try it now.
Looks like a variant of #2175
Looks like a variant of #2175
Do you think it is more likely a problem of the driver or the way spring-data-redis uses it? I am trying to see a pattern myselft, but I see we also have instances of this issue manifested when the driver is used standalone.
Impossible to say without a reproducer. The listenToChannel(…) method effectively SUBSCRIBEs to a channel with a PubSubOutput. Given the exception above that mentions ValueOutput, there's a gap that only a reproducer can describe.
Hey @zafir-zhong ,
a few followup questions:
- do you see any other issues in the log that precede this one (Out-of-Memory, NullPointerException, etc.)?
- do you use a custom
RedisCodec? - does the issue persist, after it happens, until you restart the application, or does the application recover by itself?
Hey @zafir-zhong ,
a few followup questions:
- do you see any other issues in the log that precede this one (Out-of-Memory, NullPointerException, etc.)?
- do you use a custom
RedisCodec?- does the issue persist, after it happens, until you restart the application, or does the application recover by itself?
- no
- no custom RedisCodec
- until you restart the application
Special Usage:
had override org.springframework.core.codec.AbstractDataBufferDecoder and set maxInMemorySize= 256000 * 1024 ;
had override org.springframework.data.redis.core.DefaultReactiveHashOperations and replace entries(H key)
(here disabledHGetAll is false )
@Override
public Flux<Map.Entry<HK, HV>> entries(H key) {
Assert.notNull(key, "Key must not be null!");
if (ObjectUtil.equals("true", System.getProperty("disabledHGetAll", "false"))) {
ScanOptions build = ScanOptions.scanOptions().match("*").build();
return scan(key, build);
}
return createFlux(connection -> connection.hGetAll(rawKey(key))
.map(this::deserializeHashEntry));
}
/*
* (non-Javadoc)
* @see org.springframework.data.redis.core.ReactiveHashOperations#scan(java.lang.Object, org.springframework.data.redis.core.ScanOptions)
*/
@Override
public Flux<Map.Entry<HK, HV>> scan(H key, ScanOptions options) {
Assert.notNull(key, "Key must not be null!");
Assert.notNull(key, "ScanOptions must not be null!");
return createFlux(connection -> connection.hScan(rawKey(key), options) //
.map(this::deserializeHashEntry));
}
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 30 days this issue will be closed.