From 72c76be6b1b14adcc36f3525ec1eb745b750d882 Mon Sep 17 00:00:00 2001 From: Manuel Polo Date: Wed, 31 Jan 2024 17:36:31 +0100 Subject: [PATCH] feat: Added autogenerated stream sequence id support to StreamMessageId Signed-off-by: Manuel Polo --- .../org/redisson/api/StreamMessageId.java | 13 +++++++--- .../java/org/redisson/RedissonStreamTest.java | 25 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/redisson/src/main/java/org/redisson/api/StreamMessageId.java b/redisson/src/main/java/org/redisson/api/StreamMessageId.java index 8fa9c2cb4..97fa76a92 100644 --- a/redisson/src/main/java/org/redisson/api/StreamMessageId.java +++ b/redisson/src/main/java/org/redisson/api/StreamMessageId.java @@ -65,9 +65,11 @@ public class StreamMessageId { */ public static final StreamMessageId ALL = new StreamMessageId(-1); - private long id0; + private final long id0; private long id1; + private boolean autogenerateSequenceId; + public StreamMessageId(long id0) { super(); this.id0 = id0; @@ -79,6 +81,11 @@ public class StreamMessageId { this.id1 = id1; } + public StreamMessageId autogenerateSequenceId() { + this.autogenerateSequenceId = true; + return this; + } + /** * Returns first part of ID * @@ -119,7 +126,7 @@ public class StreamMessageId { return false; if (id1 != other.id1) return false; - return true; + return autogenerateSequenceId == other.autogenerateSequenceId; } @Override @@ -143,7 +150,7 @@ public class StreamMessageId { return "*"; } - return id0 + "-" + id1; + return id0 + "-" + (autogenerateSequenceId ? "*" : id1); } } diff --git a/redisson/src/test/java/org/redisson/RedissonStreamTest.java b/redisson/src/test/java/org/redisson/RedissonStreamTest.java index 0970b0777..50de97db1 100644 --- a/redisson/src/test/java/org/redisson/RedissonStreamTest.java +++ b/redisson/src/test/java/org/redisson/RedissonStreamTest.java @@ -520,6 +520,31 @@ public class RedissonStreamTest extends RedisDockerTest { assertThat(s2).isEmpty(); } + @Test + public void testAutogenerateStreamSequenceId() { + RStream stream = redisson.getStream("test"); + assertThat(stream.size()).isEqualTo(0); + + StreamMessageId id = new StreamMessageId(1).autogenerateSequenceId(); + + Map entry1 = new HashMap<>(); + entry1.put("test", "value1"); + Map entry2 = new HashMap<>(); + entry2.put("test", "value2"); + + stream.add(id,StreamAddArgs.entries(entry1)); + stream.add(id,StreamAddArgs.entries(entry2)); + + Map> r = stream.range(10, StreamMessageId.MIN, StreamMessageId.MAX); + System.out.println("r:" + r); + assertThat(r).size().isEqualTo(2); + assertThat(r.keySet()).containsExactly( + new StreamMessageId(1,0),new StreamMessageId(1,1) + ); + assertThat(r.get(new StreamMessageId(1,0))).isEqualTo(entry1); + assertThat(r.get(new StreamMessageId(1,1))).isEqualTo(entry2); + } + @Test public void testRangeReversed() { RStream stream = redisson.getStream("test");