-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: PkPatternMatchDel inconsistent between rediscache and db #2839
Conversation
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configuration File (
|
src/pika_admin.cc
Outdated
if(s_.ok()) { | ||
std::vector<std::string> v; | ||
for (auto key : remove_keys_) { | ||
v.emplace_back(PCacheKeyPrefixK + key); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pkpatternmatchdel 3.5版本里应该是支持指定数据类型的,所以这里直接把所有类型的匹配key删除是否合理。
还有下边记录binlog那里。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pkpatternmatchdel 3.5版本里应该是支持指定数据类型的,所以这里直接把所有类型的匹配key删除是否合理。 还有下边记录binlog那里。
done
76a923f
to
c730b71
Compare
src/pika_admin.cc
Outdated
@@ -3098,15 +3098,68 @@ void PKPatternMatchDelCmd::DoInitial() { | |||
res_.SetRes(CmdRes::kInvalidDbType, kCmdNamePKPatternMatchDel); | |||
return; | |||
} | |||
max_count_ = storage::BATCH_DELETE_LIMIT; | |||
if (argv_.size() > 2) { | |||
if (pstd::string2int(argv_[2].data(), argv_[2].size(), &max_count_) == 0 || max_count_ < 1 || max_count_ > storage::BATCH_DELETE_LIMIT) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
argv_[2]是类型,这里应该是argv[3],上边的if条件也得是>3
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
argv_[2]是类型,这里应该是argv[3],上边的if条件也得是>3
done
src/storage/src/redis_hashes.cc
Outdated
key = iter->key().ToString(); | ||
meta_value = iter->value().ToString(); | ||
ParsedHashesMetaValue parsed_hashes_meta_value(&meta_value); | ||
if (!parsed_hashes_meta_value.IsStale() && (parsed_hashes_meta_value.count() != 0) && | ||
(StringMatch(pattern.data(), pattern.size(), key.data(), key.size(), 0) != 0)) { | ||
parsed_hashes_meta_value.InitialMetaValue(); | ||
batch.Put(handles_[0], key, meta_value); | ||
remove_keys->push_back(key.data()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
key已经是string类型了吧?直接push_back(key)就可以了。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
key已经是string类型了吧?直接push_back(key)就可以了。
done
Status s; | ||
rocksdb::WriteBatch batch; | ||
rocksdb::Iterator* iter = db_->NewIterator(iterator_options, handles_[0]); | ||
DEFER { | ||
delete iter; | ||
}; | ||
iter->SeekToFirst(); | ||
while (iter->Valid()) { | ||
while (iter->Valid() && static_cast<int64_t>(batch.Count()) < max_count) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
182行的逻辑,里边会执行batch.clear,所以用batch.Count()去比不准确。要不你就跟4.0里的一样,把182 if里的删掉,统一在外边调用一次batch.put。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
182行的逻辑,里边会执行batch.clear,所以用batch.Count()去比不准确。要不你就跟4.0里的一样,把182 if里的删掉,统一在外边调用一次batch.put。
done
src/storage/src/storage.cc
Outdated
Status s; | ||
int64_t tmp_ret = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
3.5里不需要这个tmp_ret,因为他只会删一个数据类型的,这个是个switch,不是for循环,直接把max_count传进去就行。
src/storage/tests/keys_test.cc
Outdated
@@ -2461,6 +2460,7 @@ for (const auto& kv : kvs) { | |||
|
|||
// //=============================== List =============================== | |||
|
|||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
多出来的空行需要删掉。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
多出来的空行需要删掉。
done
src/storage/src/redis_strings.cc
Outdated
batch.Clear(); | ||
} else { | ||
remove_keys->erase(remove_keys->end() - batch.Count(), remove_keys->end()); | ||
} | ||
} | ||
delete iter; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
移除多余的 delete iter;
src/storage/src/redis_sets.cc
Outdated
batch.Clear(); | ||
} else { | ||
remove_keys->erase(remove_keys->end() - batch.Count(), remove_keys->end()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
待确认语法语义是否OK
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
待确认语法语义是否OK
这里因为只有一种数据类型 batch不可能出现 一部分失败的情况 所以暂时使用clear
src/storage/src/storage.cc
Outdated
break; | ||
case DataType::kSets: | ||
s = sets_db_->PKPatternMatchDel(pattern, ret); | ||
s = sets_db_->PKPatternMatchDelWithRemoveKeys(DataType::kSets, pattern, ret,remove_keys, max_count - *ret); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
加空格
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
加空格
done
8f09837
to
5f22ac2
Compare
src/storage/src/redis_strings.cc
Outdated
batch.Clear(); | ||
} else { | ||
remove_keys->clear(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove_keys.erase(remove_keys.end() - batchNum, remove_keys.end());
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove_keys.erase(remove_keys.end() - batchNum, remove_keys.end());
done
delete iter; | ||
return s; | ||
} | ||
remove_keys->push_back(key); | ||
} | ||
iter->Next(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
auto batchNum = batch.Count();
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
auto batchNum = batch.Count();
done
…omFoundation#2839) * fix: PkPatternMatchDel inconsistent between rediscache and db --------- Co-authored-by: haiyang426 <51285701+haiyang426@users.noreply.github.com> Co-authored-by: chejinge <chejinge@360.cn>
No description provided.