From e18dbcc6733326c58a896bdd57faa20387444ca9 Mon Sep 17 00:00:00 2001 From: Tristan Tarrant Date: Wed, 17 May 2023 15:25:39 +0200 Subject: [PATCH] ISPN-14880 RESP DBSIZE --- .../asciidoc/topics/ref_redis_commands.adoc | 3 ++ .../infinispan/server/resp/RespCommand.java | 3 +- .../resp/commands/connection/DBSIZE.java | 29 +++++++++++++++++++ .../server/resp/RespSingleNodeTest.java | 9 ++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 server/resp/src/main/java/org/infinispan/server/resp/commands/connection/DBSIZE.java diff --git a/documentation/src/main/asciidoc/topics/ref_redis_commands.adoc b/documentation/src/main/asciidoc/topics/ref_redis_commands.adoc index 74b3f48be9ac..1848e47bad7e 100644 --- a/documentation/src/main/asciidoc/topics/ref_redis_commands.adoc +++ b/documentation/src/main/asciidoc/topics/ref_redis_commands.adoc @@ -16,6 +16,9 @@ The {brandname} RESP endpoint implements the following Redis commands: | link:https://redis.io/commands/command[COMMAND] | +| link:https://redis.io/commands/dbsize[DBSIZE] +| + | link:https://redis.io/commands/decr[DECR] | diff --git a/server/resp/src/main/java/org/infinispan/server/resp/RespCommand.java b/server/resp/src/main/java/org/infinispan/server/resp/RespCommand.java index 5b80600731aa..58c69140567d 100644 --- a/server/resp/src/main/java/org/infinispan/server/resp/RespCommand.java +++ b/server/resp/src/main/java/org/infinispan/server/resp/RespCommand.java @@ -9,6 +9,7 @@ import org.infinispan.server.resp.commands.INFO; import org.infinispan.server.resp.commands.connection.AUTH; import org.infinispan.server.resp.commands.connection.COMMAND; +import org.infinispan.server.resp.commands.connection.DBSIZE; import org.infinispan.server.resp.commands.connection.ECHO; import org.infinispan.server.resp.commands.connection.HELLO; import org.infinispan.server.resp.commands.connection.MODULE; @@ -95,7 +96,7 @@ public String getName() { indexedRespCommand[0] = new RespCommand[]{new APPEND(), new AUTH()}; indexedRespCommand[2] = new RespCommand[]{new CONFIG(), new COMMAND()}; // DEL should always be first here - indexedRespCommand[3] = new RespCommand[]{new DEL(), new DECR(), new DECRBY()}; + indexedRespCommand[3] = new RespCommand[]{new DEL(), new DECR(), new DECRBY(), new DBSIZE()}; indexedRespCommand[4] = new RespCommand[]{new ECHO()}; // GET should always be first here indexedRespCommand[6] = new RespCommand[]{new GET(), new GETDEL()}; diff --git a/server/resp/src/main/java/org/infinispan/server/resp/commands/connection/DBSIZE.java b/server/resp/src/main/java/org/infinispan/server/resp/commands/connection/DBSIZE.java new file mode 100644 index 000000000000..1c4dc9ddc453 --- /dev/null +++ b/server/resp/src/main/java/org/infinispan/server/resp/commands/connection/DBSIZE.java @@ -0,0 +1,29 @@ +package org.infinispan.server.resp.commands.connection; + +import java.util.List; +import java.util.concurrent.CompletionStage; + +import org.infinispan.server.resp.Consumers; +import org.infinispan.server.resp.Resp3Handler; +import org.infinispan.server.resp.RespCommand; +import org.infinispan.server.resp.RespRequestHandler; +import org.infinispan.server.resp.commands.Resp3Command; + +import io.netty.channel.ChannelHandlerContext; + +/** + * DBSIZE + * + * @since 15.0 + */ +public class DBSIZE extends RespCommand implements Resp3Command { + public DBSIZE() { + super(1, 0, 0, 0); + } + + @Override + public CompletionStage perform(Resp3Handler handler, ChannelHandlerContext ctx, + List arguments) { + return handler.stageToReturn(handler.cache().sizeAsync(), ctx, Consumers.LONG_BICONSUMER); + } +} diff --git a/server/resp/src/test/java/org/infinispan/server/resp/RespSingleNodeTest.java b/server/resp/src/test/java/org/infinispan/server/resp/RespSingleNodeTest.java index fc9359de4f83..7e38b9750e49 100644 --- a/server/resp/src/test/java/org/infinispan/server/resp/RespSingleNodeTest.java +++ b/server/resp/src/test/java/org/infinispan/server/resp/RespSingleNodeTest.java @@ -606,6 +606,15 @@ public void testModule() { assertEquals(0, response.size()); } + @Test + public void testDbSize() { + RedisCommands redis = redisConnection.sync(); + Long size = redis.dbsize(); + assertThat(size).isEqualTo(cache.size()); + redis.set("dbsize-key", "dbsize-value"); + assertThat(redis.dbsize()).isEqualTo(size + 1); + } + public static class SimpleCommand implements ProtocolKeyword { private final String name;