use std::sync::Mutex;
use crate::observe::{ExecutionObserver, TransactionEvent};
#[derive(Default)]
pub(crate) struct WriteTxSizeObserver(Mutex<Vec<u64>>);
impl ExecutionObserver for WriteTxSizeObserver {
fn on_transaction_complete(&self, event: &TransactionEvent) {
if event.safe.write {
self.0.lock().unwrap().push(event.safe.metrics.keys_written);
}
}
}
impl WriteTxSizeObserver {
pub(crate) fn sizes(&self) -> Vec<u64> {
self.0.lock().unwrap().clone()
}
pub(crate) fn clear(&self) {
self.0.lock().unwrap().clear();
}
}
pub(crate) fn cleanup_sizes(sizes: &[u64]) -> Vec<u64> {
sizes.iter().copied().filter(|&n| n > 1).collect()
}