-
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
Optimize the prefix performance of RocksDB iterator after delete range #5525
Conversation
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.
Good job. Thanks for the contribution.
src/kvstore/RocksEngine.h
Outdated
rocksdb::Slice prefix_; | ||
// temporary key to make sure data_ of iterateUpperBound_ valid during its lifetime | ||
std::string iterateUpperBoundKey_; |
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.
Since it's temporary, I prefer keeping its lifetime temp as well, that is, not setting as protected/private variable.
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.
iterateUpperBoundKey_ is not really temporary. This string should be valid during the whole lifetime of this iterator. Otherwise, if the string got destroyed before iterator, the iterate_upper_bound of rocksdb::ReadOptions will become invalid, which will then result in crash.
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.
then the field iterateUpperBound_
is no needed, you could construct rocksdb::Slice
from upperBoundKey_ every time when needed. Since rocksdb::Slice is an string view, and really lightweight.
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.
updated. We passed a pointer to ReadOptions and we should make sure the pointer valid before the iterator is destructed, so the Slice also should not be a local temporary variable.
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.
Good job, thanks for contribution.
src/kvstore/RocksEngine.h
Outdated
rocksdb::Slice prefix_; | ||
// temporary key to make sure data_ of iterateUpperBound_ valid during its lifetime | ||
std::string iterateUpperBoundKey_; |
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.
then the field iterateUpperBound_
is no needed, you could construct rocksdb::Slice
from upperBoundKey_ every time when needed. Since rocksdb::Slice is an string view, and really lightweight.
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.
Good job
What type of PR is this?
What problem(s) does this PR solve?
Issue(s) number:
#5524
Description:
How do you solve it?
Special notes for your reviewer, ex. impact of this fix, design document, etc:
Checklist:
Tests:
Affects:
Release notes:
Please confirm whether to be reflected in release notes and how to describe: