Skip to content

Commit cbbe8cc

Browse files
committed
Yield less often to the scheduler
1 parent 154fb55 commit cbbe8cc

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

crates/syn2mas/src/migration.rs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,14 @@ async fn migrate_users(
273273
let mut user_buffer = MasWriteBuffer::new(&mas, MasWriter::write_users);
274274
let mut password_buffer = MasWriteBuffer::new(&mas, MasWriter::write_passwords);
275275

276+
let mut i = 0;
276277
while let Ok(user) = rx.recv_async().await {
277-
// Force yielding to the scheduler, else we'll have long tick times
278-
tokio::task::yield_now().await;
278+
// Force yielding to the scheduler every once in a while, else we'll have long
279+
// tick times
280+
i += 1;
281+
if i % 128 == 0 {
282+
tokio::task::yield_now().await;
283+
}
279284

280285
// Handling an edge case: some AS users may have invalid localparts containing
281286
// extra `:` characters. These users are ignored and a warning is logged.
@@ -617,9 +622,14 @@ async fn migrate_devices(
617622
async move {
618623
let mut write_buffer = MasWriteBuffer::new(&mas, MasWriter::write_compat_sessions);
619624

625+
let mut i = 0;
620626
while let Ok(device) = rx.recv_async().await {
621-
// Force yielding to the scheduler, else we'll have long tick times
622-
tokio::task::yield_now().await;
627+
// Force yielding to the scheduler every once in a while, else we'll have long
628+
// tick times
629+
i += 1;
630+
if i % 128 == 0 {
631+
tokio::task::yield_now().await;
632+
}
623633

624634
let SynapseDevice {
625635
user_id: synapse_user_id,
@@ -773,9 +783,14 @@ async fn migrate_unrefreshable_access_tokens(
773783
let mut deviceless_session_write_buffer =
774784
MasWriteBuffer::new(&mas, MasWriter::write_compat_sessions);
775785

786+
let mut i = 0;
776787
while let Ok(token) = rx.recv_async().await {
777-
// Force yielding to the scheduler, else we'll have long tick times
778-
tokio::task::yield_now().await;
788+
// Force yielding to the scheduler every once in a while, else we'll have long
789+
// tick times
790+
i += 1;
791+
if i % 128 == 0 {
792+
tokio::task::yield_now().await;
793+
}
779794

780795
let SynapseAccessToken {
781796
user_id: synapse_user_id,

0 commit comments

Comments
 (0)