metrale_storage/tier/
traits.rs1use anyhow::Result;
10
11pub trait SlotArena: Send {
15 fn slot_bytes(&self) -> usize;
16 fn num_slots(&self) -> usize;
17 fn read_slot(&self, slot: usize, out: &mut [u8]) -> Result<()>;
20 fn write_slot(&mut self, slot: usize, bytes: &[u8]) -> Result<()>;
23}
24
25pub trait SwapStore: Send {
30 fn record_bytes(&self) -> usize;
31 fn write_record(&mut self, disk_slot: usize, bytes: &[u8]) -> Result<()>;
32 fn read_record(&self, disk_slot: usize, out: &mut [u8]) -> Result<()>;
33 fn discard_record(&mut self, _disk_slot: usize) {}
36}
37
38impl<T: SlotArena + ?Sized> SlotArena for Box<T> {
42 fn slot_bytes(&self) -> usize {
43 (**self).slot_bytes()
44 }
45 fn num_slots(&self) -> usize {
46 (**self).num_slots()
47 }
48 fn read_slot(&self, slot: usize, out: &mut [u8]) -> Result<()> {
49 (**self).read_slot(slot, out)
50 }
51 fn write_slot(&mut self, slot: usize, bytes: &[u8]) -> Result<()> {
52 (**self).write_slot(slot, bytes)
53 }
54}
55
56impl<T: SwapStore + ?Sized> SwapStore for Box<T> {
57 fn record_bytes(&self) -> usize {
58 (**self).record_bytes()
59 }
60 fn write_record(&mut self, disk_slot: usize, bytes: &[u8]) -> Result<()> {
61 (**self).write_record(disk_slot, bytes)
62 }
63 fn read_record(&self, disk_slot: usize, out: &mut [u8]) -> Result<()> {
64 (**self).read_record(disk_slot, out)
65 }
66 fn discard_record(&mut self, disk_slot: usize) {
67 (**self).discard_record(disk_slot)
68 }
69}
70
71#[derive(Default, Debug, Clone)]
72pub struct SwapStats {
73 pub puts: u64,
74 pub gets: u64,
75 pub get_miss: u64,
76 pub spills_to_disk: u64,
77 pub faults_from_disk: u64,
78 pub resident_hits: u64,
79 pub disk_evictions: u64,
82}