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))