Reduce IndexBlockIter size (#4358)

Summary:
With #3983 the size of IndexBlockIter was increased. This had resulted in a regression on P50 latencies in one of our benchmarks. The patch reduces IndexBlockIter size be eliminating active_comparator_ field from the class.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4358

Differential Revision: D9781737

Pulled By: maysamyabandeh

fbshipit-source-id: 71e2b28d90ff0813db9e04b737ae73e185583c52
This commit is contained in:
Maysam Yabandeh 2018-09-12 09:42:31 -07:00 committed by Facebook Github Bot
parent ca92fc71a4
commit 9ea9007b50
2 changed files with 7 additions and 9 deletions

View File

@ -356,10 +356,10 @@ void IndexBlockIter::Seek(const Slice& target) {
ok = PrefixSeek(target, &index); ok = PrefixSeek(target, &index);
} else if (value_delta_encoded_) { } else if (value_delta_encoded_) {
ok = BinarySeek<DecodeKeyV4>(seek_key, 0, num_restarts_ - 1, &index, ok = BinarySeek<DecodeKeyV4>(seek_key, 0, num_restarts_ - 1, &index,
active_comparator_); comparator_);
} else { } else {
ok = BinarySeek<DecodeKey>(seek_key, 0, num_restarts_ - 1, &index, ok = BinarySeek<DecodeKey>(seek_key, 0, num_restarts_ - 1, &index,
active_comparator_); comparator_);
} }
if (!ok) { if (!ok) {

View File

@ -468,10 +468,10 @@ class IndexBlockIter final : public BlockIter<BlockHandle> {
BlockPrefixIndex* prefix_index, bool key_includes_seq, BlockPrefixIndex* prefix_index, bool key_includes_seq,
bool value_is_full, bool block_contents_pinned, bool value_is_full, bool block_contents_pinned,
DataBlockHashIndex* /*data_block_hash_index*/) { DataBlockHashIndex* /*data_block_hash_index*/) {
InitializeBase(comparator, data, restarts, num_restarts, InitializeBase(key_includes_seq ? comparator : user_comparator, data,
kDisableGlobalSequenceNumber, block_contents_pinned); restarts, num_restarts, kDisableGlobalSequenceNumber,
block_contents_pinned);
key_includes_seq_ = key_includes_seq; key_includes_seq_ = key_includes_seq;
active_comparator_ = key_includes_seq_ ? comparator_ : user_comparator;
key_.SetIsUserKey(!key_includes_seq_); key_.SetIsUserKey(!key_includes_seq_);
prefix_index_ = prefix_index; prefix_index_ = prefix_index;
value_delta_encoded_ = !value_is_full; value_delta_encoded_ = !value_is_full;
@ -517,8 +517,6 @@ class IndexBlockIter final : public BlockIter<BlockHandle> {
// Key is in InternalKey format // Key is in InternalKey format
bool key_includes_seq_; bool key_includes_seq_;
bool value_delta_encoded_; bool value_delta_encoded_;
// key_includes_seq_ ? comparator_ : user_comparator_
const Comparator* active_comparator_;
BlockPrefixIndex* prefix_index_; BlockPrefixIndex* prefix_index_;
// Whether the value is delta encoded. In that case the value is assumed to be // Whether the value is delta encoded. In that case the value is assumed to be
// BlockHandle. The first value in each restart interval is the full encoded // BlockHandle. The first value in each restart interval is the full encoded
@ -535,11 +533,11 @@ class IndexBlockIter final : public BlockIter<BlockHandle> {
inline int CompareBlockKey(uint32_t block_index, const Slice& target); inline int CompareBlockKey(uint32_t block_index, const Slice& target);
inline int Compare(const Slice& a, const Slice& b) const { inline int Compare(const Slice& a, const Slice& b) const {
return active_comparator_->Compare(a, b); return comparator_->Compare(a, b);
} }
inline int Compare(const IterKey& ikey, const Slice& b) const { inline int Compare(const IterKey& ikey, const Slice& b) const {
return active_comparator_->Compare(ikey.GetKey(), b); return comparator_->Compare(ikey.GetKey(), b);
} }
inline bool ParseNextIndexKey(); inline bool ParseNextIndexKey();