This is an automated email from the ASF dual-hosted git repository.

twice pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git


The following commit(s) were added to refs/heads/unstable by this push:
     new 8206262f6 fix(zset): crash in ZRANDMEMBER for non-existent keys (#2982)
8206262f6 is described below

commit 8206262f676afaa6db540c32ceab022fa066fa8f
Author: weimeng <[email protected]>
AuthorDate: Tue May 13 14:09:53 2025 +0800

    fix(zset): crash in ZRANDMEMBER for non-existent keys (#2982)
    
    Co-authored-by: weimeng <[email protected]>
    Co-authored-by: Twice <[email protected]>
---
 src/types/redis_zset.cc                  | 2 +-
 tests/gocase/unit/type/zset/zset_test.go | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/types/redis_zset.cc b/src/types/redis_zset.cc
index bdc073642..333782b10 100644
--- a/src/types/redis_zset.cc
+++ b/src/types/redis_zset.cc
@@ -884,7 +884,7 @@ rocksdb::Status ZSet::RandMember(engine::Context &ctx, 
const Slice &user_key, in
   std::string ns_key = AppendNamespacePrefix(user_key);
   ZSetMetadata metadata(false);
   rocksdb::Status s = GetMetadata(ctx, ns_key, &metadata);
-  if (!s.ok()) return s.IsNotFound() ? rocksdb::Status::OK() : s;
+  if (!s.ok()) return s;
   if (metadata.size == 0) return rocksdb::Status::OK();
 
   return ExtractRandMemberFromSet<MemberScore>(
diff --git a/tests/gocase/unit/type/zset/zset_test.go 
b/tests/gocase/unit/type/zset/zset_test.go
index 334555992..90a495000 100644
--- a/tests/gocase/unit/type/zset/zset_test.go
+++ b/tests/gocase/unit/type/zset/zset_test.go
@@ -1324,6 +1324,10 @@ func basicTests(t *testing.T, rdb *redis.Client, ctx 
context.Context, enabledRES
                }
                createZset(rdb, ctx, "zset", z)
 
+               // ZRANDMEMBER key_not_exist
+               nilReply := rdb.Do(ctx, "ZRANDMEMBER", "key_not_exist").Val()
+               require.Equal(t, nil, nilReply)
+
                // ZRANDMEMBER zset
                str := rdb.Do(ctx, "ZRANDMEMBER", "zset").Val()
                require.Contains(t, members, str.(string))

Reply via email to