Skip to content

Commit c5b2d20

Browse files
committed
feat(sqlite): Run VACUUM operation after removing a room
A room can be associated to a lot of data, depending on the number of members in the room. So freeing space on the filesystem should be worth it in some cases. Signed-off-by: Kévin Commaille <[email protected]>
1 parent 2d245af commit c5b2d20

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

crates/matrix-sdk-sqlite/src/state_store.rs

+27-25
Original file line numberDiff line numberDiff line change
@@ -1739,40 +1739,42 @@ impl StateStore for SqliteStateStore {
17391739
let this = self.clone();
17401740
let room_id = room_id.to_owned();
17411741

1742-
self.acquire()
1743-
.await?
1744-
.with_transaction(move |txn| {
1745-
let room_info_room_id = this.encode_key(keys::ROOM_INFO, &room_id);
1746-
txn.remove_room_info(&room_info_room_id)?;
1742+
let conn = self.acquire().await?;
17471743

1748-
let state_event_room_id = this.encode_key(keys::STATE_EVENT, &room_id);
1749-
txn.remove_room_state_events(&state_event_room_id, None)?;
1744+
conn.with_transaction(move |txn| -> Result<()> {
1745+
let room_info_room_id = this.encode_key(keys::ROOM_INFO, &room_id);
1746+
txn.remove_room_info(&room_info_room_id)?;
17501747

1751-
let member_room_id = this.encode_key(keys::MEMBER, &room_id);
1752-
txn.remove_room_members(&member_room_id, None)?;
1748+
let state_event_room_id = this.encode_key(keys::STATE_EVENT, &room_id);
1749+
txn.remove_room_state_events(&state_event_room_id, None)?;
17531750

1754-
let profile_room_id = this.encode_key(keys::PROFILE, &room_id);
1755-
txn.remove_room_profiles(&profile_room_id)?;
1751+
let member_room_id = this.encode_key(keys::MEMBER, &room_id);
1752+
txn.remove_room_members(&member_room_id, None)?;
17561753

1757-
let room_account_data_room_id = this.encode_key(keys::ROOM_ACCOUNT_DATA, &room_id);
1758-
txn.remove_room_account_data(&room_account_data_room_id)?;
1754+
let profile_room_id = this.encode_key(keys::PROFILE, &room_id);
1755+
txn.remove_room_profiles(&profile_room_id)?;
17591756

1760-
let receipt_room_id = this.encode_key(keys::RECEIPT, &room_id);
1761-
txn.remove_room_receipts(&receipt_room_id)?;
1757+
let room_account_data_room_id = this.encode_key(keys::ROOM_ACCOUNT_DATA, &room_id);
1758+
txn.remove_room_account_data(&room_account_data_room_id)?;
17621759

1763-
let display_name_room_id = this.encode_key(keys::DISPLAY_NAME, &room_id);
1764-
txn.remove_room_display_names(&display_name_room_id)?;
1760+
let receipt_room_id = this.encode_key(keys::RECEIPT, &room_id);
1761+
txn.remove_room_receipts(&receipt_room_id)?;
17651762

1766-
let send_queue_room_id = this.encode_key(keys::SEND_QUEUE, &room_id);
1767-
txn.remove_room_send_queue(&send_queue_room_id)?;
1763+
let display_name_room_id = this.encode_key(keys::DISPLAY_NAME, &room_id);
1764+
txn.remove_room_display_names(&display_name_room_id)?;
17681765

1769-
let dependent_send_queue_room_id =
1770-
this.encode_key(keys::DEPENDENTS_SEND_QUEUE, &room_id);
1771-
txn.remove_room_dependent_send_queue(&dependent_send_queue_room_id)?;
1766+
let send_queue_room_id = this.encode_key(keys::SEND_QUEUE, &room_id);
1767+
txn.remove_room_send_queue(&send_queue_room_id)?;
17721768

1773-
Ok(())
1774-
})
1775-
.await
1769+
let dependent_send_queue_room_id =
1770+
this.encode_key(keys::DEPENDENTS_SEND_QUEUE, &room_id);
1771+
txn.remove_room_dependent_send_queue(&dependent_send_queue_room_id)?;
1772+
1773+
Ok(())
1774+
})
1775+
.await?;
1776+
1777+
conn.vacuum().await
17761778
}
17771779

17781780
async fn save_send_queue_request(

0 commit comments

Comments
 (0)