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

hulk 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 19258a9e Improve the style of zdiff (#2027)
19258a9e is described below

commit 19258a9ecb86bf14d6b47c5d1ae00bb50280c1d5
Author: mwish <[email protected]>
AuthorDate: Thu Jan 18 10:00:14 2024 +0800

    Improve the style of zdiff (#2027)
---
 src/commands/cmd_zset.cc |  1 +
 src/types/redis_zset.cc  | 21 +++++++++++----------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/commands/cmd_zset.cc b/src/commands/cmd_zset.cc
index 05cdde2e..a1380265 100644
--- a/src/commands/cmd_zset.cc
+++ b/src/commands/cmd_zset.cc
@@ -1429,6 +1429,7 @@ class CommandZDiff : public Commander {
     if (numkeys_ > args.size() - 2) return {Status::RedisParseErr, 
errInvalidSyntax};
 
     size_t j = 0;
+    keys_.reserve(numkeys_);
     while (j < numkeys_) {
       keys_.emplace_back(args[j + 2]);
       j++;
diff --git a/src/types/redis_zset.cc b/src/types/redis_zset.cc
index 7532a5f3..328182b5 100644
--- a/src/types/redis_zset.cc
+++ b/src/types/redis_zset.cc
@@ -179,7 +179,7 @@ rocksdb::Status ZSet::Pop(const Slice &user_key, int count, 
bool min, MemberScor
 
   auto iter = util::UniqueIterator(storage_, read_options, score_cf_handle_);
   iter->Seek(start_key);
-  // see comment in rangebyscore()
+  // see comment in RangeByScore()
   if (!min && (!iter->Valid() || !iter->key().starts_with(prefix_key))) {
     iter->SeekForPrev(start_key);
   }
@@ -249,7 +249,7 @@ rocksdb::Status ZSet::RangeByRank(const Slice &user_key, 
const RangeRankSpec &sp
   auto batch = storage_->GetWriteBatchBase();
   auto iter = util::UniqueIterator(storage_, read_options, score_cf_handle_);
   iter->Seek(start_key);
-  // see comment in rangebyscore()
+  // see comment in RangeByScore()
   if (spec.reversed && (!iter->Valid() || 
!iter->key().starts_with(prefix_key))) {
     iter->SeekForPrev(start_key);
   }
@@ -583,7 +583,7 @@ rocksdb::Status ZSet::Rank(const Slice &user_key, const 
Slice &member, bool reve
 
   auto iter = util::UniqueIterator(storage_, read_options, score_cf_handle_);
   iter->Seek(start_key);
-  // see comment in rangebyscore()
+  // see comment in RangeByScore()
   if (reversed && (!iter->Valid() || !iter->key().starts_with(prefix_key))) {
     iter->SeekForPrev(start_key);
   }
@@ -716,7 +716,7 @@ rocksdb::Status ZSet::InterCard(const 
std::vector<std::string> &user_keys, uint6
     MemberScores mscores;
     auto s = RangeByScore(user_key, spec, &mscores, nullptr);
     if (!s.ok() || mscores.empty()) return s;
-    mscores_list.emplace_back(mscores);
+    mscores_list.emplace_back(std::move(mscores));
   }
   std::sort(mscores_list.begin(), mscores_list.end(),
             [](const MemberScores &v1, const MemberScores &v2) { return 
v1.size() < v2.size(); });
@@ -935,23 +935,24 @@ rocksdb::Status ZSet::Diff(const std::vector<Slice> 
&keys, MemberScores *members
   members->clear();
   MemberScores source_member_scores;
   RangeScoreSpec spec;
-  uint64_t size = 0;
-  auto s = RangeByScore(keys[0], spec, &source_member_scores, &size);
+  uint64_t first_element_size = 0;
+  auto s = RangeByScore(keys[0], spec, &source_member_scores, 
&first_element_size);
   if (!s.ok()) return s;
 
-  if (size == 0) {
+  if (first_element_size == 0) {
     return rocksdb::Status::OK();
   }
 
-  std::map<std::string, bool> exclude_members;
+  std::set<std::string> exclude_members;
   MemberScores target_member_scores;
   for (size_t i = 1; i < keys.size(); i++) {
     uint64_t size = 0;
     s = RangeByScore(keys[i], spec, &target_member_scores, &size);
     if (!s.ok()) return s;
-    for (const auto &member_score : target_member_scores) {
-      exclude_members[member_score.member] = true;
+    for (auto &member_score : target_member_scores) {
+      exclude_members.emplace(std::move(member_score.member));
     }
+    target_member_scores.clear();
   }
   for (const auto &member_score : source_member_scores) {
     if (exclude_members.find(member_score.member) == exclude_members.end()) {

Reply via email to