use super::{HostBlockKey, TransferId};
use uuid::Uuid;
#[derive(Clone, Copy)]
pub(crate) struct HostStoreBlockMapping {
pub(crate) block: HostBlockKey,
pub(crate) logical_block_index: usize,
}
pub(crate) struct HostOffloadObservation<'a> {
pub(crate) request_id: Uuid,
pub(crate) event: HostOffloadObservationData<'a>,
}
pub(crate) enum HostOffloadObservationData<'a> {
StorePrepared {
at_ms: f64,
transfer_id: TransferId,
blocks: &'a [HostBlockKey],
},
StoreBlockMappings {
at_ms: f64,
transfer_id: TransferId,
mappings: &'a [HostStoreBlockMapping],
},
StoreSubmitted {
at_ms: f64,
completes_at_ms: f64,
transfer_id: TransferId,
blocks: &'a [HostBlockKey],
},
StoreCompleted {
at_ms: f64,
transfer_id: TransferId,
blocks: &'a [HostBlockKey],
},
LoadQueued {
at_ms: f64,
completes_at_ms: f64,
transfer_id: TransferId,
blocks: &'a [HostBlockKey],
},
LoadCompleted {
at_ms: f64,
transfer_id: TransferId,
blocks: &'a [HostBlockKey],
},
LoadCancelled {
at_ms: f64,
transfer_id: TransferId,
blocks: &'a [HostBlockKey],
},
Evicted {
at_ms: f64,
block: HostBlockKey,
},
CapacityRetry {
at_ms: f64,
blocks: &'a [HostBlockKey],
structurally_unfittable: bool,
},
}
pub(crate) trait HostOffloadObserver: Send + Sync {
fn record(&self, observation: HostOffloadObservation<'_>);
}