diff --git a/limitador/src/storage/distributed/cr_counter_value.rs b/limitador/src/storage/distributed/cr_counter_value.rs index eb6fc1fb..e76b4b05 100644 --- a/limitador/src/storage/distributed/cr_counter_value.rs +++ b/limitador/src/storage/distributed/cr_counter_value.rs @@ -20,7 +20,7 @@ impl CrCounterValue { ourselves: actor, value: Default::default(), others: RwLock::default(), - expiry: AtomicExpiryTime::from_now(time_window), + expiry: AtomicExpiryTime::new(SystemTime::now() + time_window), } } @@ -43,7 +43,7 @@ impl CrCounterValue { } pub fn inc_at(&self, increment: u64, time_window: Duration, when: SystemTime) { - if self.expiry.update_if_expired(time_window.as_secs(), when) { + if self.expiry.update_if_expired(time_window, when) { self.value.store(increment, Ordering::SeqCst); } else { self.value.fetch_add(increment, Ordering::SeqCst); @@ -59,10 +59,7 @@ impl CrCounterValue { self.inc_at(increment, time_window, when); } else { let mut guard = self.others.write().unwrap(); - if self - .expiry - .update_if_expired(time_window.as_micros() as u64, when) - { + if self.expiry.update_if_expired(time_window, when) { guard.insert(actor, increment); } else { *guard.entry(actor).or_insert(0) += increment; @@ -109,7 +106,7 @@ impl CrCounterValue { } pub fn ttl(&self) -> Duration { - self.expiry.duration() + self.expiry.ttl() } pub fn expiry(&self) -> SystemTime { @@ -282,6 +279,6 @@ mod tests { a.inc(3, later); b.inc(2, later); a.merge(b); - assert!(a.expiry.duration() < sooner); + assert!(a.expiry.ttl() < sooner); } } diff --git a/limitador/src/storage/distributed/mod.rs b/limitador/src/storage/distributed/mod.rs index 2c319576..7a9e7761 100644 --- a/limitador/src/storage/distributed/mod.rs +++ b/limitador/src/storage/distributed/mod.rs @@ -72,7 +72,7 @@ impl CounterStorage for CrInMemoryStorage { None => self.qualified_counters.get_with(counter.clone(), || { Arc::new(CrCounterValue::new( self.identifier.clone(), - Duration::from_secs(counter.seconds()), + counter.window(), )) }), Some(counter) => counter, @@ -82,16 +82,16 @@ impl CounterStorage for CrInMemoryStorage { match limits_by_namespace.entry(counter.limit().namespace().clone()) { Entry::Vacant(v) => { let mut limits = HashMap::new(); - let duration = Duration::from_secs(counter.seconds()); - let counter_val = CrCounterValue::new(self.identifier.clone(), duration); + let counter_val = + CrCounterValue::new(self.identifier.clone(), counter.window()); self.increment_counter(counter.clone(), &counter_val, delta, now); limits.insert(counter.limit().clone(), counter_val); v.insert(limits); } Entry::Occupied(mut o) => match o.get_mut().entry(counter.limit().clone()) { Entry::Vacant(v) => { - let duration = Duration::from_secs(counter.seconds()); - let counter_value = CrCounterValue::new(self.identifier.clone(), duration); + let counter_value = + CrCounterValue::new(self.identifier.clone(), counter.window()); self.increment_counter(counter.clone(), &counter_value, delta, now); v.insert(counter_value); } @@ -158,7 +158,7 @@ impl CounterStorage for CrInMemoryStorage { None => self.qualified_counters.get_with(counter.clone(), || { Arc::new(CrCounterValue::new( self.identifier.clone(), - Duration::from_secs(counter.seconds()), + counter.window(), )) }), Some(counter) => counter, @@ -338,8 +338,7 @@ impl CrInMemoryStorage { delta: u64, when: SystemTime, ) { - counter.inc_at(delta, Duration::from_secs(key.seconds()), when); - + counter.inc_at(delta, key.window(), when); let counter = counter.clone(); let (expiry, values) = counter.into_inner(); let key: CounterKey = key.into(); @@ -366,7 +365,7 @@ impl From for CounterKey { fn from(value: Counter) -> Self { Self { namespace: value.namespace().clone(), - seconds: value.seconds(), + seconds: value.window().as_secs(), variables: value.limit().variables(), conditions: value.limit().conditions(), vars: value.set_variables().clone(),