Fix concurrency overwrite

This commit is contained in:
Natsu Kagami 2021-01-23 18:48:56 +09:00
parent f05afb2b80
commit 61a71b819c
Signed by: nki
GPG key ID: 7306B3D3C3AD6E51

View file

@ -95,7 +95,16 @@ impl youmubot_prelude::Announcer for Announcer {
.collect::<HashMap<_, _>>() .collect::<HashMap<_, _>>()
.await; .await;
// Update users // Update users
*OsuSavedUsers::open(&*d.read().await).borrow_mut()? = data; let db = &*d.read().await;
let mut db = OsuSavedUsers::open(db);
let mut db = db.borrow_mut()?;
data.into_iter()
.for_each(|(k, v)| match db.get(&k).map(|v| v.last_update.clone()) {
Some(d) if d > v.last_update => (),
_ => {
db.insert(k, v);
}
});
Ok(()) Ok(())
} }
} }