retroactively fix bad data in roomuserid_joined, remove pointless prefix scans

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
strawberry 2024-06-09 01:47:03 -04:00
parent 0524e6ed52
commit ccf9f95cc9
3 changed files with 117 additions and 20 deletions

View file

@ -130,14 +130,7 @@ impl Data for KeyValueDatabase {
self.userroomid_leftstate.remove(&userroom_id)?;
self.roomuserid_leftcount.remove(&roomuser_id)?;
if self.roomuserid_joined.scan_prefix(roomid.clone()).count() == 0
&& self
.roomuserid_invitecount
.scan_prefix(roomid.clone())
.count() == 0
{
self.roomid_inviteviaservers.remove(&roomid)?;
}
self.roomid_inviteviaservers.remove(&roomid)?;
Ok(())
}
@ -206,14 +199,7 @@ impl Data for KeyValueDatabase {
self.userroomid_invitestate.remove(&userroom_id)?;
self.roomuserid_invitecount.remove(&roomuser_id)?;
if self.roomuserid_joined.scan_prefix(roomid.clone()).count() == 0
&& self
.roomuserid_invitecount
.scan_prefix(roomid.clone())
.count() == 0
{
self.roomid_inviteviaservers.remove(&roomid)?;
}
self.roomid_inviteviaservers.remove(&roomid)?;
Ok(())
}
@ -654,8 +640,7 @@ impl Data for KeyValueDatabase {
#[tracing::instrument(skip(self))]
fn servers_invite_via(&self, room_id: &RoomId) -> Result<Option<Vec<OwnedServerName>>> {
let mut key = room_id.as_bytes().to_vec();
key.push(0xFF);
let key = room_id.as_bytes().to_vec();
self.roomid_inviteviaservers
.get(&key)?

View file

@ -217,6 +217,22 @@ impl Service {
self.db.appservice_in_room(room_id, appservice)
}
/// Direct DB function to directly mark a user as left. It is not
/// recommended to use this directly. You most likely should use
/// `update_membership` instead
#[tracing::instrument(skip(self))]
pub fn mark_as_left(&self, user_id: &UserId, room_id: &RoomId) -> Result<()> {
self.db.mark_as_left(user_id, room_id)
}
/// Direct DB function to directly mark a user as joined. It is not
/// recommended to use this directly. You most likely should use
/// `update_membership` instead
#[tracing::instrument(skip(self))]
pub fn mark_as_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<()> {
self.db.mark_as_joined(user_id, room_id)
}
/// Makes a user forget a room.
#[tracing::instrument(skip(self))]
pub fn forget(&self, room_id: &RoomId, user_id: &UserId) -> Result<()> { self.db.forget(room_id, user_id) }