use smallvec for db query buffering

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-11-28 05:54:34 +00:00
parent 76c75cc05a
commit 3ad6aa59f9
23 changed files with 173 additions and 98 deletions

View file

@ -116,7 +116,7 @@ pub fn changes_since<'a>(
&'a self, room_id: Option<&'a RoomId>, user_id: &'a UserId, since: u64,
) -> impl Stream<Item = AnyRawAccountDataEvent> + Send + 'a {
let prefix = (room_id, user_id, Interfix);
let prefix = database::serialize_to_vec(prefix).expect("failed to serialize prefix");
let prefix = database::serialize_key(prefix).expect("failed to serialize prefix");
// Skip the data that's exactly at since, because we sent that last time
let first_possible = (room_id, user_id, since.saturating_add(1));

View file

@ -39,14 +39,14 @@ impl Data {
) -> Result<Vec<u8>> {
let dim: &[u32] = &[dim.width, dim.height];
let key = (mxc, dim, content_disposition, content_type);
let key = database::serialize_to_vec(key)?;
let key = database::serialize_key(key)?;
self.mediaid_file.insert(&key, []);
if let Some(user) = user {
let key = (mxc, user);
self.mediaid_user.put_raw(key, user);
}
Ok(key)
Ok(key.to_vec())
}
pub(super) async fn delete_file_mxc(&self, mxc: &Mxc<'_>) {

View file

@ -9,7 +9,7 @@ use conduit::{
utils::{stream::TryIgnore, ReadyExt, StreamTools},
warn, Result,
};
use database::{serialize_to_vec, Deserialized, Ignore, Interfix, Json, Map};
use database::{serialize_key, Deserialized, Ignore, Interfix, Json, Map};
use futures::{future::join4, pin_mut, stream::iter, Stream, StreamExt};
use itertools::Itertools;
use ruma::{
@ -289,10 +289,10 @@ impl Service {
#[tracing::instrument(skip(self), level = "debug")]
pub fn mark_as_joined(&self, user_id: &UserId, room_id: &RoomId) {
let userroom_id = (user_id, room_id);
let userroom_id = serialize_to_vec(userroom_id).expect("failed to serialize userroom_id");
let userroom_id = serialize_key(userroom_id).expect("failed to serialize userroom_id");
let roomuser_id = (room_id, user_id);
let roomuser_id = serialize_to_vec(roomuser_id).expect("failed to serialize roomuser_id");
let roomuser_id = serialize_key(roomuser_id).expect("failed to serialize roomuser_id");
self.db.userroomid_joined.insert(&userroom_id, []);
self.db.roomuserid_joined.insert(&roomuser_id, []);
@ -312,10 +312,10 @@ impl Service {
#[tracing::instrument(skip(self), level = "debug")]
pub fn mark_as_left(&self, user_id: &UserId, room_id: &RoomId) {
let userroom_id = (user_id, room_id);
let userroom_id = serialize_to_vec(userroom_id).expect("failed to serialize userroom_id");
let userroom_id = serialize_key(userroom_id).expect("failed to serialize userroom_id");
let roomuser_id = (room_id, user_id);
let roomuser_id = serialize_to_vec(roomuser_id).expect("failed to serialize roomuser_id");
let roomuser_id = serialize_key(roomuser_id).expect("failed to serialize roomuser_id");
// (timo) TODO
let leftstate = Vec::<Raw<AnySyncStateEvent>>::new();
@ -716,10 +716,10 @@ impl Service {
invite_via: Option<Vec<OwnedServerName>>,
) {
let roomuser_id = (room_id, user_id);
let roomuser_id = serialize_to_vec(roomuser_id).expect("failed to serialize roomuser_id");
let roomuser_id = serialize_key(roomuser_id).expect("failed to serialize roomuser_id");
let userroom_id = (user_id, room_id);
let userroom_id = serialize_to_vec(userroom_id).expect("failed to serialize userroom_id");
let userroom_id = serialize_key(userroom_id).expect("failed to serialize userroom_id");
self.db
.userroomid_invitestate