diff --git a/db/range_del_aggregator.cc b/db/range_del_aggregator.cc index 68216fc92..8f86528ec 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 712ae4583..e593807d5 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 {