• A
    skip CompactRange flush based on memtable contents · 3ae00472
    Andrew Kryczka 提交于
    Summary:
    CompactRange has a call to Flush because we guarantee that, at the time it's called, all existing keys in the range will be pushed through the user's compaction filter. However, previously the flush was done blindly, so it'd happen even if the memtable does not contain keys in the range specified by the user. This caused unnecessarily many L0 files to be created, leading to write stalls in some cases. This PR checks the memtable's contents, and decides to flush only if it overlaps with `CompactRange`'s range.
    
    - Move the memtable overlap check logic from `ExternalSstFileIngestionJob` to `ColumnFamilyData::RangesOverlapWithMemtables`
    - Reuse the above logic in `CompactRange` and skip flushing if no overlap
    Closes https://github.com/facebook/rocksdb/pull/3520
    
    Differential Revision: D7018897
    
    Pulled By: ajkr
    
    fbshipit-source-id: a3c6b1cfae56687b49dd89ccac7c948e53545934
    3ae00472
column_family.cc 49.8 KB