• C
    wait pending memtable writes on file ingestion or compact range (#6113) · a8445912
    Connor 提交于
    Summary:
    **Summary:**
    This PR fixes two unordered_write related issues:
    - ingestion job may skip the necessary memtable flush https://github.com/facebook/rocksdb/issues/6026
    - compact range may cause memtable is flushed before pending unordered write finished
        1. `CompactRange` triggers memtable flush but doesn't wait for pending-writes
        2.  there are some pending writes but memtable is already flushed
        3.  the memtable related WAL is removed( note that the pending-writes were recorded in that WAL).
        4.  pending-writes write to newer created memtable
        5. there is a restart
        6. missing the previous pending-writes because WAL is removed but they aren't included in SST.
    
    **How to solve:**
    - Wait pending memtable writes before ingestion job check memtable key range
    - Wait pending memtable writes before flush memtable.
    **Note that: `CompactRange` calls `RangesOverlapWithMemtables` too without waiting for pending waits, but I'm not sure whether it affects the correctness.**
    
    **Test Plan:**
    make check
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/6113
    
    Differential Revision: D18895674
    
    Pulled By: maysamyabandeh
    
    fbshipit-source-id: da22b4476fc7e06c176020e7cc171eb78189ecaf
    a8445912
error_handler_test.cc 20.7 KB