From 7e76bb0e1054da0ff88077dc7ec54bb7ab62ac57 Mon Sep 17 00:00:00 2001 From: chejinge Date: Thu, 27 Jun 2024 16:22:21 +0800 Subject: [PATCH 1/2] fix:zverank return error --- src/storage/src/redis_zsets.cc | 2 +- tests/integration/zset_test.go | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/storage/src/redis_zsets.cc b/src/storage/src/redis_zsets.cc index cdbf866c46..632f7fb80a 100644 --- a/src/storage/src/redis_zsets.cc +++ b/src/storage/src/redis_zsets.cc @@ -1129,7 +1129,7 @@ Status Redis::ZRevrank(const Slice& key, const Slice& member, int32_t* rank) { ZSetsScoreKey zsets_score_key(key, version, std::numeric_limits::max(), Slice()); KeyStatisticsDurationGuard guard(this, DataType::kZSets, key.ToString()); rocksdb::Iterator* iter = db_->NewIterator(read_options, handles_[kZsetsScoreCF]); - for (iter->SeekForPrev(zsets_score_key.Encode()); iter->Valid() && left >= 0; iter->Prev(), --left, ++rev_index) { + for (iter->SeekForPrev(zsets_score_key.Encode()); iter->Valid() && left > 0; iter->Prev(), --left, ++rev_index) { ParsedZSetsScoreKey parsed_zsets_score_key(iter->key()); if (parsed_zsets_score_key.member().compare(member) == 0) { found = true; diff --git a/tests/integration/zset_test.go b/tests/integration/zset_test.go index effb27401d..d67c859880 100644 --- a/tests/integration/zset_test.go +++ b/tests/integration/zset_test.go @@ -1795,6 +1795,42 @@ var _ = Describe("Zset Commands", func() { }})) }) + It("should ZREVRANK", func() { + err := client.ZAdd(ctx, "key", redis.Z{Score: 100, Member: "a1b2C3d4E5"}).Err() + Expect(err).NotTo(HaveOccurred()) + + err = client.Del(ctx, "key").Err() + Expect(err).NotTo(HaveOccurred()) + + err = client.ZAdd(ctx, "key", redis.Z{Score: 101, Member: "F6g7H8i9J0"}).Err() + Expect(err).NotTo(HaveOccurred()) + + rank, err := client.ZRank(ctx, "key", "a1b2C3d4E5").Result() + Expect(err).To(Equal(redis.Nil)) + Expect(rank).To(Equal(int64(0))) // Not actually checked since err is redis.Nil + + revrank, err := client.ZRevRank(ctx, "key", "a1b2C3d4E5").Result() + Expect(err).To(Equal(redis.Nil)) + Expect(revrank).To(Equal(int64(0))) // Not actually checked since err is redis.Nil + + // Add the correct member to test ZRevRank properly + err = client.ZAdd(ctx, "key", redis.Z{Score: 100, Member: "a1b2C3d4E5"}).Err() + Expect(err).NotTo(HaveOccurred()) + + revrank, err = client.ZRevRank(ctx, "key", "a1b2C3d4E5").Result() + Expect(err).NotTo(HaveOccurred()) + Expect(revrank).To(Equal(int64(1))) + + scanResult, cursor, err := client.ZScan(ctx, "key", 0, "", 10).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(cursor).To(Equal(uint64(0))) + Expect(scanResult).To(Equal([]string{"F6g7H8i9J0", "101"})) + + card, err := client.ZCard(ctx, "key").Result() + Expect(err).NotTo(HaveOccurred()) + Expect(card).To(Equal(int64(2))) // After adding a1b2C3d4E5 back, the count should be 2 + }) + //It("should ZRandMember", func() { // err := client.ZAdd(ctx, "zset", redis.Z{Score: 1, Member: "one"}).Err() // Expect(err).NotTo(HaveOccurred()) From c0851f9a993defce1512309b184ff00ac607eaac Mon Sep 17 00:00:00 2001 From: chejinge Date: Thu, 27 Jun 2024 16:42:35 +0800 Subject: [PATCH 2/2] fix:zverank return error --- tests/integration/zset_test.go | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/tests/integration/zset_test.go b/tests/integration/zset_test.go index d67c859880..c742287cae 100644 --- a/tests/integration/zset_test.go +++ b/tests/integration/zset_test.go @@ -1807,19 +1807,11 @@ var _ = Describe("Zset Commands", func() { rank, err := client.ZRank(ctx, "key", "a1b2C3d4E5").Result() Expect(err).To(Equal(redis.Nil)) - Expect(rank).To(Equal(int64(0))) // Not actually checked since err is redis.Nil + Expect(rank).To(Equal(int64(0))) revrank, err := client.ZRevRank(ctx, "key", "a1b2C3d4E5").Result() Expect(err).To(Equal(redis.Nil)) - Expect(revrank).To(Equal(int64(0))) // Not actually checked since err is redis.Nil - - // Add the correct member to test ZRevRank properly - err = client.ZAdd(ctx, "key", redis.Z{Score: 100, Member: "a1b2C3d4E5"}).Err() - Expect(err).NotTo(HaveOccurred()) - - revrank, err = client.ZRevRank(ctx, "key", "a1b2C3d4E5").Result() - Expect(err).NotTo(HaveOccurred()) - Expect(revrank).To(Equal(int64(1))) + Expect(revrank).To(Equal(int64(0))) scanResult, cursor, err := client.ZScan(ctx, "key", 0, "", 10).Result() Expect(err).NotTo(HaveOccurred()) @@ -1828,7 +1820,7 @@ var _ = Describe("Zset Commands", func() { card, err := client.ZCard(ctx, "key").Result() Expect(err).NotTo(HaveOccurred()) - Expect(card).To(Equal(int64(2))) // After adding a1b2C3d4E5 back, the count should be 2 + Expect(card).To(Equal(int64(1))) }) //It("should ZRandMember", func() {