@@ -252,15 +252,15 @@ async fn migrate_users(
252
252
let otel_kv = [ KeyValue :: new ( K_ENTITY , V_ENTITY_USERS ) ] ;
253
253
254
254
// HACK(matrix.org): allocate a large buffer
255
- let ( tx, mut rx) = tokio :: sync :: mpsc :: channel :: < SynapseUser > ( 20 * 1024 * 1024 ) ;
255
+ let ( tx, rx) = flume :: bounded :: < SynapseUser > ( 20 * 1024 * 1024 ) ;
256
256
257
- let ( txi, mut rxi) = tokio :: sync :: mpsc :: channel :: < ( CompactString , UserInfo ) > ( 20 * 1024 * 1024 ) ;
257
+ let ( txi, rxi) = flume :: bounded :: < ( CompactString , UserInfo ) > ( 20 * 1024 * 1024 ) ;
258
258
259
259
let server_name = state. server_name . clone ( ) ;
260
260
// Accumulating the users state is potentially CPU-intensive, so we spawn a
261
261
// separate task to do it
262
- let state_task = tokio:: spawn ( async move {
263
- while let Some ( ( username, user_info) ) = rxi. recv ( ) . await {
262
+ let state_task = tokio:: task :: spawn_blocking ( move || {
263
+ while let Ok ( ( username, user_info) ) = rxi. recv ( ) {
264
264
state. users . insert ( username, user_info) ;
265
265
}
266
266
state
@@ -274,7 +274,7 @@ async fn migrate_users(
274
274
let mut user_buffer = MasWriteBuffer :: new ( & mas, MasWriter :: write_users) ;
275
275
let mut password_buffer = MasWriteBuffer :: new ( & mas, MasWriter :: write_passwords) ;
276
276
277
- while let Some ( user) = rx. recv ( ) . await {
277
+ while let Ok ( user) = rx. recv_async ( ) . await {
278
278
// Handling an edge case: some AS users may have invalid localparts containing
279
279
// extra `:` characters. These users are ignored and a warning is logged.
280
280
if user. appservice_id . is_some ( )
@@ -308,7 +308,7 @@ async fn migrate_users(
308
308
309
309
// Special case for appservice users: we don't insert them into the database
310
310
// We just record the user's information in the state and continue
311
- txi. send ( (
311
+ txi. send_async ( (
312
312
CompactString :: new ( & mas_user. username ) ,
313
313
UserInfo {
314
314
mas_user_id : None ,
@@ -320,7 +320,7 @@ async fn migrate_users(
320
320
continue ;
321
321
}
322
322
323
- txi. send ( (
323
+ txi. send_async ( (
324
324
CompactString :: new ( & mas_user. username ) ,
325
325
UserInfo {
326
326
mas_user_id : Some ( mas_user. user_id ) ,
@@ -368,7 +368,7 @@ async fn migrate_users(
368
368
let res = synapse
369
369
. read_users ( )
370
370
. map_err ( |e| e. into_synapse ( "reading users" ) )
371
- . forward ( PollSender :: new ( tx ) . sink_map_err ( |_| Error :: ChannelClosed ) )
371
+ . forward ( tx . into_sink ( ) . sink_map_err ( |_| Error :: ChannelClosed ) )
372
372
. inspect_err ( |e| tracing:: error!( error = e as & dyn std:: error:: Error ) )
373
373
. await ;
374
374
@@ -606,7 +606,7 @@ async fn migrate_devices(
606
606
let start = Instant :: now ( ) ;
607
607
let otel_kv = [ KeyValue :: new ( K_ENTITY , V_ENTITY_DEVICES ) ] ;
608
608
609
- let ( tx, mut rx) = tokio :: sync :: mpsc :: channel ( 10 * 1024 * 1024 ) ;
609
+ let ( tx, rx) = flume :: bounded ( 10 * 1024 * 1024 ) ;
610
610
611
611
// create a new RNG seeded from the passed RNG so that we can move it into the
612
612
// spawned task
@@ -615,7 +615,7 @@ async fn migrate_devices(
615
615
async move {
616
616
let mut write_buffer = MasWriteBuffer :: new ( & mas, MasWriter :: write_compat_sessions) ;
617
617
618
- while let Some ( device) = rx. recv ( ) . await {
618
+ while let Ok ( device) = rx. recv_async ( ) . await {
619
619
let SynapseDevice {
620
620
user_id : synapse_user_id,
621
621
device_id,
@@ -722,7 +722,7 @@ async fn migrate_devices(
722
722
let res = synapse
723
723
. read_devices ( )
724
724
. map_err ( |e| e. into_synapse ( "reading devices" ) )
725
- . forward ( PollSender :: new ( tx ) . sink_map_err ( |_| Error :: ChannelClosed ) )
725
+ . forward ( tx . into_sink ( ) . sink_map_err ( |_| Error :: ChannelClosed ) )
726
726
. inspect_err ( |e| tracing:: error!( error = e as & dyn std:: error:: Error ) )
727
727
. await ;
728
728
@@ -756,7 +756,7 @@ async fn migrate_unrefreshable_access_tokens(
756
756
V_ENTITY_NONREFRESHABLE_ACCESS_TOKENS ,
757
757
) ] ;
758
758
759
- let ( tx, mut rx) = tokio :: sync :: mpsc :: channel ( 10 * 1024 * 1024 ) ;
759
+ let ( tx, rx) = flume :: bounded ( 10 * 1024 * 1024 ) ;
760
760
761
761
let now = clock. now ( ) ;
762
762
// create a new RNG seeded from the passed RNG so that we can move it into the
@@ -768,7 +768,7 @@ async fn migrate_unrefreshable_access_tokens(
768
768
let mut deviceless_session_write_buffer =
769
769
MasWriteBuffer :: new ( & mas, MasWriter :: write_compat_sessions) ;
770
770
771
- while let Some ( token) = rx. recv ( ) . await {
771
+ while let Ok ( token) = rx. recv_async ( ) . await {
772
772
let SynapseAccessToken {
773
773
user_id : synapse_user_id,
774
774
device_id,
@@ -889,7 +889,7 @@ async fn migrate_unrefreshable_access_tokens(
889
889
let res = synapse
890
890
. read_unrefreshable_access_tokens ( )
891
891
. map_err ( |e| e. into_synapse ( "reading tokens" ) )
892
- . forward ( PollSender :: new ( tx ) . sink_map_err ( |_| Error :: ChannelClosed ) )
892
+ . forward ( tx . into_sink ( ) . sink_map_err ( |_| Error :: ChannelClosed ) )
893
893
. inspect_err ( |e| tracing:: error!( error = e as & dyn std:: error:: Error ) )
894
894
. await ;
895
895
0 commit comments