#[non_exhaustive]pub struct ExpireStats {
pub sampled: u32,
pub expired: u32,
pub rounds: u32,
}Expand description
What Store::tick_expire saw and did. Surfaced for tests, INFO
keyspace, and (eventually) Wave 2 task #4’s crash-safe verifier.
use kevy_store::{ExpireStats, Store};
let mut s = Store::new();
// no TTL-bearing keys: the reaper does no work at all
assert_eq!(s.tick_expire(16, 16), ExpireStats::default());Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.sampled: u32Total TTL-bearing keys sampled across all rounds.
use core::time::Duration;
use kevy_store::{SetCondition, Store};
let mut s = Store::new();
s.set(b"live", b"v".to_vec(), Some(Duration::from_secs(60)), SetCondition::Always);
// the walk starts at a random bucket, so one key may or may not be seen
let stats = s.tick_expire(16, 1);
assert!(stats.sampled <= 1);
assert_eq!(stats.expired, 0);expired: u32How many of those were past their deadline and got removed.
use core::time::Duration;
use kevy_store::{SetCondition, Store};
let mut s = Store::new();
for k in [b"a", b"b"] {
s.set(k, b"v".to_vec(), Some(Duration::from_millis(1)), SetCondition::Always);
}
let mut expired = 0;
for _ in 0..500 {
expired += s.tick_expire(16, 16).expired;
if s.dbsize() == 0 {
break;
}
std::thread::sleep(Duration::from_millis(2));
}
assert_eq!(expired, 2);rounds: u32Rounds executed before the loop exited (either max_rounds reached
or in-batch expire-rate dropped below the continuation threshold).
use core::time::Duration;
use kevy_store::{SetCondition, Store};
let mut s = Store::new();
s.set(b"live", b"v".to_vec(), Some(Duration::from_secs(60)), SetCondition::Always);
// nothing is due, so the tick stops well short of its 8-round budget
let stats = s.tick_expire(16, 8);
assert!((1..=3).contains(&stats.rounds));Trait Implementations§
Source§impl Clone for ExpireStats
impl Clone for ExpireStats
Source§fn clone(&self) -> ExpireStats
fn clone(&self) -> ExpireStats
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for ExpireStats
Source§impl Debug for ExpireStats
impl Debug for ExpireStats
Source§impl Default for ExpireStats
impl Default for ExpireStats
Source§fn default() -> ExpireStats
fn default() -> ExpireStats
Returns the “default value” for a type. Read more
impl Eq for ExpireStats
Source§impl Hash for ExpireStats
impl Hash for ExpireStats
Source§impl PartialEq for ExpireStats
impl PartialEq for ExpireStats
impl StructuralPartialEq for ExpireStats
Auto Trait Implementations§
impl Freeze for ExpireStats
impl RefUnwindSafe for ExpireStats
impl Send for ExpireStats
impl Sync for ExpireStats
impl Unpin for ExpireStats
impl UnsafeUnpin for ExpireStats
impl UnwindSafe for ExpireStats
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more