use std::sync::Arc;
use crate::control::security::catalog::SystemCatalog;
use crate::control::sync_producer::allocator::ProducerHwmPersist;
pub struct SystemCatalogProducerHwm {
catalog: Arc<SystemCatalog>,
}
impl SystemCatalogProducerHwm {
pub fn new(catalog: Arc<SystemCatalog>) -> Self {
Self { catalog }
}
}
impl ProducerHwmPersist for SystemCatalogProducerHwm {
fn checkpoint(&self, hwm: u64) -> crate::Result<()> {
self.catalog.put_producer_hwm(hwm)
}
fn load(&self) -> crate::Result<u64> {
self.catalog.get_producer_hwm()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn handle_roundtrip_via_catalog() {
let dir = tempfile::tempdir().unwrap();
let catalog = Arc::new(SystemCatalog::open(&dir.path().join("system.redb")).unwrap());
let p = SystemCatalogProducerHwm::new(catalog);
assert_eq!(p.load().unwrap(), 0);
p.checkpoint(999).unwrap();
assert_eq!(p.load().unwrap(), 999);
}
}