Skip to content

jsonArrpop fails with null return value #3196

Closed
@rigazilla

Description

@rigazilla

Bug Report

Current Behavior

jsonArrpop fails when popping from an empty array

Stack trace
{"name":"testStarted","attributes":{"name":"org.infinispan.server.resp.JsonCommandsTest#testJSONARRPOPRedis\\[authz\\\u003dfalse\\]()"}}{"name":"testFailed","attributes":{"name":"org.infinispan.server.resp.JsonCommandsTest#testJSONARRPOPRedis\\[authz\\\u003dfalse\\]()","message":"Cannot invoke "java.nio.ByteBuffer.remaining()" because "bytes" is null","trace":"java.lang.NullPointerException: Cannot invoke "java.nio.ByteBuffer.remaining()" because "bytes" is null
        at io.lettuce.core.output.JsonValueListOutput.set(JsonValueListOutput.java:42)
        at io.lettuce.core.protocol.RedisStateMachine.safeSet(RedisStateMachine.java:814)
        at io.lettuce.core.protocol.RedisStateMachine.handleNull(RedisStateMachine.java:421)
        at io.lettuce.core.protocol.RedisStateMachine$State$Type.handle(RedisStateMachine.java:210)
        at io.lettuce.core.protocol.RedisStateMachine.doDecode(RedisStateMachine.java:363)
        at io.lettuce.core.protocol.RedisStateMachine.decode(RedisStateMachine.java:324)
        at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:857)
        at io.lettuce.core.protocol.CommandHandler.decode0(CommandHandler.java:808)
        at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:782)
        at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:674)
        at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:614)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
        at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)
        at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501)
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:840)
","duration":"73"}}

Input Code

Input Code
   @Test
   public void testJSONARRPOPRedis() {
      RedisCommands<String,String> redis = RedisClient.create("redis://localhost:6379").connect().sync();
      JsonPath jp = new JsonPath("$");
      JsonValue jv = defaultJsonParser.createJsonValue("""
               ["one"]
            """);
      String key = k();
      redis.jsonSet(key, jp, jv);
      List<JsonValue> result = redis.jsonArrpop(key);
      assertThat(result.toString()).isEqualTo("[\"one\"]");
      result = redis.jsonArrpop(key, jp, 0);
      assertThat(result.get(0).isNull()).isTrue();
   }

Expected behavior/code

as per documentation popping from an empt array should return null (JsonValue null node?)

Environment

  • Lettuce version(s): 6.5.4.RELEASE
  • Redis version: [e.g. 4.0.9]
    127.0.0.1:6379> info

Server

redis_version:7.4.2

Possible Solution

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