diff --git a/db/dbformat.cc b/db/dbformat.cc index e53d16dc1bc8d9ad81420630b36e90333373c586..baeb868027e7cd37120618e3313c3981e0a43ac6 100644 --- a/db/dbformat.cc +++ b/db/dbformat.cc @@ -127,26 +127,6 @@ void InternalKeyComparator::FindShortSuccessor(std::string* key) const { } } -const char* InternalFilterPolicy::Name() const { - return user_policy_->Name(); -} - -void InternalFilterPolicy::CreateFilter(const Slice* keys, int n, - std::string* dst) const { - // We rely on the fact that the code in table.cc does not mind us - // adjusting keys[]. - Slice* mkey = const_cast(keys); - for (int i = 0; i < n; i++) { - mkey[i] = ExtractUserKey(keys[i]); - // TODO(sanjay): Suppress dups? - } - user_policy_->CreateFilter(keys, n, dst); -} - -bool InternalFilterPolicy::KeyMayMatch(const Slice& key, const Slice& f) const { - return user_policy_->KeyMayMatch(ExtractUserKey(key), f); -} - LookupKey::LookupKey(const Slice& user_key, SequenceNumber s) { size_t usize = user_key.size(); size_t needed = usize + 13; // A conservative estimate diff --git a/db/dbformat.h b/db/dbformat.h index 4dab5f196bfb9c5bc6996441ea26e79be173c6db..eb5d8ed534b97bc482d118cc9017acb40793543a 100644 --- a/db/dbformat.h +++ b/db/dbformat.h @@ -124,19 +124,6 @@ class InternalKeyComparator : public Comparator { int Compare(const ParsedInternalKey& a, const ParsedInternalKey& b) const; }; -// Filter policy wrapper that converts from internal keys to user keys -class InternalFilterPolicy : public FilterPolicy { - private: - std::shared_ptr shared_ptr_; - const FilterPolicy* const user_policy_; - public: - explicit InternalFilterPolicy(std::shared_ptr p) - : shared_ptr_(p), user_policy_(p.get()) {} - virtual const char* Name() const; - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const; - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const; -}; - // Modules in this directory should keep internal keys wrapped inside // the following class instead of plain strings so that we do not // incorrectly use string comparisons instead of an InternalKeyComparator. diff --git a/table/block_based_table_builder.cc b/table/block_based_table_builder.cc index 37b6f86fc83010683f5d2d6532a2b5bc4990aaf6..0e5ea0a69ceb4e5792dfde316f0516707cb79f99 100644 --- a/table/block_based_table_builder.cc +++ b/table/block_based_table_builder.cc @@ -492,7 +492,7 @@ void BlockBasedTableBuilder::Add(const Slice& key, const Slice& value) { } if (r->filter_block != nullptr) { - r->filter_block->AddKey(key); + r->filter_block->AddKey(ExtractUserKey(key)); } r->last_key.assign(key.data(), key.size()); diff --git a/table/block_based_table_factory.cc b/table/block_based_table_factory.cc index 0f7863e8d3eb1e21e47d718ff69d95d0001c94b9..de30fb383eb5722ca9910f2532e5ba51c66a7619 100644 --- a/table/block_based_table_factory.cc +++ b/table/block_based_table_factory.cc @@ -38,10 +38,6 @@ BlockBasedTableFactory::BlockBasedTableFactory( table_options_.block_size_deviation > 100) { table_options_.block_size_deviation = 0; } - if (table_options_.filter_policy) { - auto* p = new InternalFilterPolicy(table_options_.filter_policy); - table_options_.filter_policy.reset(p); - } } Status BlockBasedTableFactory::NewTableReader( diff --git a/table/block_based_table_reader.cc b/table/block_based_table_reader.cc index 3c0ef527e2859cc6ab61d2ceb06c7676702acc4c..0be38a1dc33bf93b24312f67c9811c6e3ac1ddd9 100644 --- a/table/block_based_table_reader.cc +++ b/table/block_based_table_reader.cc @@ -1067,9 +1067,8 @@ bool BlockBasedTable::PrefixMayMatch(const Slice& internal_key) { s = handle.DecodeFrom(&handle_value); assert(s.ok()); auto filter_entry = GetFilter(true /* no io */); - may_match = - filter_entry.value == nullptr || - filter_entry.value->PrefixMayMatch(handle.offset(), internal_prefix); + may_match = filter_entry.value == nullptr || + filter_entry.value->PrefixMayMatch(handle.offset(), prefix); filter_entry.Release(rep_->table_options.block_cache.get()); } @@ -1105,9 +1104,8 @@ Status BlockBasedTable::Get( BlockHandle handle; bool may_not_exist_in_filter = - filter != nullptr && - handle.DecodeFrom(&handle_value).ok() && - !filter->KeyMayMatch(handle.offset(), key); + filter != nullptr && handle.DecodeFrom(&handle_value).ok() && + !filter->KeyMayMatch(handle.offset(), ExtractUserKey(key)); if (may_not_exist_in_filter) { // Not found diff --git a/table/filter_block.cc b/table/filter_block.cc index 8366db268f12d7986324fec1afc28ccd685a36bc..6b4ff1c10da9dd511042ea7659dc7acf315e7894 100644 --- a/table/filter_block.cc +++ b/table/filter_block.cc @@ -71,20 +71,14 @@ void FilterBlockBuilder::AddKey(const Slice& key) { } // add prefix to filter if needed - if (prefix_extractor_ && prefix_extractor_->InDomain(ExtractUserKey(key))) { - // If prefix_extractor_, this filter_block layer assumes we only - // operate on internal keys. - Slice user_key = ExtractUserKey(key); + if (prefix_extractor_ && prefix_extractor_->InDomain(key)) { // this assumes prefix(prefix(key)) == prefix(key), as the last // entry in entries_ may be either a key or prefix, and we use // prefix(last entry) to get the prefix of the last key. - if (prev.size() == 0 || - !SamePrefix(user_key, ExtractUserKey(prev))) { - Slice prefix = prefix_extractor_->Transform(user_key); - InternalKey internal_prefix_tmp(prefix, 0, kTypeValue); - Slice internal_prefix = internal_prefix_tmp.Encode(); + if (prev.size() == 0 || !SamePrefix(key, prev)) { + Slice prefix = prefix_extractor_->Transform(key); start_.push_back(entries_.size()); - entries_.append(internal_prefix.data(), internal_prefix.size()); + entries_.append(prefix.data(), prefix.size()); } } }