diff --git a/db/range_del_aggregator.cc b/db/range_del_aggregator.cc index 68216fc92fda5e6eaecf17fbf2aa15c27ce84f7f..8f86528ecb21cc35bf5dbb78c7eea07d5c642319 100644 --- a/db/range_del_aggregator.cc +++ b/db/range_del_aggregator.cc @@ -322,8 +322,8 @@ void ReadRangeDelAggregator::AddTombstones( std::move(input_iter), icmp_, smallest, largest))); } -bool ReadRangeDelAggregator::ShouldDelete(const ParsedInternalKey& parsed, - RangeDelPositioningMode mode) { +bool ReadRangeDelAggregator::ShouldDeleteImpl(const ParsedInternalKey& parsed, + RangeDelPositioningMode mode) { return rep_.ShouldDelete(parsed, mode); } diff --git a/db/range_del_aggregator.h b/db/range_del_aggregator.h index 712ae458390a677e23a9ea664a3745d2e91973b8..e593807d54821b8926ee93c7d927d5232b205c96 100644 --- a/db/range_del_aggregator.h +++ b/db/range_del_aggregator.h @@ -349,7 +349,7 @@ class RangeDelAggregator { std::set files_seen_; }; -class ReadRangeDelAggregator : public RangeDelAggregator { +class ReadRangeDelAggregator final : public RangeDelAggregator { public: ReadRangeDelAggregator(const InternalKeyComparator* icmp, SequenceNumber upper_bound) @@ -364,7 +364,12 @@ class ReadRangeDelAggregator : public RangeDelAggregator { const InternalKey* largest = nullptr) override; bool ShouldDelete(const ParsedInternalKey& parsed, - RangeDelPositioningMode mode) override; + RangeDelPositioningMode mode) final override { + if (rep_.IsEmpty()) { + return false; + } + return ShouldDeleteImpl(parsed, mode); + } bool IsRangeOverlapped(const Slice& start, const Slice& end); @@ -374,6 +379,9 @@ class ReadRangeDelAggregator : public RangeDelAggregator { private: StripeRep rep_; + + bool ShouldDeleteImpl(const ParsedInternalKey& parsed, + RangeDelPositioningMode mode); }; class CompactionRangeDelAggregator : public RangeDelAggregator {