use crate::aof::Aof;
#[derive(Debug, Clone, Copy)]
pub struct RewritePolicy {
pub pct: u32,
pub min_size: u64,
pub bytes: u64,
pub interval_secs: u64,
}
impl Aof {
pub fn rewrite_due(&self, policy: RewritePolicy) -> bool {
if self.is_rewriting() {
return false;
}
let cur = self.size_bytes();
let baseline = self.size_at_last_rewrite().max(1);
if policy.pct > 0
&& cur >= policy.min_size
&& cur.saturating_mul(100)
>= baseline.saturating_mul(100u64.saturating_add(u64::from(policy.pct)))
{
return true;
}
if policy.bytes > 0 && cur >= policy.bytes {
return true;
}
policy.interval_secs > 0
&& cur > self.size_at_last_rewrite()
&& self.last_rewrite_at().elapsed().as_secs() >= policy.interval_secs
}
}