From b77a1eb079b8d3e5144849a74805ec653cd722e6 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 6 Dec 2024 12:44:10 +0000 Subject: [PATCH] move cork to remove_to_device_events fn add cork around write-heavy database routine called in loop; cleanup Signed-off-by: Jason Volk --- src/service/admin/console.rs | 2 +- src/service/rooms/user/mod.rs | 15 +++++++++------ src/service/users/mod.rs | 5 ++++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/service/admin/console.rs b/src/service/admin/console.rs index 0f5016e1..37af7452 100644 --- a/src/service/admin/console.rs +++ b/src/service/admin/console.rs @@ -89,7 +89,7 @@ impl Console { } } - #[tracing::instrument(skip_all, name = "console")] + #[tracing::instrument(skip_all, name = "console", level = "trace")] async fn worker(self: Arc) { debug!("session starting"); while self.server.running() { diff --git a/src/service/rooms/user/mod.rs b/src/service/rooms/user/mod.rs index 948baa5e..537fe69b 100644 --- a/src/service/rooms/user/mod.rs +++ b/src/service/rooms/user/mod.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use conduit::{implement, Result}; -use database::{Deserialized, Map}; +use database::{Database, Deserialized, Map}; use ruma::{RoomId, UserId}; use crate::{globals, rooms, rooms::short::ShortStateHash, Dep}; @@ -12,6 +12,7 @@ pub struct Service { } struct Data { + db: Arc, userroomid_notificationcount: Arc, userroomid_highlightcount: Arc, roomuserid_lastnotificationread: Arc, @@ -27,11 +28,12 @@ impl crate::Service for Service { fn build(args: crate::Args<'_>) -> Result> { Ok(Arc::new(Self { db: Data { - userroomid_notificationcount: args.db["userroomid_notificationcount"].clone(), - userroomid_highlightcount: args.db["userroomid_highlightcount"].clone(), - roomuserid_lastnotificationread: args.db["userroomid_highlightcount"].clone(), //< NOTE: known bug from conduit - roomsynctoken_shortstatehash: args.db["roomsynctoken_shortstatehash"].clone(), - }, + db: args.db.clone(), + userroomid_notificationcount: args.db["userroomid_notificationcount"].clone(), + userroomid_highlightcount: args.db["userroomid_highlightcount"].clone(), + roomuserid_lastnotificationread: args.db["userroomid_highlightcount"].clone(), + roomsynctoken_shortstatehash: args.db["roomsynctoken_shortstatehash"].clone(), + }, services: Services { globals: args.depend::("globals"), @@ -98,6 +100,7 @@ pub async fn associate_token_shortstatehash(&self, room_id: &RoomId, token: u64, .await .expect("room exists"); + let _cork = self.db.db.cork(); let key: &[u64] = &[shortroomid, token]; self.db .roomsynctoken_shortstatehash diff --git a/src/service/users/mod.rs b/src/service/users/mod.rs index 2462dde3..f17a6b9d 100644 --- a/src/service/users/mod.rs +++ b/src/service/users/mod.rs @@ -5,7 +5,7 @@ use conduit::{ utils::{stream::TryIgnore, string::Unquoted, ReadyExt}, Err, Error, Result, Server, }; -use database::{Deserialized, Ignore, Interfix, Json, Map}; +use database::{Database, Deserialized, Ignore, Interfix, Json, Map}; use futures::{FutureExt, Stream, StreamExt, TryFutureExt}; use ruma::{ api::client::{device::Device, error::ErrorKind, filter::FilterDefinition}, @@ -26,6 +26,7 @@ pub struct Service { struct Services { server: Arc, + db: Arc, account_data: Dep, admin: Dep, globals: Dep, @@ -60,6 +61,7 @@ impl crate::Service for Service { Ok(Arc::new(Self { services: Services { server: args.server.clone(), + db: args.db.clone(), account_data: args.depend::("account_data"), admin: args.depend::("admin"), globals: args.depend::("globals"), @@ -721,6 +723,7 @@ impl Service { let mut last = prefix.clone(); last.extend_from_slice(&until.to_be_bytes()); + let _cork = self.services.db.cork_and_flush(); self.db .todeviceid_events .rev_raw_keys_from(&last) // this includes last