@@ -126,8 +126,8 @@ struct MigrationState {
126
126
/// - Invalid data in the Synapse database.
127
127
#[ allow( clippy:: implicit_hasher) ]
128
128
pub async fn migrate (
129
- synapse : & mut SynapseReader < ' _ > ,
130
- mas : & mut MasWriter ,
129
+ mut synapse : SynapseReader < ' _ > ,
130
+ mas : MasWriter ,
131
131
server_name : String ,
132
132
clock : & dyn Clock ,
133
133
rng : & mut impl RngCore ,
@@ -142,23 +142,34 @@ pub async fn migrate(
142
142
provider_id_mapping,
143
143
} ;
144
144
145
- let state = migrate_users ( synapse, mas, state, rng) . await ?;
146
- let state = migrate_threepids ( synapse, mas, rng, state) . await ?;
147
- let state = migrate_external_ids ( synapse, mas, rng, state) . await ?;
148
- let state = migrate_unrefreshable_access_tokens ( synapse, mas, clock, rng, state) . await ?;
149
- let state = migrate_refreshable_token_pairs ( synapse, mas, clock, rng, state) . await ?;
150
- let _state = migrate_devices ( synapse, mas, rng, state) . await ?;
145
+ let ( mas, state) = migrate_users ( & mut synapse, mas, state, rng) . await ?;
146
+ let ( mas, state) = migrate_threepids ( & mut synapse, mas, rng, state) . await ?;
147
+ let ( mas, state) = migrate_external_ids ( & mut synapse, mas, rng, state) . await ?;
148
+ let ( mas, state) =
149
+ migrate_unrefreshable_access_tokens ( & mut synapse, mas, clock, rng, state) . await ?;
150
+ let ( mas, state) =
151
+ migrate_refreshable_token_pairs ( & mut synapse, mas, clock, rng, state) . await ?;
152
+ let ( mas, _state) = migrate_devices ( & mut synapse, mas, rng, state) . await ?;
153
+
154
+ synapse
155
+ . finish ( )
156
+ . await
157
+ . into_synapse ( "failed to close Synapse reader" ) ?;
158
+
159
+ mas. finish ( )
160
+ . await
161
+ . into_mas ( "failed to finalise MAS database" ) ?;
151
162
152
163
Ok ( ( ) )
153
164
}
154
165
155
166
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
156
167
async fn migrate_users (
157
168
synapse : & mut SynapseReader < ' _ > ,
158
- mas : & mut MasWriter ,
169
+ mut mas : MasWriter ,
159
170
mut state : MigrationState ,
160
171
rng : & mut impl RngCore ,
161
- ) -> Result < MigrationState , Error > {
172
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
162
173
let mut user_buffer = MasWriteBuffer :: new ( MasWriter :: write_users) ;
163
174
let mut password_buffer = MasWriteBuffer :: new ( MasWriter :: write_passwords) ;
164
175
let mut users_stream = pin ! ( synapse. read_users( ) ) ;
@@ -187,34 +198,37 @@ async fn migrate_users(
187
198
) ;
188
199
189
200
user_buffer
190
- . write ( mas, mas_user)
201
+ . write ( & mut mas, mas_user)
191
202
. await
192
203
. into_mas ( "writing user" ) ?;
193
204
194
205
if let Some ( mas_password) = mas_password_opt {
195
206
password_buffer
196
- . write ( mas, mas_password)
207
+ . write ( & mut mas, mas_password)
197
208
. await
198
209
. into_mas ( "writing password" ) ?;
199
210
}
200
211
}
201
212
202
- user_buffer. finish ( mas) . await . into_mas ( "writing users" ) ?;
213
+ user_buffer
214
+ . finish ( & mut mas)
215
+ . await
216
+ . into_mas ( "writing users" ) ?;
203
217
password_buffer
204
- . finish ( mas)
218
+ . finish ( & mut mas)
205
219
. await
206
220
. into_mas ( "writing passwords" ) ?;
207
221
208
- Ok ( state)
222
+ Ok ( ( mas , state) )
209
223
}
210
224
211
225
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
212
226
async fn migrate_threepids (
213
227
synapse : & mut SynapseReader < ' _ > ,
214
- mas : & mut MasWriter ,
228
+ mut mas : MasWriter ,
215
229
rng : & mut impl RngCore ,
216
230
state : MigrationState ,
217
- ) -> Result < MigrationState , Error > {
231
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
218
232
let mut email_buffer = MasWriteBuffer :: new ( MasWriter :: write_email_threepids) ;
219
233
let mut unsupported_buffer = MasWriteBuffer :: new ( MasWriter :: write_unsupported_threepids) ;
220
234
let mut users_stream = pin ! ( synapse. read_threepids( ) ) ;
@@ -245,7 +259,7 @@ async fn migrate_threepids(
245
259
if medium == "email" {
246
260
email_buffer
247
261
. write (
248
- mas,
262
+ & mut mas,
249
263
MasNewEmailThreepid {
250
264
user_id : user_infos. mas_user_id ,
251
265
user_email_id : Uuid :: from ( Ulid :: from_datetime_with_source (
@@ -261,7 +275,7 @@ async fn migrate_threepids(
261
275
} else {
262
276
unsupported_buffer
263
277
. write (
264
- mas,
278
+ & mut mas,
265
279
MasNewUnsupportedThreepid {
266
280
user_id : user_infos. mas_user_id ,
267
281
medium,
@@ -275,15 +289,15 @@ async fn migrate_threepids(
275
289
}
276
290
277
291
email_buffer
278
- . finish ( mas)
292
+ . finish ( & mut mas)
279
293
. await
280
294
. into_mas ( "writing email threepids" ) ?;
281
295
unsupported_buffer
282
- . finish ( mas)
296
+ . finish ( & mut mas)
283
297
. await
284
298
. into_mas ( "writing unsupported threepids" ) ?;
285
299
286
- Ok ( state)
300
+ Ok ( ( mas , state) )
287
301
}
288
302
289
303
/// # Parameters
@@ -293,10 +307,10 @@ async fn migrate_threepids(
293
307
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
294
308
async fn migrate_external_ids (
295
309
synapse : & mut SynapseReader < ' _ > ,
296
- mas : & mut MasWriter ,
310
+ mut mas : MasWriter ,
297
311
rng : & mut impl RngCore ,
298
312
state : MigrationState ,
299
- ) -> Result < MigrationState , Error > {
313
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
300
314
let mut write_buffer = MasWriteBuffer :: new ( MasWriter :: write_upstream_oauth_links) ;
301
315
let mut extids_stream = pin ! ( synapse. read_user_external_ids( ) ) ;
302
316
@@ -335,7 +349,7 @@ async fn migrate_external_ids(
335
349
336
350
write_buffer
337
351
. write (
338
- mas,
352
+ & mut mas,
339
353
MasNewUpstreamOauthLink {
340
354
link_id,
341
355
user_id : user_infos. mas_user_id ,
@@ -349,11 +363,11 @@ async fn migrate_external_ids(
349
363
}
350
364
351
365
write_buffer
352
- . finish ( mas)
366
+ . finish ( & mut mas)
353
367
. await
354
368
. into_mas ( "writing threepids" ) ?;
355
369
356
- Ok ( state)
370
+ Ok ( ( mas , state) )
357
371
}
358
372
359
373
/// Migrate devices from Synapse to MAS (as compat sessions).
@@ -367,10 +381,10 @@ async fn migrate_external_ids(
367
381
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
368
382
async fn migrate_devices (
369
383
synapse : & mut SynapseReader < ' _ > ,
370
- mas : & mut MasWriter ,
384
+ mut mas : MasWriter ,
371
385
rng : & mut impl RngCore ,
372
386
mut state : MigrationState ,
373
- ) -> Result < MigrationState , Error > {
387
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
374
388
let mut devices_stream = pin ! ( synapse. read_devices( ) ) ;
375
389
let mut write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_sessions) ;
376
390
@@ -432,7 +446,7 @@ async fn migrate_devices(
432
446
433
447
write_buffer
434
448
. write (
435
- mas,
449
+ & mut mas,
436
450
MasNewCompatSession {
437
451
session_id,
438
452
user_id : user_infos. mas_user_id ,
@@ -450,23 +464,23 @@ async fn migrate_devices(
450
464
}
451
465
452
466
write_buffer
453
- . finish ( mas)
467
+ . finish ( & mut mas)
454
468
. await
455
469
. into_mas ( "writing compat sessions" ) ?;
456
470
457
- Ok ( state)
471
+ Ok ( ( mas , state) )
458
472
}
459
473
460
474
/// Migrates unrefreshable access tokens (those without an associated refresh
461
475
/// token). Some of these may be deviceless.
462
476
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
463
477
async fn migrate_unrefreshable_access_tokens (
464
478
synapse : & mut SynapseReader < ' _ > ,
465
- mas : & mut MasWriter ,
479
+ mut mas : MasWriter ,
466
480
clock : & dyn Clock ,
467
481
rng : & mut impl RngCore ,
468
482
mut state : MigrationState ,
469
- ) -> Result < MigrationState , Error > {
483
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
470
484
let mut token_stream = pin ! ( synapse. read_unrefreshable_access_tokens( ) ) ;
471
485
let mut write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_access_tokens) ;
472
486
let mut deviceless_session_write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_sessions) ;
@@ -519,7 +533,7 @@ async fn migrate_unrefreshable_access_tokens(
519
533
520
534
deviceless_session_write_buffer
521
535
. write (
522
- mas,
536
+ & mut mas,
523
537
MasNewCompatSession {
524
538
session_id : deviceless_session_id,
525
539
user_id : user_infos. mas_user_id ,
@@ -542,7 +556,7 @@ async fn migrate_unrefreshable_access_tokens(
542
556
543
557
write_buffer
544
558
. write (
545
- mas,
559
+ & mut mas,
546
560
MasNewCompatAccessToken {
547
561
token_id,
548
562
session_id,
@@ -556,27 +570,27 @@ async fn migrate_unrefreshable_access_tokens(
556
570
}
557
571
558
572
write_buffer
559
- . finish ( mas)
573
+ . finish ( & mut mas)
560
574
. await
561
575
. into_mas ( "writing compat access tokens" ) ?;
562
576
deviceless_session_write_buffer
563
- . finish ( mas)
577
+ . finish ( & mut mas)
564
578
. await
565
579
. into_mas ( "writing deviceless compat sessions" ) ?;
566
580
567
- Ok ( state)
581
+ Ok ( ( mas , state) )
568
582
}
569
583
570
584
/// Migrates (access token, refresh token) pairs.
571
585
/// Does not migrate non-refreshable access tokens.
572
586
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
573
587
async fn migrate_refreshable_token_pairs (
574
588
synapse : & mut SynapseReader < ' _ > ,
575
- mas : & mut MasWriter ,
589
+ mut mas : MasWriter ,
576
590
clock : & dyn Clock ,
577
591
rng : & mut impl RngCore ,
578
592
mut state : MigrationState ,
579
- ) -> Result < MigrationState , Error > {
593
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
580
594
let mut token_stream = pin ! ( synapse. read_refreshable_token_pairs( ) ) ;
581
595
let mut access_token_write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_access_tokens) ;
582
596
let mut refresh_token_write_buffer =
@@ -626,7 +640,7 @@ async fn migrate_refreshable_token_pairs(
626
640
627
641
access_token_write_buffer
628
642
. write (
629
- mas,
643
+ & mut mas,
630
644
MasNewCompatAccessToken {
631
645
token_id : access_token_id,
632
646
session_id,
@@ -639,7 +653,7 @@ async fn migrate_refreshable_token_pairs(
639
653
. into_mas ( "writing compat access tokens" ) ?;
640
654
refresh_token_write_buffer
641
655
. write (
642
- mas,
656
+ & mut mas,
643
657
MasNewCompatRefreshToken {
644
658
refresh_token_id,
645
659
session_id,
@@ -653,16 +667,16 @@ async fn migrate_refreshable_token_pairs(
653
667
}
654
668
655
669
access_token_write_buffer
656
- . finish ( mas)
670
+ . finish ( & mut mas)
657
671
. await
658
672
. into_mas ( "writing compat access tokens" ) ?;
659
673
660
674
refresh_token_write_buffer
661
- . finish ( mas)
675
+ . finish ( & mut mas)
662
676
. await
663
677
. into_mas ( "writing compat refresh tokens" ) ?;
664
678
665
- Ok ( state)
679
+ Ok ( ( mas , state) )
666
680
}
667
681
668
682
fn transform_user (
0 commit comments