diff --git a/src/client_server/membership.rs b/src/client_server/membership.rs
index 87439406..ae08af0a 100644
--- a/src/client_server/membership.rs
+++ b/src/client_server/membership.rs
@@ -65,14 +65,18 @@ pub async fn join_room_by_id_route(
 
     servers.insert(body.room_id.server_name().to_owned());
 
-    join_room_by_id_helper(
+    let ret = join_room_by_id_helper(
         &db,
         body.sender_user.as_ref(),
         &body.room_id,
         &servers,
         body.third_party_signed.as_ref(),
     )
-    .await
+    .await;
+
+    db.flush().await?;
+
+    ret
 }
 
 #[cfg_attr(
diff --git a/src/server_server.rs b/src/server_server.rs
index 306afd26..bbb2f695 100644
--- a/src/server_server.rs
+++ b/src/server_server.rs
@@ -774,6 +774,8 @@ pub async fn send_transaction_message_route(
         }
     }
 
+    db.flush().await?;
+
     Ok(send_transaction_message::v1::Response { pdus: resolved_map }.into())
 }
 
@@ -2160,6 +2162,8 @@ pub async fn create_join_event_route(
         db.sending.send_pdu(&server, &pdu_id)?;
     }
 
+    db.flush().await?;
+
     Ok(create_join_event::v2::Response {
         room_state: RoomState {
             auth_chain: auth_chain_ids
@@ -2276,6 +2280,8 @@ pub async fn create_invite_route(
         )?;
     }
 
+    db.flush().await?;
+
     Ok(create_invite::v2::Response {
         event: PduEvent::convert_to_outgoing_federation_event(signed_event),
     }
@@ -2389,7 +2395,7 @@ pub fn get_profile_information_route(
     post("/_matrix/federation/v1/user/keys/query", data = "<body>")
 )]
 #[tracing::instrument(skip(db, body))]
-pub fn get_keys_route(
+pub async fn get_keys_route(
     db: ReadGuard,
     body: Ruma<get_keys::v1::Request>,
 ) -> ConduitResult<get_keys::v1::Response> {
@@ -2404,6 +2410,8 @@ pub fn get_keys_route(
         &db,
     )?;
 
+    db.flush().await?;
+
     Ok(get_keys::v1::Response {
         device_keys: result.device_keys,
         master_keys: result.master_keys,