fix: kvcache evict workflow
This commit is contained in:
@@ -116,6 +116,21 @@ impl MetaStore {
|
||||
scores
|
||||
}
|
||||
|
||||
/// Remove `instance`'s entry for `block_hash` (e.g. after L1 eviction).
|
||||
///
|
||||
/// The meta-store must reflect **L1 (DRAM) presence only**, because remote
|
||||
/// RDMA fetch can only reach CPU DRAM, never GPU HBM. Whenever the L1
|
||||
/// tier evicts a block, the caller must invoke this so the meta-store
|
||||
/// stops advertising the block as remotely available on this instance.
|
||||
pub fn remove(&mut self, block_hash: u64, instance: InstanceId) {
|
||||
if let Some(bucket) = self.map.get_mut(&block_hash) {
|
||||
bucket.retain(|e| e.instance != instance);
|
||||
if bucket.is_empty() {
|
||||
self.map.remove(&block_hash);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Lookup which (alive) instances claim to hold a given block.
|
||||
pub fn instances_for(&self, hash: u64, now: f64) -> SmallVec<[InstanceId; 4]> {
|
||||
let mut out = SmallVec::new();
|
||||
@@ -149,6 +164,34 @@ mod tests {
|
||||
assert_eq!(s[2], 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn remove_cleans_up() {
|
||||
let mut m = MetaStore::new(60.0);
|
||||
m.insert(10, 0, 0.0);
|
||||
m.insert(10, 1, 0.0);
|
||||
m.insert(11, 0, 0.0);
|
||||
|
||||
// instance 0 has both blocks, instance 1 has block 10 only
|
||||
let owners = m.instances_for(10, 0.5);
|
||||
assert_eq!(owners.len(), 2);
|
||||
|
||||
// Remove instance 0's entry for block 10
|
||||
m.remove(10, 0);
|
||||
let owners = m.instances_for(10, 0.5);
|
||||
assert_eq!(owners.len(), 1);
|
||||
assert_eq!(owners[0], 1);
|
||||
|
||||
// Instance 0 still owns block 11
|
||||
let owners = m.instances_for(11, 0.5);
|
||||
assert_eq!(owners.len(), 1);
|
||||
assert_eq!(owners[0], 0);
|
||||
|
||||
// Remove last owner of a block -> entry fully cleaned
|
||||
m.remove(10, 1);
|
||||
let owners = m.instances_for(10, 0.5);
|
||||
assert!(owners.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ttl_expiry() {
|
||||
let mut m = MetaStore::new(1.0);
|
||||
|
||||
Reference in New Issue
Block a user