Skip to content

Commit 6a22a34

Browse files
committed
test(cache): split raw backfill regression
1 parent 4f5ba2a commit 6a22a34

2 files changed

Lines changed: 27 additions & 9 deletions

File tree

‎src/cache/multilevel.rs‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -524,8 +524,6 @@ impl MultiLevelStorage {
524524
});
525525
}
526526
}
527-
}
528-
}
529527

530528
/// Write to levels starting from `start_idx` asynchronously
531529
async fn write_remaining_levels_async(&self, key: &str, data: &Bytes, start_idx: usize) {
@@ -642,7 +640,6 @@ impl Storage for MultiLevelStorage {
642640
);
643641
}
644642
}
645-
}
646643
}
647644

648645
self.record_all_read_misses();

‎src/cache/multilevel_test.rs‎

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1675,8 +1675,32 @@ fn test_multilevel_get_raw_finds_first_hit() {
16751675
"get_raw bytes should be a valid zip archive"
16761676
);
16771677

1678-
// Client-side mode reads through get_raw over IPC. A lower-level hit
1679-
// must therefore trigger the same L0 backfill as the parsed get path.
1678+
// A key that exists in neither level should return None.
1679+
assert!(storage.get_raw("missing").await.unwrap().is_none());
1680+
});
1681+
}
1682+
1683+
#[test]
1684+
fn test_multilevel_get_raw_backfills_lower_levels() {
1685+
let runtime = RuntimeBuilder::new_multi_thread()
1686+
.enable_all()
1687+
.worker_threads(1)
1688+
.build()
1689+
.unwrap();
1690+
1691+
let l0 = Arc::new(InMemoryStorage::new());
1692+
let l1 = Arc::new(InMemoryStorage::new());
1693+
let storage = MultiLevelStorage::new(vec![
1694+
l0.clone() as Arc<dyn Storage>,
1695+
l1.clone() as Arc<dyn Storage>,
1696+
]);
1697+
1698+
runtime.block_on(async {
1699+
l1.put("key", CacheWrite::default()).await.unwrap();
1700+
assert!(l0.get_raw("key").await.unwrap().is_none());
1701+
1702+
assert!(storage.get_raw("key").await.unwrap().is_some());
1703+
16801704
tokio::time::timeout(Duration::from_secs(1), async {
16811705
loop {
16821706
if l0.get_raw("key").await.unwrap().is_some() {
@@ -1686,10 +1710,7 @@ fn test_multilevel_get_raw_finds_first_hit() {
16861710
}
16871711
})
16881712
.await
1689-
.expect("L1 hit should backfill L0");
1690-
1691-
// A key that exists in neither level should return None.
1692-
assert!(storage.get_raw("missing").await.unwrap().is_none());
1713+
.expect("L1 raw hit should backfill L0");
16931714
});
16941715
}
16951716

0 commit comments

Comments
 (0)