aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-04-28 23:04:28 +0200
committermetamuffin <metamuffin@disroot.org>2024-04-28 23:04:28 +0200
commitf6a45bfb8acc9706140e48f3f963aeaf782bc2e4 (patch)
treec723c8d249b2a797432899edffe2374ae91f5392
parent8f731106364bf828747af7e6177cc447a69a56d9 (diff)
downloadmeta-adservices-f6a45bfb8acc9706140e48f3f963aeaf782bc2e4.tar
meta-adservices-f6a45bfb8acc9706140e48f3f963aeaf782bc2e4.tar.bz2
meta-adservices-f6a45bfb8acc9706140e48f3f963aeaf782bc2e4.tar.zst
leaderboard
-rw-r--r--src/state.rs11
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)?;