Skip to main content

TreeBlockCache

Trait TreeBlockCache 

Source
pub trait TreeBlockCache: Send + Sync {
    // Required methods
    fn get(&self, addr: u64) -> Option<Arc<TreeBlock>>;
    fn put(&self, addr: u64, block: Arc<TreeBlock>);
    fn invalidate(&self, addr: u64);
}
Expand description

Pluggable cache for parsed TreeBlocks, consulted by BlockReader::read_tree_block.

The trait is Send + Sync and uses &self methods so a single cache can be shared across threads (and, eventually, across multiple BlockReader instances in a reader pool). Implementations use interior mutability — typically a Mutex<lru::LruCache<...>> or similar.

btrfs-disk does not provide an LRU implementation: keeping the crate dependency-light is more important than convenience here. The btrfs-fs crate ships an LruTreeBlockCache that most embedders will use.

Required Methods§

Source

fn get(&self, addr: u64) -> Option<Arc<TreeBlock>>

Look up a tree block by logical address. Returns None on miss.

Source

fn put(&self, addr: u64, block: Arc<TreeBlock>)

Insert a freshly-read tree block into the cache. Implementations decide eviction policy.

Source

fn invalidate(&self, addr: u64)

Drop a single entry. Used by writers (e.g. the transaction crate during CoW) to invalidate stale blocks.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§