use std::sync::atomic::Ordering;
use linkrs_core::wal::types::{WalError, WalResult};
use super::LocalWalWriter;
use crate::wal::writer::group_commit::GroupCommitCoordinator;
impl LocalWalWriter {
pub fn enable_group_commit(&mut self) -> WalResult<()> {
self.enable_group_commit_with_timeout(self.config.group_commit_timeout())
}
pub fn enable_group_commit_with_timeout(
&mut self,
timeout: std::time::Duration,
) -> WalResult<()> {
let file = self.file.as_ref().ok_or(WalError::Closed)?;
let start_lsn = self.current_lsn.load(Ordering::SeqCst);
self.group_commit = Some(GroupCommitCoordinator::with_timeout(
file.try_clone()
.map_err(|e| WalError::IoError(e.to_string()))?,
start_lsn,
timeout,
));
Ok(())
}
pub fn enable_group_commit_with_config(
&mut self,
config: &linkrs_core::wal::types::WalConfig,
) -> WalResult<()> {
self.enable_group_commit_with_timeout(config.group_commit_timeout())
}
pub fn group_commit_coordinator(&self) -> Option<&GroupCommitCoordinator> {
self.group_commit.as_ref()
}
}