mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-04-28 05:44:39 +00:00
tools: lru cache: tell if node was already present or newly inserted
Add a boolean return type to LruCache::insert(), telling if the node was already present in the cache or if it was newly inserted. This will allow to use the LRU cache for garbage collection, where it is required to skip atime updates for chunks already marked in use. That improves phase 1 garbage collection performance by avoiding, multiple atime updates. Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
parent
3fdf8769f4
commit
8d9dc69945
@ -133,7 +133,7 @@ impl<K: std::cmp::Eq + std::hash::Hash + Copy, V> LruCache<K, V> {
|
||||
|
||||
/// Insert or update an entry identified by `key` with the given `value`.
|
||||
/// This entry is placed as the most recently used node at the head.
|
||||
pub fn insert(&mut self, key: K, value: V) {
|
||||
pub fn insert(&mut self, key: K, value: V) -> bool {
|
||||
match self.map.entry(key) {
|
||||
Entry::Occupied(mut o) => {
|
||||
// Node present, update value
|
||||
@ -142,6 +142,7 @@ impl<K: std::cmp::Eq + std::hash::Hash + Copy, V> LruCache<K, V> {
|
||||
let mut node = unsafe { Box::from_raw(node_ptr) };
|
||||
node.value = value;
|
||||
let _node_ptr = Box::into_raw(node);
|
||||
true
|
||||
}
|
||||
Entry::Vacant(v) => {
|
||||
// Node not present, insert a new one
|
||||
@ -159,6 +160,7 @@ impl<K: std::cmp::Eq + std::hash::Hash + Copy, V> LruCache<K, V> {
|
||||
if self.map.len() > self.capacity {
|
||||
self.pop_tail();
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user