From a83c9ce3da06bb73d50e7abb2d3f75904de70653 Mon Sep 17 00:00:00 2001 From: Axlgrep Date: Thu, 24 May 2018 09:56:20 +0800 Subject: [PATCH] bugfix srandmember acts differently with redis (#275) * v2.3.4 * bugfix srandmember acts differently with redis --- include/pika_set.h | 2 ++ src/pika_set.cc | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/pika_set.h b/include/pika_set.h index 5682e247..03a4147c 100644 --- a/include/pika_set.h +++ b/include/pika_set.h @@ -156,9 +156,11 @@ public: private: std::string key_; int64_t count_; + bool reply_arr; virtual void DoInitial(PikaCmdArgsType &argvs, const CmdInfo* const ptr_info); virtual void Clear() { count_ = 1; + reply_arr = false; } }; diff --git a/src/pika_set.cc b/src/pika_set.cc index 75a32726..5d6dff17 100644 --- a/src/pika_set.cc +++ b/src/pika_set.cc @@ -408,10 +408,12 @@ void SRandmemberCmd::DoInitial(PikaCmdArgsType &argv, const CmdInfo* const ptr_i if (argv.size() > 3) { res_.SetRes(CmdRes::kWrongNum, kCmdNameSRandmember); return; - } else if (argv.size() < 3) { - return; - } else if (!slash::string2l(argv[2].data(), argv[2].size(), &count_)) { - res_.SetRes(CmdRes::kInvalidInt); + } else if (argv.size() == 3) { + if (!slash::string2l(argv[2].data(), argv[2].size(), &count_)) { + res_.SetRes(CmdRes::kInvalidInt); + } else { + reply_arr = true;; + } } return; } @@ -420,7 +422,7 @@ void SRandmemberCmd::Do() { std::vector members; nemo::Status s = g_pika_server->db()->SRandMember(key_, members, count_); if (s.ok() || s.IsNotFound()) { - if (members.size() == 1) { + if (!reply_arr) { res_.AppendStringLen(members[0].size()); res_.AppendContent(members[0]); } else { -- GitLab