• L
    Move the filter readers out of the block cache (#5504) · 3bde41b5
    Levi Tamasi 提交于
    Summary:
    Currently, when the block cache is used for the filter block, it is not
    really the block itself that is stored in the cache but a FilterBlockReader
    object. Since this object is not pure data (it has, for instance, pointers that
    might dangle, including in one case a back pointer to the TableReader), it's not
    really sharable. To avoid the issues around this, the current code erases the
    cache entries when the TableReader is closed (which, BTW, is not sufficient
    since a concurrent TableReader might have picked up the object in the meantime).
    Instead of doing this, the patch moves the FilterBlockReader out of the cache
    altogether, and decouples the filter reader object from the filter block.
    In particular, instead of the TableReader owning, or caching/pinning the
    FilterBlockReader (based on the customer's settings), with the change the
    TableReader unconditionally owns the FilterBlockReader, which in turn
    owns/caches/pins the filter block. This change also enables us to reuse the code
    paths historically used for data blocks for filters as well.
    
    Note:
    Eviction statistics for filter blocks are temporarily broken. We plan to fix this in a
    separate phase.
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/5504
    
    Test Plan: make asan_check
    
    Differential Revision: D16036974
    
    Pulled By: ltamasi
    
    fbshipit-source-id: 770f543c5fb4ed126fd1e04bfd3809cf4ff9c091
    3bde41b5
table_test.cc 155.6 KB