mirror of
https://github.com/facebook/rocksdb.git
synced 2026-10-23 08:09:02 +03:00
Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/15321 `MultiGet` with `read_tier = kBlockCacheTier` now returns `Incomplete` for data blocks that are not in the block cache. Before this fix, it read them from disk. **Why it matters:** Callers use `kBlockCacheTier` to prevent disk I/O. `Get` obeyed it, but `MultiGet` did not. **Problem** - Without mmap reads, `MultiGet` sends cache misses to `RetrieveMultipleBlocks`. - That path called `MultiRead` with no `kBlockCacheTier` check. - `RetrieveBlock` (used by `Get`) has the check. **Fix** - `RetrieveMultipleBlocks`: if `read_tier == kBlockCacheTier`, set `Incomplete("no blocking io")` for each block and do no I/O. - `MultiGet`: when a block is `Incomplete`, return that status for the key, the same as `Get`. Before, the key status stayed `OK` with no value. - Release note in `unreleased_history/bug_fixes`. **Tests** - New `DBTest2.MultiGetBlockCacheTierSkipsColdSstData`: `Get` and `MultiGet` both return `Incomplete` for a key whose data block is not in the cache. - `DBBlobBasicTest.MultiGetBlobsFromCache` relied on the bug. Its inline key passed only because `MultiGet` read the data block from disk. The test now loads the block cache first, so it still checks the blob cache. Reviewed By: joshkang97 Differential Revision: D122431823 fbshipit-source-id: 262913930cb4b570ea0a4d8f4f92364de08a27f5