diff --git a/redisson/src/main/java/org/redisson/RedissonBinaryStream.java b/redisson/src/main/java/org/redisson/RedissonBinaryStream.java index b6d35931b..b537c001c 100644 --- a/redisson/src/main/java/org/redisson/RedissonBinaryStream.java +++ b/redisson/src/main/java/org/redisson/RedissonBinaryStream.java @@ -179,6 +179,13 @@ public class RedissonBinaryStream extends RedissonBucket implements RBin @Override public SeekableByteChannel truncate(long size) throws IOException { + if (size < 0) { + throw new IllegalArgumentException("Negative size"); + } + if (size == 0) { + delete(); + return this; + } get(commandExecutor.evalWriteAsync(getRawName(), LongCodec.INSTANCE, RedisCommands.EVAL_VOID, "local len = redis.call('strlen', KEYS[1]); " + "if tonumber(ARGV[1]) >= len then " + diff --git a/redisson/src/test/java/org/redisson/RedissonBinaryStreamTest.java b/redisson/src/test/java/org/redisson/RedissonBinaryStreamTest.java index c45abf13e..e710da501 100644 --- a/redisson/src/test/java/org/redisson/RedissonBinaryStreamTest.java +++ b/redisson/src/test/java/org/redisson/RedissonBinaryStreamTest.java @@ -95,6 +95,9 @@ public class RedissonBinaryStreamTest extends RedisDockerTest { b.get(bb); assertThat(c.size()).isEqualTo(3); assertThat(bb).isEqualTo(new byte[]{1, 2, 3}); + + c.truncate(0); + assertThat(c.size()).isEqualTo(0); } @Test