diff options
Diffstat (limited to 'src/state.rs')
-rw-r--r-- | src/state.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/state.rs b/src/state.rs index 9ad2f9a..48e208f 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,5 +1,5 @@ use anyhow::{bail, Context}; -use log::error; +use log::{error, info}; use redb::{Database, ReadableTable, TableDefinition}; use rocket::tokio::{ sync::mpsc::{self, Receiver, Sender}, @@ -102,7 +102,7 @@ impl Logic { } } - d.sort_by_key(|(_, _, w)| OrdAnyway(*w)); + d.sort_by_key(|(_, _, w)| OrdAnyway(-*w)); while d.len() > 16 { d.pop(); } @@ -112,6 +112,7 @@ impl Logic { async fn commit_db(&self, mut rx: Receiver<ImpressionEvent>) -> anyhow::Result<()> { let mut deadline = None; + let mut clear_deadline = Instant::now(); let mut impressions_by_addr = vec![0u16; self.config.bloom_filter_size]; let mut imp_raw = HashMap::<String, u64>::new(); let mut imp_weighted = HashMap::<String, f64>::new(); @@ -130,6 +131,11 @@ impl Logic { adid, address_hash, })) => { + if Instant::now() >= clear_deadline { + info!("bloom filter cleared"); + impressions_by_addr.iter_mut().for_each(|e| *e = 0); + clear_deadline = Instant::now() + Duration::from_days(1); + } let num_impressions = { let ind = (address_hash % impressions_by_addr.len() as u64) as usize; impressions_by_addr[ind] = impressions_by_addr[ind].saturating_add(1); @@ -150,6 +156,7 @@ impl Logic { } } + info!("commit"); let txn = self.database.begin_write().context("database failure")?; { let mut raw = txn.open_table(T_TOTAL)?; |