use std::time::Duration;
use super::LogSizePolicy;
use super::SnapshotContext;
use super::SnapshotPolicy;
use super::TimeBasedPolicy;
#[allow(unused)]
#[derive(Debug)]
pub(crate) struct CompositePolicy {
time_policy: TimeBasedPolicy,
size_policy: LogSizePolicy,
}
impl CompositePolicy {
#[allow(unused)]
pub(crate) fn new(
time_interval: Duration,
log_size_threshold: u64,
log_size_cooldown: Duration,
) -> Self {
let size_policy = LogSizePolicy::new(log_size_threshold, log_size_cooldown);
Self {
time_policy: TimeBasedPolicy::new(time_interval),
size_policy,
}
}
}
impl SnapshotPolicy for CompositePolicy {
fn should_trigger(
&self,
ctx: &SnapshotContext,
) -> bool {
if !ctx.is_leader() {
return false;
}
self.time_policy.should_trigger(ctx) || self.size_policy.should_trigger(ctx)
}
fn mark_snapshot_created(&mut self) {
self.time_policy.mark_snapshot_created();
}
}