Skip to content

Exeption on zpopmin #3199

@nicolube

Description

@nicolube

Bug Report

Current Behavior

I encoutered an exeption while poping something from an sorted set.

Stack trace
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: Caused by: java.lang.UnsupportedOperationException: io.lettuce.core.pubsub.PubSubCommandHandler$ResponseHeaderReplayOutput does not support set(double)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.output.CommandOutput.set(CommandOutput.java:123)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.RedisStateMachine.safeSet(RedisStateMachine.java:798)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.RedisStateMachine.handleFloat(RedisStateMachine.java:455)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.RedisStateMachine$State$Type.handle(RedisStateMachine.java:210)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.RedisStateMachine.doDecode(RedisStateMachine.java:363)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.RedisStateMachine.decode(RedisStateMachine.java:324)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:857)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.CommandHandler.decode0(CommandHandler.java:808)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:791)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:674)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.pubsub.PubSubCommandHandler.decode(PubSubCommandHandler.java:97)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at PrimeCorePlugin-0.3.7-SNAPSHOT.jar//io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:614)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:509)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:407)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
[01:25:58] [ForkJoinPool.commonPool-worker-5/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:1583)

Input Code

Input Code
import io.lettuce.core.RedisClient
import io.lettuce.core.codec.RedisCodec
import io.lettuce.core.codec.StringCodec

fun main() {
    val client = RedisClient.create("redis://localhost")
    val connection = client.connectPubSub(RedisCodec.of(StringCodec.ASCII, StringCodec.UTF8)).sync()

    connection.zadd("myzset", 1.0, "one")
    connection.zadd("myzset", 2.0, "two")

    connection.zpopmin("myzset", 1).firstOrNull()?.takeIf { it.hasValue() }?.let {
        println("Popped value: $it")
    } ?: println("No value to pop")
}

Expected behavior/code

Well I expect it to not throw an exeption.

Environment

  • Lettuce version(s): lettuce-core:6.5.4.RELEASE
  • Redis version: redis:7.2@sha256:6da5f3c2579824a9de659e612242f3b11bc421f8aa847ba33e427c1bc122ed3d

Possible Solution

Well currently i do this:

val polled = redisCommands.eval<String>("return redis.call('zpopmin', '$setKey', 1)[1]", ScriptOutputType.VALUE, arrayOf())

But that is just my workaround.

Additional context

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions