mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-11 10:25:47 +02:00
fix: support loading of 7.x streams correctly (#4281)
Now rdb_load supports RDB_TYPE_STREAM_LISTPACKS, RDB_TYPE_STREAM_LISTPACKS_2 and RDB_TYPE_STREAM_LISTPACKS_3 formats. rdb_save still saves with RDB_TYPE_STREAM_LISTPACKS format - we want to release the DF version that can load everything first, and then update the replicaion format in the next versions. Also, update rdb_test.cc Signed-off-by: Roman Gershman <roman@dragonflydb.io>
This commit is contained in:
parent
4428480a4e
commit
f428dc31be
6 changed files with 133 additions and 58 deletions
|
@ -36,6 +36,8 @@ ABSL_DECLARE_FLAG(dfly::CompressionMode, compression_mode);
|
|||
|
||||
namespace dfly {
|
||||
|
||||
static const auto kMatchNil = ArgType(RespExpr::NIL);
|
||||
|
||||
class RdbTest : public BaseFamilyTest {
|
||||
protected:
|
||||
void SetUp();
|
||||
|
@ -136,13 +138,20 @@ TEST_F(RdbTest, Stream) {
|
|||
|
||||
auto resp = Run({"type", "key:10"});
|
||||
EXPECT_EQ(resp, "stream");
|
||||
|
||||
resp = Run({"xinfo", "groups", "key:0"});
|
||||
EXPECT_THAT(resp, ArrLen(2));
|
||||
EXPECT_THAT(resp.GetVec()[0],
|
||||
RespElementsAre("name", "g1", "consumers", 0, "pending", 0, "last-delivered-id",
|
||||
"1655444851524-3", "entries-read", 128, "lag", 0));
|
||||
EXPECT_THAT(resp.GetVec()[1],
|
||||
RespElementsAre("name", "g2", "consumers", 1, "pending", 0, "last-delivered-id",
|
||||
"1655444851523-1", "entries-read", kMatchNil, "lag", kMatchNil));
|
||||
|
||||
resp = Run({"xinfo", "groups", "key:1"}); // test dereferences array of size 1
|
||||
EXPECT_THAT(resp, RespArray(ElementsAre("name", "g2", "consumers", IntArg(0), "pending",
|
||||
IntArg(0), "last-delivered-id", "1655444851523-1",
|
||||
"entries-read", IntArg(0), "lag", IntArg(0))));
|
||||
EXPECT_THAT(resp, RespElementsAre("name", "g2", "consumers", IntArg(0), "pending", IntArg(0),
|
||||
"last-delivered-id", "1655444851523-1", "entries-read",
|
||||
kMatchNil, "lag", kMatchNil));
|
||||
|
||||
resp = Run({"xinfo", "groups", "key:2"});
|
||||
EXPECT_THAT(resp, ArrLen(0));
|
||||
|
@ -629,14 +638,30 @@ TEST_F(RdbTest, LoadHugeList) {
|
|||
// Tests loading a huge stream, where the stream is loaded in multiple partial
|
||||
// reads.
|
||||
TEST_F(RdbTest, LoadHugeStream) {
|
||||
TEST_current_time_ms = 1000;
|
||||
|
||||
// Add a huge stream (test:0) with 2000 entries, and 4 1k elements per entry
|
||||
// (note must be more than 512*4kb elements to test partial reads).
|
||||
for (int i = 0; i != 2000; i++) {
|
||||
// We add 2000 entries to the stream to ensure that the stream, because populate strream
|
||||
// adds only a single entry at a time, with multiple elements in it.
|
||||
for (unsigned i = 0; i < 2000; i++) {
|
||||
Run({"debug", "populate", "1", "test", "2000", "rand", "type", "stream", "elements", "4"});
|
||||
}
|
||||
ASSERT_EQ(2000, CheckedInt({"xlen", "test:0"}));
|
||||
Run({"XGROUP", "CREATE", "test:0", "grp1", "0"});
|
||||
Run({"XGROUP", "CREATE", "test:0", "grp2", "0"});
|
||||
Run({"XREADGROUP", "GROUP", "grp1", "Alice", "COUNT", "1", "STREAMS", "test:0", ">"});
|
||||
Run({"XREADGROUP", "GROUP", "grp2", "Alice", "COUNT", "1", "STREAMS", "test:0", ">"});
|
||||
|
||||
RespExpr resp = Run({"save", "df"});
|
||||
auto resp = Run({"xinfo", "stream", "test:0"});
|
||||
|
||||
EXPECT_THAT(
|
||||
resp, RespElementsAre("length", 2000, "radix-tree-keys", 2000, "radix-tree-nodes", 2010,
|
||||
"last-generated-id", "1000-1999", "max-deleted-entry-id", "0-0",
|
||||
"entries-added", 2000, "recorded-first-entry-id", "1000-0", "groups", 2,
|
||||
"first-entry", ArrLen(2), "last-entry", ArrLen(2)));
|
||||
|
||||
resp = Run({"save", "df"});
|
||||
ASSERT_EQ(resp, "OK");
|
||||
|
||||
auto save_info = service_->server_family().GetLastSaveInfo();
|
||||
|
@ -644,18 +669,29 @@ TEST_F(RdbTest, LoadHugeStream) {
|
|||
ASSERT_EQ(resp, "OK");
|
||||
|
||||
ASSERT_EQ(2000, CheckedInt({"xlen", "test:0"}));
|
||||
resp = Run({"xinfo", "stream", "test:0"});
|
||||
EXPECT_THAT(
|
||||
resp, RespElementsAre("length", 2000, "radix-tree-keys", 2000, "radix-tree-nodes", 2010,
|
||||
"last-generated-id", "1000-1999", "max-deleted-entry-id", "0-0",
|
||||
"entries-added", 2000, "recorded-first-entry-id", "1000-0", "groups", 2,
|
||||
"first-entry", ArrLen(2), "last-entry", ArrLen(2)));
|
||||
resp = Run({"xinfo", "groups", "test:0"});
|
||||
EXPECT_THAT(resp, RespElementsAre(RespElementsAre("name", "grp1", "consumers", 1, "pending", 1,
|
||||
"last-delivered-id", "1000-0", "entries-read",
|
||||
1, "lag", 1999),
|
||||
_));
|
||||
}
|
||||
|
||||
TEST_F(RdbTest, LoadStream2) {
|
||||
auto ec = LoadRdb("RDB_TYPE_STREAM_LISTPACKS_2.rdb");
|
||||
ASSERT_FALSE(ec) << ec.message();
|
||||
auto res = Run({"XINFO", "STREAM", "mystream"});
|
||||
ASSERT_THAT(
|
||||
res.GetVec(),
|
||||
ElementsAre("length", IntArg(2), "radix-tree-keys", IntArg(1), "radix-tree-nodes", IntArg(2),
|
||||
"last-generated-id", "1732613360686-0", "max-deleted-entry-id", "0-0",
|
||||
"entries-added", IntArg(0), "recorded-first-entry-id", "0-0", "groups", IntArg(1),
|
||||
"first-entry", ArgType(RespExpr::ARRAY), "last-entry", ArgType(RespExpr::ARRAY)));
|
||||
ASSERT_THAT(res.GetVec(),
|
||||
ElementsAre("length", 2, "radix-tree-keys", 1, "radix-tree-nodes", 2,
|
||||
"last-generated-id", "1732613360686-0", "max-deleted-entry-id", "0-0",
|
||||
"entries-added", 2, "recorded-first-entry-id", "1732613352350-0",
|
||||
"groups", 1, "first-entry", RespElementsAre("1732613352350-0", _),
|
||||
"last-entry", RespElementsAre("1732613360686-0", _)));
|
||||
}
|
||||
|
||||
TEST_F(RdbTest, LoadStream3) {
|
||||
|
@ -664,10 +700,10 @@ TEST_F(RdbTest, LoadStream3) {
|
|||
auto res = Run({"XINFO", "STREAM", "mystream"});
|
||||
ASSERT_THAT(
|
||||
res.GetVec(),
|
||||
ElementsAre("length", IntArg(2), "radix-tree-keys", IntArg(1), "radix-tree-nodes", IntArg(2),
|
||||
"last-generated-id", "1732614679549-0", "max-deleted-entry-id", "0-0",
|
||||
"entries-added", IntArg(0), "recorded-first-entry-id", "0-0", "groups", IntArg(1),
|
||||
"first-entry", ArgType(RespExpr::ARRAY), "last-entry", ArgType(RespExpr::ARRAY)));
|
||||
ElementsAre("length", 2, "radix-tree-keys", 1, "radix-tree-nodes", 2, "last-generated-id",
|
||||
"1732614679549-0", "max-deleted-entry-id", "0-0", "entries-added", 2,
|
||||
"recorded-first-entry-id", "1732614676541-0", "groups", 1, "first-entry",
|
||||
ArgType(RespExpr::ARRAY), "last-entry", ArgType(RespExpr::ARRAY)));
|
||||
}
|
||||
|
||||
TEST_F(RdbTest, SnapshotTooBig) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue