summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalvatore Sanfilippo <antirez@gmail.com>2020-03-26 11:12:44 +0100
committerGitHub <noreply@github.com>2020-03-26 11:12:44 +0100
commit2ea7f0ecad118a4dc43a34a1b771a8c9070b883d (patch)
tree5575da198e06738a8a5de9c4b7d21183dcda0f81
parentc4d7f30e250b4b291e6d5893d9a3323df4a57c7c (diff)
parent3b29556a0cd9db0daa7828fe81df41fbe95e04dc (diff)
downloadredis-2ea7f0ecad118a4dc43a34a1b771a8c9070b883d.tar.gz
Merge pull request #6644 from oranagra/stream_aofrw
AOFRW on an empty stream created with MKSTREAM loads badkly
-rw-r--r--src/aof.c3
-rw-r--r--tests/unit/type/stream-cgroups.tcl13
2 files changed, 15 insertions, 1 deletions
diff --git a/src/aof.c b/src/aof.c
index 8ab9349f0..6bb239252 100644
--- a/src/aof.c
+++ b/src/aof.c
@@ -1212,12 +1212,13 @@ int rewriteStreamObject(rio *r, robj *key, robj *o) {
/* Use the XADD MAXLEN 0 trick to generate an empty stream if
* the key we are serializing is an empty string, which is possible
* for the Stream type. */
+ id.ms = 0; id.seq = 1;
if (rioWriteBulkCount(r,'*',7) == 0) return 0;
if (rioWriteBulkString(r,"XADD",4) == 0) return 0;
if (rioWriteBulkObject(r,key) == 0) return 0;
if (rioWriteBulkString(r,"MAXLEN",6) == 0) return 0;
if (rioWriteBulkString(r,"0",1) == 0) return 0;
- if (rioWriteBulkStreamID(r,&s->last_id) == 0) return 0;
+ if (rioWriteBulkStreamID(r,&id) == 0) return 0;
if (rioWriteBulkString(r,"x",1) == 0) return 0;
if (rioWriteBulkString(r,"y",1) == 0) return 0;
}
diff --git a/tests/unit/type/stream-cgroups.tcl b/tests/unit/type/stream-cgroups.tcl
index 072ed14d6..6b9a4a9cd 100644
--- a/tests/unit/type/stream-cgroups.tcl
+++ b/tests/unit/type/stream-cgroups.tcl
@@ -311,4 +311,17 @@ start_server {
}
}
}
+
+ start_server {tags {"stream"} overrides {appendonly yes aof-use-rdb-preamble no}} {
+ test {Empty stream with no lastid can be rewrite into AOF correctly} {
+ r XGROUP CREATE mystream group-name $ MKSTREAM
+ assert {[dict get [r xinfo stream mystream] length] == 0}
+ set grpinfo [r xinfo groups mystream]
+ r bgrewriteaof
+ waitForBgrewriteaof r
+ r debug loadaof
+ assert {[dict get [r xinfo stream mystream] length] == 0}
+ assert {[r xinfo groups mystream] == $grpinfo}
+ }
+ }
}